@agentero/design-system 0.33.0 → 0.34.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.
- package/mcp/manifests/components.html +384 -103
- package/mcp/manifests/components.json +191 -20
- package/package.json +5 -1
- package/src/combobox/combobox.d.ts +12 -7
- package/src/combobox/combobox.js +79 -62
- package/src/field/context.d.ts +6 -2
- package/src/field/field.d.ts +4 -2
- package/src/field/field.js +30 -27
- package/src/field/index.d.ts +1 -1
- package/src/field-text/field-text.d.ts +1 -1
- package/src/form-text/form-text.d.ts +4 -4
- package/src/form-text/form-text.js +2 -2
- 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
|
@@ -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>3.8s</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) => (
|
|
@@ -3463,8 +3471,8 @@ rest of the page from assistive technology, label included, and a
|
|
|
3463
3471
|
</Combobox.List>
|
|
3464
3472
|
</Combobox.Content>
|
|
3465
3473
|
</Combobox.Root>
|
|
3466
|
-
<Field.Description>The agency this agent will be added to.</Field.Description>
|
|
3467
3474
|
<Field.Error errors={[{ message: 'Pick an agency from the list' }]} />
|
|
3475
|
+
<Field.Description>The agency this agent will be added to.</Field.Description>
|
|
3468
3476
|
</FieldText>
|
|
3469
3477
|
);</code></pre>
|
|
3470
3478
|
</div>
|
|
@@ -5217,7 +5225,7 @@ actions outright unless the user needs to see them and understand why.</div>
|
|
|
5217
5225
|
<div class="badges">
|
|
5218
5226
|
<label for="c-12-components-field-props" class="badge ok as-toggle">6 prop types</label>
|
|
5219
5227
|
|
|
5220
|
-
<label for="c-12-components-field-stories" class="badge ok as-toggle">
|
|
5228
|
+
<label for="c-12-components-field-stories" class="badge ok as-toggle">17 stories</label>
|
|
5221
5229
|
|
|
5222
5230
|
|
|
5223
5231
|
</div>
|
|
@@ -5241,8 +5249,8 @@ absent when there is none.</div>
|
|
|
5241
5249
|
<div class="kv"><span class="chip">summary: Wraps a label, control, description and error into one field</span><span class="chip">example: <Field.Root invalid={!!error} required>
|
|
5242
5250
|
<Field.Label>Email</Field.Label>
|
|
5243
5251
|
<Input type="email" />
|
|
5244
|
-
<Field.Description>We only use this for policy documents.</Field.Description>
|
|
5245
5252
|
<Field.Error errors={[error]} />
|
|
5253
|
+
<Field.Description>We only use this for policy documents.</Field.Description>
|
|
5246
5254
|
</Field.Root></span></div>
|
|
5247
5255
|
</div>
|
|
5248
5256
|
|
|
@@ -5492,6 +5500,37 @@ either, the control carries no `aria-describedby` at all.</div>
|
|
|
5492
5500
|
<DemoInput type="email" />
|
|
5493
5501
|
<Field.Error errors={[undefined]} />
|
|
5494
5502
|
</Field.Root>;</code></pre>
|
|
5503
|
+
</div>
|
|
5504
|
+
<div class="note ok">
|
|
5505
|
+
<div class="row">
|
|
5506
|
+
<span class="ex-name">Error Before Description</span>
|
|
5507
|
+
<span class="badge ok">story ok</span>
|
|
5508
|
+
</div>
|
|
5509
|
+
<div>Error announced before the description, whenever it appears</div>
|
|
5510
|
+
<div class="hint">The error sits right under the control and is announced before the
|
|
5511
|
+
description, even when it appears after the description is on screen and
|
|
5512
|
+
carries an `id` of its own.</div>
|
|
5513
|
+
<pre><code>const ErrorBeforeDescription = () => {
|
|
5514
|
+
const [error, setError] = useState<string>();
|
|
5515
|
+
|
|
5516
|
+
return (
|
|
5517
|
+
<div className="flex flex-col items-start gap-4">
|
|
5518
|
+
<Field.Root
|
|
5519
|
+
orientation="vertical"
|
|
5520
|
+
disabled={false}
|
|
5521
|
+
readOnly={false}
|
|
5522
|
+
required={false}
|
|
5523
|
+
invalid={!!error}>
|
|
5524
|
+
<Label>Tax ID</Label>
|
|
5525
|
+
<DemoInput inputMode="numeric" />
|
|
5526
|
+
<Field.Error id="tax-id-error">{error}</Field.Error>
|
|
5527
|
+
<Field.Description>Nine digits, with or without the dash.</Field.Description>
|
|
5528
|
+
</Field.Root>
|
|
5529
|
+
<button type="button" onClick={() => setError('Enter the tax ID.')}>Validate
|
|
5530
|
+
</button>
|
|
5531
|
+
</div>
|
|
5532
|
+
);
|
|
5533
|
+
};</code></pre>
|
|
5495
5534
|
</div>
|
|
5496
5535
|
<div class="note ok">
|
|
5497
5536
|
<div class="row">
|
|
@@ -5743,8 +5782,8 @@ and `name`, and `FieldContext` with the errors, as the last story shows.</div>
|
|
|
5743
5782
|
<div class="kv"><span class="chip">summary: Field for a single-line text control, wiring the Input inside it</span><span class="chip">example: <FieldText invalid={!!error} required>
|
|
5744
5783
|
<Label>Email</Label>
|
|
5745
5784
|
<Input type="email" />
|
|
5746
|
-
<Field.Description>We only use this for policy documents.</Field.Description>
|
|
5747
5785
|
<Field.Error errors={[error]} />
|
|
5786
|
+
<Field.Description>We only use this for policy documents.</Field.Description>
|
|
5748
5787
|
</FieldText></span></div>
|
|
5749
5788
|
</div>
|
|
5750
5789
|
|
|
@@ -6163,7 +6202,7 @@ Validation is react-hook-form's alone.</div>
|
|
|
6163
6202
|
<div class="badges">
|
|
6164
6203
|
<label for="c-15-components-formtext-props" class="badge ok as-toggle">15 prop types</label>
|
|
6165
6204
|
|
|
6166
|
-
<label for="c-15-components-formtext-stories" class="badge ok as-toggle">
|
|
6205
|
+
<label for="c-15-components-formtext-stories" class="badge ok as-toggle">10 stories</label>
|
|
6167
6206
|
|
|
6168
6207
|
|
|
6169
6208
|
</div>
|
|
@@ -6226,9 +6265,9 @@ control?: Control<FieldValues, any, unknown>
|
|
|
6226
6265
|
controlId?: string
|
|
6227
6266
|
|
|
6228
6267
|
/**
|
|
6229
|
-
* Helper text shown under the control
|
|
6230
|
-
* `aria-describedby`. Use it for guidance the
|
|
6231
|
-
* details worth a click in `tooltip` instead.
|
|
6268
|
+
* Helper text shown under the control, below the error when there is one,
|
|
6269
|
+
* and announced through its `aria-describedby`. Use it for guidance the
|
|
6270
|
+
* user needs before typing; put details worth a click in `tooltip` instead.
|
|
6232
6271
|
*/
|
|
6233
6272
|
description?: ReactNode
|
|
6234
6273
|
|
|
@@ -6442,6 +6481,36 @@ not mark the field required: that stays an explicit `required` prop.</div>
|
|
|
6442
6481
|
<Button type="submit">Save</Button>
|
|
6443
6482
|
</Form.Root>
|
|
6444
6483
|
);
|
|
6484
|
+
};</code></pre>
|
|
6485
|
+
</div>
|
|
6486
|
+
<div class="note ok">
|
|
6487
|
+
<div class="row">
|
|
6488
|
+
<span class="ex-name">Error And Description</span>
|
|
6489
|
+
<span class="badge ok">story ok</span>
|
|
6490
|
+
</div>
|
|
6491
|
+
<div>Error under the input, above the helper text</div>
|
|
6492
|
+
<div class="hint">The error sits right under the input and the description stays below it, so
|
|
6493
|
+
the message lands next to the value it is about. Screen readers announce
|
|
6494
|
+
them in the same order.</div>
|
|
6495
|
+
<pre><code>const ErrorAndDescription = () => {
|
|
6496
|
+
const methods = useForm<TaxValues>({ defaultValues: { taxId: '' } });
|
|
6497
|
+
|
|
6498
|
+
return (
|
|
6499
|
+
<Form.Root
|
|
6500
|
+
methods={methods}
|
|
6501
|
+
onSubmit={onSubmit}
|
|
6502
|
+
aria-label="Tax details"
|
|
6503
|
+
className="flex flex-col items-start gap-7">
|
|
6504
|
+
<FormText
|
|
6505
|
+
name="taxId"
|
|
6506
|
+
label="Tax ID"
|
|
6507
|
+
description="Nine digits, with or without the dash."
|
|
6508
|
+
rules={{ required: 'Enter the tax ID.' }}
|
|
6509
|
+
inputProps={{ inputMode: 'numeric', autoComplete: 'off' }}
|
|
6510
|
+
/>
|
|
6511
|
+
<Button type="submit">Save</Button>
|
|
6512
|
+
</Form.Root>
|
|
6513
|
+
);
|
|
6445
6514
|
};</code></pre>
|
|
6446
6515
|
</div>
|
|
6447
6516
|
<div class="note ok">
|
|
@@ -7115,7 +7184,7 @@ they cannot change.</div>
|
|
|
7115
7184
|
<div class="badges">
|
|
7116
7185
|
|
|
7117
7186
|
|
|
7118
|
-
<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>
|
|
7119
7188
|
|
|
7120
7189
|
|
|
7121
7190
|
</div>
|
|
@@ -7162,7 +7231,6 @@ hands its state to the frame through `:has()`, so focus, `disabled`,
|
|
|
7162
7231
|
DropdownMenu,
|
|
7163
7232
|
Field,
|
|
7164
7233
|
FieldText,
|
|
7165
|
-
IconCancel,
|
|
7166
7234
|
IconKeyboardArrowDown,
|
|
7167
7235
|
IconSearch,
|
|
7168
7236
|
Input,
|
|
@@ -7181,7 +7249,9 @@ hands its state to the frame through `:has()`, so focus, `disabled`,
|
|
|
7181
7249
|
<div>Leading icon addon with the frame drawing the focus ring</div>
|
|
7182
7250
|
<div class="hint">A search field: the icon leads and the input takes the rest of the frame.
|
|
7183
7251
|
Pressing the icon focuses the input, and the frame — not the input — draws the
|
|
7184
|
-
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>
|
|
7185
7255
|
<pre><code>const Default = () => (
|
|
7186
7256
|
<InputGroup.Root>
|
|
7187
7257
|
<InputGroup.Addon>
|
|
@@ -7352,25 +7422,6 @@ describes it with no ids written by hand. The frame is not in the way.</div>
|
|
|
7352
7422
|
</InputGroup.Root>
|
|
7353
7423
|
<Field.Description>Shown on your public profile.</Field.Description>
|
|
7354
7424
|
</FieldText>
|
|
7355
|
-
);</code></pre>
|
|
7356
|
-
</div>
|
|
7357
|
-
<div class="note ok">
|
|
7358
|
-
<div class="row">
|
|
7359
|
-
<span class="ex-name">Search Field</span>
|
|
7360
|
-
<span class="badge ok">story ok</span>
|
|
7361
|
-
</div>
|
|
7362
|
-
|
|
7363
|
-
|
|
7364
|
-
<pre><code>const SearchField = () => (
|
|
7365
|
-
<form onSubmit={handleSearchSubmit}>
|
|
7366
|
-
<FieldStates
|
|
7367
|
-
label="Agency"
|
|
7368
|
-
tooltip="Search by agency name or NPN."
|
|
7369
|
-
required
|
|
7370
|
-
error="Pick an agency from the list.">
|
|
7371
|
-
<SearchInput />
|
|
7372
|
-
</FieldStates>
|
|
7373
|
-
</form>
|
|
7374
7425
|
);</code></pre>
|
|
7375
7426
|
</div>
|
|
7376
7427
|
<div class="note ok">
|
|
@@ -7594,6 +7645,236 @@ the field through the frame. A disabled field removes the toggle too.</div>
|
|
|
7594
7645
|
</div>
|
|
7595
7646
|
|
|
7596
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
|
+
|
|
7597
7878
|
</div>
|
|
7598
7879
|
</article>
|
|
7599
7880
|
<article
|
|
@@ -7608,9 +7889,9 @@ the field through the frame. A disabled field removes the toggle too.</div>
|
|
|
7608
7889
|
<div class="title">
|
|
7609
7890
|
<h2><span class="status-dot dot-ok"></span> Label</h2>
|
|
7610
7891
|
<div class="badges">
|
|
7611
|
-
<label for="c-
|
|
7892
|
+
<label for="c-21-components-label-props" class="badge ok as-toggle">3 prop types</label>
|
|
7612
7893
|
|
|
7613
|
-
<label for="c-
|
|
7894
|
+
<label for="c-21-components-label-stories" class="badge ok as-toggle">5 stories</label>
|
|
7614
7895
|
|
|
7615
7896
|
|
|
7616
7897
|
</div>
|
|
@@ -7630,10 +7911,10 @@ still has to carry `required` / `aria-required`.</div>
|
|
|
7630
7911
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
7631
7912
|
|
|
7632
7913
|
|
|
7633
|
-
<input id="c-
|
|
7914
|
+
<input id="c-21-components-label-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
7634
7915
|
|
|
7635
7916
|
|
|
7636
|
-
<input id="c-
|
|
7917
|
+
<input id="c-21-components-label-props" class="tg tg-props" type="checkbox" hidden />
|
|
7637
7918
|
|
|
7638
7919
|
<div class="panels">
|
|
7639
7920
|
|
|
@@ -7753,9 +8034,9 @@ field's control with no `htmlFor`. An explicit `htmlFor` still wins.</div>
|
|
|
7753
8034
|
<div class="title">
|
|
7754
8035
|
<h2><span class="status-dot dot-ok"></span> Loading</h2>
|
|
7755
8036
|
<div class="badges">
|
|
7756
|
-
<label for="c-
|
|
8037
|
+
<label for="c-22-components-loading-props" class="badge ok as-toggle">1 prop type</label>
|
|
7757
8038
|
|
|
7758
|
-
<label for="c-
|
|
8039
|
+
<label for="c-22-components-loading-stories" class="badge ok as-toggle">7 stories</label>
|
|
7759
8040
|
|
|
7760
8041
|
|
|
7761
8042
|
</div>
|
|
@@ -7772,10 +8053,10 @@ parent font size via `em`-based size variants (`sm`, `md`, `lg`).</div>
|
|
|
7772
8053
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
7773
8054
|
|
|
7774
8055
|
|
|
7775
|
-
<input id="c-
|
|
8056
|
+
<input id="c-22-components-loading-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
7776
8057
|
|
|
7777
8058
|
|
|
7778
|
-
<input id="c-
|
|
8059
|
+
<input id="c-22-components-loading-props" class="tg tg-props" type="checkbox" hidden />
|
|
7779
8060
|
|
|
7780
8061
|
<div class="panels">
|
|
7781
8062
|
|
|
@@ -7926,9 +8207,9 @@ against the dark background.</div>
|
|
|
7926
8207
|
<div class="title">
|
|
7927
8208
|
<h2><span class="status-dot dot-ok"></span> Modal.Root</h2>
|
|
7928
8209
|
<div class="badges">
|
|
7929
|
-
<label for="c-
|
|
8210
|
+
<label for="c-23-components-modal-props" class="badge ok as-toggle">5 prop types</label>
|
|
7930
8211
|
|
|
7931
|
-
<label for="c-
|
|
8212
|
+
<label for="c-23-components-modal-stories" class="badge ok as-toggle">6 stories</label>
|
|
7932
8213
|
|
|
7933
8214
|
|
|
7934
8215
|
</div>
|
|
@@ -7974,10 +8255,10 @@ import { Modal } from '@agentero/design-system/modal';
|
|
|
7974
8255
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
7975
8256
|
|
|
7976
8257
|
|
|
7977
|
-
<input id="c-
|
|
8258
|
+
<input id="c-23-components-modal-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
7978
8259
|
|
|
7979
8260
|
|
|
7980
|
-
<input id="c-
|
|
8261
|
+
<input id="c-23-components-modal-props" class="tg tg-props" type="checkbox" hidden />
|
|
7981
8262
|
|
|
7982
8263
|
<div class="panels">
|
|
7983
8264
|
|
|
@@ -8197,9 +8478,9 @@ announced as an `alertdialog`. Only the footer actions close it.</div>
|
|
|
8197
8478
|
<div class="title">
|
|
8198
8479
|
<h2><span class="status-dot dot-ok"></span> Pagination</h2>
|
|
8199
8480
|
<div class="badges">
|
|
8200
|
-
<label for="c-
|
|
8481
|
+
<label for="c-24-components-pagination-props" class="badge ok as-toggle">5 prop types</label>
|
|
8201
8482
|
|
|
8202
|
-
<label for="c-
|
|
8483
|
+
<label for="c-24-components-pagination-stories" class="badge ok as-toggle">7 stories</label>
|
|
8203
8484
|
|
|
8204
8485
|
|
|
8205
8486
|
</div>
|
|
@@ -8229,10 +8510,10 @@ const [page, setPage] = useState(1);
|
|
|
8229
8510
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
8230
8511
|
|
|
8231
8512
|
|
|
8232
|
-
<input id="c-
|
|
8513
|
+
<input id="c-24-components-pagination-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
8233
8514
|
|
|
8234
8515
|
|
|
8235
|
-
<input id="c-
|
|
8516
|
+
<input id="c-24-components-pagination-props" class="tg tg-props" type="checkbox" hidden />
|
|
8236
8517
|
|
|
8237
8518
|
<div class="panels">
|
|
8238
8519
|
|
|
@@ -8387,9 +8668,9 @@ entries summary follow along.</div>
|
|
|
8387
8668
|
<div class="title">
|
|
8388
8669
|
<h2><span class="status-dot dot-ok"></span> Popover.Root</h2>
|
|
8389
8670
|
<div class="badges">
|
|
8390
|
-
<label for="c-
|
|
8671
|
+
<label for="c-25-components-popover-props" class="badge ok as-toggle">5 prop types</label>
|
|
8391
8672
|
|
|
8392
|
-
<label for="c-
|
|
8673
|
+
<label for="c-25-components-popover-stories" class="badge ok as-toggle">5 stories</label>
|
|
8393
8674
|
|
|
8394
8675
|
|
|
8395
8676
|
</div>
|
|
@@ -8418,10 +8699,10 @@ import { Popover } from '@agentero/design-system/popover';
|
|
|
8418
8699
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
8419
8700
|
|
|
8420
8701
|
|
|
8421
|
-
<input id="c-
|
|
8702
|
+
<input id="c-25-components-popover-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
8422
8703
|
|
|
8423
8704
|
|
|
8424
|
-
<input id="c-
|
|
8705
|
+
<input id="c-25-components-popover-props" class="tg tg-props" type="checkbox" hidden />
|
|
8425
8706
|
|
|
8426
8707
|
<div class="panels">
|
|
8427
8708
|
|
|
@@ -8620,9 +8901,9 @@ focus returning to its trigger once the modal closes.</div>
|
|
|
8620
8901
|
<div class="title">
|
|
8621
8902
|
<h2><span class="status-dot dot-ok"></span> Progress</h2>
|
|
8622
8903
|
<div class="badges">
|
|
8623
|
-
<label for="c-
|
|
8904
|
+
<label for="c-26-components-progress-props" class="badge ok as-toggle">4 prop types</label>
|
|
8624
8905
|
|
|
8625
|
-
<label for="c-
|
|
8906
|
+
<label for="c-26-components-progress-stories" class="badge ok as-toggle">4 stories</label>
|
|
8626
8907
|
|
|
8627
8908
|
|
|
8628
8909
|
</div>
|
|
@@ -8641,10 +8922,10 @@ with `currentColor`, so recolor it with a plain text class — e.g.
|
|
|
8641
8922
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
8642
8923
|
|
|
8643
8924
|
|
|
8644
|
-
<input id="c-
|
|
8925
|
+
<input id="c-26-components-progress-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
8645
8926
|
|
|
8646
8927
|
|
|
8647
|
-
<input id="c-
|
|
8928
|
+
<input id="c-26-components-progress-props" class="tg tg-props" type="checkbox" hidden />
|
|
8648
8929
|
|
|
8649
8930
|
<div class="panels">
|
|
8650
8931
|
|
|
@@ -8763,7 +9044,7 @@ percentage: number</code></pre>
|
|
|
8763
9044
|
<div class="badges">
|
|
8764
9045
|
|
|
8765
9046
|
|
|
8766
|
-
<label for="c-
|
|
9047
|
+
<label for="c-27-components-skeleton-stories" class="badge ok as-toggle">4 stories</label>
|
|
8767
9048
|
|
|
8768
9049
|
|
|
8769
9050
|
</div>
|
|
@@ -8780,7 +9061,7 @@ shape it with Tailwind classes to mirror the content it stands in for.</div>
|
|
|
8780
9061
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
8781
9062
|
|
|
8782
9063
|
|
|
8783
|
-
<input id="c-
|
|
9064
|
+
<input id="c-27-components-skeleton-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
8784
9065
|
|
|
8785
9066
|
|
|
8786
9067
|
|
|
@@ -8876,9 +9157,9 @@ shape it with Tailwind classes to mirror the content it stands in for.</div>
|
|
|
8876
9157
|
<div class="title">
|
|
8877
9158
|
<h2><span class="status-dot dot-ok"></span> Switch</h2>
|
|
8878
9159
|
<div class="badges">
|
|
8879
|
-
<label for="c-
|
|
9160
|
+
<label for="c-28-components-switch-props" class="badge ok as-toggle">8 prop types</label>
|
|
8880
9161
|
|
|
8881
|
-
<label for="c-
|
|
9162
|
+
<label for="c-28-components-switch-stories" class="badge ok as-toggle">7 stories</label>
|
|
8882
9163
|
|
|
8883
9164
|
|
|
8884
9165
|
</div>
|
|
@@ -8894,10 +9175,10 @@ a Checkbox for a single boolean that applies instantly, and pair it with a
|
|
|
8894
9175
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
8895
9176
|
|
|
8896
9177
|
|
|
8897
|
-
<input id="c-
|
|
9178
|
+
<input id="c-28-components-switch-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
8898
9179
|
|
|
8899
9180
|
|
|
8900
|
-
<input id="c-
|
|
9181
|
+
<input id="c-28-components-switch-props" class="tg tg-props" type="checkbox" hidden />
|
|
8901
9182
|
|
|
8902
9183
|
<div class="panels">
|
|
8903
9184
|
|
|
@@ -9078,9 +9359,9 @@ size?: "sm" | "md"</code></pre>
|
|
|
9078
9359
|
<div class="title">
|
|
9079
9360
|
<h2><span class="status-dot dot-ok"></span> Table.Root</h2>
|
|
9080
9361
|
<div class="badges">
|
|
9081
|
-
<label for="c-
|
|
9362
|
+
<label for="c-29-components-table-props" class="badge ok as-toggle">6 prop types</label>
|
|
9082
9363
|
|
|
9083
|
-
<label for="c-
|
|
9364
|
+
<label for="c-29-components-table-stories" class="badge ok as-toggle">10 stories</label>
|
|
9084
9365
|
|
|
9085
9366
|
|
|
9086
9367
|
</div>
|
|
@@ -9111,10 +9392,10 @@ import { Table } from '@agentero/design-system/table';
|
|
|
9111
9392
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
9112
9393
|
|
|
9113
9394
|
|
|
9114
|
-
<input id="c-
|
|
9395
|
+
<input id="c-29-components-table-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
9115
9396
|
|
|
9116
9397
|
|
|
9117
|
-
<input id="c-
|
|
9398
|
+
<input id="c-29-components-table-props" class="tg tg-props" type="checkbox" hidden />
|
|
9118
9399
|
|
|
9119
9400
|
<div class="panels">
|
|
9120
9401
|
|
|
@@ -9332,9 +9613,9 @@ keeps its padding.</div>
|
|
|
9332
9613
|
<div class="title">
|
|
9333
9614
|
<h2><span class="status-dot dot-ok"></span> Tabs.Root</h2>
|
|
9334
9615
|
<div class="badges">
|
|
9335
|
-
<label for="c-
|
|
9616
|
+
<label for="c-30-components-tabs-props" class="badge ok as-toggle">9 prop types</label>
|
|
9336
9617
|
|
|
9337
|
-
<label for="c-
|
|
9618
|
+
<label for="c-30-components-tabs-stories" class="badge ok as-toggle">8 stories</label>
|
|
9338
9619
|
|
|
9339
9620
|
|
|
9340
9621
|
</div>
|
|
@@ -9365,10 +9646,10 @@ import { Tabs } from '@agentero/design-system/tabs';
|
|
|
9365
9646
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
9366
9647
|
|
|
9367
9648
|
|
|
9368
|
-
<input id="c-
|
|
9649
|
+
<input id="c-30-components-tabs-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
9369
9650
|
|
|
9370
9651
|
|
|
9371
|
-
<input id="c-
|
|
9652
|
+
<input id="c-30-components-tabs-props" class="tg tg-props" type="checkbox" hidden />
|
|
9372
9653
|
|
|
9373
9654
|
<div class="panels">
|
|
9374
9655
|
|
|
@@ -9589,9 +9870,9 @@ tablist role is announced.</div>
|
|
|
9589
9870
|
<div class="title">
|
|
9590
9871
|
<h2><span class="status-dot dot-ok"></span> Tag</h2>
|
|
9591
9872
|
<div class="badges">
|
|
9592
|
-
<label for="c-
|
|
9873
|
+
<label for="c-31-components-tag-props" class="badge ok as-toggle">8 prop types</label>
|
|
9593
9874
|
|
|
9594
|
-
<label for="c-
|
|
9875
|
+
<label for="c-31-components-tag-stories" class="badge ok as-toggle">12 stories</label>
|
|
9595
9876
|
|
|
9596
9877
|
|
|
9597
9878
|
</div>
|
|
@@ -9610,10 +9891,10 @@ it an interactive link or button, which adds the pointer cursor and hover fill.<
|
|
|
9610
9891
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
9611
9892
|
|
|
9612
9893
|
|
|
9613
|
-
<input id="c-
|
|
9894
|
+
<input id="c-31-components-tag-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
9614
9895
|
|
|
9615
9896
|
|
|
9616
|
-
<input id="c-
|
|
9897
|
+
<input id="c-31-components-tag-props" class="tg tg-props" type="checkbox" hidden />
|
|
9617
9898
|
|
|
9618
9899
|
<div class="panels">
|
|
9619
9900
|
|
|
@@ -10038,9 +10319,9 @@ leading + trailing icons, and icon-only.</div>
|
|
|
10038
10319
|
<div class="title">
|
|
10039
10320
|
<h2><span class="status-dot dot-ok"></span> TextArea</h2>
|
|
10040
10321
|
<div class="badges">
|
|
10041
|
-
<label for="c-
|
|
10322
|
+
<label for="c-32-components-textarea-props" class="badge ok as-toggle">1 prop type</label>
|
|
10042
10323
|
|
|
10043
|
-
<label for="c-
|
|
10324
|
+
<label for="c-32-components-textarea-stories" class="badge ok as-toggle">6 stories</label>
|
|
10044
10325
|
|
|
10045
10326
|
|
|
10046
10327
|
</div>
|
|
@@ -10057,10 +10338,10 @@ states. It wires nothing on its own: `id`, `aria-invalid` and
|
|
|
10057
10338
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
10058
10339
|
|
|
10059
10340
|
|
|
10060
|
-
<input id="c-
|
|
10341
|
+
<input id="c-32-components-textarea-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
10061
10342
|
|
|
10062
10343
|
|
|
10063
|
-
<input id="c-
|
|
10344
|
+
<input id="c-32-components-textarea-props" class="tg tg-props" type="checkbox" hidden />
|
|
10064
10345
|
|
|
10065
10346
|
<div class="panels">
|
|
10066
10347
|
|
|
@@ -10192,9 +10473,9 @@ size and the minimum height shows three rows.</div>
|
|
|
10192
10473
|
<div class="title">
|
|
10193
10474
|
<h2><span class="status-dot dot-ok"></span> Toast</h2>
|
|
10194
10475
|
<div class="badges">
|
|
10195
|
-
<label for="c-
|
|
10476
|
+
<label for="c-33-components-toast-props" class="badge ok as-toggle">11 prop types</label>
|
|
10196
10477
|
|
|
10197
|
-
<label for="c-
|
|
10478
|
+
<label for="c-33-components-toast-stories" class="badge ok as-toggle">11 stories</label>
|
|
10198
10479
|
|
|
10199
10480
|
|
|
10200
10481
|
</div>
|
|
@@ -10213,10 +10494,10 @@ common feedback patterns.</div>
|
|
|
10213
10494
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
10214
10495
|
|
|
10215
10496
|
|
|
10216
|
-
<input id="c-
|
|
10497
|
+
<input id="c-33-components-toast-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
10217
10498
|
|
|
10218
10499
|
|
|
10219
|
-
<input id="c-
|
|
10500
|
+
<input id="c-33-components-toast-props" class="tg tg-props" type="checkbox" hidden />
|
|
10220
10501
|
|
|
10221
10502
|
<div class="panels">
|
|
10222
10503
|
|
|
@@ -10645,9 +10926,9 @@ action (e.g., a sync icon for a sync-in-progress toast).</div>
|
|
|
10645
10926
|
<div class="title">
|
|
10646
10927
|
<h2><span class="status-dot dot-ok"></span> Tooltip</h2>
|
|
10647
10928
|
<div class="badges">
|
|
10648
|
-
<label for="c-
|
|
10929
|
+
<label for="c-34-components-tooltip-props" class="badge ok as-toggle">12 prop types</label>
|
|
10649
10930
|
|
|
10650
|
-
<label for="c-
|
|
10931
|
+
<label for="c-34-components-tooltip-stories" class="badge ok as-toggle">5 stories</label>
|
|
10651
10932
|
|
|
10652
10933
|
|
|
10653
10934
|
</div>
|
|
@@ -10666,10 +10947,10 @@ on hover or focus.</div>
|
|
|
10666
10947
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
10667
10948
|
|
|
10668
10949
|
|
|
10669
|
-
<input id="c-
|
|
10950
|
+
<input id="c-34-components-tooltip-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
10670
10951
|
|
|
10671
10952
|
|
|
10672
|
-
<input id="c-
|
|
10953
|
+
<input id="c-34-components-tooltip-props" class="tg tg-props" type="checkbox" hidden />
|
|
10673
10954
|
|
|
10674
10955
|
<div class="panels">
|
|
10675
10956
|
|
|
@@ -10841,9 +11122,9 @@ sideOffset?: number = 4</code></pre>
|
|
|
10841
11122
|
<div class="title">
|
|
10842
11123
|
<h2><span class="status-dot dot-ok"></span> ValidationList</h2>
|
|
10843
11124
|
<div class="badges">
|
|
10844
|
-
<label for="c-
|
|
11125
|
+
<label for="c-35-components-validationlist-props" class="badge ok as-toggle">2 prop types</label>
|
|
10845
11126
|
|
|
10846
|
-
<label for="c-
|
|
11127
|
+
<label for="c-35-components-validationlist-stories" class="badge ok as-toggle">4 stories</label>
|
|
10847
11128
|
|
|
10848
11129
|
|
|
10849
11130
|
</div>
|
|
@@ -10864,10 +11145,10 @@ your form validation; it does not own the input or block submission.</div>
|
|
|
10864
11145
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
10865
11146
|
|
|
10866
11147
|
|
|
10867
|
-
<input id="c-
|
|
11148
|
+
<input id="c-35-components-validationlist-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
10868
11149
|
|
|
10869
11150
|
|
|
10870
|
-
<input id="c-
|
|
11151
|
+
<input id="c-35-components-validationlist-props" class="tg tg-props" type="checkbox" hidden />
|
|
10871
11152
|
|
|
10872
11153
|
<div class="panels">
|
|
10873
11154
|
|