From 996ef91ebe769d978ee25dd63c065da6e6f496be Mon Sep 17 00:00:00 2001 From: AJ Meireles Date: Tue, 1 Sep 2026 18:26:02 -0300 Subject: [PATCH 1/7] docs(upload-async): document the image editor and its configuration keys Add the Image Editor section with two live demos (multiple, and manual with a locked aspect), extend the Configuration section with the editor, aspect, quality and format keys, and mark the page as changed. --- app/Enums/Examples/Form/UploadAsync.php | 40 +++++++++++++++ contents/documentation.yaml | 1 + .../layout/navigation/tree.blade.php | 1 + .../documentation/form/upload-async.blade.php | 45 ++++++++++++++++ .../documentation/form/upload/async.blade.php | 51 +++++++++++++++++++ 5 files changed, 138 insertions(+) diff --git a/app/Enums/Examples/Form/UploadAsync.php b/app/Enums/Examples/Form/UploadAsync.php index 44738098..4c89e36b 100644 --- a/app/Enums/Examples/Form/UploadAsync.php +++ b/app/Enums/Examples/Form/UploadAsync.php @@ -81,6 +81,46 @@ public function store(Request $request) HTML; + public const string EDITOR = <<<'HTML' + + HTML; + + public const string EDITOR_MANUAL = <<<'HTML' + + + + + + + HTML; + + public const string CONFIGURATION = <<<'PHP' + // ... + + 'upload.async' => [ + Components\Form\Upload\Async\Component::class, + [ + // ... + 'editor' => 'crop', // [tl! focus:3] + 'aspect' => '16:9', + 'quality' => 0.85, + 'format' => 'webp', + ], + ], + + // ... + PHP; + public const string STORE = <<<'PHP' return $this->upload($request, [ 'disk' => 'public', diff --git a/contents/documentation.yaml b/contents/documentation.yaml index 12869f04..dcf891bd 100644 --- a/contents/documentation.yaml +++ b/contents/documentation.yaml @@ -251,6 +251,7 @@ form: - Basic Usage - Multiple - Manual + - Image Editor - Uploader Trait - Taking Over Persistence - Authorization diff --git a/resources/views/components/layout/navigation/tree.blade.php b/resources/views/components/layout/navigation/tree.blade.php index 0f10b8b1..5be77d1c 100644 --- a/resources/views/components/layout/navigation/tree.blade.php +++ b/resources/views/components/layout/navigation/tree.blade.php @@ -180,6 +180,7 @@ class="dark:text-dark-500 mt-6 font-mono text-[0.65rem] font-semibold tracking-[ :href="route('documentation', ['form', 'upload-async'])" text="Upload Async" new + changed /> diff --git a/resources/views/documentation/form/upload-async.blade.php b/resources/views/documentation/form/upload-async.blade.php index 5ee53424..6f2fc1f8 100644 --- a/resources/views/documentation/form/upload-async.blade.php +++ b/resources/views/documentation/form/upload-async.blade.php @@ -121,6 +121,51 @@ + +
+ + + +

+ Images open a crop and rotate dialog before the first chunk is + sent; the edited file is what gets chunked, validated and + stored. Documents go straight to the upload, and cancelling the + dialog drops the file. With + multiple + the dialog opens once per image, in sequence. +

+ + + +

+ In + manual + mode the edited file waits in the grid until + send() + . The + editor + and + aspect + attributes accept the same values as the + upload component + : + true + , + crop + , + rotate + or + false + for the editor and a + width:height + ratio for the aspect. +

+
+
@@ -62,6 +66,53 @@ class="mt-3 flex items-center justify-between" class="text-xs text-gray-500" > +
+ + Abort & Clear + + + Upload Now + +
+ + +
+ @elseif ($mode === 4) + + @elseif ($mode === 5) + + +
+ +
Abort & Clear From 51ae336bb9df1ca87fc5b5ae41225e9caf7af43e Mon Sep 17 00:00:00 2001 From: AJ Meireles Date: Tue, 1 Sep 2026 18:30:18 -0300 Subject: [PATCH 2/7] feat(date): add typeable date input option with auto-formatting mask --- app/Enums/Examples/Form/Date.php | 16 +++++ .../views/documentation/form/date.blade.php | 60 +++++++++++++++++++ 2 files changed, 76 insertions(+) diff --git a/app/Enums/Examples/Form/Date.php b/app/Enums/Examples/Form/Date.php index 55dc5b9a..df889877 100644 --- a/app/Enums/Examples/Form/Date.php +++ b/app/Enums/Examples/Form/Date.php @@ -36,6 +36,22 @@ class Date $date; // 2024-02-20 HTML; + public const string TYPEABLE = <<<'HTML' + + HTML; + + public const string TYPEABLE_FORMAT = <<<'HTML' + + + + HTML; + + public const string TYPEABLE_MIN_DATE = <<<'HTML' + + + + HTML; + public const string HELPERS = <<<'HTML' HTML; diff --git a/resources/views/documentation/form/date.blade.php b/resources/views/documentation/form/date.blade.php index a104487e..4985de70 100644 --- a/resources/views/documentation/form/date.blade.php +++ b/resources/views/documentation/form/date.blade.php @@ -126,6 +126,66 @@

+ +
+ + + +

+ The input becomes a regular text field with an auto-formatting + mask derived from the + format + tokens: + YYYY + takes four digits, + MM + and + DD + take two, and any other character is inserted as the user types. + Clicking the input no longer opens the picker, but the calendar + icon still does. +

+ + + +

+ On blur the typed value is parsed against the format and + validated by the same rules as the picker: min and max dates, + disabled dates, weekdays, weekends and + only + . An invalid, impossible or out-of-range date, like + 31/02/2020 + , restores the previous value, while clearing the field and + leaving empties the model. +

