@agentero/design-system 0.33.1 → 0.34.1
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.
- package/mcp/manifests/components.html +321 -97
- package/mcp/manifests/components.json +172 -15
- package/package.json +5 -1
- package/src/combobox/combobox.d.ts +12 -7
- package/src/combobox/combobox.js +79 -62
- package/src/input-search/icons.d.ts +16 -0
- package/src/input-search/icons.js +23 -0
- package/src/input-search/index.d.ts +2 -0
- package/src/input-search/index.js +2 -0
- package/src/input-search/input-search.d.ts +96 -0
- package/src/input-search/input-search.js +53 -0
- package/src/label/label.d.ts +28 -16
- package/src/label/label.js +22 -22
|
@@ -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">
|
|
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">36 components ok</span><span class="filter-pill ok" aria-disabled="true">294 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>
|
|
597
|
+
Using <code>react-component-meta</code>. Generation took <strong>5.0s</strong>.
|
|
598
598
|
</div>
|
|
599
599
|
<h2 class="section-title">Components</h2>
|
|
600
600
|
<div class="grid" role="list">
|
|
@@ -3170,8 +3170,8 @@ import { Suspense } from "react";</code></pre>
|
|
|
3170
3170
|
<div>Search field with a magnifier and clear button over an in-memory list</div>
|
|
3171
3171
|
<div class="hint">The common case: options are already in memory and Base UI filters them against
|
|
3172
3172
|
what you type. Selecting a row fills the input and closes the list. The field is
|
|
3173
|
-
a search out of the box — a magnifier in front, a clear button once
|
|
3174
|
-
|
|
3173
|
+
a search out of the box — a magnifier in front, a clear button once there is
|
|
3174
|
+
text — and the list hangs from the whole field. Clearing drops the picked option.</div>
|
|
3175
3175
|
<pre><code>const Default = () => (
|
|
3176
3176
|
<Combobox.Root items={STATES}>
|
|
3177
3177
|
<Combobox.Input placeholder="Search states" aria-label="Search states" />
|
|
@@ -3339,11 +3339,19 @@ here as tags.</div>
|
|
|
3339
3339
|
|
|
3340
3340
|
<div class="hint">Options fetched as you type, the way the apps load data: the rows are a component
|
|
3341
3341
|
that suspends on the request, so a `Suspense` boundary inside `Content` shows
|
|
3342
|
-
placeholder rows until
|
|
3343
|
-
|
|
3344
|
-
|
|
3342
|
+
placeholder rows until the first results land. The rows read a deferred copy of
|
|
3343
|
+
the query, so a new search keeps the previous rows on screen while it loads and
|
|
3344
|
+
`Content` is marked busy until they are replaced; the placeholders never come
|
|
3345
|
+
back. Nothing tracks `loading` by hand, and reading the data by query is what
|
|
3346
|
+
makes out-of-order responses harmless. With react-query, drop a
|
|
3347
|
+
`useSuspenseQuery` where `use()` is, or use `placeholderData: keepPreviousData`
|
|
3348
|
+
with a plain `useQuery` for the same behaviour.</div>
|
|
3345
3349
|
<pre><code>const AsyncSearch = () => {
|
|
3346
3350
|
const [query, setQuery] = useState('');
|
|
3351
|
+
// The rows read the deferred query: while the new one suspends, React keeps rendering the
|
|
3352
|
+
// old rows instead of falling back to the placeholders.
|
|
3353
|
+
const deferredQuery = useDeferredValue(query);
|
|
3354
|
+
const isStale = query !== deferredQuery;
|
|
3347
3355
|
|
|
3348
3356
|
return (
|
|
3349
3357
|
// No `items` and `filter={null}`: the server did the filtering, the child renders what came
|
|
@@ -3357,9 +3365,9 @@ out-of-order responses harmless. Drop a `useSuspenseQuery` where `use()` is.</di
|
|
|
3357
3365
|
if (reason !== 'item-press') setQuery(value);
|
|
3358
3366
|
}}>
|
|
3359
3367
|
<Combobox.Input placeholder="Search agencies" aria-label="Search agencies" />
|
|
3360
|
-
<Combobox.Content>
|
|
3368
|
+
<Combobox.Content aria-busy={isStale || undefined}>
|
|
3361
3369
|
<Suspense fallback={<SkeletonRows />}>
|
|
3362
|
-
<AgencyItems query={
|
|
3370
|
+
<AgencyItems query={deferredQuery} />
|
|
3363
3371
|
</Suspense>
|
|
3364
3372
|
</Combobox.Content>
|
|
3365
3373
|
</Combobox.Root>
|
|
@@ -3374,8 +3382,10 @@ out-of-order responses harmless. Drop a `useSuspenseQuery` where `use()` is.</di
|
|
|
3374
3382
|
<div>API search that waits for two characters, with loading status</div>
|
|
3375
3383
|
<div class="hint">The same search without Suspense, for a consumer that gets a `loading` flag from
|
|
3376
3384
|
its data layer instead: `filter={null}`, the rows arrive through `filteredItems`,
|
|
3377
|
-
`Content` is marked busy and `Status` announces the wait.
|
|
3378
|
-
|
|
3385
|
+
`Content` is marked busy and `Status` announces the wait. Placeholder rows show
|
|
3386
|
+
only while there is nothing to show yet; after that, the previous rows stay
|
|
3387
|
+
until the new ones replace them. A request that is no longer the latest is
|
|
3388
|
+
dropped.
|
|
3379
3389
|
|
|
3380
3390
|
`minInputLength` keeps the list shut until two characters are typed — focusing
|
|
3381
3391
|
the field opens nothing, and deleting back under the minimum closes it — and
|
|
@@ -3394,9 +3404,7 @@ no request goes out for a shorter query either.</div>
|
|
|
3394
3404
|
return;
|
|
3395
3405
|
}
|
|
3396
3406
|
|
|
3397
|
-
// The previous rows
|
|
3398
|
-
// must not sit under the loading state.
|
|
3399
|
-
setResults([]);
|
|
3407
|
+
// The previous rows stay through the wait, marked busy, rather than blinking out and back.
|
|
3400
3408
|
setIsLoading(true);
|
|
3401
3409
|
const agencies = await searchAgencies(query);
|
|
3402
3410
|
if (request !== latestRequest.current) return;
|
|
@@ -3421,7 +3429,7 @@ no request goes out for a shorter query either.</div>
|
|
|
3421
3429
|
<Combobox.Status className="sr-only">
|
|
3422
3430
|
{isLoading ? 'Searching…' : undefined}
|
|
3423
3431
|
</Combobox.Status>
|
|
3424
|
-
{isLoading && <SkeletonRows />}
|
|
3432
|
+
{isLoading && results.length === 0 && <SkeletonRows />}
|
|
3425
3433
|
<Combobox.Empty>{isLoading ? undefined : 'No agencies found'}</Combobox.Empty>
|
|
3426
3434
|
<Combobox.List>
|
|
3427
3435
|
{(agency: Agency) => (
|
|
@@ -7176,7 +7184,7 @@ they cannot change.</div>
|
|
|
7176
7184
|
<div class="badges">
|
|
7177
7185
|
|
|
7178
7186
|
|
|
7179
|
-
<label for="c-18-components-inputgroup-stories" class="badge ok as-toggle">
|
|
7187
|
+
<label for="c-18-components-inputgroup-stories" class="badge ok as-toggle">12 stories</label>
|
|
7180
7188
|
|
|
7181
7189
|
|
|
7182
7190
|
</div>
|
|
@@ -7223,7 +7231,6 @@ hands its state to the frame through `:has()`, so focus, `disabled`,
|
|
|
7223
7231
|
DropdownMenu,
|
|
7224
7232
|
Field,
|
|
7225
7233
|
FieldText,
|
|
7226
|
-
IconCancel,
|
|
7227
7234
|
IconKeyboardArrowDown,
|
|
7228
7235
|
IconSearch,
|
|
7229
7236
|
Input,
|
|
@@ -7242,7 +7249,9 @@ hands its state to the frame through `:has()`, so focus, `disabled`,
|
|
|
7242
7249
|
<div>Leading icon addon with the frame drawing the focus ring</div>
|
|
7243
7250
|
<div class="hint">A search field: the icon leads and the input takes the rest of the frame.
|
|
7244
7251
|
Pressing the icon focuses the input, and the frame — not the input — draws the
|
|
7245
|
-
focus ring, so the two never show a double border
|
|
7252
|
+
focus ring, so the two never show a double border. A search field with a
|
|
7253
|
+
clear button and a loading state is
|
|
7254
|
+
[InputSearch](?path=/docs/components-inputsearch--docs), built on this frame.</div>
|
|
7246
7255
|
<pre><code>const Default = () => (
|
|
7247
7256
|
<InputGroup.Root>
|
|
7248
7257
|
<InputGroup.Addon>
|
|
@@ -7413,25 +7422,6 @@ describes it with no ids written by hand. The frame is not in the way.</div>
|
|
|
7413
7422
|
</InputGroup.Root>
|
|
7414
7423
|
<Field.Description>Shown on your public profile.</Field.Description>
|
|
7415
7424
|
</FieldText>
|
|
7416
|
-
);</code></pre>
|
|
7417
|
-
</div>
|
|
7418
|
-
<div class="note ok">
|
|
7419
|
-
<div class="row">
|
|
7420
|
-
<span class="ex-name">Search Field</span>
|
|
7421
|
-
<span class="badge ok">story ok</span>
|
|
7422
|
-
</div>
|
|
7423
|
-
|
|
7424
|
-
|
|
7425
|
-
<pre><code>const SearchField = () => (
|
|
7426
|
-
<form onSubmit={handleSearchSubmit}>
|
|
7427
|
-
<FieldStates
|
|
7428
|
-
label="Agency"
|
|
7429
|
-
tooltip="Search by agency name or NPN."
|
|
7430
|
-
required
|
|
7431
|
-
error="Pick an agency from the list.">
|
|
7432
|
-
<SearchInput />
|
|
7433
|
-
</FieldStates>
|
|
7434
|
-
</form>
|
|
7435
7425
|
);</code></pre>
|
|
7436
7426
|
</div>
|
|
7437
7427
|
<div class="note ok">
|
|
@@ -7655,6 +7645,236 @@ the field through the frame. A disabled field removes the toggle too.</div>
|
|
|
7655
7645
|
</div>
|
|
7656
7646
|
|
|
7657
7647
|
|
|
7648
|
+
</div>
|
|
7649
|
+
</article>
|
|
7650
|
+
<article
|
|
7651
|
+
class="card
|
|
7652
|
+
no-error
|
|
7653
|
+
no-info
|
|
7654
|
+
no-story-error
|
|
7655
|
+
no-doc-error"
|
|
7656
|
+
role="listitem"
|
|
7657
|
+
aria-label="InputSearch">
|
|
7658
|
+
<div class="head">
|
|
7659
|
+
<div class="title">
|
|
7660
|
+
<h2><span class="status-dot dot-ok"></span> InputSearch</h2>
|
|
7661
|
+
<div class="badges">
|
|
7662
|
+
<label for="c-20-components-inputsearch-props" class="badge ok as-toggle">3 prop types</label>
|
|
7663
|
+
|
|
7664
|
+
<label for="c-20-components-inputsearch-stories" class="badge ok as-toggle">7 stories</label>
|
|
7665
|
+
|
|
7666
|
+
|
|
7667
|
+
</div>
|
|
7668
|
+
</div>
|
|
7669
|
+
<div class="meta" title="./src/input-search/input-search.stories.tsx">components-inputsearch · ./src/input-search/input-search.stories.tsx</div>
|
|
7670
|
+
<div>Search input with a leading icon, a clear button and a loading slot</div>
|
|
7671
|
+
<div class="hint">InputSearch is a search field with a magnifier in front and a clear button
|
|
7672
|
+
once there is text. It is an `Input` of `type="search"` inside an
|
|
7673
|
+
`InputGroup`: `className` styles the frame and every other prop reaches the
|
|
7674
|
+
`<input>`. Clearing reports a real change event with an empty value, and
|
|
7675
|
+
`isLoading` swaps the clear button for a spinner.</div>
|
|
7676
|
+
<div class="kv"><span class="chip">summary: Search input with a leading icon, a clear button and a loading slot</span><span class="chip">dataAttribute: {string} data-slot - Always set to "input-search" on the frame</span><span class="chip">example: <InputSearch
|
|
7677
|
+
aria-label="Search agencies"
|
|
7678
|
+
value={query}
|
|
7679
|
+
onChange={event => setQuery(event.target.value)}
|
|
7680
|
+
isLoading={isFetching}
|
|
7681
|
+
/></span></div>
|
|
7682
|
+
</div>
|
|
7683
|
+
|
|
7684
|
+
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
7685
|
+
|
|
7686
|
+
|
|
7687
|
+
<input id="c-20-components-inputsearch-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
7688
|
+
|
|
7689
|
+
|
|
7690
|
+
<input id="c-20-components-inputsearch-props" class="tg tg-props" type="checkbox" hidden />
|
|
7691
|
+
|
|
7692
|
+
<div class="panels">
|
|
7693
|
+
|
|
7694
|
+
|
|
7695
|
+
|
|
7696
|
+
<div class="panel panel-props">
|
|
7697
|
+
<div class="note ok">
|
|
7698
|
+
<div class="row">
|
|
7699
|
+
<span class="ex-name">Prop types <small>(react-component-meta)</small></span>
|
|
7700
|
+
<span class="badge ok">3 prop types</span>
|
|
7701
|
+
</div>
|
|
7702
|
+
<pre><code>Component: src/input-search/input-search.tsx::InputSearch</code></pre>
|
|
7703
|
+
<pre><code>Props:</code></pre>
|
|
7704
|
+
<pre><code>/**
|
|
7705
|
+
* Accessible name of the clear button. Defaults to `'Clear search'`; name it
|
|
7706
|
+
* after what is searched (`'Clear agency search'`) when a page carries
|
|
7707
|
+
* several search fields.
|
|
7708
|
+
*/
|
|
7709
|
+
clearLabel?: string = 'Clear search'
|
|
7710
|
+
|
|
7711
|
+
/**
|
|
7712
|
+
* Shows a spinner at the end of the frame, in place of the clear button,
|
|
7713
|
+
* while the results for the current text are on their way. Defaults to
|
|
7714
|
+
* `false`.
|
|
7715
|
+
*/
|
|
7716
|
+
isLoading?: boolean = false
|
|
7717
|
+
|
|
7718
|
+
/**
|
|
7719
|
+
* Control height. Defaults to `'md'`.
|
|
7720
|
+
* - `sm` (32px) — dense layouts where vertical space is tight.
|
|
7721
|
+
* - `md` (40px) — standard form density.
|
|
7722
|
+
* - `lg` (48px) — low-density forms and larger touch targets. Also raises
|
|
7723
|
+
* the text to `base` and the corner radius to `lg`.
|
|
7724
|
+
*/
|
|
7725
|
+
size?: "sm" | "md" | "lg"</code></pre>
|
|
7726
|
+
</div>
|
|
7727
|
+
</div>
|
|
7728
|
+
|
|
7729
|
+
<div class="panel panel-stories">
|
|
7730
|
+
|
|
7731
|
+
|
|
7732
|
+
|
|
7733
|
+
<div class="note ok">
|
|
7734
|
+
<div class="row">
|
|
7735
|
+
<span class="ex-name">Imports</span>
|
|
7736
|
+
</div>
|
|
7737
|
+
<pre><code>import { Field, FieldText, InputSearch, Label } from "@agentero/design-system";</code></pre>
|
|
7738
|
+
</div>
|
|
7739
|
+
|
|
7740
|
+
|
|
7741
|
+
<div class="note ok">
|
|
7742
|
+
<div class="row">
|
|
7743
|
+
<span class="ex-name">Default</span>
|
|
7744
|
+
<span class="badge ok">story ok</span>
|
|
7745
|
+
</div>
|
|
7746
|
+
<div>Controlled search with a clear button that empties the query</div>
|
|
7747
|
+
<div class="hint">A controlled search. The clear button appears once there is text; pressing
|
|
7748
|
+
it calls `onChange` with an empty `event.target.value`, so the state that
|
|
7749
|
+
owns the query empties too, and focus goes back to the input. The browser's
|
|
7750
|
+
own cancel button is hidden.</div>
|
|
7751
|
+
<pre><code>const Default = () => {
|
|
7752
|
+
const [query, setQuery] = useState('');
|
|
7753
|
+
|
|
7754
|
+
return (
|
|
7755
|
+
<InputSearch
|
|
7756
|
+
aria-label="Search agencies"
|
|
7757
|
+
value={query}
|
|
7758
|
+
onChange={event => {
|
|
7759
|
+
setQuery(event.target.value);
|
|
7760
|
+
args.onChange?.(event);
|
|
7761
|
+
}} />
|
|
7762
|
+
);
|
|
7763
|
+
};</code></pre>
|
|
7764
|
+
</div>
|
|
7765
|
+
<div class="note ok">
|
|
7766
|
+
<div class="row">
|
|
7767
|
+
<span class="ex-name">Loading</span>
|
|
7768
|
+
<span class="badge ok">story ok</span>
|
|
7769
|
+
</div>
|
|
7770
|
+
<div>Spinner in place of the clear button while results load</div>
|
|
7771
|
+
<div class="hint">While `isLoading` is set a spinner takes the clear button's place, even with
|
|
7772
|
+
text in the field.</div>
|
|
7773
|
+
<pre><code>const Loading = () => <InputSearch
|
|
7774
|
+
aria-label="Search agencies"
|
|
7775
|
+
onChange={fn((event: ChangeEvent<HTMLInputElement>) => event.target.value)}
|
|
7776
|
+
isLoading
|
|
7777
|
+
defaultValue="Acme" />;</code></pre>
|
|
7778
|
+
</div>
|
|
7779
|
+
<div class="note ok">
|
|
7780
|
+
<div class="row">
|
|
7781
|
+
<span class="ex-name">Uncontrolled</span>
|
|
7782
|
+
<span class="badge ok">story ok</span>
|
|
7783
|
+
</div>
|
|
7784
|
+
<div>Uncontrolled search starting from a default value</div>
|
|
7785
|
+
<div class="hint">An uncontrolled search with a `defaultValue`. The clear button follows what
|
|
7786
|
+
is in the field, and clearing still calls `onChange` with an empty value.</div>
|
|
7787
|
+
<pre><code>const Uncontrolled = () => <InputSearch
|
|
7788
|
+
aria-label="Search agencies"
|
|
7789
|
+
onChange={fn((event: ChangeEvent<HTMLInputElement>) => event.target.value)}
|
|
7790
|
+
defaultValue="Acme Insurance" />;</code></pre>
|
|
7791
|
+
</div>
|
|
7792
|
+
<div class="note ok">
|
|
7793
|
+
<div class="row">
|
|
7794
|
+
<span class="ex-name">Disabled</span>
|
|
7795
|
+
<span class="badge ok">story ok</span>
|
|
7796
|
+
</div>
|
|
7797
|
+
<div>Disabled search with the clear button removed</div>
|
|
7798
|
+
<div class="hint">A disabled search has no clear button, whether `disabled` is set on the
|
|
7799
|
+
input itself or comes from a `<fieldset disabled>` around it.</div>
|
|
7800
|
+
<pre><code>const Disabled = () => <div style={{ display: 'grid', gap: '1rem' }}>
|
|
7801
|
+
<InputSearch
|
|
7802
|
+
aria-label="Search agencies"
|
|
7803
|
+
onChange={fn((event: ChangeEvent<HTMLInputElement>) => event.target.value)}
|
|
7804
|
+
disabled
|
|
7805
|
+
defaultValue="Acme" />
|
|
7806
|
+
<fieldset disabled style={{ border: 0, margin: 0, padding: 0 }}>
|
|
7807
|
+
<InputSearch
|
|
7808
|
+
onChange={fn((event: ChangeEvent<HTMLInputElement>) => event.target.value)}
|
|
7809
|
+
aria-label="Search carriers"
|
|
7810
|
+
defaultValue="Travelers" />
|
|
7811
|
+
</fieldset>
|
|
7812
|
+
</div>;</code></pre>
|
|
7813
|
+
</div>
|
|
7814
|
+
<div class="note ok">
|
|
7815
|
+
<div class="row">
|
|
7816
|
+
<span class="ex-name">All Sizes</span>
|
|
7817
|
+
<span class="badge ok">story ok</span>
|
|
7818
|
+
</div>
|
|
7819
|
+
<div>The three sizes side by side</div>
|
|
7820
|
+
<div class="hint">The three sizes match Input's: the frame is 32, 40 or 48px tall.</div>
|
|
7821
|
+
<pre><code>const AllSizes = () => <div style={{ display: 'grid', gap: '1rem' }}>
|
|
7822
|
+
<InputSearch
|
|
7823
|
+
onChange={fn((event: ChangeEvent<HTMLInputElement>) => event.target.value)}
|
|
7824
|
+
size="sm"
|
|
7825
|
+
aria-label="Small"
|
|
7826
|
+
defaultValue="Acme" />
|
|
7827
|
+
<InputSearch
|
|
7828
|
+
onChange={fn((event: ChangeEvent<HTMLInputElement>) => event.target.value)}
|
|
7829
|
+
size="md"
|
|
7830
|
+
aria-label="Medium"
|
|
7831
|
+
defaultValue="Acme" />
|
|
7832
|
+
<InputSearch
|
|
7833
|
+
onChange={fn((event: ChangeEvent<HTMLInputElement>) => event.target.value)}
|
|
7834
|
+
size="lg"
|
|
7835
|
+
aria-label="Large"
|
|
7836
|
+
defaultValue="Acme" />
|
|
7837
|
+
</div>;</code></pre>
|
|
7838
|
+
</div>
|
|
7839
|
+
<div class="note ok">
|
|
7840
|
+
<div class="row">
|
|
7841
|
+
<span class="ex-name">Inside Field Text</span>
|
|
7842
|
+
<span class="badge ok">story ok</span>
|
|
7843
|
+
</div>
|
|
7844
|
+
<div>Label and disabled state reaching the input through the frame</div>
|
|
7845
|
+
<div class="hint">Inside a `FieldText` the input takes its label, description and states from
|
|
7846
|
+
the field through the frame. A disabled field removes the clear button too.</div>
|
|
7847
|
+
<pre><code>const InsideFieldText = () => (
|
|
7848
|
+
<div style={{ display: 'grid', gap: '1.5rem' }}>
|
|
7849
|
+
<FieldText>
|
|
7850
|
+
<Label>Agency</Label>
|
|
7851
|
+
<InputSearch defaultValue="Acme" />
|
|
7852
|
+
<Field.Description>Search by agency name or NPN.</Field.Description>
|
|
7853
|
+
</FieldText>
|
|
7854
|
+
<FieldText disabled>
|
|
7855
|
+
<Label>Carrier</Label>
|
|
7856
|
+
<InputSearch defaultValue="Travelers" />
|
|
7857
|
+
</FieldText>
|
|
7858
|
+
</div>
|
|
7859
|
+
);</code></pre>
|
|
7860
|
+
</div>
|
|
7861
|
+
<div class="note ok">
|
|
7862
|
+
<div class="row">
|
|
7863
|
+
<span class="ex-name">Clear Label</span>
|
|
7864
|
+
<span class="badge ok">story ok</span>
|
|
7865
|
+
</div>
|
|
7866
|
+
<div>Clear button named after what the field searches</div>
|
|
7867
|
+
<div class="hint">`clearLabel` names the clear button after what is searched, so a page with
|
|
7868
|
+
several search fields does not read "Clear search" twice.</div>
|
|
7869
|
+
<pre><code>const ClearLabel = () => <InputSearch
|
|
7870
|
+
aria-label="Search agencies"
|
|
7871
|
+
onChange={fn((event: ChangeEvent<HTMLInputElement>) => event.target.value)}
|
|
7872
|
+
defaultValue="Acme"
|
|
7873
|
+
clearLabel="Clear agency search" />;</code></pre>
|
|
7874
|
+
</div>
|
|
7875
|
+
</div>
|
|
7876
|
+
|
|
7877
|
+
|
|
7658
7878
|
</div>
|
|
7659
7879
|
</article>
|
|
7660
7880
|
<article
|
|
@@ -7669,9 +7889,9 @@ the field through the frame. A disabled field removes the toggle too.</div>
|
|
|
7669
7889
|
<div class="title">
|
|
7670
7890
|
<h2><span class="status-dot dot-ok"></span> Label</h2>
|
|
7671
7891
|
<div class="badges">
|
|
7672
|
-
<label for="c-
|
|
7892
|
+
<label for="c-21-components-label-props" class="badge ok as-toggle">3 prop types</label>
|
|
7673
7893
|
|
|
7674
|
-
<label for="c-
|
|
7894
|
+
<label for="c-21-components-label-stories" class="badge ok as-toggle">5 stories</label>
|
|
7675
7895
|
|
|
7676
7896
|
|
|
7677
7897
|
</div>
|
|
@@ -7691,10 +7911,10 @@ still has to carry `required` / `aria-required`.</div>
|
|
|
7691
7911
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
7692
7912
|
|
|
7693
7913
|
|
|
7694
|
-
<input id="c-
|
|
7914
|
+
<input id="c-21-components-label-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
7695
7915
|
|
|
7696
7916
|
|
|
7697
|
-
<input id="c-
|
|
7917
|
+
<input id="c-21-components-label-props" class="tg tg-props" type="checkbox" hidden />
|
|
7698
7918
|
|
|
7699
7919
|
<div class="panels">
|
|
7700
7920
|
|
|
@@ -7752,8 +7972,12 @@ required?: boolean = false</code></pre>
|
|
|
7752
7972
|
<span class="badge ok">story ok</span>
|
|
7753
7973
|
</div>
|
|
7754
7974
|
<div>Optional field with a muted suffix</div>
|
|
7755
|
-
<div class="hint">Appends a muted " (optional)" suffix for fields that can be left blank
|
|
7756
|
-
|
|
7975
|
+
<div class="hint">Appends a muted " (optional)" suffix for fields that can be left blank. The
|
|
7976
|
+
suffix is real text, so it is part of the control's accessible name.</div>
|
|
7977
|
+
<pre><code>const Optional = () => <>
|
|
7978
|
+
<Label optional htmlFor="phone">Phone number</Label>
|
|
7979
|
+
<input id="phone" type="tel" className={inputRecipe()} />
|
|
7980
|
+
</>;</code></pre>
|
|
7757
7981
|
</div>
|
|
7758
7982
|
<div class="note ok">
|
|
7759
7983
|
<div class="row">
|
|
@@ -7814,9 +8038,9 @@ field's control with no `htmlFor`. An explicit `htmlFor` still wins.</div>
|
|
|
7814
8038
|
<div class="title">
|
|
7815
8039
|
<h2><span class="status-dot dot-ok"></span> Loading</h2>
|
|
7816
8040
|
<div class="badges">
|
|
7817
|
-
<label for="c-
|
|
8041
|
+
<label for="c-22-components-loading-props" class="badge ok as-toggle">1 prop type</label>
|
|
7818
8042
|
|
|
7819
|
-
<label for="c-
|
|
8043
|
+
<label for="c-22-components-loading-stories" class="badge ok as-toggle">7 stories</label>
|
|
7820
8044
|
|
|
7821
8045
|
|
|
7822
8046
|
</div>
|
|
@@ -7833,10 +8057,10 @@ parent font size via `em`-based size variants (`sm`, `md`, `lg`).</div>
|
|
|
7833
8057
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
7834
8058
|
|
|
7835
8059
|
|
|
7836
|
-
<input id="c-
|
|
8060
|
+
<input id="c-22-components-loading-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
7837
8061
|
|
|
7838
8062
|
|
|
7839
|
-
<input id="c-
|
|
8063
|
+
<input id="c-22-components-loading-props" class="tg tg-props" type="checkbox" hidden />
|
|
7840
8064
|
|
|
7841
8065
|
<div class="panels">
|
|
7842
8066
|
|
|
@@ -7987,9 +8211,9 @@ against the dark background.</div>
|
|
|
7987
8211
|
<div class="title">
|
|
7988
8212
|
<h2><span class="status-dot dot-ok"></span> Modal.Root</h2>
|
|
7989
8213
|
<div class="badges">
|
|
7990
|
-
<label for="c-
|
|
8214
|
+
<label for="c-23-components-modal-props" class="badge ok as-toggle">5 prop types</label>
|
|
7991
8215
|
|
|
7992
|
-
<label for="c-
|
|
8216
|
+
<label for="c-23-components-modal-stories" class="badge ok as-toggle">6 stories</label>
|
|
7993
8217
|
|
|
7994
8218
|
|
|
7995
8219
|
</div>
|
|
@@ -8035,10 +8259,10 @@ import { Modal } from '@agentero/design-system/modal';
|
|
|
8035
8259
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
8036
8260
|
|
|
8037
8261
|
|
|
8038
|
-
<input id="c-
|
|
8262
|
+
<input id="c-23-components-modal-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
8039
8263
|
|
|
8040
8264
|
|
|
8041
|
-
<input id="c-
|
|
8265
|
+
<input id="c-23-components-modal-props" class="tg tg-props" type="checkbox" hidden />
|
|
8042
8266
|
|
|
8043
8267
|
<div class="panels">
|
|
8044
8268
|
|
|
@@ -8258,9 +8482,9 @@ announced as an `alertdialog`. Only the footer actions close it.</div>
|
|
|
8258
8482
|
<div class="title">
|
|
8259
8483
|
<h2><span class="status-dot dot-ok"></span> Pagination</h2>
|
|
8260
8484
|
<div class="badges">
|
|
8261
|
-
<label for="c-
|
|
8485
|
+
<label for="c-24-components-pagination-props" class="badge ok as-toggle">5 prop types</label>
|
|
8262
8486
|
|
|
8263
|
-
<label for="c-
|
|
8487
|
+
<label for="c-24-components-pagination-stories" class="badge ok as-toggle">7 stories</label>
|
|
8264
8488
|
|
|
8265
8489
|
|
|
8266
8490
|
</div>
|
|
@@ -8290,10 +8514,10 @@ const [page, setPage] = useState(1);
|
|
|
8290
8514
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
8291
8515
|
|
|
8292
8516
|
|
|
8293
|
-
<input id="c-
|
|
8517
|
+
<input id="c-24-components-pagination-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
8294
8518
|
|
|
8295
8519
|
|
|
8296
|
-
<input id="c-
|
|
8520
|
+
<input id="c-24-components-pagination-props" class="tg tg-props" type="checkbox" hidden />
|
|
8297
8521
|
|
|
8298
8522
|
<div class="panels">
|
|
8299
8523
|
|
|
@@ -8448,9 +8672,9 @@ entries summary follow along.</div>
|
|
|
8448
8672
|
<div class="title">
|
|
8449
8673
|
<h2><span class="status-dot dot-ok"></span> Popover.Root</h2>
|
|
8450
8674
|
<div class="badges">
|
|
8451
|
-
<label for="c-
|
|
8675
|
+
<label for="c-25-components-popover-props" class="badge ok as-toggle">5 prop types</label>
|
|
8452
8676
|
|
|
8453
|
-
<label for="c-
|
|
8677
|
+
<label for="c-25-components-popover-stories" class="badge ok as-toggle">5 stories</label>
|
|
8454
8678
|
|
|
8455
8679
|
|
|
8456
8680
|
</div>
|
|
@@ -8479,10 +8703,10 @@ import { Popover } from '@agentero/design-system/popover';
|
|
|
8479
8703
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
8480
8704
|
|
|
8481
8705
|
|
|
8482
|
-
<input id="c-
|
|
8706
|
+
<input id="c-25-components-popover-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
8483
8707
|
|
|
8484
8708
|
|
|
8485
|
-
<input id="c-
|
|
8709
|
+
<input id="c-25-components-popover-props" class="tg tg-props" type="checkbox" hidden />
|
|
8486
8710
|
|
|
8487
8711
|
<div class="panels">
|
|
8488
8712
|
|
|
@@ -8681,9 +8905,9 @@ focus returning to its trigger once the modal closes.</div>
|
|
|
8681
8905
|
<div class="title">
|
|
8682
8906
|
<h2><span class="status-dot dot-ok"></span> Progress</h2>
|
|
8683
8907
|
<div class="badges">
|
|
8684
|
-
<label for="c-
|
|
8908
|
+
<label for="c-26-components-progress-props" class="badge ok as-toggle">4 prop types</label>
|
|
8685
8909
|
|
|
8686
|
-
<label for="c-
|
|
8910
|
+
<label for="c-26-components-progress-stories" class="badge ok as-toggle">4 stories</label>
|
|
8687
8911
|
|
|
8688
8912
|
|
|
8689
8913
|
</div>
|
|
@@ -8702,10 +8926,10 @@ with `currentColor`, so recolor it with a plain text class — e.g.
|
|
|
8702
8926
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
8703
8927
|
|
|
8704
8928
|
|
|
8705
|
-
<input id="c-
|
|
8929
|
+
<input id="c-26-components-progress-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
8706
8930
|
|
|
8707
8931
|
|
|
8708
|
-
<input id="c-
|
|
8932
|
+
<input id="c-26-components-progress-props" class="tg tg-props" type="checkbox" hidden />
|
|
8709
8933
|
|
|
8710
8934
|
<div class="panels">
|
|
8711
8935
|
|
|
@@ -8824,7 +9048,7 @@ percentage: number</code></pre>
|
|
|
8824
9048
|
<div class="badges">
|
|
8825
9049
|
|
|
8826
9050
|
|
|
8827
|
-
<label for="c-
|
|
9051
|
+
<label for="c-27-components-skeleton-stories" class="badge ok as-toggle">4 stories</label>
|
|
8828
9052
|
|
|
8829
9053
|
|
|
8830
9054
|
</div>
|
|
@@ -8841,7 +9065,7 @@ shape it with Tailwind classes to mirror the content it stands in for.</div>
|
|
|
8841
9065
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
8842
9066
|
|
|
8843
9067
|
|
|
8844
|
-
<input id="c-
|
|
9068
|
+
<input id="c-27-components-skeleton-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
8845
9069
|
|
|
8846
9070
|
|
|
8847
9071
|
|
|
@@ -8937,9 +9161,9 @@ shape it with Tailwind classes to mirror the content it stands in for.</div>
|
|
|
8937
9161
|
<div class="title">
|
|
8938
9162
|
<h2><span class="status-dot dot-ok"></span> Switch</h2>
|
|
8939
9163
|
<div class="badges">
|
|
8940
|
-
<label for="c-
|
|
9164
|
+
<label for="c-28-components-switch-props" class="badge ok as-toggle">8 prop types</label>
|
|
8941
9165
|
|
|
8942
|
-
<label for="c-
|
|
9166
|
+
<label for="c-28-components-switch-stories" class="badge ok as-toggle">7 stories</label>
|
|
8943
9167
|
|
|
8944
9168
|
|
|
8945
9169
|
</div>
|
|
@@ -8955,10 +9179,10 @@ a Checkbox for a single boolean that applies instantly, and pair it with a
|
|
|
8955
9179
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
8956
9180
|
|
|
8957
9181
|
|
|
8958
|
-
<input id="c-
|
|
9182
|
+
<input id="c-28-components-switch-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
8959
9183
|
|
|
8960
9184
|
|
|
8961
|
-
<input id="c-
|
|
9185
|
+
<input id="c-28-components-switch-props" class="tg tg-props" type="checkbox" hidden />
|
|
8962
9186
|
|
|
8963
9187
|
<div class="panels">
|
|
8964
9188
|
|
|
@@ -9139,9 +9363,9 @@ size?: "sm" | "md"</code></pre>
|
|
|
9139
9363
|
<div class="title">
|
|
9140
9364
|
<h2><span class="status-dot dot-ok"></span> Table.Root</h2>
|
|
9141
9365
|
<div class="badges">
|
|
9142
|
-
<label for="c-
|
|
9366
|
+
<label for="c-29-components-table-props" class="badge ok as-toggle">6 prop types</label>
|
|
9143
9367
|
|
|
9144
|
-
<label for="c-
|
|
9368
|
+
<label for="c-29-components-table-stories" class="badge ok as-toggle">10 stories</label>
|
|
9145
9369
|
|
|
9146
9370
|
|
|
9147
9371
|
</div>
|
|
@@ -9172,10 +9396,10 @@ import { Table } from '@agentero/design-system/table';
|
|
|
9172
9396
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
9173
9397
|
|
|
9174
9398
|
|
|
9175
|
-
<input id="c-
|
|
9399
|
+
<input id="c-29-components-table-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
9176
9400
|
|
|
9177
9401
|
|
|
9178
|
-
<input id="c-
|
|
9402
|
+
<input id="c-29-components-table-props" class="tg tg-props" type="checkbox" hidden />
|
|
9179
9403
|
|
|
9180
9404
|
<div class="panels">
|
|
9181
9405
|
|
|
@@ -9393,9 +9617,9 @@ keeps its padding.</div>
|
|
|
9393
9617
|
<div class="title">
|
|
9394
9618
|
<h2><span class="status-dot dot-ok"></span> Tabs.Root</h2>
|
|
9395
9619
|
<div class="badges">
|
|
9396
|
-
<label for="c-
|
|
9620
|
+
<label for="c-30-components-tabs-props" class="badge ok as-toggle">9 prop types</label>
|
|
9397
9621
|
|
|
9398
|
-
<label for="c-
|
|
9622
|
+
<label for="c-30-components-tabs-stories" class="badge ok as-toggle">8 stories</label>
|
|
9399
9623
|
|
|
9400
9624
|
|
|
9401
9625
|
</div>
|
|
@@ -9426,10 +9650,10 @@ import { Tabs } from '@agentero/design-system/tabs';
|
|
|
9426
9650
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
9427
9651
|
|
|
9428
9652
|
|
|
9429
|
-
<input id="c-
|
|
9653
|
+
<input id="c-30-components-tabs-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
9430
9654
|
|
|
9431
9655
|
|
|
9432
|
-
<input id="c-
|
|
9656
|
+
<input id="c-30-components-tabs-props" class="tg tg-props" type="checkbox" hidden />
|
|
9433
9657
|
|
|
9434
9658
|
<div class="panels">
|
|
9435
9659
|
|
|
@@ -9650,9 +9874,9 @@ tablist role is announced.</div>
|
|
|
9650
9874
|
<div class="title">
|
|
9651
9875
|
<h2><span class="status-dot dot-ok"></span> Tag</h2>
|
|
9652
9876
|
<div class="badges">
|
|
9653
|
-
<label for="c-
|
|
9877
|
+
<label for="c-31-components-tag-props" class="badge ok as-toggle">8 prop types</label>
|
|
9654
9878
|
|
|
9655
|
-
<label for="c-
|
|
9879
|
+
<label for="c-31-components-tag-stories" class="badge ok as-toggle">12 stories</label>
|
|
9656
9880
|
|
|
9657
9881
|
|
|
9658
9882
|
</div>
|
|
@@ -9671,10 +9895,10 @@ it an interactive link or button, which adds the pointer cursor and hover fill.<
|
|
|
9671
9895
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
9672
9896
|
|
|
9673
9897
|
|
|
9674
|
-
<input id="c-
|
|
9898
|
+
<input id="c-31-components-tag-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
9675
9899
|
|
|
9676
9900
|
|
|
9677
|
-
<input id="c-
|
|
9901
|
+
<input id="c-31-components-tag-props" class="tg tg-props" type="checkbox" hidden />
|
|
9678
9902
|
|
|
9679
9903
|
<div class="panels">
|
|
9680
9904
|
|
|
@@ -10099,9 +10323,9 @@ leading + trailing icons, and icon-only.</div>
|
|
|
10099
10323
|
<div class="title">
|
|
10100
10324
|
<h2><span class="status-dot dot-ok"></span> TextArea</h2>
|
|
10101
10325
|
<div class="badges">
|
|
10102
|
-
<label for="c-
|
|
10326
|
+
<label for="c-32-components-textarea-props" class="badge ok as-toggle">1 prop type</label>
|
|
10103
10327
|
|
|
10104
|
-
<label for="c-
|
|
10328
|
+
<label for="c-32-components-textarea-stories" class="badge ok as-toggle">6 stories</label>
|
|
10105
10329
|
|
|
10106
10330
|
|
|
10107
10331
|
</div>
|
|
@@ -10118,10 +10342,10 @@ states. It wires nothing on its own: `id`, `aria-invalid` and
|
|
|
10118
10342
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
10119
10343
|
|
|
10120
10344
|
|
|
10121
|
-
<input id="c-
|
|
10345
|
+
<input id="c-32-components-textarea-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
10122
10346
|
|
|
10123
10347
|
|
|
10124
|
-
<input id="c-
|
|
10348
|
+
<input id="c-32-components-textarea-props" class="tg tg-props" type="checkbox" hidden />
|
|
10125
10349
|
|
|
10126
10350
|
<div class="panels">
|
|
10127
10351
|
|
|
@@ -10253,9 +10477,9 @@ size and the minimum height shows three rows.</div>
|
|
|
10253
10477
|
<div class="title">
|
|
10254
10478
|
<h2><span class="status-dot dot-ok"></span> Toast</h2>
|
|
10255
10479
|
<div class="badges">
|
|
10256
|
-
<label for="c-
|
|
10480
|
+
<label for="c-33-components-toast-props" class="badge ok as-toggle">11 prop types</label>
|
|
10257
10481
|
|
|
10258
|
-
<label for="c-
|
|
10482
|
+
<label for="c-33-components-toast-stories" class="badge ok as-toggle">11 stories</label>
|
|
10259
10483
|
|
|
10260
10484
|
|
|
10261
10485
|
</div>
|
|
@@ -10274,10 +10498,10 @@ common feedback patterns.</div>
|
|
|
10274
10498
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
10275
10499
|
|
|
10276
10500
|
|
|
10277
|
-
<input id="c-
|
|
10501
|
+
<input id="c-33-components-toast-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
10278
10502
|
|
|
10279
10503
|
|
|
10280
|
-
<input id="c-
|
|
10504
|
+
<input id="c-33-components-toast-props" class="tg tg-props" type="checkbox" hidden />
|
|
10281
10505
|
|
|
10282
10506
|
<div class="panels">
|
|
10283
10507
|
|
|
@@ -10706,9 +10930,9 @@ action (e.g., a sync icon for a sync-in-progress toast).</div>
|
|
|
10706
10930
|
<div class="title">
|
|
10707
10931
|
<h2><span class="status-dot dot-ok"></span> Tooltip</h2>
|
|
10708
10932
|
<div class="badges">
|
|
10709
|
-
<label for="c-
|
|
10933
|
+
<label for="c-34-components-tooltip-props" class="badge ok as-toggle">12 prop types</label>
|
|
10710
10934
|
|
|
10711
|
-
<label for="c-
|
|
10935
|
+
<label for="c-34-components-tooltip-stories" class="badge ok as-toggle">5 stories</label>
|
|
10712
10936
|
|
|
10713
10937
|
|
|
10714
10938
|
</div>
|
|
@@ -10727,10 +10951,10 @@ on hover or focus.</div>
|
|
|
10727
10951
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
10728
10952
|
|
|
10729
10953
|
|
|
10730
|
-
<input id="c-
|
|
10954
|
+
<input id="c-34-components-tooltip-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
10731
10955
|
|
|
10732
10956
|
|
|
10733
|
-
<input id="c-
|
|
10957
|
+
<input id="c-34-components-tooltip-props" class="tg tg-props" type="checkbox" hidden />
|
|
10734
10958
|
|
|
10735
10959
|
<div class="panels">
|
|
10736
10960
|
|
|
@@ -10902,9 +11126,9 @@ sideOffset?: number = 4</code></pre>
|
|
|
10902
11126
|
<div class="title">
|
|
10903
11127
|
<h2><span class="status-dot dot-ok"></span> ValidationList</h2>
|
|
10904
11128
|
<div class="badges">
|
|
10905
|
-
<label for="c-
|
|
11129
|
+
<label for="c-35-components-validationlist-props" class="badge ok as-toggle">2 prop types</label>
|
|
10906
11130
|
|
|
10907
|
-
<label for="c-
|
|
11131
|
+
<label for="c-35-components-validationlist-stories" class="badge ok as-toggle">4 stories</label>
|
|
10908
11132
|
|
|
10909
11133
|
|
|
10910
11134
|
</div>
|
|
@@ -10925,10 +11149,10 @@ your form validation; it does not own the input or block submission.</div>
|
|
|
10925
11149
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
10926
11150
|
|
|
10927
11151
|
|
|
10928
|
-
<input id="c-
|
|
11152
|
+
<input id="c-35-components-validationlist-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
10929
11153
|
|
|
10930
11154
|
|
|
10931
|
-
<input id="c-
|
|
11155
|
+
<input id="c-35-components-validationlist-props" class="tg tg-props" type="checkbox" hidden />
|
|
10932
11156
|
|
|
10933
11157
|
<div class="panels">
|
|
10934
11158
|
|