@agentero/design-system 0.29.1 → 0.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -588,13 +588,13 @@
588
588
  <header>
589
589
  <div class="wrap">
590
590
  <h1>Manifest Debugger</h1>
591
- <div class="summary"><a class="filter-pill all" data-k="all" href="#filter-all">All</a><span class="filter-pill ok" aria-disabled="true">31 components ok</span><span class="filter-pill ok" aria-disabled="true">250 stories ok</span></div>
591
+ <div class="summary"><a class="filter-pill all" data-k="all" href="#filter-all">All</a><span class="filter-pill ok" aria-disabled="true">33 components ok</span><span class="filter-pill ok" aria-disabled="true">263 stories ok</span></div>
592
592
  </div>
593
593
  </header>
594
594
  <main>
595
595
  <div class="wrap">
596
596
  <div class="note ok" style="margin-bottom: 16px;">
597
- Using <code>react-component-meta</code>. Generation took <strong>4.3s</strong>.
597
+ Using <code>react-component-meta</code>. Generation took <strong>3.4s</strong>.
598
598
  </div>
599
599
  <h2 class="section-title">Components</h2>
600
600
  <div class="grid" role="list">
@@ -2811,6 +2811,492 @@ import { CheckList } from &#39;@agentero/design-system/check-list&#39;;
2811
2811
  </div>
2812
2812
 
2813
2813
 