+ + + + + The + format + must contain the + YYYY + , + MM + and + DD + tokens for the mask to make sense. + typeable + cannot be combined with + range + , + multiple + or + month-year-only + , and combining them throws. + +
+
From 9bb356a35bc9f5d700a7189cb7a30a1685e73ad8 Mon Sep 17 00:00:00 2001 From: AJ Meireles Date: Tue, 1 Sep 2026 18:30:41 -0300 Subject: [PATCH 3/7] feat(upload-async): update editor manual and remove obsolete configuration --- app/Enums/Examples/Form/UploadAsync.php | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/app/Enums/Examples/Form/UploadAsync.php b/app/Enums/Examples/Form/UploadAsync.php index 4c89e36b..7da7b40f 100644 --- a/app/Enums/Examples/Form/UploadAsync.php +++ b/app/Enums/Examples/Form/UploadAsync.php @@ -91,6 +91,7 @@ public function store(Request $request) public const string EDITOR_MANUAL = <<<'HTML' + HTML; - public const string CONFIGURATION = <<<'PHP' - // ... - - 'upload.async' => [ - Components\Form\Upload\Async\Component::class, - [ - // ... - 'editor' => 'crop', // [tl! focus:3] - 'aspect' => '16:9', - 'quality' => 0.85, - 'format' => 'webp', - ], - ], - - // ... - PHP; - public const string STORE = <<<'PHP' return $this->upload($request, [ 'disk' => 'public', From 6ab68028cdb367d7a28d8da91fcc664352855f2e Mon Sep 17 00:00:00 2001 From: AJ Meireles Date: Tue, 1 Sep 2026 18:36:50 -0300 Subject: [PATCH 4/7] feat(range): add dual mode for interval selection with tooltip support --- app/Enums/Examples/Form/Range.php | 8 + app/Enums/Examples/Ui/Button.php | 92 +++++++++ .../layout/navigation/tree.blade.php | 31 +-- .../views/documentation/form/range.blade.php | 74 +++++++ .../views/documentation/ui/button.blade.php | 192 +++++++++++++++++- .../documentation/form/range.blade.php | 45 ++++ 6 files changed, 409 insertions(+), 33 deletions(-) create mode 100644 resources/views/livewire/documentation/form/range.blade.php diff --git a/app/Enums/Examples/Form/Range.php b/app/Enums/Examples/Form/Range.php index 93444683..43d8be2d 100644 --- a/app/Enums/Examples/Form/Range.php +++ b/app/Enums/Examples/Form/Range.php @@ -14,6 +14,14 @@ class Range HTML; + public const string DUAL = <<<'HTML' + + HTML; + + public const string DUAL_TOOLTIP = <<<'HTML' + + HTML; + public const string READONLY_DISABLED = <<<'HTML' diff --git a/app/Enums/Examples/Ui/Button.php b/app/Enums/Examples/Ui/Button.php index 6f1b315b..56d57daa 100644 --- a/app/Enums/Examples/Ui/Button.php +++ b/app/Enums/Examples/Ui/Button.php @@ -412,11 +412,95 @@ class Button HTML; + public const string SUBTLE = <<<'HTML' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HTML; + + public const string SUBTLE_TINTED = <<<'HTML' + + + + + + HTML; + public const string UNFOCUS = <<<'HTML' HTML; + public const string UNFOCUS_CONFIG = <<<'HTML' + + + + + HTML; + + public const string CIRCLE_SUBTLE = <<<'HTML' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HTML; + + public const string CIRCLE_SUBTLE_TINTED = <<<'HTML' + + + HTML; + public const string CIRCLE_UNFOCUS = <<<'HTML' @@ -450,6 +534,14 @@ class Button ->block('block', 'classes'); HTML; + public const string GROUP_SHADOWLESS = <<<'HTML' + + + + + + HTML; + public const string CUSTOMIZATION_GROUP = <<<'HTML' TallStackUi::customize() ->button('group') diff --git a/resources/views/components/layout/navigation/tree.blade.php b/resources/views/components/layout/navigation/tree.blade.php index 5be77d1c..fcc2a028 100644 --- a/resources/views/components/layout/navigation/tree.blade.php +++ b/resources/views/components/layout/navigation/tree.blade.php @@ -92,6 +92,7 @@ class="dark:text-dark-500 mt-6 font-mono text-[0.65rem] font-semibold tracking-[
  • @@ -116,7 +117,6 @@ class="dark:text-dark-500 mt-6 font-mono text-[0.65rem] font-semibold tracking-[
  • @@ -129,13 +129,13 @@ class="dark:text-dark-500 mt-6 font-mono text-[0.65rem] font-semibold tracking-[
  • @@ -148,7 +148,6 @@ class="dark:text-dark-500 mt-6 font-mono text-[0.65rem] font-semibold tracking-[
  • @@ -173,6 +172,7 @@ class="dark:text-dark-500 mt-6 font-mono text-[0.65rem] font-semibold tracking-[
  • @@ -208,7 +208,6 @@ class="dark:text-dark-500 mt-6 font-mono text-[0.65rem] font-semibold tracking-[
  • @@ -258,7 +257,6 @@ class="dark:text-dark-500 mt-6 font-mono text-[0.65rem] font-semibold tracking-[
  • @@ -296,7 +294,6 @@ class="dark:text-dark-500 mt-6 font-mono text-[0.65rem] font-semibold tracking-[
  • @@ -304,13 +301,13 @@ class="dark:text-dark-500 mt-6 font-mono text-[0.65rem] font-semibold tracking-[ :href="route('documentation', ['ui', 'editor'])" text="Editor" new + changed />
  • @@ -330,21 +327,18 @@ class="dark:text-dark-500 mt-6 font-mono text-[0.65rem] font-semibold tracking-[
  • @@ -357,28 +351,24 @@ class="dark:text-dark-500 mt-6 font-mono text-[0.65rem] font-semibold tracking-[
  • @@ -398,7 +388,6 @@ class="dark:text-dark-500 mt-6 font-mono text-[0.65rem] font-semibold tracking-[
  • @@ -411,14 +400,12 @@ class="dark:text-dark-500 mt-6 font-mono text-[0.65rem] font-semibold tracking-[
  • @@ -432,14 +419,12 @@ class="dark:text-dark-500 mt-6 font-mono text-[0.65rem] font-semibold tracking-[
  • @@ -453,14 +438,12 @@ class="dark:text-dark-500 mt-6 font-mono text-[0.65rem] font-semibold tracking-[
  • @@ -479,7 +462,6 @@ class="dark:text-dark-500 mt-6 font-mono text-[0.65rem] font-semibold tracking-[
  • @@ -495,14 +477,12 @@ class="dark:text-dark-500 mt-6 font-mono text-[0.65rem] font-semibold tracking-[
  • @@ -577,7 +557,6 @@ class="dark:text-dark-500 font-mono text-[0.65rem] font-semibold tracking-[0.16e
  • @@ -597,7 +576,6 @@ class="dark:text-dark-500 mt-6 font-mono text-[0.65rem] font-semibold tracking-[
  • @@ -616,7 +594,6 @@ class="dark:text-dark-500 mt-6 font-mono text-[0.65rem] font-semibold tracking-[
  • diff --git a/resources/views/documentation/form/range.blade.php b/resources/views/documentation/form/range.blade.php index d07e8ef5..af202a25 100644 --- a/resources/views/documentation/form/range.blade.php +++ b/resources/views/documentation/form/range.blade.php @@ -25,6 +25,80 @@
    + +
    + + + +

    + Unlike the single mode, the bound property is always an indexed + pair, + [start, end] + . When the bound value is blank the pair starts at + [min, max] + . In dual mode + min + , + max + and + step + default to + 0 + , + 100 + and + 1 + . The segment between the thumbs is painted with the component + color + . +

    +

    + The thumbs never cross. Dragging the starting thumb past the + ending one stops it at that value, and the other way around. + Both landing on the same value is allowed, and while they + overlap the one that still has room to move stays on top, so + neither gets stuck. +

    + + + +

    + Use + tooltip + to show the value of the thumb being dragged, hidden on release. + The bubble is the same balloon the + tooltip + component renders, anchored on an invisible marker kept over the + thumb, so it follows the balloon color, scale and styling set + for every tooltip and has no color or size settings of its own. + The pair reaches the server when the thumb is released rather + than on every intermediate value, so a drag costs a single round + trip, + wire:model.live + included. +

    + + tooltip + and an array + value + both require + dual + and throw otherwise. In dual mode the component also throws when + min + is not below + max + , when + step + is zero, negative or wider than the distance between the + boundaries, or when the bound value is not a numeric pair inside + those boundaries with the first value below the second. + +
    +
    diff --git a/resources/views/documentation/ui/button.blade.php b/resources/views/documentation/ui/button.blade.php index e82428f4..9671a262 100644 --- a/resources/views/documentation/ui/button.blade.php +++ b/resources/views/documentation/ui/button.blade.php @@ -340,17 +340,98 @@ class="flex flex-col items-center justify-center space-y-2 sm:flex-row sm:justif
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + subtle + borrows the border and background of the + input + and hovers in gray whatever the color. Add + tinted + to tint the hover with the color instead: +

    + +
    + + +
    +
    + + tinted + is a modifier of + subtle + and throws on its own. + +
    +
    - -
    - - -
    -
    +
    + +
    + + +
    +
    + + + You can set + unfocus + for every button in the + configuration file. + The key is shared with the circle button. The inline attribute + always wins, so + :unfocus="false" + keeps a single button focusable by click. + +
    @@ -559,6 +640,60 @@ class="flex flex-col items-center justify-center space-y-2 sm:flex-row sm:justif + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    + + +
    +
    + + tinted + is a modifier of + subtle + and throws on its own. + +
    +
    + + The circle button reads the same + unfocus + key of the + configuration file. + The inline attribute always wins. + @@ -626,4 +768,42 @@ class="flex flex-col items-center justify-center space-y-2 sm:flex-row sm:justif + +
    + + + + + + + +

    + The wrapper carries a + shadow-xs + of its own. Use + shadowless + with + subtle + children, which have no shadow of their own. +

    + + The + shadow-xs + moved out of + wrapper.base + into + wrapper.shadow + . A customization that removed it from + wrapper.base + should target + wrapper.shadow + instead, or use the attribute. + +
    +
    diff --git a/resources/views/livewire/documentation/form/range.blade.php b/resources/views/livewire/documentation/form/range.blade.php new file mode 100644 index 00000000..7d916175 --- /dev/null +++ b/resources/views/livewire/documentation/form/range.blade.php @@ -0,0 +1,45 @@ + + +
    + @if ($mode === 1) +
    + +

    + Bound value: + {{ $price[0] }} + to + {{ $price[1] }} +

    +
    + @elseif ($mode === 2) + + @endif +
    From 038ffb82980fd4bacf74651d72d863980910279c Mon Sep 17 00:00:00 2001 From: AJ Meireles Date: Wed, 2 Sep 2026 11:15:37 -0300 Subject: [PATCH 5/7] docs: document carousel thumbnails and the upload/editor image editor for v4.2.0 Add the Thumbnails section to the Carousel page (basic, limit, without highlight, autoplay and configuration examples) and the Image Editor section to the Upload and Editor pages, covering modes, aspect ratio, multiple files and the disabled state, with live previews driven by the upload demo component. Register the new sections in the documentation navigation (Range dual mode, Date typeable, Button subtle and shadowless group, Carousel thumbnails, Upload image editor), flag Carousel as changed in the sidebar tree and drop example constants that are no longer referenced by any page. Link tallstackui/tallstackui to the local 4.x-dev path repository until 4.2.0 is tagged. --- app/Enums/Examples/Ai.php | 25 -- app/Enums/Examples/Form/Checkbox.php | 4 - app/Enums/Examples/Form/Upload.php | 24 ++ app/Enums/Examples/Ui/Carousel.php | 60 +++- app/Enums/Examples/Ui/Editor.php | 21 +- app/Enums/Examples/Ui/Gallery.php | 6 - composer.json | 10 +- composer.lock | 270 ++++++++++-------- contents/documentation.yaml | 7 + .../layout/navigation/tree.blade.php | 1 + .../views/documentation/form/upload.blade.php | 96 ++++++- .../views/documentation/ui/carousel.blade.php | 153 ++++++++++ .../views/documentation/ui/editor.blade.php | 57 +++- .../form/upload/upload.blade.php | 29 ++ 14 files changed, 589 insertions(+), 174 deletions(-) diff --git a/app/Enums/Examples/Ai.php b/app/Enums/Examples/Ai.php index 62541c8f..fec22098 100644 --- a/app/Enums/Examples/Ai.php +++ b/app/Enums/Examples/Ai.php @@ -33,29 +33,4 @@ class Ai } } HTML; - - public const string CURSOR_PROJECT = <<<'HTML' - { - "mcpServers": { - "tallstackui": { - "type": "http", - "url": "https://tallstackui.com/mcp/tallstackui" - } - } - } - HTML; - - public const string GEMINI_CLI = <<<'HTML' - gemini mcp add --transport http tallstackui https://tallstackui.com/mcp/tallstackui - HTML; - - public const string GEMINI_SETTINGS = <<<'HTML' - { - "mcpServers": { - "tallstackui": { - "httpUrl": "https://tallstackui.com/mcp/tallstackui" - } - } - } - HTML; } diff --git a/app/Enums/Examples/Form/Checkbox.php b/app/Enums/Examples/Form/Checkbox.php index afdedb92..4bde4c58 100644 --- a/app/Enums/Examples/Form/Checkbox.php +++ b/app/Enums/Examples/Form/Checkbox.php @@ -98,10 +98,6 @@ class Checkbox ]" /> HTML; - public const string GROUP_PROPERTY = <<<'PHP' - public array $features = []; - PHP; - public const string GROUP_VARIATIONS = <<<'HTML' diff --git a/app/Enums/Examples/Form/Upload.php b/app/Enums/Examples/Form/Upload.php index 99878cf2..f411fa6b 100644 --- a/app/Enums/Examples/Form/Upload.php +++ b/app/Enums/Examples/Form/Upload.php @@ -130,6 +130,30 @@ public function updatedPhotos(): void {} // [tl! remove] public function updatedFiles(): void {} // [tl! add] HTML; + public const string EDITOR = <<<'HTML' + + HTML; + + public const string EDITOR_ASPECT = <<<'HTML' + + HTML; + + public const string EDITOR_MODES = <<<'HTML' + + + + + + HTML; + + public const string EDITOR_MULTIPLE = <<<'HTML' + + HTML; + + public const string EDITOR_DISABLED = <<<'HTML' + + HTML; + public const string ACCEPT = <<<'HTML' HTML; diff --git a/app/Enums/Examples/Ui/Carousel.php b/app/Enums/Examples/Ui/Carousel.php index 25315881..850cff2b 100644 --- a/app/Enums/Examples/Ui/Carousel.php +++ b/app/Enums/Examples/Ui/Carousel.php @@ -30,8 +30,6 @@ class Carousel ]" round /> + + + + + HTML; + public const string EVENTS = <<<'HTML' HTML; - public const string LIVEWIRE = <<<'HTML' - - - HTML; - public const string SCOPES = <<<'PHP' // The two dialogs are instances under a fixed scope TallStackUi::customize('modal', scope: 'editor.modal.link') diff --git a/app/Enums/Examples/Ui/Gallery.php b/app/Enums/Examples/Ui/Gallery.php index 3c4bf5ed..6c2c0963 100644 --- a/app/Enums/Examples/Ui/Gallery.php +++ b/app/Enums/Examples/Ui/Gallery.php @@ -98,12 +98,6 @@ class="max-w-md" /> x-on:previous="console.log($event.detail.current)" /> HTML; - public const string PERFORMANCE = <<<'HTML' - TallStackUi::customize() - ->gallery() - ->block('tile.performance', ''); - HTML; - public const string CUSTOMIZATION = <<<'HTML' TallStackUi::customize() ->gallery() diff --git a/composer.json b/composer.json index c2328cf3..37ccfe85 100644 --- a/composer.json +++ b/composer.json @@ -16,7 +16,7 @@ "livewire/livewire": "^4.0", "sentry/sentry-laravel": "^4.27", "symfony/yaml": "^7.2", - "tallstackui/tallstackui": "^4.0", + "tallstackui/tallstackui": "4.x-dev", "torchlight/torchlight-laravel": "^0.6" }, "require-dev": { @@ -85,5 +85,11 @@ } }, "minimum-stability": "stable", - "prefer-stable": true + "prefer-stable": true, + "repositories": [ + { + "type": "path", + "url": "/Users/aj/Workspace/tallstack/tallstackui" + } + ] } diff --git a/composer.lock b/composer.lock index 3f15795c..dc203bba 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "df25224656c575076a007fe483d70f6e", + "content-hash": "965dc16c4c1c22e5a15b9a0ccf8a91b4", "packages": [ { "name": "brick/math", @@ -1119,16 +1119,16 @@ }, { "name": "laravel/framework", - "version": "v13.27.0", + "version": "v13.30.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "f3fa8f3591fa2e8f0b7dedfffc3fc324d2aad31b" + "reference": "9c008e7c9a64a8ea6d6e4f1683bd569acc10bf9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/f3fa8f3591fa2e8f0b7dedfffc3fc324d2aad31b", - "reference": "f3fa8f3591fa2e8f0b7dedfffc3fc324d2aad31b", + "url": "https://api.github.com/repos/laravel/framework/zipball/9c008e7c9a64a8ea6d6e4f1683bd569acc10bf9e", + "reference": "9c008e7c9a64a8ea6d6e4f1683bd569acc10bf9e", "shasum": "" }, "require": { @@ -1342,7 +1342,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2026-08-25T14:16:00+00:00" + "time": "2026-09-01T13:19:00+00:00" }, { "name": "laravel/mcp", @@ -2167,16 +2167,16 @@ }, { "name": "livewire/livewire", - "version": "v4.4.2", + "version": "v4.4.3", "source": { "type": "git", "url": "https://github.com/livewire/livewire.git", - "reference": "4a030935e6c255c89a114b00ece66326f78157c0" + "reference": "92f1427022714b34024459167aa6a85d4fb4af44" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/livewire/livewire/zipball/4a030935e6c255c89a114b00ece66326f78157c0", - "reference": "4a030935e6c255c89a114b00ece66326f78157c0", + "url": "https://api.github.com/repos/livewire/livewire/zipball/92f1427022714b34024459167aa6a85d4fb4af44", + "reference": "92f1427022714b34024459167aa6a85d4fb4af44", "shasum": "" }, "require": { @@ -2231,7 +2231,7 @@ "description": "A front-end framework for Laravel.", "support": { "issues": "https://github.com/livewire/livewire/issues", - "source": "https://github.com/livewire/livewire/tree/v4.4.2" + "source": "https://github.com/livewire/livewire/tree/v4.4.3" }, "funding": [ { @@ -2239,7 +2239,7 @@ "type": "github" } ], - "time": "2026-08-24T15:02:06+00:00" + "time": "2026-08-31T15:40:58+00:00" }, { "name": "monolog/monolog", @@ -3595,16 +3595,16 @@ }, { "name": "sentry/sentry", - "version": "4.30.0", + "version": "4.31.0", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-php.git", - "reference": "95a26e7c946651cacd69d1ded95a8190f952a3ae" + "reference": "39d9f86bd56c6cc6ae7b64c2b849f7f046d38394" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/95a26e7c946651cacd69d1ded95a8190f952a3ae", - "reference": "95a26e7c946651cacd69d1ded95a8190f952a3ae", + "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/39d9f86bd56c6cc6ae7b64c2b849f7f046d38394", + "reference": "39d9f86bd56c6cc6ae7b64c2b849f7f046d38394", "shasum": "" }, "require": { @@ -3675,7 +3675,7 @@ ], "support": { "issues": "https://github.com/getsentry/sentry-php/issues", - "source": "https://github.com/getsentry/sentry-php/tree/4.30.0" + "source": "https://github.com/getsentry/sentry-php/tree/4.31.0" }, "funding": [ { @@ -3687,7 +3687,7 @@ "type": "custom" } ], - "time": "2026-08-05T14:54:26+00:00" + "time": "2026-08-27T12:59:01+00:00" }, { "name": "sentry/sentry-laravel", @@ -3860,16 +3860,16 @@ }, { "name": "symfony/console", - "version": "v8.1.5", + "version": "v8.1.6", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "d07c06839e33047e2c894a6793248f3fb66c8129" + "reference": "eb7d9957d66739649e931ce7a9d05dab69f8abac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/d07c06839e33047e2c894a6793248f3fb66c8129", - "reference": "d07c06839e33047e2c894a6793248f3fb66c8129", + "url": "https://api.github.com/repos/symfony/console/zipball/eb7d9957d66739649e931ce7a9d05dab69f8abac", + "reference": "eb7d9957d66739649e931ce7a9d05dab69f8abac", "shasum": "" }, "require": { @@ -3936,7 +3936,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v8.1.5" + "source": "https://github.com/symfony/console/tree/v8.1.6" }, "funding": [ { @@ -3956,20 +3956,20 @@ "type": "tidelift" } ], - "time": "2026-08-21T14:29:57+00:00" + "time": "2026-08-25T14:18:42+00:00" }, { "name": "symfony/css-selector", - "version": "v8.1.5", + "version": "v8.1.6", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "a291fb5adb65f52a4bb315db2d803698315dc64d" + "reference": "08e2905152a39cf3fd1745d83f8c483e258887d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/a291fb5adb65f52a4bb315db2d803698315dc64d", - "reference": "a291fb5adb65f52a4bb315db2d803698315dc64d", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/08e2905152a39cf3fd1745d83f8c483e258887d9", + "reference": "08e2905152a39cf3fd1745d83f8c483e258887d9", "shasum": "" }, "require": { @@ -4005,7 +4005,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v8.1.5" + "source": "https://github.com/symfony/css-selector/tree/v8.1.6" }, "funding": [ { @@ -4025,7 +4025,7 @@ "type": "tidelift" } ], - "time": "2026-08-21T17:47:34+00:00" + "time": "2026-08-23T10:06:25+00:00" }, { "name": "symfony/deprecation-contracts", @@ -4415,16 +4415,16 @@ }, { "name": "symfony/http-foundation", - "version": "v8.1.5", + "version": "v8.1.6", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "ee16f97e95cfa011a742714d7c8c8f70fe7423f4" + "reference": "093b78326f649c3a9db922b9f17123b6aeb3b8fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ee16f97e95cfa011a742714d7c8c8f70fe7423f4", - "reference": "ee16f97e95cfa011a742714d7c8c8f70fe7423f4", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/093b78326f649c3a9db922b9f17123b6aeb3b8fb", + "reference": "093b78326f649c3a9db922b9f17123b6aeb3b8fb", "shasum": "" }, "require": { @@ -4472,7 +4472,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v8.1.5" + "source": "https://github.com/symfony/http-foundation/tree/v8.1.6" }, "funding": [ { @@ -4492,20 +4492,20 @@ "type": "tidelift" } ], - "time": "2026-08-20T09:59:12+00:00" + "time": "2026-08-30T20:10:55+00:00" }, { "name": "symfony/http-kernel", - "version": "v8.1.5", + "version": "v8.1.6", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "0306e1e65b90023fe40de6c6be95d06396bcb2e6" + "reference": "2f73beb7c6f1a97d2c17bbf4dbd59da8cc18b355" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/0306e1e65b90023fe40de6c6be95d06396bcb2e6", - "reference": "0306e1e65b90023fe40de6c6be95d06396bcb2e6", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/2f73beb7c6f1a97d2c17bbf4dbd59da8cc18b355", + "reference": "2f73beb7c6f1a97d2c17bbf4dbd59da8cc18b355", "shasum": "" }, "require": { @@ -4582,7 +4582,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v8.1.5" + "source": "https://github.com/symfony/http-kernel/tree/v8.1.6" }, "funding": [ { @@ -4602,7 +4602,7 @@ "type": "tidelift" } ], - "time": "2026-08-22T13:45:00+00:00" + "time": "2026-08-30T21:40:49+00:00" }, { "name": "symfony/mailer", @@ -4686,7 +4686,7 @@ }, { "name": "symfony/mime", - "version": "v8.1.5", + "version": "v8.1.6", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", @@ -4748,7 +4748,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v8.1.5" + "source": "https://github.com/symfony/mime/tree/v8.1.6" }, "funding": [ { @@ -5672,7 +5672,7 @@ }, { "name": "symfony/process", - "version": "v8.1.5", + "version": "v8.1.6", "source": { "type": "git", "url": "https://github.com/symfony/process.git", @@ -5713,7 +5713,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v8.1.5" + "source": "https://github.com/symfony/process/tree/v8.1.6" }, "funding": [ { @@ -5824,7 +5824,7 @@ }, { "name": "symfony/routing", - "version": "v8.1.5", + "version": "v8.1.6", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", @@ -5880,7 +5880,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v8.1.5" + "source": "https://github.com/symfony/routing/tree/v8.1.6" }, "funding": [ { @@ -5904,16 +5904,16 @@ }, { "name": "symfony/service-contracts", - "version": "v3.7.1", + "version": "v3.7.3", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "c0a284bab1ed8aa0417e3d69250ab437739563a0" + "reference": "15e6a07ec2a2c75ceb1b21dd98105ee8456d2257" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/c0a284bab1ed8aa0417e3d69250ab437739563a0", - "reference": "c0a284bab1ed8aa0417e3d69250ab437739563a0", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/15e6a07ec2a2c75ceb1b21dd98105ee8456d2257", + "reference": "15e6a07ec2a2c75ceb1b21dd98105ee8456d2257", "shasum": "" }, "require": { @@ -5967,7 +5967,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.7.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.7.3" }, "funding": [ { @@ -5987,7 +5987,7 @@ "type": "tidelift" } ], - "time": "2026-06-16T09:55:08+00:00" + "time": "2026-07-27T15:39:01+00:00" }, { "name": "symfony/string", @@ -6334,16 +6334,16 @@ }, { "name": "symfony/var-dumper", - "version": "v8.1.5", + "version": "v8.1.6", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "61743d9bc7ab23b194527ca1be2fafd7dc93b74a" + "reference": "3783365b58972f4779254d98372af80fbf15e170" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/61743d9bc7ab23b194527ca1be2fafd7dc93b74a", - "reference": "61743d9bc7ab23b194527ca1be2fafd7dc93b74a", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/3783365b58972f4779254d98372af80fbf15e170", + "reference": "3783365b58972f4779254d98372af80fbf15e170", "shasum": "" }, "require": { @@ -6397,7 +6397,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v8.1.5" + "source": "https://github.com/symfony/var-dumper/tree/v8.1.6" }, "funding": [ { @@ -6417,20 +6417,20 @@ "type": "tidelift" } ], - "time": "2026-08-21T12:16:08+00:00" + "time": "2026-08-30T20:10:55+00:00" }, { "name": "symfony/yaml", - "version": "v7.4.17", + "version": "v7.4.18", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "0b040d7b66ceb10b7bb24c8e6656257932693a12" + "reference": "4cef939e55b8a21c5780418de0d98ab00d0736e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/0b040d7b66ceb10b7bb24c8e6656257932693a12", - "reference": "0b040d7b66ceb10b7bb24c8e6656257932693a12", + "url": "https://api.github.com/repos/symfony/yaml/zipball/4cef939e55b8a21c5780418de0d98ab00d0736e1", + "reference": "4cef939e55b8a21c5780418de0d98ab00d0736e1", "shasum": "" }, "require": { @@ -6473,7 +6473,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.4.17" + "source": "https://github.com/symfony/yaml/tree/v7.4.18" }, "funding": [ { @@ -6493,21 +6493,15 @@ "type": "tidelift" } ], - "time": "2026-08-21T12:09:28+00:00" + "time": "2026-08-30T00:47:26+00:00" }, { "name": "tallstackui/tallstackui", - "version": "v4.1.0", - "source": { - "type": "git", - "url": "https://github.com/tallstackui/tallstackui.git", - "reference": "8bc2d5ea42a7df23c6e1db30555d5de5382e1a5f" - }, + "version": "4.x-dev", "dist": { - "type": "zip", - "url": "https://api.github.com/repos/tallstackui/tallstackui/zipball/8bc2d5ea42a7df23c6e1db30555d5de5382e1a5f", - "reference": "8bc2d5ea42a7df23c6e1db30555d5de5382e1a5f", - "shasum": "" + "type": "path", + "url": "/Users/aj/Workspace/tallstack/tallstackui", + "reference": "d8c85af694721b41e4dd9a35eb6c1d29d2e6613f" }, "require": { "ext-zip": "*", @@ -6532,27 +6526,72 @@ "type": "library", "extra": { "laravel": { - "aliases": { - "TallStackUi": "TallStackUi\\Facades\\TallStackUi" - }, "providers": [ "TallStackUi\\TallStackUiServiceProvider" - ] + ], + "aliases": { + "TallStackUi": "TallStackUi\\Facades\\TallStackUi" + } } }, "autoload": { - "files": [ - "src/helpers.php" - ], "psr-4": { "TallStackUi\\": "src/" }, + "files": [ + "src/helpers.php" + ], "exclude-from-classmap": [ "src/**/*FeatureTest.php", "src/**/*BrowserTest.php" ] }, - "notification-url": "https://packagist.org/downloads/", + "autoload-dev": { + "psr-4": { + "App\\": "vendor/orchestra/testbench-core/laravel/app", + "Tests\\": "tests/" + } + }, + "scripts": { + "test": [ + "./vendor/bin/pest" + ], + "bench": [ + "./vendor/bin/testbench" + ], + "type": [ + "./vendor/bin/pest --type-coverage" + ], + "test:browser:setup": [ + "./vendor/bin/dusk-updater detect --auto-update" + ], + "ci": [ + "composer run analyse", + "composer run type", + "./vendor/bin/pint --parallel --test", + "@php scripts/find-unused-customization-blocks.php", + "@php scripts/check-html-escaped-tailwind-variants.php", + "composer run test:feature", + "composer run test:browser" + ], + "format": [ + "./vendor/bin/pint --parallel", + "npm run lint:fix", + "npm run format" + ], + "test:feature": [ + "vendor/bin/testbench view:clear", + "CI=true ./vendor/bin/pest --filter=Feature --parallel" + ], + "test:browser": [ + "Composer\\Config::disableProcessTimeout", + "./vendor/bin/testbench view:clear", + "CI=true ./vendor/bin/pest --filter=Browser" + ], + "analyse": [ + "./vendor/bin/phpstan analyse --memory-limit=2G" + ] + }, "license": [ "MIT" ], @@ -6563,17 +6602,9 @@ } ], "description": "TallStackUI is a powerful suite of Blade components that elevate your workflow of Livewire applications.", - "support": { - "issues": "https://github.com/tallstackui/tallstackui/issues", - "source": "https://github.com/tallstackui/tallstackui/tree/v4.1.0" - }, - "funding": [ - { - "url": "https://github.com/devajmeireles", - "type": "github" - } - ], - "time": "2026-08-21T17:31:28+00:00" + "transport-options": { + "relative": false + } }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -7635,16 +7666,16 @@ }, { "name": "pestphp/pest", - "version": "v5.1.2", + "version": "v5.1.3", "source": { "type": "git", "url": "https://github.com/pestphp/pest.git", - "reference": "627092ecfc467d9263c750b966c7b341f7a21874" + "reference": "20a5aacaca4fce9116922f42d2942b3f9f5bbfc6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest/zipball/627092ecfc467d9263c750b966c7b341f7a21874", - "reference": "627092ecfc467d9263c750b966c7b341f7a21874", + "url": "https://api.github.com/repos/pestphp/pest/zipball/20a5aacaca4fce9116922f42d2942b3f9f5bbfc6", + "reference": "20a5aacaca4fce9116922f42d2942b3f9f5bbfc6", "shasum": "" }, "require": { @@ -7661,6 +7692,7 @@ }, "conflict": { "filp/whoops": "<2.18.3", + "laravel/boost": "<2.6.0", "phpunit/phpunit": ">13.3.1", "sebastian/exporter": "<7.0.0", "webmozart/assert": "<1.11.0" @@ -7738,7 +7770,7 @@ ], "support": { "issues": "https://github.com/pestphp/pest/issues", - "source": "https://github.com/pestphp/pest/tree/v5.1.2" + "source": "https://github.com/pestphp/pest/tree/v5.1.3" }, "funding": [ { @@ -7750,7 +7782,7 @@ "type": "github" } ], - "time": "2026-08-24T13:06:57+00:00" + "time": "2026-08-25T18:15:02+00:00" }, { "name": "pestphp/pest-plugin", @@ -8531,16 +8563,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "2.3.3", + "version": "2.3.5", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "fb19eedd2bb67ff8cf7a5502ad329e701d6398a3" + "reference": "148cefffaf0233e4c08cc13db8a195a56dd6dfe9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/fb19eedd2bb67ff8cf7a5502ad329e701d6398a3", - "reference": "fb19eedd2bb67ff8cf7a5502ad329e701d6398a3", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/148cefffaf0233e4c08cc13db8a195a56dd6dfe9", + "reference": "148cefffaf0233e4c08cc13db8a195a56dd6dfe9", "shasum": "" }, "require": { @@ -8572,17 +8604,17 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.3" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.5" }, - "time": "2026-07-08T07:01:06+00:00" + "time": "2026-08-31T16:05:28+00:00" }, { "name": "phpstan/phpstan", - "version": "2.2.9", + "version": "2.2.12", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/13d6b4f347bad222da436580c8304fa6f83e6bd0", - "reference": "13d6b4f347bad222da436580c8304fa6f83e6bd0", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/174b0d88710f00a42598886504dd7a146f91ace5", + "reference": "174b0d88710f00a42598886504dd7a146f91ace5", "shasum": "" }, "require": { @@ -8638,7 +8670,7 @@ "type": "github" } ], - "time": "2026-08-22T07:38:16+00:00" + "time": "2026-08-31T19:09:43+00:00" }, { "name": "phpunit/php-code-coverage", @@ -10823,16 +10855,16 @@ }, { "name": "tomasvotruba/type-coverage", - "version": "2.3.4", + "version": "2.3.6", "source": { "type": "git", "url": "https://github.com/TomasVotruba/type-coverage.git", - "reference": "7b4aec57af15514dac9a3c5a9671da501444ecd0" + "reference": "bb2e1d115bfc38b2b29c98ea64762d70607a684f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TomasVotruba/type-coverage/zipball/7b4aec57af15514dac9a3c5a9671da501444ecd0", - "reference": "7b4aec57af15514dac9a3c5a9671da501444ecd0", + "url": "https://api.github.com/repos/TomasVotruba/type-coverage/zipball/bb2e1d115bfc38b2b29c98ea64762d70607a684f", + "reference": "bb2e1d115bfc38b2b29c98ea64762d70607a684f", "shasum": "" }, "require": { @@ -10878,7 +10910,7 @@ ], "support": { "issues": "https://github.com/TomasVotruba/type-coverage/issues", - "source": "https://github.com/TomasVotruba/type-coverage/tree/2.3.4" + "source": "https://github.com/TomasVotruba/type-coverage/tree/2.3.6" }, "funding": [ { @@ -10890,7 +10922,7 @@ "type": "github" } ], - "time": "2026-08-18T07:48:32+00:00" + "time": "2026-08-29T08:21:40+00:00" }, { "name": "webmozart/assert", @@ -11169,7 +11201,9 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": {}, + "stability-flags": { + "tallstackui/tallstackui": 20 + }, "prefer-stable": true, "prefer-lowest": false, "platform": { diff --git a/contents/documentation.yaml b/contents/documentation.yaml index dcf891bd..c05a9f67 100644 --- a/contents/documentation.yaml +++ b/contents/documentation.yaml @@ -210,6 +210,7 @@ form: range: - Basic Usage - Label & Hint + - Dual Mode - Readonly & Disabled - Size Variations - Color Variations @@ -235,6 +236,7 @@ form: - Validation Error - Delete - Multiple + - Image Editor - Restricting File Types - Footer Slot - Validate Before Upload @@ -265,6 +267,7 @@ form: - Label & Hint - Readonly & Disabled - Available Formats + - Typeable - Helpers - Min & Max Dates - Min & Max Years @@ -445,6 +448,7 @@ ui: - Light Variations - Outline Variations - Flat Variations + - Subtle Variations - Unfocus Circle: contents: @@ -460,12 +464,14 @@ ui: - Light Variations - Outline Variations - Flat Variations + - Subtle Variations - Unfocus Group: contents: - Concept - Basic Usage - Vertical Orientation + - Shadowless boolean: - Concept - Basic Usage @@ -505,6 +511,7 @@ ui: - Autoplay, Stop on Hover - Autoplay, Without Loop - Without Indicators + - Thumbnails - Image Title & Description - Clickable - Clickable Caption diff --git a/resources/views/components/layout/navigation/tree.blade.php b/resources/views/components/layout/navigation/tree.blade.php index fcc2a028..da2a1bf7 100644 --- a/resources/views/components/layout/navigation/tree.blade.php +++ b/resources/views/components/layout/navigation/tree.blade.php @@ -263,6 +263,7 @@ class="dark:text-dark-500 mt-6 font-mono text-[0.65rem] font-semibold tracking-[
  • diff --git a/resources/views/documentation/form/upload.blade.php b/resources/views/documentation/form/upload.blade.php index b7d1cb72..3fce6d04 100644 --- a/resources/views/documentation/form/upload.blade.php +++ b/resources/views/documentation/form/upload.blade.php @@ -125,6 +125,100 @@ class="underline" + +
    + + + +

    + The editor runs at intake, between picking the file and sending + it. What reaches Livewire is the edited file; the original never + leaves the browser. Only images open the editor: documents and + SVGs go straight to the upload. Cancelling, Escape, the backdrop + or the close button drop the file, so nothing is uploaded. Files + already uploaded cannot be edited again. +

    + + + +

    + aspect + locks the crop box to a + width:height + ratio, like + 1:1 + , + 4:3 + or + 16:9 + . The box starts as the largest centered rectangle of that ratio + and every handle keeps it. Without it the box is free. +

    + + + +

    + A bare + editor + offers the crop box and the rotation buttons. + editor="crop" + keeps the crop box only and + editor="rotate" + keeps the rotation buttons only, in which case + aspect + has no effect. +

    + + + +

    + With + multiple + the editor opens once per image, in sequence. Cancelling one + removes only that one from the batch. +

    + +

    + The EXIF orientation is applied on load, images larger than + 4096px on their longest side are downscaled to that, and an + animated GIF is flattened to a PNG frame. The output file name + follows the resulting format, so + photo.gif + becomes + photo.png + . The dialog is a + modal + that behaves as a bottom sheet below the + md + breakpoint and is centered above it. +

    + + editor + must be + true + , + false + , + crop + or + rotate + , and + aspect + must follow the + width:height + format with positive integers. Anything else throws. + +
    +
    - +
    diff --git a/resources/views/documentation/ui/carousel.blade.php b/resources/views/documentation/ui/carousel.blade.php index eea302c9..99614b9a 100644 --- a/resources/views/documentation/ui/carousel.blade.php +++ b/resources/views/documentation/ui/carousel.blade.php @@ -125,6 +125,159 @@ /> + +
    + + + +

    + Clicking a tile moves the carousel to that slide and restarts + the autoplay timer, exactly like the dot indicators. The tile of + the current slide carries a primary ring and + aria-current="true" + , the other tiles carry a subtle gray ring. The strip already + shows the position, so + thumbnails + implies + without-indicators + . The tiles follow the + shuffle + order and + round + applies to them the same way it applies to the slides. +

    + + + +

    + limit + caps the number of tiles, six by default. When the carousel + holds more images than the limit, the last tile keeps its image + under a + +N + overlay counting the images left out of the strip. Clicking it + moves to that image and the arrows keep going from there. While + the current slide sits beyond the visible tiles, the last tile + keeps the highlight. +

    + + + +

    + without-highlight + drops the primary ring, so every tile shares the inactive look + while + aria-current + keeps marking the current slide for assistive technology. +

    + + + +

    + Click a thumbnail to jump to that photo. +

    + +
    +
    +

    + The strip sits between the slides and the + footer + slot. +

    + + limit + and + without-highlight + require + thumbnails + , and + limit + must be at least + 2 + + + You can turn the strip on for every carousel, and set the + default + limit + and + without-highlight + , in the + configuration file. + The inline attributes always win, so + :thumbnails="false" + hides the strip on a single carousel. + without-highlight + is only read when the strip renders, so a carousel without + thumbnails + ignores it instead of throwing. + + +
    +
    @@ -333,9 +336,40 @@ class on every element. Learn more about it below. is used to handle the uploaded image and return the URL of the image. +

    + With + upload-editor + the picked image opens a crop and rotate dialog on top of the + image dialog before it is uploaded. It accepts the same values + as the + upload component + : + true + for the crop box and the rotation buttons, + crop + or + rotate + for one of them, and + false + to turn it off whatever the configuration says. + upload-aspect + locks the crop box to a + width:height + ratio. +

    + +

    + Cancelling the editor returns to the image dialog with no URL. + Images pasted by URL never go through it. The editor is only + active when both + upload-property + and + upload-method + are set. +

    - +
    - +

    @@ -409,7 +444,7 @@ class on every element. Learn more about it below.

    - +

    There are a lot things that can be configured using the configuration file. @@ -432,6 +467,22 @@ class on every element. Learn more about it below. in the configuration file.

    +

    + The image editor of the upload can also be enabled for every editor + through the + upload + key, with the same + editor + , + aspect + , + quality + and + format + settings of the + upload component + . The inline attributes always win. +

    diff --git a/resources/views/livewire/documentation/form/upload/upload.blade.php b/resources/views/livewire/documentation/form/upload/upload.blade.php index db3004bc..0f9ff094 100644 --- a/resources/views/livewire/documentation/form/upload/upload.blade.php +++ b/resources/views/livewire/documentation/form/upload/upload.blade.php @@ -25,6 +25,14 @@ public $photo7; + public $photo8; + + public $photo9; + + public $photo10; + + public $photo11 = []; + #[Validate(["file", "extensions:dat"])] public $validate; @@ -109,5 +117,26 @@ public function deleteUpload(array $content): void
    + @elseif ($model === 11) + + @elseif ($model === 12) + + @elseif ($model === 13) +
    + + +
    + @elseif ($model === 14) + @endif
    From 6b48ded6694f883ff67ba2e64eb8dc723cc5ea12 Mon Sep 17 00:00:00 2001 From: AJ Meireles Date: Wed, 2 Sep 2026 14:16:02 -0300 Subject: [PATCH 6/7] docs: disable copy on sections without preview --- resources/views/documentation/ai.blade.php | 2 +- resources/views/documentation/form/autocomplete.blade.php | 2 ++ resources/views/documentation/form/checkbox.blade.php | 2 +- resources/views/documentation/form/radio.blade.php | 2 +- resources/views/documentation/form/upload-async.blade.php | 1 + resources/views/documentation/form/upload.blade.php | 2 +- resources/views/documentation/internal/floating.blade.php | 3 ++- resources/views/documentation/ui/avatar.blade.php | 1 + resources/views/documentation/ui/banner.blade.php | 3 ++- resources/views/documentation/ui/chart.blade.php | 3 ++- resources/views/documentation/ui/command-palette.blade.php | 5 +++-- resources/views/documentation/ui/environment.blade.php | 6 +++--- resources/views/documentation/ui/gallery.blade.php | 4 ++-- resources/views/documentation/ui/modal.blade.php | 2 ++ resources/views/documentation/ui/slide.blade.php | 2 ++ resources/views/documentation/ui/tab.blade.php | 2 +- resources/views/documentation/ui/table.blade.php | 1 + resources/views/documentation/ui/tooltip.blade.php | 1 + 18 files changed, 29 insertions(+), 15 deletions(-) diff --git a/resources/views/documentation/ai.blade.php b/resources/views/documentation/ai.blade.php index 9e520ecc..1d773f26 100644 --- a/resources/views/documentation/ai.blade.php +++ b/resources/views/documentation/ai.blade.php @@ -175,7 +175,7 @@ class="underline"
    - +

    The quickest way to connect the MCP server to diff --git a/resources/views/documentation/form/autocomplete.blade.php b/resources/views/documentation/form/autocomplete.blade.php index 94862c8a..c2406aba 100644 --- a/resources/views/documentation/form/autocomplete.blade.php +++ b/resources/views/documentation/form/autocomplete.blade.php @@ -93,6 +93,7 @@ @@ -104,6 +105,7 @@

    diff --git a/resources/views/documentation/form/checkbox.blade.php b/resources/views/documentation/form/checkbox.blade.php index 7d86988f..ec4dd90a 100644 --- a/resources/views/documentation/form/checkbox.blade.php +++ b/resources/views/documentation/form/checkbox.blade.php @@ -235,7 +235,7 @@ /> - + +

    diff --git a/resources/views/documentation/form/upload.blade.php b/resources/views/documentation/form/upload.blade.php index 3fce6d04..89de3258 100644 --- a/resources/views/documentation/form/upload.blade.php +++ b/resources/views/documentation/form/upload.blade.php @@ -299,7 +299,7 @@ class="underline" benefit of this usage format is that it allows people to view files, including preview images, and can choose to delete them. - +

    • diff --git a/resources/views/documentation/internal/floating.blade.php b/resources/views/documentation/internal/floating.blade.php index 1d4719d1..c4da5c7a 100644 --- a/resources/views/documentation/internal/floating.blade.php +++ b/resources/views/documentation/internal/floating.blade.php @@ -63,9 +63,10 @@ title="Scroll Lock" new description="An option to block the overflow when the floating is opened." + disable-copy >
      - + Nested and stacked popups share a single lock, counted by reference, so the first popup to open takes it and the last to diff --git a/resources/views/documentation/ui/avatar.blade.php b/resources/views/documentation/ui/avatar.blade.php index c3b7323c..62a9a045 100644 --- a/resources/views/documentation/ui/avatar.blade.php +++ b/resources/views/documentation/ui/avatar.blade.php @@ -207,6 +207,7 @@ anchor="gravatar-from-another-column" new description="An option to use a different property to generate the gravatar" + disable-copy > diff --git a/resources/views/documentation/ui/banner.blade.php b/resources/views/documentation/ui/banner.blade.php index 2cca6bc0..ae00ed54 100644 --- a/resources/views/documentation/ui/banner.blade.php +++ b/resources/views/documentation/ui/banner.blade.php @@ -197,6 +197,7 @@

      @@ -206,7 +207,7 @@ but yes stored temporarily in the session and displayed in the next request when you redirect to another page.

      - +
      diff --git a/resources/views/documentation/ui/chart.blade.php b/resources/views/documentation/ui/chart.blade.php index 21a3fe65..3d80234d 100644 --- a/resources/views/documentation/ui/chart.blade.php +++ b/resources/views/documentation/ui/chart.blade.php @@ -460,7 +460,7 @@
      - +

      There are a few things that can be configured using the configuration file. @@ -510,6 +510,7 @@ +

      The @@ -240,6 +240,7 @@ class offers two response types: redirect the user to a page @@ -252,7 +253,7 @@ class offers two response types: redirect the user to a page configuration. When set to true, the command palette will be centered on mobile devices. - +

      By default, the command palette renders a dimmed overlay behind diff --git a/resources/views/documentation/ui/environment.blade.php b/resources/views/documentation/ui/environment.blade.php index d0531586..bf981a47 100644 --- a/resources/views/documentation/ui/environment.blade.php +++ b/resources/views/documentation/ui/environment.blade.php @@ -15,7 +15,7 @@ - +

      With the example above you should realize that the environment @@ -62,7 +62,7 @@ - +

      Internally TallStackUI uses a simple algorithm to get the @@ -80,7 +80,7 @@

      - +

      You may have noticed that there is no way to define component diff --git a/resources/views/documentation/ui/gallery.blade.php b/resources/views/documentation/ui/gallery.blade.php index cf0331e3..b8168449 100644 --- a/resources/views/documentation/ui/gallery.blade.php +++ b/resources/views/documentation/ui/gallery.blade.php @@ -131,7 +131,7 @@ class="max-w-xl" - +

      - + @@ -431,6 +432,7 @@ class="mt-4"
      diff --git a/resources/views/documentation/ui/slide.blade.php b/resources/views/documentation/ui/slide.blade.php index f5413e82..7dffe00f 100644 --- a/resources/views/documentation/ui/slide.blade.php +++ b/resources/views/documentation/ui/slide.blade.php @@ -198,6 +198,7 @@ class="mt-4" @@ -252,6 +253,7 @@ class="mt-4"
      diff --git a/resources/views/documentation/ui/tab.blade.php b/resources/views/documentation/ui/tab.blade.php index fb70006e..f39026a4 100644 --- a/resources/views/documentation/ui/tab.blade.php +++ b/resources/views/documentation/ui/tab.blade.php @@ -79,7 +79,7 @@ - +

      Tabs can be associated with URLs using the diff --git a/resources/views/documentation/ui/table.blade.php b/resources/views/documentation/ui/table.blade.php index 4830d9f1..99b2864a 100644 --- a/resources/views/documentation/ui/table.blade.php +++ b/resources/views/documentation/ui/table.blade.php @@ -269,6 +269,7 @@ class="underline"

      diff --git a/resources/views/documentation/ui/tooltip.blade.php b/resources/views/documentation/ui/tooltip.blade.php index 7bdb05a4..9af4db89 100644 --- a/resources/views/documentation/ui/tooltip.blade.php +++ b/resources/views/documentation/ui/tooltip.blade.php @@ -201,6 +201,7 @@ class="cursor-help underline" title="Styling the Balloon" new description="The balloon is created by JavaScript and shared by anchors that have no component behind them." + disable-copy > From 7450bc62f6e07722fac96e5cb1937552a2d36165 Mon Sep 17 00:00:00 2001 From: AJ Meireles Date: Wed, 2 Sep 2026 14:25:39 -0300 Subject: [PATCH 7/7] docs: remove redundant comments from date typeable and min/max examples --- app/Enums/Examples/Form/Date.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/app/Enums/Examples/Form/Date.php b/app/Enums/Examples/Form/Date.php index df889877..3d104151 100644 --- a/app/Enums/Examples/Form/Date.php +++ b/app/Enums/Examples/Form/Date.php @@ -41,8 +41,6 @@ class Date HTML; public const string TYPEABLE_FORMAT = <<<'HTML' - - HTML; @@ -57,8 +55,6 @@ class Date HTML; public const string MIN_MAX_DATES = <<<'HTML' - - HTML;