2814
+ </div>
2815
+ </article>
2816
+ <article
2817
+ class="card
2818
+ no-error
2819
+ no-info
2820
+ no-story-error
2821
+ no-doc-error"
2822
+ role="listitem"
2823
+ aria-label="Combobox.Root">
2824
+ <div class="head">
2825
+ <div class="title">
2826
+ <h2><span class="status-dot dot-ok"></span> Combobox.Root</h2>
2827
+ <div class="badges">
2828
+ <label for="c-7-components-combobox-props" class="badge ok as-toggle">38 prop types</label>
2829
+
2830
+ <label for="c-7-components-combobox-stories" class="badge ok as-toggle">7 stories</label>
2831
+
2832
+
2833
+ </div>
2834
+ </div>
2835
+ <div class="meta" title="./src/combobox/combobox.stories.tsx">components-combobox · ./src/combobox/combobox.stories.tsx</div>
2836
+ <div>Root provider for an input-triggered filterable list</div>
2837
+ <div class="hint">Combobox is a text input that filters a list and writes the chosen option back
2838
+ into itself. Focusing the input or typing opens the list; picking a row fills the
2839
+ input and closes it. Built on Base UI, whose Combobox primitive owns the
2840
+ filtering, the keyboard navigation and the `role=&quot;combobox&quot;` wiring.</div>
2841
+ <div class="kv"><span class="chip">summary: Root provider for an input-triggered filterable list</span><span class="chip">see: {@link https://base-ui.com/react/components/combobox Base UI Combobox}</span><span class="chip">example: ```tsx
2842
+ import { Combobox } from &#39;@agentero/design-system/combobox&#39;;
2843
+
2844
+ &lt;Combobox.Root items={states}&gt;
2845
+ &lt;Combobox.Input placeholder=&quot;Search states&quot; /&gt;
2846
+ &lt;Combobox.Content&gt;
2847
+ &lt;Combobox.Empty&gt;No matches found&lt;/Combobox.Empty&gt;
2848
+ &lt;Combobox.List&gt;
2849
+ {(state: string) =&gt; &lt;Combobox.Item key={state} value={state}&gt;{state}&lt;/Combobox.Item&gt;}
2850
+ &lt;/Combobox.List&gt;
2851
+ &lt;/Combobox.Content&gt;
2852
+ &lt;/Combobox.Root&gt;
2853
+ ```</span></div>
2854
+ </div>
2855
+
2856
+ <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
2857
+
2858
+
2859
+ <input id="c-7-components-combobox-stories" class="tg tg-stories" type="checkbox" hidden />
2860
+
2861
+
2862
+ <input id="c-7-components-combobox-props" class="tg tg-props" type="checkbox" hidden />
2863
+
2864
+ <div class="panels">
2865
+
2866
+
2867
+
2868
+ <div class="panel panel-props">
2869
+ <div class="note ok">
2870
+ <div class="row">
2871
+ <span class="ex-name">Prop types <small>(react-component-meta)</small></span>
2872
+ <span class="badge ok">38 prop types</span>
2873
+ </div>
2874
+ <pre><code>Component: src/combobox/index.ts::Combobox</code></pre>
2875
+ <pre><code>Props:</code></pre>
2876
+ <pre><code>/**
2877
+ * A ref to imperative actions.
2878
+ * - `unmount`: Manually unmounts the combobox.
2879
+ * Call this after any externally controlled closing animation finishes.
2880
+ */
2881
+ actionsRef?: RefObject&lt;Actions | null&gt;
2882
+
2883
+ /**
2884
+ * Provides a hint to the browser for autofill.
2885
+ */
2886
+ autoComplete?: string
2887
+
2888
+ /**
2889
+ * Whether the first matching item is highlighted automatically while filtering.
2890
+ */
2891
+ autoHighlight?: boolean = false
2892
+
2893
+ children?: ReactNode
2894
+
2895
+ /**
2896
+ * The uncontrolled input value when initially rendered.
2897
+ *
2898
+ * To render a controlled input, use the `inputValue` prop instead.
2899
+ */
2900
+ defaultInputValue?: string | number | readonly string[] | undefined
2901
+
2902
+ /**
2903
+ * Whether the popup is initially open.
2904
+ *
2905
+ * To render a controlled popup, use the `open` prop instead.
2906
+ */
2907
+ defaultOpen?: boolean = false
2908
+
2909
+ /**
2910
+ * The uncontrolled selected value of the combobox when it&#39;s initially rendered.
2911
+ *
2912
+ * To render a controlled combobox, use the `value` prop instead.
2913
+ */
2914
+ defaultValue?: unknown
2915
+
2916
+ /**
2917
+ * Whether the component should ignore user interaction.
2918
+ */
2919
+ disabled?: boolean = false
2920
+
2921
+ /**
2922
+ * Filter function used to match items vs input query.
2923
+ * Receives the source item, which is the derived value&#39;s item when `items` is a `createItems()`
2924
+ * collection, and the item itself otherwise.
2925
+ */
2926
+ filter?: ((item: unknown, query: string, itemToString?: ((item: unknown) =&gt; string) | undefined) =&gt; boolean) | null | undefined
2927
+
2928
+ /**
2929
+ * Filtered items to display in the list.
2930
+ * When provided, the list uses these items instead of filtering the `items` prop internally.
2931
+ * When `items` is also provided, this array must preserve its flat or grouped structure.
2932
+ * With a `createItems()` collection, pass source items rather than derived values.
2933
+ * Nullish entries are not supported, as in `items`.
2934
+ * Use when you want to control filtering logic externally with the `useFilter()` hook.
2935
+ */
2936
+ filteredItems?: readonly unknown[] | readonly Group&lt;unknown&gt;[] | undefined
2937
+
2938
+ /**
2939
+ * Identifies the form that owns the internal input.
2940
+ * Useful when the combobox is rendered outside the form.
2941
+ */
2942
+ form?: string
2943
+
2944
+ /**
2945
+ * Whether list items are presented in a grid layout.
2946
+ * When enabled, arrow keys navigate across rows and columns inferred from DOM rows.
2947
+ */
2948
+ grid?: boolean = false
2949
+
2950
+ /**
2951
+ * Whether moving the pointer over items should highlight them.
2952
+ * Disabling this prop allows CSS `:hover` to be differentiated from the `:focus` (`data-highlighted`) state.
2953
+ */
2954
+ highlightItemOnHover?: boolean = true
2955
+
2956
+ /**
2957
+ * The id of the component.
2958
+ */
2959
+ id?: string
2960
+
2961
+ /**
2962
+ * Whether the list is rendered inline without using the component&#39;s own popup.
2963
+ *
2964
+ * Specify `open` unconditionally in conjunction with this prop so the list is considered
2965
+ * visible: `&lt;Combobox.Root inline open&gt;`
2966
+ *
2967
+ * In a `Combobox.Root` &gt; `Dialog.Root` composition, bind the Combobox&#39;s `open` and
2968
+ * `onOpenChange` props to the `Dialog`&#39;s `open` and `onOpenChange` state instead so the
2969
+ * component resets its transient state (filter query, highlighted item, and input value) when
2970
+ * the dialog closes.
2971
+ */
2972
+ inline?: boolean = false
2973
+
2974
+ /**
2975
+ * A ref to the hidden input element.
2976
+ */
2977
+ inputRef?: Ref&lt;HTMLInputElement&gt; | undefined
2978
+
2979
+ /**
2980
+ * The input value of the combobox. Use when controlled.
2981
+ */
2982
+ inputValue?: string | number | readonly string[] | undefined
2983
+
2984
+ /**
2985
+ * Custom comparison logic used to determine if a combobox item value matches the current selected value. Useful when item values are objects without matching referentially.
2986
+ * With a `createItems()` collection, both arguments are derived values.
2987
+ * Defaults to `Object.is` comparison.
2988
+ */
2989
+ isItemEqualToValue?: (itemValue: unknown, value: unknown) =&gt; boolean
2990
+
2991
+ /**
2992
+ * The items to be displayed in the list.
2993
+ * Can be a flat array of items, an array of groups with items, or a collection created by
2994
+ * the `createItems()` function, which derives each item&#39;s selection value and label.
2995
+ * Nullish entries are not supported: remove them from the data before passing it.
2996
+ */
2997
+ items?: readonly any[] | readonly Group&lt;any&gt;[] | ComboboxItemCollection&lt;unknown, unknown&gt; | undefined
2998
+
2999
+ /**
3000
+ * When the item values are objects (`&lt;Combobox.Item value={object}&gt;`), this function converts the object value to a string representation for display in the input.
3001
+ * If the shape of the object is `{ value, label }`, the label will be used automatically without needing to specify this prop.
3002
+ * With a `createItems()` collection, this receives the derived value, and the collection&#39;s
3003
+ * `getLabel` takes precedence for values it can resolve.
3004
+ */
3005
+ itemToStringLabel?: (itemValue: unknown) =&gt; string
3006
+
3007
+ /**
3008
+ * When the item values are objects (`&lt;Combobox.Item value={object}&gt;`), this function converts the object value to a string representation for form submission.
3009
+ * If the shape of the object is `{ value, label }`, the value will be used automatically without needing to specify this prop.
3010
+ * With a `createItems()` collection, this receives the derived value.
3011
+ */
3012
+ itemToStringValue?: (itemValue: unknown) =&gt; string
3013
+
3014
+ /**
3015
+ * The maximum number of items to display in the list.
3016
+ */
3017
+ limit?: number = -1
3018
+
3019
+ /**
3020
+ * The locale to use for string comparison.
3021
+ * Defaults to the user&#39;s runtime locale.
3022
+ */
3023
+ locale?: LocalesArgument
3024
+
3025
+ /**
3026
+ * Whether to loop keyboard focus back to the input when the end of the list is reached while using the arrow keys. The first item can then be reached by pressing &lt;kbd&gt;ArrowDown&lt;/kbd&gt; again from the input, or the last item can be reached by pressing &lt;kbd&gt;ArrowUp&lt;/kbd&gt; from the input.
3027
+ * The input is always included in the focus loop per [ARIA Authoring Practices](https://www.w3.org/WAI/ARIA/apg/patterns/combobox/).
3028
+ * When disabled, focus does not move when on the last element and the user presses &lt;kbd&gt;ArrowDown&lt;/kbd&gt;, or when on the first element and the user presses &lt;kbd&gt;ArrowUp&lt;/kbd&gt;.
3029
+ */
3030
+ loopFocus?: boolean = true
3031
+
3032
+ /**
3033
+ * Determines if the popup enters a modal state when open.
3034
+ * - `true`: user interaction is limited to the popup: document page scroll is locked and pointer interactions on outside elements are disabled.
3035
+ * - `false`: user interaction with the rest of the document is allowed.
3036
+ *
3037
+ * On touch devices, a `true` modal blocks outside taps but leaves the page scrollable unless the popup spans nearly the full viewport width, matching native iOS behavior.
3038
+ */
3039
+ modal?: boolean = false
3040
+
3041
+ /**
3042
+ * Whether multiple items can be selected.
3043
+ */
3044
+ multiple?: false = false
3045
+
3046
+ /**
3047
+ * Identifies the field when a form is submitted.
3048
+ */
3049
+ name?: string
3050
+
3051
+ /**
3052
+ * Event handler called when the input value changes.
3053
+ */
3054
+ onInputValueChange?: (inputValue: string, eventDetails: ChangeEventDetails) =&gt; void
3055
+
3056
+ /**
3057
+ * Callback fired when an item is highlighted or unhighlighted.
3058
+ * Receives the highlighted item value (or `undefined` if no item is highlighted) and event details with a `reason` property describing why the highlight changed.
3059
+ * The `reason` can be:
3060
+ * - `&#39;keyboard&#39;`: the highlight changed due to keyboard navigation.
3061
+ * - `&#39;pointer&#39;`: the highlight changed due to pointer hovering.
3062
+ * - `&#39;none&#39;`: the highlight changed programmatically.
3063
+ */
3064
+ onItemHighlighted?: (highlightedValue: unknown, eventDetails: HighlightEventDetails) =&gt; void
3065
+
3066
+ /**
3067
+ * Event handler called when the popup is opened or closed.
3068
+ */
3069
+ onOpenChange?: (open: boolean, eventDetails: ChangeEventDetails) =&gt; void
3070
+
3071
+ /**
3072
+ * Event handler called after any animations complete when the popup is opened or closed.
3073
+ */
3074
+ onOpenChangeComplete?: (open: boolean) =&gt; void
3075
+
3076
+ /**
3077
+ * Event handler called when the selected value of the combobox changes.
3078
+ */
3079
+ onValueChange?: (value: unknown, eventDetails: ChangeEventDetails) =&gt; void
3080
+
3081
+ /**
3082
+ * Whether the popup is currently open. Use when controlled.
3083
+ */
3084
+ open?: boolean
3085
+
3086
+ /**
3087
+ * Whether the popup opens when clicking the input.
3088
+ */
3089
+ openOnInputClick?: boolean = true
3090
+
3091
+ /**
3092
+ * Whether the user should be unable to choose a different option from the popup.
3093
+ */
3094
+ readOnly?: boolean = false
3095
+
3096
+ /**
3097
+ * Whether the user must choose a value before submitting a form.
3098
+ */
3099
+ required?: boolean = false
3100
+
3101
+ /**
3102
+ * The selected value of the combobox. Use when controlled.
3103
+ */
3104
+ value?: unknown
3105
+
3106
+ /**
3107
+ * Whether the items are being externally virtualized.
3108
+ */
3109
+ virtualized?: boolean = false</code></pre>
3110
+ </div>
3111
+ </div>
3112
+
3113
+ <div class="panel panel-stories">
3114
+
3115
+
3116
+
3117
+ <div class="note ok">
3118
+ <div class="row">
3119
+ <span class="ex-name">Imports</span>
3120
+ </div>
3121
+ <pre><code>import { Button, Combobox, Field, FieldText, IconSearch, Label, Modal, Skeleton } from "@agentero/design-system";
3122
+ import { Suspense } from "react";</code></pre>
3123
+ </div>
3124
+
3125
+
3126
+ <div class="note ok">
3127
+ <div class="row">
3128
+ <span class="ex-name">Default</span>
3129
+ <span class="badge ok">story ok</span>
3130
+ </div>
3131
+
3132
+ <div class="hint">The common case: options are already in memory and Base UI filters them against
3133
+ what you type. Selecting a row fills the input and closes the list.</div>
3134
+ <pre><code>const Default = () =&gt; (
3135
+ &lt;Combobox.Root items={STATES}&gt;
3136
+ &lt;Combobox.Input placeholder=&quot;Search states&quot; aria-label=&quot;Search states&quot; /&gt;
3137
+ &lt;Combobox.Content&gt;
3138
+ &lt;Combobox.Empty&gt;No matches found&lt;/Combobox.Empty&gt;
3139
+ &lt;Combobox.List&gt;
3140
+ {(state: string) =&gt; (
3141
+ &lt;Combobox.Item key={state} value={state}&gt;
3142
+ {state}
3143
+ &lt;/Combobox.Item&gt;
3144
+ )}
3145
+ &lt;/Combobox.List&gt;
3146
+ &lt;/Combobox.Content&gt;
3147
+ &lt;/Combobox.Root&gt;
3148
+ );</code></pre>
3149
+ </div>
3150
+ <div class="note ok">
3151
+ <div class="row">
3152
+ <span class="ex-name">No Matches</span>
3153
+ <span class="badge ok">story ok</span>
3154
+ </div>
3155
+
3156
+ <div class="hint">`Empty` stays mounted so screen readers announce the change; it renders its
3157
+ children only while nothing matches. It needs `items` on `Root` to know that.</div>
3158
+ <pre><code>const NoMatches = () =&gt; (
3159
+ &lt;Combobox.Root items={STATES}&gt;
3160
+ &lt;Combobox.Input placeholder=&quot;Search states&quot; aria-label=&quot;Search states&quot; /&gt;
3161
+ &lt;Combobox.Content&gt;
3162
+ &lt;Combobox.Empty&gt;No matches found&lt;/Combobox.Empty&gt;
3163
+ &lt;Combobox.List&gt;
3164
+ {(state: string) =&gt; (
3165
+ &lt;Combobox.Item key={state} value={state}&gt;
3166
+ {state}
3167
+ &lt;/Combobox.Item&gt;
3168
+ )}
3169
+ &lt;/Combobox.List&gt;
3170
+ &lt;/Combobox.Content&gt;
3171
+ &lt;/Combobox.Root&gt;
3172
+ );</code></pre>
3173
+ </div>
3174
+ <div class="note ok">
3175
+ <div class="row">
3176
+ <span class="ex-name">Async Search</span>
3177
+ <span class="badge ok">story ok</span>
3178
+ </div>
3179
+
3180
+ <div class="hint">Options fetched as you type, the way the apps load data: the rows are a component
3181
+ that suspends on the request, so a `Suspense` boundary inside `Content` shows
3182
+ placeholder rows until they land. Nothing tracks `loading` by hand and no stale
3183
+ list lingers under the wait: the data is read by query, which is also what makes
3184
+ out-of-order responses harmless. Drop a `useSuspenseQuery` where `use()` is.</div>
3185
+ <pre><code>const AsyncSearch = () =&gt; &lt;SuspenseSearch /&gt;;</code></pre>
3186
+ </div>
3187
+ <div class="note ok">
3188
+ <div class="row">
3189
+ <span class="ex-name">Async Search With Status</span>
3190
+ <span class="badge ok">story ok</span>
3191
+ </div>
3192
+
3193
+ <div class="hint">The same search without Suspense, for a consumer that gets a `loading` flag from
3194
+ its data layer instead: `filter={null}`, the rows arrive through `filteredItems`,
3195
+ `Content` is marked busy and `Status` announces the wait. The list is cleared
3196
+ before each request and a request that is no longer the latest is dropped.</div>
3197
+ <pre><code>const AsyncSearchWithStatus = () =&gt; &lt;StatusSearch /&gt;;</code></pre>
3198
+ </div>
3199
+ <div class="note ok">
3200
+ <div class="row">
3201
+ <span class="ex-name">Inside Field Text</span>
3202
+ <span class="badge ok">story ok</span>
3203
+ </div>
3204
+
3205
+ <div class="hint">Dropped into a `FieldText`, the input takes the label, the description and
3206
+ the error from the field with nothing wired by hand: `Combobox.Input` reads the
3207
+ same `InputContext` the plain `Input` does.</div>
3208
+ <pre><code>const InsideFieldText = () =&gt; (
3209
+ &lt;FieldText invalid required&gt;
3210
+ &lt;Label&gt;Agency&lt;/Label&gt;
3211
+ &lt;Combobox.Root items={STATES}&gt;
3212
+ &lt;Combobox.Input placeholder=&quot;Search agencies&quot; /&gt;
3213
+ &lt;Combobox.Content&gt;
3214
+ &lt;Combobox.Empty&gt;No matches found&lt;/Combobox.Empty&gt;
3215
+ &lt;Combobox.List&gt;
3216
+ {(state: string) =&gt; (
3217
+ &lt;Combobox.Item key={state} value={state}&gt;
3218
+ {state}
3219
+ &lt;/Combobox.Item&gt;
3220
+ )}
3221
+ &lt;/Combobox.List&gt;
3222
+ &lt;/Combobox.Content&gt;
3223
+ &lt;/Combobox.Root&gt;
3224
+ &lt;Field.Description&gt;The agency this agent will be added to.&lt;/Field.Description&gt;
3225
+ &lt;Field.Error errors={[{ message: &#39;Pick an agency from the list&#39; }]} /&gt;
3226
+ &lt;/FieldText&gt;
3227
+ );</code></pre>
3228
+ </div>
3229
+ <div class="note ok">
3230
+ <div class="row">
3231
+ <span class="ex-name">With Leading Icon</span>
3232
+ <span class="badge ok">story ok</span>
3233
+ </div>
3234
+
3235
+ <div class="hint">A leading icon is composed around the input, not baked in: not every combobox
3236
+ is a search (a FEIN lookup or a template picker are not), so the component
3237
+ ships no icon of its own. Until `InputGroup` lands in the design system, the
3238
+ marketplace search fields get theirs like this — the icon overlaid, the input
3239
+ padded past it.</div>
3240
+ <pre><code>const WithLeadingIcon = () =&gt; (
3241
+ &lt;Combobox.Root items={STATES}&gt;
3242
+ &lt;div className=&quot;relative&quot;&gt;
3243
+ &lt;IconSearch
3244
+ aria-hidden
3245
+ className=&quot;pointer-events-none absolute top-1/2 left-3 z-1 size-6 -translate-y-1/2 [&amp;&gt;path]:fill-icon-default-base-tertiary&quot;
3246
+ /&gt;
3247
+ &lt;Combobox.Input className=&quot;pl-11&quot; placeholder=&quot;Search states&quot; aria-label=&quot;Search states&quot; /&gt;
3248
+ &lt;/div&gt;
3249
+ &lt;Combobox.Content&gt;
3250
+ &lt;Combobox.Empty&gt;No matches found&lt;/Combobox.Empty&gt;
3251
+ &lt;Combobox.List&gt;
3252
+ {(state: string) =&gt; (
3253
+ &lt;Combobox.Item key={state} value={state}&gt;
3254
+ {state}
3255
+ &lt;/Combobox.Item&gt;
3256
+ )}
3257
+ &lt;/Combobox.List&gt;
3258
+ &lt;/Combobox.Content&gt;
3259
+ &lt;/Combobox.Root&gt;
3260
+ );</code></pre>
3261
+ </div>
3262
+ <div class="note ok">
3263
+ <div class="row">
3264
+ <span class="ex-name">Inside Modal</span>
3265
+ <span class="badge ok">story ok</span>
3266
+ </div>
3267
+
3268
+ <div class="hint">Inside a `Modal`, which is a Radix Dialog. The surface portals to the body, so
3269
+ this checks that the dialog&#39;s modal layer neither blocks pointer events on the
3270
+ list nor treats a click in it as a click outside and closes.</div>
3271
+ <pre><code>const InsideModal = () =&gt; (
3272
+ &lt;Modal.Root&gt;
3273
+ &lt;Modal.Trigger asChild&gt;
3274
+ &lt;Button variant=&quot;secondary&quot;&gt;Assign agency&lt;/Button&gt;
3275
+ &lt;/Modal.Trigger&gt;
3276
+ &lt;Modal.Content&gt;
3277
+ &lt;Modal.Title&gt;Assign agency&lt;/Modal.Title&gt;
3278
+ &lt;Modal.Body&gt;
3279
+ &lt;Combobox.Root items={STATES}&gt;
3280
+ &lt;Combobox.Input placeholder=&quot;Search states&quot; aria-label=&quot;Search states&quot; /&gt;
3281
+ &lt;Combobox.Content&gt;
3282
+ &lt;Combobox.Empty&gt;No matches found&lt;/Combobox.Empty&gt;
3283
+ &lt;Combobox.List&gt;
3284
+ {(state: string) =&gt; (
3285
+ &lt;Combobox.Item key={state} value={state}&gt;
3286
+ {state}
3287
+ &lt;/Combobox.Item&gt;
3288
+ )}
3289
+ &lt;/Combobox.List&gt;
3290
+ &lt;/Combobox.Content&gt;
3291
+ &lt;/Combobox.Root&gt;
3292
+ &lt;/Modal.Body&gt;
3293
+ &lt;/Modal.Content&gt;
3294
+ &lt;/Modal.Root&gt;
3295
+ );</code></pre>
3296
+ </div>
3297
+ </div>
3298
+
3299
+
2814
3300
  </div>
2815
3301
  </article>
2816
3302
  <article
@@ -2825,9 +3311,9 @@ import { CheckList } from &#39;@agentero/design-system/check-list&#39;;
2825
3311
  <div class="title">
2826
3312
  <h2><span class="status-dot dot-ok"></span> Command.Root</h2>
2827
3313
  <div class="badges">
2828
- <label for="c-7-components-command-props" class="badge ok as-toggle">10 prop types</label>
3314
+ <label for="c-8-components-command-props" class="badge ok as-toggle">10 prop types</label>
2829
3315
 
2830
- <label for="c-7-components-command-stories" class="badge ok as-toggle">6 stories</label>
3316
+ <label for="c-8-components-command-stories" class="badge ok as-toggle">6 stories</label>
2831
3317
 
2832
3318
 
2833
3319
  </div>
@@ -2860,10 +3346,10 @@ import { Command } from &#39;@agentero/design-system/command&#39;;
2860
3346
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
2861
3347
 
2862
3348
 
2863
- <input id="c-7-components-command-stories" class="tg tg-stories" type="checkbox" hidden />
3349
+ <input id="c-8-components-command-stories" class="tg tg-stories" type="checkbox" hidden />
2864
3350
 
2865
3351
 
2866
- <input id="c-7-components-command-props" class="tg tg-props" type="checkbox" hidden />
3352
+ <input id="c-8-components-command-props" class="tg tg-props" type="checkbox" hidden />
2867
3353
 
2868
3354
  <div class="panels">
2869
3355
 
@@ -3077,9 +3563,9 @@ list does not invite the pointer.</div>
3077
3563
  <div class="title">
3078
3564
  <h2><span class="status-dot dot-ok"></span> DataTable.Root</h2>
3079
3565
  <div class="badges">
3080
- <label for="c-8-components-datatable-props" class="badge ok as-toggle">88 prop types</label>
3566
+ <label for="c-9-components-datatable-props" class="badge ok as-toggle">88 prop types</label>
3081
3567
 
3082
- <label for="c-8-components-datatable-stories" class="badge ok as-toggle">4 stories</label>
3568
+ <label for="c-9-components-datatable-stories" class="badge ok as-toggle">4 stories</label>
3083
3569
 
3084
3570
 
3085
3571
  </div>
@@ -3122,10 +3608,10 @@ const columns = [
3122
3608
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
3123
3609
 
3124
3610
 
3125
- <input id="c-8-components-datatable-stories" class="tg tg-stories" type="checkbox" hidden />
3611
+ <input id="c-9-components-datatable-stories" class="tg tg-stories" type="checkbox" hidden />
3126
3612
 
3127
3613
 
3128
- <input id="c-8-components-datatable-props" class="tg tg-props" type="checkbox" hidden />
3614
+ <input id="c-9-components-datatable-props" class="tg tg-props" type="checkbox" hidden />
3129
3615
 
3130
3616
  <div class="panels">
3131
3617
 
@@ -3703,9 +4189,9 @@ in flight.</div>
3703
4189
  <div class="title">
3704
4190
  <h2><span class="status-dot dot-ok"></span> Divider</h2>
3705
4191
  <div class="badges">
3706
- <label for="c-9-components-divider-props" class="badge ok as-toggle">4 prop types</label>
4192
+ <label for="c-10-components-divider-props" class="badge ok as-toggle">4 prop types</label>
3707
4193
 
3708
- <label for="c-9-components-divider-stories" class="badge ok as-toggle">10 stories</label>
4194
+ <label for="c-10-components-divider-stories" class="badge ok as-toggle">10 stories</label>
3709
4195
 
3710
4196
 
3711
4197
  </div>
@@ -3728,10 +4214,10 @@ When omitted, Divider renders a single line.</span><span class="chip">example: &
3728
4214
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
3729
4215
 
3730
4216
 
3731
- <input id="c-9-components-divider-stories" class="tg tg-stories" type="checkbox" hidden />
4217
+ <input id="c-10-components-divider-stories" class="tg tg-stories" type="checkbox" hidden />
3732
4218
 
3733
4219
 
3734
- <input id="c-9-components-divider-props" class="tg tg-props" type="checkbox" hidden />
4220
+ <input id="c-10-components-divider-props" class="tg tg-props" type="checkbox" hidden />
3735
4221
 
3736
4222
  <div class="panels">
3737
4223
 
@@ -4034,9 +4520,9 @@ related controls or inline links without visual weight.</div>
4034
4520
  <div class="title">
4035
4521
  <h2><span class="status-dot dot-ok"></span> DropdownMenu.Root</h2>
4036
4522
  <div class="badges">
4037
- <label for="c-10-components-dropdownmenu-props" class="badge ok as-toggle">6 prop types</label>
4523
+ <label for="c-11-components-dropdownmenu-props" class="badge ok as-toggle">6 prop types</label>
4038
4524
 
4039
- <label for="c-10-components-dropdownmenu-stories" class="badge ok as-toggle">7 stories</label>
4525
+ <label for="c-11-components-dropdownmenu-stories" class="badge ok as-toggle">7 stories</label>
4040
4526
 
4041
4527
 
4042
4528
  </div>
@@ -4095,10 +4581,10 @@ import { DropdownMenu } from &#39;@agentero/design-system/dropdown-menu&#39;;
4095
4581
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
4096
4582
 
4097
4583
 
4098
- <input id="c-10-components-dropdownmenu-stories" class="tg tg-stories" type="checkbox" hidden />
4584
+ <input id="c-11-components-dropdownmenu-stories" class="tg tg-stories" type="checkbox" hidden />
4099
4585
 
4100
4586
 
4101
- <input id="c-10-components-dropdownmenu-props" class="tg tg-props" type="checkbox" hidden />
4587
+ <input id="c-11-components-dropdownmenu-props" class="tg tg-props" type="checkbox" hidden />
4102
4588
 
4103
4589
  <div class="panels">
4104
4590
 
@@ -4501,9 +4987,9 @@ actions outright unless the user needs to see them and understand why.</div>
4501
4987
  <div class="title">
4502
4988
  <h2><span class="status-dot dot-ok"></span> Field.Root</h2>
4503
4989
  <div class="badges">
4504
- <label for="c-11-components-field-props" class="badge ok as-toggle">6 prop types</label>
4990
+ <label for="c-12-components-field-props" class="badge ok as-toggle">6 prop types</label>
4505
4991
 
4506
- <label for="c-11-components-field-stories" class="badge ok as-toggle">16 stories</label>
4992
+ <label for="c-12-components-field-stories" class="badge ok as-toggle">16 stories</label>
4507
4993
 
4508
4994
 
4509
4995
  </div>
@@ -4535,10 +5021,10 @@ absent when there is none.</div>
4535
5021
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
4536
5022
 
4537
5023
 
4538
- <input id="c-11-components-field-stories" class="tg tg-stories" type="checkbox" hidden />
5024
+ <input id="c-12-components-field-stories" class="tg tg-stories" type="checkbox" hidden />
4539
5025
 
4540
5026
 
4541
- <input id="c-11-components-field-props" class="tg tg-props" type="checkbox" hidden />
5027
+ <input id="c-12-components-field-props" class="tg tg-props" type="checkbox" hidden />
4542
5028
 
4543
5029
  <div class="panels">
4544
5030
 
@@ -4988,9 +5474,9 @@ form library. `InputContext` extends the same way with `value`, `onChange`,
4988
5474
  <div class="title">
4989
5475
  <h2><span class="status-dot dot-ok"></span> FieldText</h2>
4990
5476
  <div class="badges">
4991
- <label for="c-12-components-fieldtext-props" class="badge ok as-toggle">6 prop types</label>
5477
+ <label for="c-13-components-fieldtext-props" class="badge ok as-toggle">6 prop types</label>
4992
5478
 
4993
- <label for="c-12-components-fieldtext-stories" class="badge ok as-toggle">7 stories</label>
5479
+ <label for="c-13-components-fieldtext-stories" class="badge ok as-toggle">7 stories</label>
4994
5480
 
4995
5481
 
4996
5482
  </div>
@@ -5017,10 +5503,10 @@ and `name`, and `FieldContext` with the errors, as the last story shows.</div>
5017
5503
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
5018
5504
 
5019
5505
 
5020
- <input id="c-12-components-fieldtext-stories" class="tg tg-stories" type="checkbox" hidden />
5506
+ <input id="c-13-components-fieldtext-stories" class="tg tg-stories" type="checkbox" hidden />
5021
5507
 
5022
5508
 
5023
- <input id="c-12-components-fieldtext-props" class="tg tg-props" type="checkbox" hidden />
5509
+ <input id="c-13-components-fieldtext-props" class="tg tg-props" type="checkbox" hidden />
5024
5510
 
5025
5511
  <div class="panels">
5026
5512
 
@@ -5236,9 +5722,9 @@ The input&#39;s own `onChange` still runs, chained after the provider&#39;s.</di
5236
5722
  <div class="title">
5237
5723
  <h2><span class="status-dot dot-ok"></span> Form.Root</h2>
5238
5724
  <div class="badges">
5239
- <label for="c-13-components-form-props" class="badge ok as-toggle">3 prop types</label>
5725
+ <label for="c-14-components-form-props" class="badge ok as-toggle">3 prop types</label>
5240
5726
 
5241
- <label for="c-13-components-form-stories" class="badge ok as-toggle">2 stories</label>
5727
+ <label for="c-14-components-form-stories" class="badge ok as-toggle">2 stories</label>
5242
5728
 
5243
5729
 
5244
5730
  </div>
@@ -5267,10 +5753,10 @@ keep a single copy, since the provider and the fields share one context.</div>
5267
5753
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
5268
5754
 
5269
5755
 
5270
- <input id="c-13-components-form-stories" class="tg tg-stories" type="checkbox" hidden />
5756
+ <input id="c-14-components-form-stories" class="tg tg-stories" type="checkbox" hidden />
5271
5757
 
5272
5758
 
5273
- <input id="c-13-components-form-props" class="tg tg-props" type="checkbox" hidden />
5759
+ <input id="c-14-components-form-props" class="tg tg-props" type="checkbox" hidden />
5274
5760
 
5275
5761
  <div class="panels">
5276
5762
 
@@ -5365,9 +5851,9 @@ Validation is react-hook-form&#39;s alone.</div>
5365
5851
  <div class="title">
5366
5852
  <h2><span class="status-dot dot-ok"></span> FormText</h2>
5367
5853
  <div class="badges">
5368
- <label for="c-14-components-formtext-props" class="badge ok as-toggle">15 prop types</label>
5854
+ <label for="c-15-components-formtext-props" class="badge ok as-toggle">15 prop types</label>
5369
5855
 
5370
- <label for="c-14-components-formtext-stories" class="badge ok as-toggle">9 stories</label>
5856
+ <label for="c-15-components-formtext-stories" class="badge ok as-toggle">9 stories</label>
5371
5857
 
5372
5858
 
5373
5859
  </div>
@@ -5397,10 +5883,10 @@ with the `FieldText`, `Label`, `Input` and `Field.*` primitives directly.</div>
5397
5883
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
5398
5884
 
5399
5885
 
5400
- <input id="c-14-components-formtext-stories" class="tg tg-stories" type="checkbox" hidden />
5886
+ <input id="c-15-components-formtext-stories" class="tg tg-stories" type="checkbox" hidden />
5401
5887
 
5402
5888
 
5403
- <input id="c-14-components-formtext-props" class="tg tg-props" type="checkbox" hidden />
5889
+ <input id="c-15-components-formtext-props" class="tg tg-props" type="checkbox" hidden />
5404
5890
 
5405
5891
  <div class="panels">
5406
5892
 
@@ -5522,7 +6008,7 @@ tooltip?: ReactNode
5522
6008
  /**
5523
6009
  * Preferred side of the tooltip. Defaults to `&#39;top&#39;`.
5524
6010
  */
5525
- tooltipSide?: &quot;right&quot; | &quot;top&quot; | &quot;bottom&quot; | &quot;left&quot;</code></pre>
6011
+ tooltipSide?: &quot;top&quot; | &quot;bottom&quot; | &quot;left&quot; | &quot;right&quot;</code></pre>
5526
6012
  </div>
5527
6013
  </div>
5528
6014
 
@@ -5665,9 +6151,9 @@ hand.</div>
5665
6151
  <div class="title">
5666
6152
  <h2><span class="status-dot dot-ok"></span> HoverCard.Root</h2>
5667
6153
  <div class="badges">
5668
- <label for="c-15-components-hovercard-props" class="badge ok as-toggle">6 prop types</label>
6154
+ <label for="c-16-components-hovercard-props" class="badge ok as-toggle">6 prop types</label>
5669
6155
 
5670
- <label for="c-15-components-hovercard-stories" class="badge ok as-toggle">7 stories</label>
6156
+ <label for="c-16-components-hovercard-stories" class="badge ok as-toggle">7 stories</label>
5671
6157
 
5672
6158
 
5673
6159
  </div>
@@ -5699,10 +6185,10 @@ import { HoverCard } from &#39;@agentero/design-system/hover-card&#39;;
5699
6185
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
5700
6186
 
5701
6187
 
5702
- <input id="c-15-components-hovercard-stories" class="tg tg-stories" type="checkbox" hidden />
6188
+ <input id="c-16-components-hovercard-stories" class="tg tg-stories" type="checkbox" hidden />
5703
6189
 
5704
6190
 
5705
- <input id="c-15-components-hovercard-props" class="tg tg-props" type="checkbox" hidden />
6191
+ <input id="c-16-components-hovercard-props" class="tg tg-props" type="checkbox" hidden />
5706
6192
 
5707
6193
  <div class="panels">
5708
6194
 
@@ -5949,9 +6435,9 @@ trigger-dense UIs where an instant preview reads as more responsive.</div>
5949
6435
  <div class="title">
5950
6436
  <h2><span class="status-dot dot-ok"></span> Input</h2>
5951
6437
  <div class="badges">
5952
- <label for="c-16-components-input-props" class="badge ok as-toggle">7 prop types</label>
6438
+ <label for="c-17-components-input-props" class="badge ok as-toggle">7 prop types</label>
5953
6439
 
5954
- <label for="c-16-components-input-stories" class="badge ok as-toggle">9 stories</label>
6440
+ <label for="c-17-components-input-stories" class="badge ok as-toggle">9 stories</label>
5955
6441
 
5956
6442
 
5957
6443
  </div>
@@ -5974,10 +6460,10 @@ assistive technology announces.</div>
5974
6460
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
5975
6461
 
5976
6462
 
5977
- <input id="c-16-components-input-stories" class="tg tg-stories" type="checkbox" hidden />
6463
+ <input id="c-17-components-input-stories" class="tg tg-stories" type="checkbox" hidden />
5978
6464
 
5979
6465
 
5980
- <input id="c-16-components-input-props" class="tg tg-props" type="checkbox" hidden />
6466
+ <input id="c-17-components-input-props" class="tg tg-props" type="checkbox" hidden />
5981
6467
 
5982
6468
  <div class="panels">
5983
6469
 
@@ -6189,9 +6675,9 @@ they cannot change.</div>
6189
6675
  <div class="title">
6190
6676
  <h2><span class="status-dot dot-ok"></span> Label</h2>
6191
6677
  <div class="badges">
6192
- <label for="c-17-components-label-props" class="badge ok as-toggle">3 prop types</label>
6678
+ <label for="c-18-components-label-props" class="badge ok as-toggle">3 prop types</label>
6193
6679
 
6194
- <label for="c-17-components-label-stories" class="badge ok as-toggle">5 stories</label>
6680
+ <label for="c-18-components-label-stories" class="badge ok as-toggle">5 stories</label>
6195
6681
 
6196
6682
 
6197
6683
  </div>
@@ -6211,10 +6697,10 @@ still has to carry `required` / `aria-required`.</div>
6211
6697
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
6212
6698
 
6213
6699
 
6214
- <input id="c-17-components-label-stories" class="tg tg-stories" type="checkbox" hidden />
6700
+ <input id="c-18-components-label-stories" class="tg tg-stories" type="checkbox" hidden />
6215
6701
 
6216
6702
 
6217
- <input id="c-17-components-label-props" class="tg tg-props" type="checkbox" hidden />
6703
+ <input id="c-18-components-label-props" class="tg tg-props" type="checkbox" hidden />
6218
6704
 
6219
6705
  <div class="panels">
6220
6706
 
@@ -6334,9 +6820,9 @@ field&#39;s control with no `htmlFor`. An explicit `htmlFor` still wins.</div>
6334
6820
  <div class="title">
6335
6821
  <h2><span class="status-dot dot-ok"></span> Loading</h2>
6336
6822
  <div class="badges">
6337
- <label for="c-18-components-loading-props" class="badge ok as-toggle">1 prop type</label>
6823
+ <label for="c-19-components-loading-props" class="badge ok as-toggle">1 prop type</label>
6338
6824
 
6339
- <label for="c-18-components-loading-stories" class="badge ok as-toggle">7 stories</label>
6825
+ <label for="c-19-components-loading-stories" class="badge ok as-toggle">7 stories</label>
6340
6826
 
6341
6827
 
6342
6828
  </div>
@@ -6353,10 +6839,10 @@ parent font size via `em`-based size variants (`sm`, `md`, `lg`).</div>
6353
6839
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
6354
6840
 
6355
6841
 
6356
- <input id="c-18-components-loading-stories" class="tg tg-stories" type="checkbox" hidden />
6842
+ <input id="c-19-components-loading-stories" class="tg tg-stories" type="checkbox" hidden />
6357
6843
 
6358
6844
 
6359
- <input id="c-18-components-loading-props" class="tg tg-props" type="checkbox" hidden />
6845
+ <input id="c-19-components-loading-props" class="tg tg-props" type="checkbox" hidden />
6360
6846
 
6361
6847
  <div class="panels">
6362
6848
 
@@ -6507,9 +6993,9 @@ against the dark background.</div>
6507
6993
  <div class="title">
6508
6994
  <h2><span class="status-dot dot-ok"></span> Modal.Root</h2>
6509
6995
  <div class="badges">
6510
- <label for="c-19-components-modal-props" class="badge ok as-toggle">5 prop types</label>
6996
+ <label for="c-20-components-modal-props" class="badge ok as-toggle">5 prop types</label>
6511
6997
 
6512
- <label for="c-19-components-modal-stories" class="badge ok as-toggle">6 stories</label>
6998
+ <label for="c-20-components-modal-stories" class="badge ok as-toggle">6 stories</label>
6513
6999
 
6514
7000
 
6515
7001
  </div>
@@ -6555,10 +7041,10 @@ import { Modal } from &#39;@agentero/design-system/modal&#39;;
6555
7041
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
6556
7042
 
6557
7043
 
6558
- <input id="c-19-components-modal-stories" class="tg tg-stories" type="checkbox" hidden />
7044
+ <input id="c-20-components-modal-stories" class="tg tg-stories" type="checkbox" hidden />
6559
7045
 
6560
7046
 
6561
- <input id="c-19-components-modal-props" class="tg tg-props" type="checkbox" hidden />
7047
+ <input id="c-20-components-modal-props" class="tg tg-props" type="checkbox" hidden />
6562
7048
 
6563
7049
  <div class="panels">
6564
7050
 
@@ -6755,9 +7241,9 @@ announced as an `alertdialog`. Only the footer actions close it.</div>
6755
7241
  <div class="title">
6756
7242
  <h2><span class="status-dot dot-ok"></span> Pagination</h2>
6757
7243
  <div class="badges">
6758
- <label for="c-20-components-pagination-props" class="badge ok as-toggle">5 prop types</label>
7244
+ <label for="c-21-components-pagination-props" class="badge ok as-toggle">5 prop types</label>
6759
7245
 
6760
- <label for="c-20-components-pagination-stories" class="badge ok as-toggle">7 stories</label>
7246
+ <label for="c-21-components-pagination-stories" class="badge ok as-toggle">7 stories</label>
6761
7247
 
6762
7248
 
6763
7249
  </div>
@@ -6787,10 +7273,10 @@ const [page, setPage] = useState(1);
6787
7273
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
6788
7274
 
6789
7275
 
6790
- <input id="c-20-components-pagination-stories" class="tg tg-stories" type="checkbox" hidden />
7276
+ <input id="c-21-components-pagination-stories" class="tg tg-stories" type="checkbox" hidden />
6791
7277
 
6792
7278
 
6793
- <input id="c-20-components-pagination-props" class="tg tg-props" type="checkbox" hidden />
7279
+ <input id="c-21-components-pagination-props" class="tg tg-props" type="checkbox" hidden />
6794
7280
 
6795
7281
  <div class="panels">
6796
7282
 
@@ -6945,9 +7431,9 @@ entries summary follow along.</div>
6945
7431
  <div class="title">
6946
7432
  <h2><span class="status-dot dot-ok"></span> Popover.Root</h2>
6947
7433
  <div class="badges">
6948
- <label for="c-21-components-popover-props" class="badge ok as-toggle">5 prop types</label>
7434
+ <label for="c-22-components-popover-props" class="badge ok as-toggle">5 prop types</label>
6949
7435
 
6950
- <label for="c-21-components-popover-stories" class="badge ok as-toggle">5 stories</label>
7436
+ <label for="c-22-components-popover-stories" class="badge ok as-toggle">5 stories</label>
6951
7437
 
6952
7438
 
6953
7439
  </div>
@@ -6976,10 +7462,10 @@ import { Popover } from &#39;@agentero/design-system/popover&#39;;
6976
7462
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
6977
7463
 
6978
7464
 
6979
- <input id="c-21-components-popover-stories" class="tg tg-stories" type="checkbox" hidden />
7465
+ <input id="c-22-components-popover-stories" class="tg tg-stories" type="checkbox" hidden />
6980
7466
 
6981
7467
 
6982
- <input id="c-21-components-popover-props" class="tg tg-props" type="checkbox" hidden />
7468
+ <input id="c-22-components-popover-props" class="tg tg-props" type="checkbox" hidden />
6983
7469
 
6984
7470
  <div class="panels">
6985
7471
 
@@ -7178,9 +7664,9 @@ focus returning to its trigger once the modal closes.</div>
7178
7664
  <div class="title">
7179
7665
  <h2><span class="status-dot dot-ok"></span> Progress</h2>
7180
7666
  <div class="badges">
7181
- <label for="c-22-components-progress-props" class="badge ok as-toggle">4 prop types</label>
7667
+ <label for="c-23-components-progress-props" class="badge ok as-toggle">4 prop types</label>
7182
7668
 
7183
- <label for="c-22-components-progress-stories" class="badge ok as-toggle">4 stories</label>
7669
+ <label for="c-23-components-progress-stories" class="badge ok as-toggle">4 stories</label>
7184
7670
 
7185
7671
 
7186
7672
  </div>
@@ -7199,10 +7685,10 @@ with `currentColor`, so recolor it with a plain text class — e.g.
7199
7685
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
7200
7686
 
7201
7687
 
7202
- <input id="c-22-components-progress-stories" class="tg tg-stories" type="checkbox" hidden />
7688
+ <input id="c-23-components-progress-stories" class="tg tg-stories" type="checkbox" hidden />
7203
7689
 
7204
7690
 
7205
- <input id="c-22-components-progress-props" class="tg tg-props" type="checkbox" hidden />
7691
+ <input id="c-23-components-progress-props" class="tg tg-props" type="checkbox" hidden />
7206
7692
 
7207
7693
  <div class="panels">
7208
7694
 
@@ -7321,7 +7807,7 @@ percentage: number</code></pre>
7321
7807
  <div class="badges">
7322
7808
 
7323
7809
 
7324
- <label for="c-23-components-skeleton-stories" class="badge ok as-toggle">4 stories</label>
7810
+ <label for="c-24-components-skeleton-stories" class="badge ok as-toggle">4 stories</label>
7325
7811
 
7326
7812
 
7327
7813
  </div>
@@ -7338,7 +7824,7 @@ shape it with Tailwind classes to mirror the content it stands in for.</div>
7338
7824
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
7339
7825
 
7340
7826
 
7341
- <input id="c-23-components-skeleton-stories" class="tg tg-stories" type="checkbox" hidden />
7827
+ <input id="c-24-components-skeleton-stories" class="tg tg-stories" type="checkbox" hidden />
7342
7828
 
7343
7829
 
7344
7830
 
@@ -7434,9 +7920,9 @@ shape it with Tailwind classes to mirror the content it stands in for.</div>
7434
7920
  <div class="title">
7435
7921
  <h2><span class="status-dot dot-ok"></span> Switch</h2>
7436
7922
  <div class="badges">
7437
- <label for="c-24-components-switch-props" class="badge ok as-toggle">8 prop types</label>
7923
+ <label for="c-25-components-switch-props" class="badge ok as-toggle">8 prop types</label>
7438
7924
 
7439
- <label for="c-24-components-switch-stories" class="badge ok as-toggle">7 stories</label>
7925
+ <label for="c-25-components-switch-stories" class="badge ok as-toggle">7 stories</label>
7440
7926
 
7441
7927
 
7442
7928
  </div>
@@ -7452,10 +7938,10 @@ a Checkbox for a single boolean that applies instantly, and pair it with a
7452
7938
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
7453
7939
 
7454
7940
 
7455
- <input id="c-24-components-switch-stories" class="tg tg-stories" type="checkbox" hidden />
7941
+ <input id="c-25-components-switch-stories" class="tg tg-stories" type="checkbox" hidden />
7456
7942
 
7457
7943
 
7458
- <input id="c-24-components-switch-props" class="tg tg-props" type="checkbox" hidden />
7944
+ <input id="c-25-components-switch-props" class="tg tg-props" type="checkbox" hidden />
7459
7945
 
7460
7946
  <div class="panels">
7461
7947
 
@@ -7636,9 +8122,9 @@ size?: &quot;sm&quot; | &quot;md&quot;</code></pre>
7636
8122
  <div class="title">
7637
8123
  <h2><span class="status-dot dot-ok"></span> Table.Root</h2>
7638
8124
  <div class="badges">
7639
- <label for="c-25-components-table-props" class="badge ok as-toggle">6 prop types</label>
8125
+ <label for="c-26-components-table-props" class="badge ok as-toggle">6 prop types</label>
7640
8126
 
7641
- <label for="c-25-components-table-stories" class="badge ok as-toggle">9 stories</label>
8127
+ <label for="c-26-components-table-stories" class="badge ok as-toggle">9 stories</label>
7642
8128
 
7643
8129
 
7644
8130
  </div>
@@ -7669,10 +8155,10 @@ import { Table } from &#39;@agentero/design-system/table&#39;;
7669
8155
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
7670
8156
 
7671
8157
 
7672
- <input id="c-25-components-table-stories" class="tg tg-stories" type="checkbox" hidden />
8158
+ <input id="c-26-components-table-stories" class="tg tg-stories" type="checkbox" hidden />
7673
8159
 
7674
8160
 
7675
- <input id="c-25-components-table-props" class="tg tg-props" type="checkbox" hidden />
8161
+ <input id="c-26-components-table-props" class="tg tg-props" type="checkbox" hidden />
7676
8162
 
7677
8163
  <div class="panels">
7678
8164
 
@@ -7867,9 +8353,9 @@ import { Fragment } from "react";</code></pre>
7867
8353
  <div class="title">
7868
8354
  <h2><span class="status-dot dot-ok"></span> Tabs.Root</h2>
7869
8355
  <div class="badges">
7870
- <label for="c-26-components-tabs-props" class="badge ok as-toggle">9 prop types</label>
8356
+ <label for="c-27-components-tabs-props" class="badge ok as-toggle">9 prop types</label>
7871
8357
 
7872
- <label for="c-26-components-tabs-stories" class="badge ok as-toggle">8 stories</label>
8358
+ <label for="c-27-components-tabs-stories" class="badge ok as-toggle">8 stories</label>
7873
8359
 
7874
8360
 
7875
8361
  </div>
@@ -7900,10 +8386,10 @@ import { Tabs } from &#39;@agentero/design-system/tabs&#39;;
7900
8386
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
7901
8387
 
7902
8388
 
7903
- <input id="c-26-components-tabs-stories" class="tg tg-stories" type="checkbox" hidden />
8389
+ <input id="c-27-components-tabs-stories" class="tg tg-stories" type="checkbox" hidden />
7904
8390
 
7905
8391
 
7906
- <input id="c-26-components-tabs-props" class="tg tg-props" type="checkbox" hidden />
8392
+ <input id="c-27-components-tabs-props" class="tg tg-props" type="checkbox" hidden />
7907
8393
 
7908
8394
  <div class="panels">
7909
8395
 
@@ -8124,9 +8610,9 @@ tablist role is announced.</div>
8124
8610
  <div class="title">
8125
8611
  <h2><span class="status-dot dot-ok"></span> Tag</h2>
8126
8612
  <div class="badges">
8127
- <label for="c-27-components-tag-props" class="badge ok as-toggle">8 prop types</label>
8613
+ <label for="c-28-components-tag-props" class="badge ok as-toggle">8 prop types</label>
8128
8614
 
8129
- <label for="c-27-components-tag-stories" class="badge ok as-toggle">12 stories</label>
8615
+ <label for="c-28-components-tag-stories" class="badge ok as-toggle">12 stories</label>
8130
8616
 
8131
8617
 
8132
8618
  </div>
@@ -8145,10 +8631,10 @@ it an interactive link or button, which adds the pointer cursor and hover fill.<
8145
8631
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
8146
8632
 
8147
8633
 
8148
- <input id="c-27-components-tag-stories" class="tg tg-stories" type="checkbox" hidden />
8634
+ <input id="c-28-components-tag-stories" class="tg tg-stories" type="checkbox" hidden />
8149
8635
 
8150
8636
 
8151
- <input id="c-27-components-tag-props" class="tg tg-props" type="checkbox" hidden />
8637
+ <input id="c-28-components-tag-props" class="tg tg-props" type="checkbox" hidden />
8152
8638
 
8153
8639
  <div class="panels">
8154
8640
 
@@ -8559,6 +9045,197 @@ leading + trailing icons, and icon-only.</div>
8559
9045
  </div>
8560
9046
 
8561
9047
 
9048
+ </div>
9049
+ </article>
9050
+ <article
9051
+ class="card
9052
+ no-error
9053
+ no-info
9054
+ no-story-error
9055
+ no-doc-error"
9056
+ role="listitem"
9057
+ aria-label="TextArea">
9058
+ <div class="head">
9059
+ <div class="title">
9060
+ <h2><span class="status-dot dot-ok"></span> TextArea</h2>
9061
+ <div class="badges">
9062
+ <label for="c-29-components-textarea-props" class="badge ok as-toggle">8 prop types</label>
9063
+
9064
+ <label for="c-29-components-textarea-stories" class="badge ok as-toggle">6 stories</label>
9065
+
9066
+
9067
+ </div>
9068
+ </div>
9069
+ <div class="meta" title="./src/textarea/textarea.stories.tsx">components-textarea · ./src/textarea/textarea.stories.tsx</div>
9070
+ <div>Base multi-line text control sharing Input&#39;s skin, states and sizes</div>
9071
+ <div class="hint">TextArea is the base multi-line text control, with Input&#39;s skin, sizes and
9072
+ states. It wires nothing on its own: `id`, `aria-invalid` and
9073
+ `aria-describedby` are plain props, set by whoever owns the field.</div>
9074
+ <div class="kv"><span class="chip">summary: Base multi-line text control sharing Input&#39;s skin, states and sizes</span><span class="chip">example: &lt;Label htmlFor=&quot;notes&quot;&gt;Notes&lt;/Label&gt;
9075
+ &lt;TextArea id=&quot;notes&quot; placeholder=&quot;Anything the underwriter should know&quot; /&gt;</span></div>
9076
+ </div>
9077
+
9078
+ <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
9079
+
9080
+
9081
+ <input id="c-29-components-textarea-stories" class="tg tg-stories" type="checkbox" hidden />
9082
+
9083
+
9084
+ <input id="c-29-components-textarea-props" class="tg tg-props" type="checkbox" hidden />
9085
+
9086
+ <div class="panels">
9087
+
9088
+
9089
+
9090
+ <div class="panel panel-props">
9091
+ <div class="note ok">
9092
+ <div class="row">
9093
+ <span class="ex-name">Prop types <small>(react-component-meta)</small></span>
9094
+ <span class="badge ok">8 prop types</span>
9095
+ </div>
9096
+ <pre><code>Component: src/textarea/textarea.tsx::TextArea</code></pre>
9097
+ <pre><code>Props:</code></pre>
9098
+ <pre><code>/**
9099
+ * Indicates the entered value does not conform to the format expected by the application.
9100
+ * Drives the destructive border and is what assistive technology announces.
9101
+ */
9102
+ aria-invalid?: boolean | &quot;true&quot; | &quot;false&quot; | &quot;grammar&quot; | &quot;spelling&quot; | undefined
9103
+
9104
+ /**
9105
+ * Blocks interaction and drops the value from the submission. Use `readOnly`
9106
+ * when the user still needs to read or copy it.
9107
+ */
9108
+ disabled?: boolean
9109
+
9110
+ /**
9111
+ * Caps the value in UTF-16 code units: typing stops there and a paste is cut.
9112
+ */
9113
+ maxLength?: number
9114
+
9115
+ /**
9116
+ * Hint shown while empty; never a substitute for a label.
9117
+ */
9118
+ placeholder?: string
9119
+
9120
+ /**
9121
+ * Focusable, copyable and submitted, but not editable.
9122
+ */
9123
+ readOnly?: boolean
9124
+
9125
+ /**
9126
+ * Marks the control required for both the browser and assistive technology.
9127
+ */
9128
+ required?: boolean
9129
+
9130
+ /**
9131
+ * Rows visible at rest when three are not enough.
9132
+ */
9133
+ rows?: number
9134
+
9135
+ /**
9136
+ * Defaults to `&#39;md&#39;`. The first row measures one Input of the same size and
9137
+ * three rows show at rest: `sm` 76px, `md` 84px, `lg` 96px (`lg` also raises
9138
+ * the text to `base` and the radius to `lg`).
9139
+ */
9140
+ size?: &quot;sm&quot; | &quot;md&quot; | &quot;lg&quot;</code></pre>
9141
+ </div>
9142
+ </div>
9143
+
9144
+ <div class="panel panel-stories">
9145
+
9146
+
9147
+
9148
+ <div class="note ok">
9149
+ <div class="row">
9150
+ <span class="ex-name">Imports</span>
9151
+ </div>
9152
+ <pre><code>import { TextArea } from "@agentero/design-system";</code></pre>
9153
+ </div>
9154
+
9155
+
9156
+ <div class="note ok">
9157
+ <div class="row">
9158
+ <span class="ex-name">Default</span>
9159
+ <span class="badge ok">story ok</span>
9160
+ </div>
9161
+ <div>Default standalone text area</div>
9162
+ <div class="hint">The default control at `md`: three rows at rest and a vertical resize handle
9163
+ the user can drag to make it taller.</div>
9164
+ <pre><code>const Default = () =&gt; &lt;TextArea placeholder=&quot;Anything the underwriter should know&quot; aria-label=&quot;Notes&quot; /&gt;;</code></pre>
9165
+ </div>
9166
+ <div class="note ok">
9167
+ <div class="row">
9168
+ <span class="ex-name">All Sizes</span>
9169
+ <span class="badge ok">story ok</span>
9170
+ </div>
9171
+ <div>The three sizes, three rows tall at rest</div>
9172
+ <div class="hint">The three sizes mirror Input&#39;s: the first row measures one Input of the same
9173
+ size and the minimum height shows three rows.</div>
9174
+ <pre><code>const AllSizes = () =&gt; &lt;div style={{ display: &#39;grid&#39;, gap: &#39;1rem&#39; }}&gt;
9175
+ &lt;TextArea size=&quot;sm&quot; aria-label=&quot;Small&quot; placeholder=&quot;sm — 76px, three rows&quot; /&gt;
9176
+ &lt;TextArea size=&quot;md&quot; aria-label=&quot;Medium&quot; placeholder=&quot;md — 84px, three rows&quot; /&gt;
9177
+ &lt;TextArea size=&quot;lg&quot; aria-label=&quot;Large&quot; placeholder=&quot;lg — 96px, three rows&quot; /&gt;
9178
+ &lt;/div&gt;;</code></pre>
9179
+ </div>
9180
+ <div class="note ok">
9181
+ <div class="row">
9182
+ <span class="ex-name">Rows</span>
9183
+ <span class="badge ok">story ok</span>
9184
+ </div>
9185
+ <div>Taller initial height through the native rows attribute</div>
9186
+ <div class="hint">`rows` sets a taller initial height when three rows are not enough.</div>
9187
+ <pre><code>const Rows = () =&gt; &lt;TextArea
9188
+ placeholder=&quot;Six rows visible before scrolling&quot;
9189
+ aria-label=&quot;Notes&quot;
9190
+ rows={6} /&gt;;</code></pre>
9191
+ </div>
9192
+ <div class="note ok">
9193
+ <div class="row">
9194
+ <span class="ex-name">Invalid</span>
9195
+ <span class="badge ok">story ok</span>
9196
+ </div>
9197
+ <div>Invalid state driven by aria-invalid</div>
9198
+ <div class="hint">The invalid treatment comes purely from `aria-invalid`; point
9199
+ `aria-describedby` at the message so it is read with the control.</div>
9200
+ <pre><code>const Invalid = () =&gt; &lt;div style={{ display: &#39;grid&#39;, gap: &#39;0.25rem&#39; }}&gt;
9201
+ &lt;TextArea
9202
+ placeholder=&quot;Anything the underwriter should know&quot;
9203
+ aria-label=&quot;Reason&quot;
9204
+ aria-invalid
9205
+ aria-describedby=&quot;reason-error&quot;
9206
+ defaultValue=&quot;n/a&quot; /&gt;
9207
+ &lt;span id=&quot;reason-error&quot;&gt;Tell us why you are cancelling.&lt;/span&gt;
9208
+ &lt;/div&gt;;</code></pre>
9209
+ </div>
9210
+ <div class="note ok">
9211
+ <div class="row">
9212
+ <span class="ex-name">Disabled</span>
9213
+ <span class="badge ok">story ok</span>
9214
+ </div>
9215
+ <div>Disabled state</div>
9216
+
9217
+ <pre><code>const Disabled = () =&gt; &lt;TextArea
9218
+ placeholder=&quot;Anything the underwriter should know&quot;
9219
+ aria-label=&quot;Notes&quot;
9220
+ disabled
9221
+ defaultValue=&quot;Cannot be edited&quot; /&gt;;</code></pre>
9222
+ </div>
9223
+ <div class="note ok">
9224
+ <div class="row">
9225
+ <span class="ex-name">Read Only</span>
9226
+ <span class="badge ok">story ok</span>
9227
+ </div>
9228
+ <div>Read-only value that stays focusable and copyable</div>
9229
+
9230
+ <pre><code>const ReadOnly = () =&gt; &lt;TextArea
9231
+ placeholder=&quot;Anything the underwriter should know&quot;
9232
+ aria-label=&quot;Notes&quot;
9233
+ readOnly
9234
+ defaultValue=&quot;Copy me, but do not change me&quot; /&gt;;</code></pre>
9235
+ </div>
9236
+ </div>
9237
+
9238
+
8562
9239
  </div>
8563
9240
  </article>
8564
9241
  <article
@@ -8573,9 +9250,9 @@ leading + trailing icons, and icon-only.</div>
8573
9250
  <div class="title">
8574
9251
  <h2><span class="status-dot dot-ok"></span> Toast</h2>
8575
9252
  <div class="badges">
8576
- <label for="c-28-components-toast-props" class="badge ok as-toggle">11 prop types</label>
9253
+ <label for="c-30-components-toast-props" class="badge ok as-toggle">11 prop types</label>
8577
9254
 
8578
- <label for="c-28-components-toast-stories" class="badge ok as-toggle">11 stories</label>
9255
+ <label for="c-30-components-toast-stories" class="badge ok as-toggle">11 stories</label>
8579
9256
 
8580
9257
 
8581
9258
  </div>
@@ -8594,10 +9271,10 @@ common feedback patterns.</div>
8594
9271
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
8595
9272
 
8596
9273
 
8597
- <input id="c-28-components-toast-stories" class="tg tg-stories" type="checkbox" hidden />
9274
+ <input id="c-30-components-toast-stories" class="tg tg-stories" type="checkbox" hidden />
8598
9275
 
8599
9276
 
8600
- <input id="c-28-components-toast-props" class="tg tg-props" type="checkbox" hidden />
9277
+ <input id="c-30-components-toast-props" class="tg tg-props" type="checkbox" hidden />
8601
9278
 
8602
9279
  <div class="panels">
8603
9280
 
@@ -9026,9 +9703,9 @@ action (e.g., a sync icon for a sync-in-progress toast).</div>
9026
9703
  <div class="title">
9027
9704
  <h2><span class="status-dot dot-ok"></span> Tooltip</h2>
9028
9705
  <div class="badges">
9029
- <label for="c-29-components-tooltip-props" class="badge ok as-toggle">12 prop types</label>
9706
+ <label for="c-31-components-tooltip-props" class="badge ok as-toggle">12 prop types</label>
9030
9707
 
9031
- <label for="c-29-components-tooltip-stories" class="badge ok as-toggle">5 stories</label>
9708
+ <label for="c-31-components-tooltip-stories" class="badge ok as-toggle">5 stories</label>
9032
9709
 
9033
9710
 
9034
9711
  </div>
@@ -9047,10 +9724,10 @@ on hover or focus.</div>
9047
9724
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
9048
9725
 
9049
9726
 
9050
- <input id="c-29-components-tooltip-stories" class="tg tg-stories" type="checkbox" hidden />
9727
+ <input id="c-31-components-tooltip-stories" class="tg tg-stories" type="checkbox" hidden />
9051
9728
 
9052
9729
 
9053
- <input id="c-29-components-tooltip-props" class="tg tg-props" type="checkbox" hidden />
9730
+ <input id="c-31-components-tooltip-props" class="tg tg-props" type="checkbox" hidden />
9054
9731
 
9055
9732
  <div class="panels">
9056
9733
 
@@ -9108,7 +9785,7 @@ open?: boolean
9108
9785
  /**
9109
9786
  * Preferred side of the trigger; flips on collision. Defaults to `&#39;top&#39;`.
9110
9787
  */
9111
- side?: &quot;right&quot; | &quot;top&quot; | &quot;bottom&quot; | &quot;left&quot; = &#39;top&#39;
9788
+ side?: &quot;top&quot; | &quot;bottom&quot; | &quot;left&quot; | &quot;right&quot; = &#39;top&#39;
9112
9789
 
9113
9790
  /**
9114
9791
  * Distance in pixels between the tooltip and its trigger. Defaults to `4`.
@@ -9222,9 +9899,9 @@ sideOffset?: number = 4</code></pre>
9222
9899
  <div class="title">
9223
9900
  <h2><span class="status-dot dot-ok"></span> ValidationList</h2>
9224
9901
  <div class="badges">
9225
- <label for="c-30-components-validationlist-props" class="badge ok as-toggle">2 prop types</label>
9902
+ <label for="c-32-components-validationlist-props" class="badge ok as-toggle">2 prop types</label>
9226
9903
 
9227
- <label for="c-30-components-validationlist-stories" class="badge ok as-toggle">4 stories</label>
9904
+ <label for="c-32-components-validationlist-stories" class="badge ok as-toggle">4 stories</label>
9228
9905
 
9229
9906
 
9230
9907
  </div>
@@ -9245,10 +9922,10 @@ your form validation; it does not own the input or block submission.</div>
9245
9922
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
9246
9923
 
9247
9924
 
9248
- <input id="c-30-components-validationlist-stories" class="tg tg-stories" type="checkbox" hidden />
9925
+ <input id="c-32-components-validationlist-stories" class="tg tg-stories" type="checkbox" hidden />
9249
9926
 
9250
9927
 
9251
- <input id="c-30-components-validationlist-props" class="tg tg-props" type="checkbox" hidden />
9928
+ <input id="c-32-components-validationlist-props" class="tg tg-props" type="checkbox" hidden />
9252
9929
 
9253
9930
  <div class="panels">
9254
9931