@agentero/design-system 0.25.4 → 0.26.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 +316 -57
- package/mcp/manifests/components.json +275 -1
- package/package.json +5 -1
- package/src/command/command.d.ts +2 -1
- package/src/command/command.js +3 -1
- package/src/input/index.d.ts +2 -0
- package/src/input/index.js +2 -0
- package/src/input/input.d.ts +109 -0
- package/src/input/input.js +35 -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">26 components ok</span><span class="filter-pill ok" aria-disabled="true">204 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.6s</strong>.
|
|
598
598
|
</div>
|
|
599
599
|
<h2 class="section-title">Components</h2>
|
|
600
600
|
<div class="grid" role="list">
|
|
@@ -2580,7 +2580,7 @@ import { CheckList } from '@agentero/design-system/check-list';
|
|
|
2580
2580
|
<div class="badges">
|
|
2581
2581
|
<label for="c-6-components-command-props" class="badge ok as-toggle">10 prop types</label>
|
|
2582
2582
|
|
|
2583
|
-
<label for="c-6-components-command-stories" class="badge ok as-toggle">
|
|
2583
|
+
<label for="c-6-components-command-stories" class="badge ok as-toggle">6 stories</label>
|
|
2584
2584
|
|
|
2585
2585
|
|
|
2586
2586
|
</div>
|
|
@@ -2791,6 +2791,26 @@ and `scroll-py-2` keeps that row off the container edges.</div>
|
|
|
2791
2791
|
</Command.Item>
|
|
2792
2792
|
</Command.List>
|
|
2793
2793
|
<Command.Empty>No results found.</Command.Empty>
|
|
2794
|
+
</Command.Root>;</code></pre>
|
|
2795
|
+
</div>
|
|
2796
|
+
<div class="note ok">
|
|
2797
|
+
<div class="row">
|
|
2798
|
+
<span class="ex-name">Disabled Item</span>
|
|
2799
|
+
<span class="badge ok">story ok</span>
|
|
2800
|
+
</div>
|
|
2801
|
+
|
|
2802
|
+
<div class="hint">A `disabled` row stays visible and searchable but cannot be chosen. cmdk skips it with the
|
|
2803
|
+
arrow keys and swallows the click, and the row drops its hover and active styling so the
|
|
2804
|
+
list does not invite the pointer.</div>
|
|
2805
|
+
<pre><code>const DisabledItem = () => <Command.Root label="Search agencies">
|
|
2806
|
+
<Command.Input placeholder="Search..." />
|
|
2807
|
+
<Command.List>
|
|
2808
|
+
<Command.Item value="pinnacle" onSelect={handleDisabledSelect}>Pinnacle Shield Insurance
|
|
2809
|
+
</Command.Item>
|
|
2810
|
+
<Command.Item value="horizon" disabled onSelect={handleDisabledSelect}>Horizon Risk Solutions
|
|
2811
|
+
</Command.Item>
|
|
2812
|
+
</Command.List>
|
|
2813
|
+
<Command.Empty>No results found.</Command.Empty>
|
|
2794
2814
|
</Command.Root>;</code></pre>
|
|
2795
2815
|
</div>
|
|
2796
2816
|
</div>
|
|
@@ -4504,6 +4524,245 @@ trigger-dense UIs where an instant preview reads as more responsive.</div>
|
|
|
4504
4524
|
</div>
|
|
4505
4525
|
|
|
4506
4526
|
|
|
4527
|
+
</div>
|
|
4528
|
+
</article>
|
|
4529
|
+
<article
|
|
4530
|
+
class="card
|
|
4531
|
+
no-error
|
|
4532
|
+
no-info
|
|
4533
|
+
no-story-error
|
|
4534
|
+
no-doc-error"
|
|
4535
|
+
role="listitem"
|
|
4536
|
+
aria-label="Input">
|
|
4537
|
+
<div class="head">
|
|
4538
|
+
<div class="title">
|
|
4539
|
+
<h2><span class="status-dot dot-ok"></span> Input</h2>
|
|
4540
|
+
<div class="badges">
|
|
4541
|
+
<label for="c-11-components-input-props" class="badge ok as-toggle">7 prop types</label>
|
|
4542
|
+
|
|
4543
|
+
<label for="c-11-components-input-stories" class="badge ok as-toggle">9 stories</label>
|
|
4544
|
+
|
|
4545
|
+
|
|
4546
|
+
</div>
|
|
4547
|
+
</div>
|
|
4548
|
+
<div class="meta" title="./src/input/input.stories.tsx">components-input · ./src/input/input.stories.tsx</div>
|
|
4549
|
+
<div>Base single-line text control, unaware of fields and form libraries</div>
|
|
4550
|
+
<div class="hint">Input is the base single-line text control. It is intentionally unaware of
|
|
4551
|
+
form fields and form libraries: `id`, `aria-invalid` and `aria-describedby`
|
|
4552
|
+
are plain props, set by a field wrapper or by hand.
|
|
4553
|
+
|
|
4554
|
+
There is no `status` prop. Mark the control `aria-invalid` and the
|
|
4555
|
+
destructive border follows, so the styling can never disagree with what
|
|
4556
|
+
assistive technology announces.</div>
|
|
4557
|
+
<div class="kv"><span class="chip">summary: Base single-line text control, unaware of fields and form libraries</span><span class="chip">example: <Label htmlFor="email">Email</Label>
|
|
4558
|
+
<Input id="email" type="email" placeholder="you@example.com" /></span><span class="chip">example: <Input id="email" aria-invalid aria-describedby="email-error" />
|
|
4559
|
+
<span id="email-error">Enter a valid email address.</span></span></div>
|
|
4560
|
+
</div>
|
|
4561
|
+
|
|
4562
|
+
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
4563
|
+
|
|
4564
|
+
|
|
4565
|
+
<input id="c-11-components-input-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
4566
|
+
|
|
4567
|
+
|
|
4568
|
+
<input id="c-11-components-input-props" class="tg tg-props" type="checkbox" hidden />
|
|
4569
|
+
|
|
4570
|
+
<div class="panels">
|
|
4571
|
+
|
|
4572
|
+
|
|
4573
|
+
|
|
4574
|
+
<div class="panel panel-props">
|
|
4575
|
+
<div class="note ok">
|
|
4576
|
+
<div class="row">
|
|
4577
|
+
<span class="ex-name">Prop types <small>(react-component-meta)</small></span>
|
|
4578
|
+
<span class="badge ok">7 prop types</span>
|
|
4579
|
+
</div>
|
|
4580
|
+
<pre><code>Component: src/input/input.tsx::Input</code></pre>
|
|
4581
|
+
<pre><code>Props:</code></pre>
|
|
4582
|
+
<pre><code>/**
|
|
4583
|
+
* Indicates the entered value does not conform to the format expected by the application.
|
|
4584
|
+
* Set this when the value fails validation: it drives the destructive border
|
|
4585
|
+
* and is what assistive technology announces. Point `aria-describedby` at
|
|
4586
|
+
* the error message so the two are read together.
|
|
4587
|
+
*/
|
|
4588
|
+
aria-invalid?: boolean | "true" | "false" | "grammar" | "spelling" | undefined
|
|
4589
|
+
|
|
4590
|
+
/**
|
|
4591
|
+
* Blocks interaction, greys the control out and drops its shadow. The value
|
|
4592
|
+
* is not submitted. When the user still needs to read or copy the value,
|
|
4593
|
+
* use `readOnly` instead.
|
|
4594
|
+
*/
|
|
4595
|
+
disabled?: boolean
|
|
4596
|
+
|
|
4597
|
+
/**
|
|
4598
|
+
* Short hint shown while the field is empty. It disappears on the first
|
|
4599
|
+
* keystroke, so it is never a substitute for a label.
|
|
4600
|
+
*/
|
|
4601
|
+
placeholder?: string
|
|
4602
|
+
|
|
4603
|
+
/**
|
|
4604
|
+
* Keeps the value focusable and copyable but not editable, and still
|
|
4605
|
+
* submits it. Unlike `disabled`, it stays in the tab order.
|
|
4606
|
+
*/
|
|
4607
|
+
readOnly?: boolean
|
|
4608
|
+
|
|
4609
|
+
/**
|
|
4610
|
+
* Marks the control required for both the browser and assistive technology.
|
|
4611
|
+
*/
|
|
4612
|
+
required?: boolean
|
|
4613
|
+
|
|
4614
|
+
/**
|
|
4615
|
+
* Control height. Defaults to `'md'`.
|
|
4616
|
+
* - `sm` (32px) — dense layouts where vertical space is tight.
|
|
4617
|
+
* - `md` (40px) — standard form density.
|
|
4618
|
+
* - `lg` (48px) — low-density forms and larger touch targets. Also raises
|
|
4619
|
+
* the text to `base` and the corner radius to `lg`.
|
|
4620
|
+
*/
|
|
4621
|
+
size?: "sm" | "md" | "lg"
|
|
4622
|
+
|
|
4623
|
+
/**
|
|
4624
|
+
* Native input type. Picks the on-screen keyboard on touch devices and the
|
|
4625
|
+
* browser's own parsing, so set it even when you validate yourself.
|
|
4626
|
+
* Defaults to `'text'`. Multi-line text is not one of the options — that is
|
|
4627
|
+
* a TextArea.
|
|
4628
|
+
*/
|
|
4629
|
+
type?: HTMLInputTypeAttribute | undefined</code></pre>
|
|
4630
|
+
</div>
|
|
4631
|
+
</div>
|
|
4632
|
+
|
|
4633
|
+
<div class="panel panel-stories">
|
|
4634
|
+
|
|
4635
|
+
|
|
4636
|
+
|
|
4637
|
+
<div class="note ok">
|
|
4638
|
+
<div class="row">
|
|
4639
|
+
<span class="ex-name">Imports</span>
|
|
4640
|
+
</div>
|
|
4641
|
+
<pre><code>import { Input } from "@agentero/design-system";</code></pre>
|
|
4642
|
+
</div>
|
|
4643
|
+
|
|
4644
|
+
|
|
4645
|
+
<div class="note ok">
|
|
4646
|
+
<div class="row">
|
|
4647
|
+
<span class="ex-name">Default</span>
|
|
4648
|
+
<span class="badge ok">story ok</span>
|
|
4649
|
+
</div>
|
|
4650
|
+
<div>Default standalone input</div>
|
|
4651
|
+
<div class="hint">The default control at `md`, usable anywhere without a surrounding field.</div>
|
|
4652
|
+
<pre><code>const Default = () => <Input type="text" placeholder="Insert value" aria-label="Value" />;</code></pre>
|
|
4653
|
+
</div>
|
|
4654
|
+
<div class="note ok">
|
|
4655
|
+
<div class="row">
|
|
4656
|
+
<span class="ex-name">Small</span>
|
|
4657
|
+
<span class="badge ok">story ok</span>
|
|
4658
|
+
</div>
|
|
4659
|
+
<div>Small 32px control for dense layouts</div>
|
|
4660
|
+
<div class="hint">`sm` (32px) keeps dense layouts compact where vertical space is tight.</div>
|
|
4661
|
+
<pre><code>const Small = () => <Input type="text" placeholder="Insert value" aria-label="Value" size="sm" />;</code></pre>
|
|
4662
|
+
</div>
|
|
4663
|
+
<div class="note ok">
|
|
4664
|
+
<div class="row">
|
|
4665
|
+
<span class="ex-name">Medium</span>
|
|
4666
|
+
<span class="badge ok">story ok</span>
|
|
4667
|
+
</div>
|
|
4668
|
+
<div>Medium 40px control, the default</div>
|
|
4669
|
+
<div class="hint">`md` (40px) is the default and covers standard form density.</div>
|
|
4670
|
+
<pre><code>const Medium = () => <Input type="text" placeholder="Insert value" aria-label="Value" size="md" />;</code></pre>
|
|
4671
|
+
</div>
|
|
4672
|
+
<div class="note ok">
|
|
4673
|
+
<div class="row">
|
|
4674
|
+
<span class="ex-name">Large</span>
|
|
4675
|
+
<span class="badge ok">story ok</span>
|
|
4676
|
+
</div>
|
|
4677
|
+
<div>Large 48px control for low-density forms</div>
|
|
4678
|
+
<div class="hint">`lg` (48px) suits low-density forms and larger touch targets. It also raises
|
|
4679
|
+
the text to `base` and the corner radius to `lg`.</div>
|
|
4680
|
+
<pre><code>const Large = () => <Input type="text" placeholder="Insert value" aria-label="Value" size="lg" />;</code></pre>
|
|
4681
|
+
</div>
|
|
4682
|
+
<div class="note ok">
|
|
4683
|
+
<div class="row">
|
|
4684
|
+
<span class="ex-name">All Sizes</span>
|
|
4685
|
+
<span class="badge ok">story ok</span>
|
|
4686
|
+
</div>
|
|
4687
|
+
<div>Visual comparison of the three input sizes</div>
|
|
4688
|
+
<div class="hint">All three heights together for visual comparison.</div>
|
|
4689
|
+
<pre><code>const AllSizes = () => <div style={{ display: 'grid', gap: '1rem', maxWidth: '20rem' }}>
|
|
4690
|
+
<Input type="text" size="sm" aria-label="Small input" placeholder="sm — 32px" />
|
|
4691
|
+
<Input type="text" size="md" aria-label="Medium input" placeholder="md — 40px" />
|
|
4692
|
+
<Input type="text" size="lg" aria-label="Large input" placeholder="lg — 48px" />
|
|
4693
|
+
</div>;</code></pre>
|
|
4694
|
+
</div>
|
|
4695
|
+
<div class="note ok">
|
|
4696
|
+
<div class="row">
|
|
4697
|
+
<span class="ex-name">Types</span>
|
|
4698
|
+
<span class="badge ok">story ok</span>
|
|
4699
|
+
</div>
|
|
4700
|
+
<div>Common input types side by side</div>
|
|
4701
|
+
<div class="hint">A range of input types. The type picks the on-screen keyboard on touch
|
|
4702
|
+
devices and the browser's own parsing, so set it even when you validate
|
|
4703
|
+
yourself.</div>
|
|
4704
|
+
<pre><code>const Types = () => <div style={{ display: 'grid', gap: '1rem', maxWidth: '20rem' }}>
|
|
4705
|
+
<Input type="text" aria-label="Text" placeholder="Text" />
|
|
4706
|
+
<Input type="email" aria-label="Email address" placeholder="you@example.com" />
|
|
4707
|
+
<Input type="password" aria-label="Password" placeholder="Password" />
|
|
4708
|
+
<Input type="number" aria-label="Amount" placeholder="0" />
|
|
4709
|
+
<Input type="date" aria-label="Date" placeholder="" />
|
|
4710
|
+
</div>;</code></pre>
|
|
4711
|
+
</div>
|
|
4712
|
+
<div class="note ok">
|
|
4713
|
+
<div class="row">
|
|
4714
|
+
<span class="ex-name">Invalid</span>
|
|
4715
|
+
<span class="badge ok">story ok</span>
|
|
4716
|
+
</div>
|
|
4717
|
+
<div>Invalid state driven by aria-invalid</div>
|
|
4718
|
+
<div class="hint">The invalid treatment comes purely from `aria-invalid`, so the border can
|
|
4719
|
+
never disagree with what assistive technology announces. Point
|
|
4720
|
+
`aria-describedby` at the message so it is read out with the control.</div>
|
|
4721
|
+
<pre><code>const Invalid = () => <div style={{ display: 'grid', gap: '0.25rem', maxWidth: '20rem' }}>
|
|
4722
|
+
<Input
|
|
4723
|
+
type="email"
|
|
4724
|
+
placeholder="Insert value"
|
|
4725
|
+
aria-label="Email"
|
|
4726
|
+
aria-invalid
|
|
4727
|
+
aria-describedby="email-error"
|
|
4728
|
+
defaultValue="not-an-email" />
|
|
4729
|
+
<span id="email-error">Enter a valid email address.</span>
|
|
4730
|
+
</div>;</code></pre>
|
|
4731
|
+
</div>
|
|
4732
|
+
<div class="note ok">
|
|
4733
|
+
<div class="row">
|
|
4734
|
+
<span class="ex-name">Disabled</span>
|
|
4735
|
+
<span class="badge ok">story ok</span>
|
|
4736
|
+
</div>
|
|
4737
|
+
<div>Disabled state</div>
|
|
4738
|
+
<div class="hint">A disabled input keeps its value readable but blocks interaction, drops its
|
|
4739
|
+
shadow and leaves the tab order.</div>
|
|
4740
|
+
<pre><code>const Disabled = () => <Input
|
|
4741
|
+
type="text"
|
|
4742
|
+
placeholder="Insert value"
|
|
4743
|
+
aria-label="Value"
|
|
4744
|
+
disabled
|
|
4745
|
+
defaultValue="Cannot be edited" />;</code></pre>
|
|
4746
|
+
</div>
|
|
4747
|
+
<div class="note ok">
|
|
4748
|
+
<div class="row">
|
|
4749
|
+
<span class="ex-name">Read Only</span>
|
|
4750
|
+
<span class="badge ok">story ok</span>
|
|
4751
|
+
</div>
|
|
4752
|
+
<div>Read-only value that stays focusable and copyable</div>
|
|
4753
|
+
<div class="hint">Read-only inputs stay focusable and copyable and still submit their value —
|
|
4754
|
+
reach for this over `disabled` when the user needs to read or copy something
|
|
4755
|
+
they cannot change.</div>
|
|
4756
|
+
<pre><code>const ReadOnly = () => <Input
|
|
4757
|
+
type="text"
|
|
4758
|
+
placeholder="Insert value"
|
|
4759
|
+
aria-label="Value"
|
|
4760
|
+
readOnly
|
|
4761
|
+
defaultValue="Copy me, but do not change me" />;</code></pre>
|
|
4762
|
+
</div>
|
|
4763
|
+
</div>
|
|
4764
|
+
|
|
4765
|
+
|
|
4507
4766
|
</div>
|
|
4508
4767
|
</article>
|
|
4509
4768
|
<article
|
|
@@ -4518,9 +4777,9 @@ trigger-dense UIs where an instant preview reads as more responsive.</div>
|
|
|
4518
4777
|
<div class="title">
|
|
4519
4778
|
<h2><span class="status-dot dot-ok"></span> Label</h2>
|
|
4520
4779
|
<div class="badges">
|
|
4521
|
-
<label for="c-
|
|
4780
|
+
<label for="c-12-components-label-props" class="badge ok as-toggle">3 prop types</label>
|
|
4522
4781
|
|
|
4523
|
-
<label for="c-
|
|
4782
|
+
<label for="c-12-components-label-stories" class="badge ok as-toggle">4 stories</label>
|
|
4524
4783
|
|
|
4525
4784
|
|
|
4526
4785
|
</div>
|
|
@@ -4540,10 +4799,10 @@ still has to carry `required` / `aria-required`.</div>
|
|
|
4540
4799
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
4541
4800
|
|
|
4542
4801
|
|
|
4543
|
-
<input id="c-
|
|
4802
|
+
<input id="c-12-components-label-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
4544
4803
|
|
|
4545
4804
|
|
|
4546
|
-
<input id="c-
|
|
4805
|
+
<input id="c-12-components-label-props" class="tg tg-props" type="checkbox" hidden />
|
|
4547
4806
|
|
|
4548
4807
|
<div class="panels">
|
|
4549
4808
|
|
|
@@ -4641,9 +4900,9 @@ dropped, so a mistake never takes the page down.</div>
|
|
|
4641
4900
|
<div class="title">
|
|
4642
4901
|
<h2><span class="status-dot dot-ok"></span> Loading</h2>
|
|
4643
4902
|
<div class="badges">
|
|
4644
|
-
<label for="c-
|
|
4903
|
+
<label for="c-13-components-loading-props" class="badge ok as-toggle">1 prop type</label>
|
|
4645
4904
|
|
|
4646
|
-
<label for="c-
|
|
4905
|
+
<label for="c-13-components-loading-stories" class="badge ok as-toggle">7 stories</label>
|
|
4647
4906
|
|
|
4648
4907
|
|
|
4649
4908
|
</div>
|
|
@@ -4660,10 +4919,10 @@ parent font size via `em`-based size variants (`sm`, `md`, `lg`).</div>
|
|
|
4660
4919
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
4661
4920
|
|
|
4662
4921
|
|
|
4663
|
-
<input id="c-
|
|
4922
|
+
<input id="c-13-components-loading-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
4664
4923
|
|
|
4665
4924
|
|
|
4666
|
-
<input id="c-
|
|
4925
|
+
<input id="c-13-components-loading-props" class="tg tg-props" type="checkbox" hidden />
|
|
4667
4926
|
|
|
4668
4927
|
<div class="panels">
|
|
4669
4928
|
|
|
@@ -4814,9 +5073,9 @@ against the dark background.</div>
|
|
|
4814
5073
|
<div class="title">
|
|
4815
5074
|
<h2><span class="status-dot dot-ok"></span> Modal.Root</h2>
|
|
4816
5075
|
<div class="badges">
|
|
4817
|
-
<label for="c-
|
|
5076
|
+
<label for="c-14-components-modal-props" class="badge ok as-toggle">5 prop types</label>
|
|
4818
5077
|
|
|
4819
|
-
<label for="c-
|
|
5078
|
+
<label for="c-14-components-modal-stories" class="badge ok as-toggle">6 stories</label>
|
|
4820
5079
|
|
|
4821
5080
|
|
|
4822
5081
|
</div>
|
|
@@ -4862,10 +5121,10 @@ import { Modal } from '@agentero/design-system/modal';
|
|
|
4862
5121
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
4863
5122
|
|
|
4864
5123
|
|
|
4865
|
-
<input id="c-
|
|
5124
|
+
<input id="c-14-components-modal-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
4866
5125
|
|
|
4867
5126
|
|
|
4868
|
-
<input id="c-
|
|
5127
|
+
<input id="c-14-components-modal-props" class="tg tg-props" type="checkbox" hidden />
|
|
4869
5128
|
|
|
4870
5129
|
<div class="panels">
|
|
4871
5130
|
|
|
@@ -5062,9 +5321,9 @@ announced as an `alertdialog`. Only the footer actions close it.</div>
|
|
|
5062
5321
|
<div class="title">
|
|
5063
5322
|
<h2><span class="status-dot dot-ok"></span> Pagination</h2>
|
|
5064
5323
|
<div class="badges">
|
|
5065
|
-
<label for="c-
|
|
5324
|
+
<label for="c-15-components-pagination-props" class="badge ok as-toggle">5 prop types</label>
|
|
5066
5325
|
|
|
5067
|
-
<label for="c-
|
|
5326
|
+
<label for="c-15-components-pagination-stories" class="badge ok as-toggle">7 stories</label>
|
|
5068
5327
|
|
|
5069
5328
|
|
|
5070
5329
|
</div>
|
|
@@ -5094,10 +5353,10 @@ const [page, setPage] = useState(1);
|
|
|
5094
5353
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
5095
5354
|
|
|
5096
5355
|
|
|
5097
|
-
<input id="c-
|
|
5356
|
+
<input id="c-15-components-pagination-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
5098
5357
|
|
|
5099
5358
|
|
|
5100
|
-
<input id="c-
|
|
5359
|
+
<input id="c-15-components-pagination-props" class="tg tg-props" type="checkbox" hidden />
|
|
5101
5360
|
|
|
5102
5361
|
<div class="panels">
|
|
5103
5362
|
|
|
@@ -5252,9 +5511,9 @@ entries summary follow along.</div>
|
|
|
5252
5511
|
<div class="title">
|
|
5253
5512
|
<h2><span class="status-dot dot-ok"></span> Popover.Root</h2>
|
|
5254
5513
|
<div class="badges">
|
|
5255
|
-
<label for="c-
|
|
5514
|
+
<label for="c-16-components-popover-props" class="badge ok as-toggle">5 prop types</label>
|
|
5256
5515
|
|
|
5257
|
-
<label for="c-
|
|
5516
|
+
<label for="c-16-components-popover-stories" class="badge ok as-toggle">4 stories</label>
|
|
5258
5517
|
|
|
5259
5518
|
|
|
5260
5519
|
</div>
|
|
@@ -5283,10 +5542,10 @@ import { Popover } from '@agentero/design-system/popover';
|
|
|
5283
5542
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
5284
5543
|
|
|
5285
5544
|
|
|
5286
|
-
<input id="c-
|
|
5545
|
+
<input id="c-16-components-popover-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
5287
5546
|
|
|
5288
5547
|
|
|
5289
|
-
<input id="c-
|
|
5548
|
+
<input id="c-16-components-popover-props" class="tg tg-props" type="checkbox" hidden />
|
|
5290
5549
|
|
|
5291
5550
|
<div class="panels">
|
|
5292
5551
|
|
|
@@ -5441,9 +5700,9 @@ useful when the visual anchor differs from the toggle button.</div>
|
|
|
5441
5700
|
<div class="title">
|
|
5442
5701
|
<h2><span class="status-dot dot-ok"></span> Progress</h2>
|
|
5443
5702
|
<div class="badges">
|
|
5444
|
-
<label for="c-
|
|
5703
|
+
<label for="c-17-components-progress-props" class="badge ok as-toggle">4 prop types</label>
|
|
5445
5704
|
|
|
5446
|
-
<label for="c-
|
|
5705
|
+
<label for="c-17-components-progress-stories" class="badge ok as-toggle">4 stories</label>
|
|
5447
5706
|
|
|
5448
5707
|
|
|
5449
5708
|
</div>
|
|
@@ -5462,10 +5721,10 @@ with `currentColor`, so recolor it with a plain text class — e.g.
|
|
|
5462
5721
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
5463
5722
|
|
|
5464
5723
|
|
|
5465
|
-
<input id="c-
|
|
5724
|
+
<input id="c-17-components-progress-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
5466
5725
|
|
|
5467
5726
|
|
|
5468
|
-
<input id="c-
|
|
5727
|
+
<input id="c-17-components-progress-props" class="tg tg-props" type="checkbox" hidden />
|
|
5469
5728
|
|
|
5470
5729
|
<div class="panels">
|
|
5471
5730
|
|
|
@@ -5584,7 +5843,7 @@ percentage: number</code></pre>
|
|
|
5584
5843
|
<div class="badges">
|
|
5585
5844
|
|
|
5586
5845
|
|
|
5587
|
-
<label for="c-
|
|
5846
|
+
<label for="c-18-components-skeleton-stories" class="badge ok as-toggle">4 stories</label>
|
|
5588
5847
|
|
|
5589
5848
|
|
|
5590
5849
|
</div>
|
|
@@ -5601,7 +5860,7 @@ shape it with Tailwind classes to mirror the content it stands in for.</div>
|
|
|
5601
5860
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
5602
5861
|
|
|
5603
5862
|
|
|
5604
|
-
<input id="c-
|
|
5863
|
+
<input id="c-18-components-skeleton-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
5605
5864
|
|
|
5606
5865
|
|
|
5607
5866
|
|
|
@@ -5697,9 +5956,9 @@ shape it with Tailwind classes to mirror the content it stands in for.</div>
|
|
|
5697
5956
|
<div class="title">
|
|
5698
5957
|
<h2><span class="status-dot dot-ok"></span> Switch</h2>
|
|
5699
5958
|
<div class="badges">
|
|
5700
|
-
<label for="c-
|
|
5959
|
+
<label for="c-19-components-switch-props" class="badge ok as-toggle">8 prop types</label>
|
|
5701
5960
|
|
|
5702
|
-
<label for="c-
|
|
5961
|
+
<label for="c-19-components-switch-stories" class="badge ok as-toggle">7 stories</label>
|
|
5703
5962
|
|
|
5704
5963
|
|
|
5705
5964
|
</div>
|
|
@@ -5715,10 +5974,10 @@ a Checkbox for a single boolean that applies instantly, and pair it with a
|
|
|
5715
5974
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
5716
5975
|
|
|
5717
5976
|
|
|
5718
|
-
<input id="c-
|
|
5977
|
+
<input id="c-19-components-switch-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
5719
5978
|
|
|
5720
5979
|
|
|
5721
|
-
<input id="c-
|
|
5980
|
+
<input id="c-19-components-switch-props" class="tg tg-props" type="checkbox" hidden />
|
|
5722
5981
|
|
|
5723
5982
|
<div class="panels">
|
|
5724
5983
|
|
|
@@ -5899,9 +6158,9 @@ size?: "sm" | "md"</code></pre>
|
|
|
5899
6158
|
<div class="title">
|
|
5900
6159
|
<h2><span class="status-dot dot-ok"></span> Table.Root</h2>
|
|
5901
6160
|
<div class="badges">
|
|
5902
|
-
<label for="c-
|
|
6161
|
+
<label for="c-20-components-table-props" class="badge ok as-toggle">6 prop types</label>
|
|
5903
6162
|
|
|
5904
|
-
<label for="c-
|
|
6163
|
+
<label for="c-20-components-table-stories" class="badge ok as-toggle">9 stories</label>
|
|
5905
6164
|
|
|
5906
6165
|
|
|
5907
6166
|
</div>
|
|
@@ -5932,10 +6191,10 @@ import { Table } from '@agentero/design-system/table';
|
|
|
5932
6191
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
5933
6192
|
|
|
5934
6193
|
|
|
5935
|
-
<input id="c-
|
|
6194
|
+
<input id="c-20-components-table-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
5936
6195
|
|
|
5937
6196
|
|
|
5938
|
-
<input id="c-
|
|
6197
|
+
<input id="c-20-components-table-props" class="tg tg-props" type="checkbox" hidden />
|
|
5939
6198
|
|
|
5940
6199
|
<div class="panels">
|
|
5941
6200
|
|
|
@@ -6130,9 +6389,9 @@ import { Fragment } from "react";</code></pre>
|
|
|
6130
6389
|
<div class="title">
|
|
6131
6390
|
<h2><span class="status-dot dot-ok"></span> Tabs.Root</h2>
|
|
6132
6391
|
<div class="badges">
|
|
6133
|
-
<label for="c-
|
|
6392
|
+
<label for="c-21-components-tabs-props" class="badge ok as-toggle">9 prop types</label>
|
|
6134
6393
|
|
|
6135
|
-
<label for="c-
|
|
6394
|
+
<label for="c-21-components-tabs-stories" class="badge ok as-toggle">8 stories</label>
|
|
6136
6395
|
|
|
6137
6396
|
|
|
6138
6397
|
</div>
|
|
@@ -6163,10 +6422,10 @@ import { Tabs } from '@agentero/design-system/tabs';
|
|
|
6163
6422
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
6164
6423
|
|
|
6165
6424
|
|
|
6166
|
-
<input id="c-
|
|
6425
|
+
<input id="c-21-components-tabs-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
6167
6426
|
|
|
6168
6427
|
|
|
6169
|
-
<input id="c-
|
|
6428
|
+
<input id="c-21-components-tabs-props" class="tg tg-props" type="checkbox" hidden />
|
|
6170
6429
|
|
|
6171
6430
|
<div class="panels">
|
|
6172
6431
|
|
|
@@ -6387,9 +6646,9 @@ tablist role is announced.</div>
|
|
|
6387
6646
|
<div class="title">
|
|
6388
6647
|
<h2><span class="status-dot dot-ok"></span> Tag</h2>
|
|
6389
6648
|
<div class="badges">
|
|
6390
|
-
<label for="c-
|
|
6649
|
+
<label for="c-22-components-tag-props" class="badge ok as-toggle">8 prop types</label>
|
|
6391
6650
|
|
|
6392
|
-
<label for="c-
|
|
6651
|
+
<label for="c-22-components-tag-stories" class="badge ok as-toggle">12 stories</label>
|
|
6393
6652
|
|
|
6394
6653
|
|
|
6395
6654
|
</div>
|
|
@@ -6408,10 +6667,10 @@ it an interactive link or button, which adds the pointer cursor and hover fill.<
|
|
|
6408
6667
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
6409
6668
|
|
|
6410
6669
|
|
|
6411
|
-
<input id="c-
|
|
6670
|
+
<input id="c-22-components-tag-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
6412
6671
|
|
|
6413
6672
|
|
|
6414
|
-
<input id="c-
|
|
6673
|
+
<input id="c-22-components-tag-props" class="tg tg-props" type="checkbox" hidden />
|
|
6415
6674
|
|
|
6416
6675
|
<div class="panels">
|
|
6417
6676
|
|
|
@@ -6836,9 +7095,9 @@ leading + trailing icons, and icon-only.</div>
|
|
|
6836
7095
|
<div class="title">
|
|
6837
7096
|
<h2><span class="status-dot dot-ok"></span> Toast</h2>
|
|
6838
7097
|
<div class="badges">
|
|
6839
|
-
<label for="c-
|
|
7098
|
+
<label for="c-23-components-toast-props" class="badge ok as-toggle">11 prop types</label>
|
|
6840
7099
|
|
|
6841
|
-
<label for="c-
|
|
7100
|
+
<label for="c-23-components-toast-stories" class="badge ok as-toggle">11 stories</label>
|
|
6842
7101
|
|
|
6843
7102
|
|
|
6844
7103
|
</div>
|
|
@@ -6857,10 +7116,10 @@ common feedback patterns.</div>
|
|
|
6857
7116
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
6858
7117
|
|
|
6859
7118
|
|
|
6860
|
-
<input id="c-
|
|
7119
|
+
<input id="c-23-components-toast-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
6861
7120
|
|
|
6862
7121
|
|
|
6863
|
-
<input id="c-
|
|
7122
|
+
<input id="c-23-components-toast-props" class="tg tg-props" type="checkbox" hidden />
|
|
6864
7123
|
|
|
6865
7124
|
<div class="panels">
|
|
6866
7125
|
|
|
@@ -7289,9 +7548,9 @@ action (e.g., a sync icon for a sync-in-progress toast).</div>
|
|
|
7289
7548
|
<div class="title">
|
|
7290
7549
|
<h2><span class="status-dot dot-ok"></span> Tooltip</h2>
|
|
7291
7550
|
<div class="badges">
|
|
7292
|
-
<label for="c-
|
|
7551
|
+
<label for="c-24-components-tooltip-props" class="badge ok as-toggle">12 prop types</label>
|
|
7293
7552
|
|
|
7294
|
-
<label for="c-
|
|
7553
|
+
<label for="c-24-components-tooltip-stories" class="badge ok as-toggle">5 stories</label>
|
|
7295
7554
|
|
|
7296
7555
|
|
|
7297
7556
|
</div>
|
|
@@ -7310,10 +7569,10 @@ on hover or focus.</div>
|
|
|
7310
7569
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
7311
7570
|
|
|
7312
7571
|
|
|
7313
|
-
<input id="c-
|
|
7572
|
+
<input id="c-24-components-tooltip-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
7314
7573
|
|
|
7315
7574
|
|
|
7316
|
-
<input id="c-
|
|
7575
|
+
<input id="c-24-components-tooltip-props" class="tg tg-props" type="checkbox" hidden />
|
|
7317
7576
|
|
|
7318
7577
|
<div class="panels">
|
|
7319
7578
|
|
|
@@ -7485,9 +7744,9 @@ sideOffset?: number = 4</code></pre>
|
|
|
7485
7744
|
<div class="title">
|
|
7486
7745
|
<h2><span class="status-dot dot-ok"></span> ValidationList</h2>
|
|
7487
7746
|
<div class="badges">
|
|
7488
|
-
<label for="c-
|
|
7747
|
+
<label for="c-25-components-validationlist-props" class="badge ok as-toggle">2 prop types</label>
|
|
7489
7748
|
|
|
7490
|
-
<label for="c-
|
|
7749
|
+
<label for="c-25-components-validationlist-stories" class="badge ok as-toggle">4 stories</label>
|
|
7491
7750
|
|
|
7492
7751
|
|
|
7493
7752
|
</div>
|
|
@@ -7508,10 +7767,10 @@ your form validation; it does not own the input or block submission.</div>
|
|
|
7508
7767
|
<!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
|
|
7509
7768
|
|
|
7510
7769
|
|
|
7511
|
-
<input id="c-
|
|
7770
|
+
<input id="c-25-components-validationlist-stories" class="tg tg-stories" type="checkbox" hidden />
|
|
7512
7771
|
|
|
7513
7772
|
|
|
7514
|
-
<input id="c-
|
|
7773
|
+
<input id="c-25-components-validationlist-props" class="tg tg-props" type="checkbox" hidden />
|
|
7515
7774
|
|
|
7516
7775
|
<div class="panels">
|
|
7517
7776
|
|
|
@@ -1923,6 +1923,12 @@
|
|
|
1923
1923
|
"id": "components-command--keyboard-navigation",
|
|
1924
1924
|
"name": "Keyboard Navigation",
|
|
1925
1925
|
"snippet": "const KeyboardNavigation = () => <Command.Root label=\"Search commands\">\n <Command.Input placeholder=\"Search...\" />\n <Command.List>\n <Command.Item value=\"home\" keywords={['Homeowners']} onSelect={handleSelect}>Homeowners\n </Command.Item>\n <Command.Item value=\"auto\" keywords={['Auto']} onSelect={handleSelect}>Auto\n </Command.Item>\n </Command.List>\n <Command.Empty>No results found.</Command.Empty>\n</Command.Root>;"
|
|
1926
|
+
},
|
|
1927
|
+
{
|
|
1928
|
+
"id": "components-command--disabled-item",
|
|
1929
|
+
"name": "Disabled Item",
|
|
1930
|
+
"snippet": "const DisabledItem = () => <Command.Root label=\"Search agencies\">\n <Command.Input placeholder=\"Search...\" />\n <Command.List>\n <Command.Item value=\"pinnacle\" onSelect={handleDisabledSelect}>Pinnacle Shield Insurance\n </Command.Item>\n <Command.Item value=\"horizon\" disabled onSelect={handleDisabledSelect}>Horizon Risk Solutions\n </Command.Item>\n </Command.List>\n <Command.Empty>No results found.</Command.Empty>\n</Command.Root>;",
|
|
1931
|
+
"description": "A `disabled` row stays visible and searchable but cannot be chosen. cmdk skips it with the\narrow keys and swallows the click, and the row drops its hover and active styling so the\nlist does not invite the pointer."
|
|
1926
1932
|
}
|
|
1927
1933
|
],
|
|
1928
1934
|
"import": "import { Command } from \"@agentero/design-system\";"
|
|
@@ -4305,6 +4311,274 @@
|
|
|
4305
4311
|
],
|
|
4306
4312
|
"import": "import { Avatar, Button, HoverCard } from \"@agentero/design-system\";"
|
|
4307
4313
|
},
|
|
4314
|
+
"components-input": {
|
|
4315
|
+
"id": "components-input",
|
|
4316
|
+
"name": "Input",
|
|
4317
|
+
"path": "./src/input/input.stories.tsx",
|
|
4318
|
+
"jsDocTags": {
|
|
4319
|
+
"summary": [
|
|
4320
|
+
"Base single-line text control, unaware of fields and form libraries"
|
|
4321
|
+
],
|
|
4322
|
+
"example": [
|
|
4323
|
+
"<Label htmlFor=\"email\">Email</Label>\n<Input id=\"email\" type=\"email\" placeholder=\"you@example.com\" />",
|
|
4324
|
+
"<Input id=\"email\" aria-invalid aria-describedby=\"email-error\" />\n<span id=\"email-error\">Enter a valid email address.</span>"
|
|
4325
|
+
]
|
|
4326
|
+
},
|
|
4327
|
+
"description": "Input is the base single-line text control. It is intentionally unaware of\nform fields and form libraries: `id`, `aria-invalid` and `aria-describedby`\nare plain props, set by a field wrapper or by hand.\n\nThere is no `status` prop. Mark the control `aria-invalid` and the\ndestructive border follows, so the styling can never disagree with what\nassistive technology announces.",
|
|
4328
|
+
"summary": "Base single-line text control, unaware of fields and form libraries",
|
|
4329
|
+
"reactComponentMeta": {
|
|
4330
|
+
"displayName": "Input",
|
|
4331
|
+
"exportName": "Input",
|
|
4332
|
+
"filePath": "/home/runner/work/design-system/design-system/src/input/input.tsx",
|
|
4333
|
+
"description": "Input is the design system's base single-line text control. Reach for it\nwhenever a form collects free text, and pair it with\n[Label](?path=/docs/components-label--docs) so the control has an accessible\nname.\n\nIt is deliberately self-contained: it renders the props it is given and\nknows nothing about form fields, form libraries, or surrounding layout.\nWiring (`id`, `aria-invalid`, `aria-describedby`) arrives as plain props, so\na field wrapper can inject them and standalone usage can set them by hand.\nThere is no `status` prop — mark the control `aria-invalid` and the\ndestructive border follows.\n\nDo not use Input for multi-line text; that is TextArea's job. It also has no\nslots for leading or trailing addons — an input with a currency prefix or a\nunit suffix belongs in an input group, not here.",
|
|
4334
|
+
"jsDocTags": {
|
|
4335
|
+
"summary": [
|
|
4336
|
+
"Base single-line text control, unaware of fields and form libraries"
|
|
4337
|
+
],
|
|
4338
|
+
"example": [
|
|
4339
|
+
"<Label htmlFor=\"email\">Email</Label>\n<Input id=\"email\" type=\"email\" placeholder=\"you@example.com\" />",
|
|
4340
|
+
"<Input id=\"email\" aria-invalid aria-describedby=\"email-error\" />\n<span id=\"email-error\">Enter a valid email address.</span>"
|
|
4341
|
+
]
|
|
4342
|
+
},
|
|
4343
|
+
"props": {
|
|
4344
|
+
"aria-invalid": {
|
|
4345
|
+
"name": "aria-invalid",
|
|
4346
|
+
"required": false,
|
|
4347
|
+
"type": {
|
|
4348
|
+
"name": "boolean | \"true\" | \"false\" | \"grammar\" | \"spelling\" | undefined"
|
|
4349
|
+
},
|
|
4350
|
+
"description": "Indicates the entered value does not conform to the format expected by the application.\nSet this when the value fails validation: it drives the destructive border\nand is what assistive technology announces. Point `aria-describedby` at\nthe error message so the two are read together.",
|
|
4351
|
+
"defaultValue": null,
|
|
4352
|
+
"parent": {
|
|
4353
|
+
"name": "AriaAttributes",
|
|
4354
|
+
"fileName": "node_modules/@types/react/index.d.ts"
|
|
4355
|
+
},
|
|
4356
|
+
"declarations": [
|
|
4357
|
+
{
|
|
4358
|
+
"name": "AriaAttributes",
|
|
4359
|
+
"fileName": "node_modules/@types/react/index.d.ts"
|
|
4360
|
+
},
|
|
4361
|
+
{
|
|
4362
|
+
"name": "TypeLiteral",
|
|
4363
|
+
"fileName": "src/input/input.tsx"
|
|
4364
|
+
}
|
|
4365
|
+
]
|
|
4366
|
+
},
|
|
4367
|
+
"type": {
|
|
4368
|
+
"name": "type",
|
|
4369
|
+
"required": false,
|
|
4370
|
+
"type": {
|
|
4371
|
+
"name": "HTMLInputTypeAttribute | undefined"
|
|
4372
|
+
},
|
|
4373
|
+
"description": "Native input type. Picks the on-screen keyboard on touch devices and the\nbrowser's own parsing, so set it even when you validate yourself.\nDefaults to `'text'`. Multi-line text is not one of the options — that is\na TextArea.",
|
|
4374
|
+
"defaultValue": null,
|
|
4375
|
+
"parent": {
|
|
4376
|
+
"name": "InputHTMLAttributes",
|
|
4377
|
+
"fileName": "node_modules/@types/react/index.d.ts"
|
|
4378
|
+
},
|
|
4379
|
+
"declarations": [
|
|
4380
|
+
{
|
|
4381
|
+
"name": "InputHTMLAttributes",
|
|
4382
|
+
"fileName": "node_modules/@types/react/index.d.ts"
|
|
4383
|
+
},
|
|
4384
|
+
{
|
|
4385
|
+
"name": "TypeLiteral",
|
|
4386
|
+
"fileName": "src/input/input.tsx"
|
|
4387
|
+
}
|
|
4388
|
+
]
|
|
4389
|
+
},
|
|
4390
|
+
"disabled": {
|
|
4391
|
+
"name": "disabled",
|
|
4392
|
+
"required": false,
|
|
4393
|
+
"type": {
|
|
4394
|
+
"name": "boolean"
|
|
4395
|
+
},
|
|
4396
|
+
"description": "Blocks interaction, greys the control out and drops its shadow. The value\nis not submitted. When the user still needs to read or copy the value,\nuse `readOnly` instead.",
|
|
4397
|
+
"defaultValue": null,
|
|
4398
|
+
"parent": {
|
|
4399
|
+
"name": "InputHTMLAttributes",
|
|
4400
|
+
"fileName": "node_modules/@types/react/index.d.ts"
|
|
4401
|
+
},
|
|
4402
|
+
"declarations": [
|
|
4403
|
+
{
|
|
4404
|
+
"name": "InputHTMLAttributes",
|
|
4405
|
+
"fileName": "node_modules/@types/react/index.d.ts"
|
|
4406
|
+
},
|
|
4407
|
+
{
|
|
4408
|
+
"name": "TypeLiteral",
|
|
4409
|
+
"fileName": "src/input/input.tsx"
|
|
4410
|
+
}
|
|
4411
|
+
]
|
|
4412
|
+
},
|
|
4413
|
+
"placeholder": {
|
|
4414
|
+
"name": "placeholder",
|
|
4415
|
+
"required": false,
|
|
4416
|
+
"type": {
|
|
4417
|
+
"name": "string"
|
|
4418
|
+
},
|
|
4419
|
+
"description": "Short hint shown while the field is empty. It disappears on the first\nkeystroke, so it is never a substitute for a label.",
|
|
4420
|
+
"defaultValue": null,
|
|
4421
|
+
"parent": {
|
|
4422
|
+
"name": "InputHTMLAttributes",
|
|
4423
|
+
"fileName": "node_modules/@types/react/index.d.ts"
|
|
4424
|
+
},
|
|
4425
|
+
"declarations": [
|
|
4426
|
+
{
|
|
4427
|
+
"name": "InputHTMLAttributes",
|
|
4428
|
+
"fileName": "node_modules/@types/react/index.d.ts"
|
|
4429
|
+
},
|
|
4430
|
+
{
|
|
4431
|
+
"name": "TypeLiteral",
|
|
4432
|
+
"fileName": "src/input/input.tsx"
|
|
4433
|
+
}
|
|
4434
|
+
]
|
|
4435
|
+
},
|
|
4436
|
+
"readOnly": {
|
|
4437
|
+
"name": "readOnly",
|
|
4438
|
+
"required": false,
|
|
4439
|
+
"type": {
|
|
4440
|
+
"name": "boolean"
|
|
4441
|
+
},
|
|
4442
|
+
"description": "Keeps the value focusable and copyable but not editable, and still\nsubmits it. Unlike `disabled`, it stays in the tab order.",
|
|
4443
|
+
"defaultValue": null,
|
|
4444
|
+
"parent": {
|
|
4445
|
+
"name": "InputHTMLAttributes",
|
|
4446
|
+
"fileName": "node_modules/@types/react/index.d.ts"
|
|
4447
|
+
},
|
|
4448
|
+
"declarations": [
|
|
4449
|
+
{
|
|
4450
|
+
"name": "InputHTMLAttributes",
|
|
4451
|
+
"fileName": "node_modules/@types/react/index.d.ts"
|
|
4452
|
+
},
|
|
4453
|
+
{
|
|
4454
|
+
"name": "TypeLiteral",
|
|
4455
|
+
"fileName": "src/input/input.tsx"
|
|
4456
|
+
}
|
|
4457
|
+
]
|
|
4458
|
+
},
|
|
4459
|
+
"required": {
|
|
4460
|
+
"name": "required",
|
|
4461
|
+
"required": false,
|
|
4462
|
+
"type": {
|
|
4463
|
+
"name": "boolean"
|
|
4464
|
+
},
|
|
4465
|
+
"description": "Marks the control required for both the browser and assistive technology.",
|
|
4466
|
+
"defaultValue": null,
|
|
4467
|
+
"parent": {
|
|
4468
|
+
"name": "InputHTMLAttributes",
|
|
4469
|
+
"fileName": "node_modules/@types/react/index.d.ts"
|
|
4470
|
+
},
|
|
4471
|
+
"declarations": [
|
|
4472
|
+
{
|
|
4473
|
+
"name": "InputHTMLAttributes",
|
|
4474
|
+
"fileName": "node_modules/@types/react/index.d.ts"
|
|
4475
|
+
},
|
|
4476
|
+
{
|
|
4477
|
+
"name": "TypeLiteral",
|
|
4478
|
+
"fileName": "src/input/input.tsx"
|
|
4479
|
+
}
|
|
4480
|
+
]
|
|
4481
|
+
},
|
|
4482
|
+
"size": {
|
|
4483
|
+
"name": "size",
|
|
4484
|
+
"required": false,
|
|
4485
|
+
"type": {
|
|
4486
|
+
"name": "enum",
|
|
4487
|
+
"raw": "\"sm\" | \"md\" | \"lg\"",
|
|
4488
|
+
"value": [
|
|
4489
|
+
{
|
|
4490
|
+
"value": "\"sm\""
|
|
4491
|
+
},
|
|
4492
|
+
{
|
|
4493
|
+
"value": "\"md\""
|
|
4494
|
+
},
|
|
4495
|
+
{
|
|
4496
|
+
"value": "\"lg\""
|
|
4497
|
+
}
|
|
4498
|
+
]
|
|
4499
|
+
},
|
|
4500
|
+
"description": "Control height. Defaults to `'md'`.\n- `sm` (32px) — dense layouts where vertical space is tight.\n- `md` (40px) — standard form density.\n- `lg` (48px) — low-density forms and larger touch targets. Also raises\n the text to `base` and the corner radius to `lg`.",
|
|
4501
|
+
"defaultValue": null,
|
|
4502
|
+
"parent": {
|
|
4503
|
+
"name": "InputProps",
|
|
4504
|
+
"fileName": "src/input/input.tsx"
|
|
4505
|
+
},
|
|
4506
|
+
"declarations": [
|
|
4507
|
+
{
|
|
4508
|
+
"name": "TypeLiteral",
|
|
4509
|
+
"fileName": "src/input/input.tsx"
|
|
4510
|
+
}
|
|
4511
|
+
]
|
|
4512
|
+
}
|
|
4513
|
+
}
|
|
4514
|
+
},
|
|
4515
|
+
"stories": [
|
|
4516
|
+
{
|
|
4517
|
+
"id": "components-input--default",
|
|
4518
|
+
"name": "Default",
|
|
4519
|
+
"snippet": "const Default = () => <Input type=\"text\" placeholder=\"Insert value\" aria-label=\"Value\" />;",
|
|
4520
|
+
"description": "The default control at `md`, usable anywhere without a surrounding field.",
|
|
4521
|
+
"summary": "Default standalone input"
|
|
4522
|
+
},
|
|
4523
|
+
{
|
|
4524
|
+
"id": "components-input--small",
|
|
4525
|
+
"name": "Small",
|
|
4526
|
+
"snippet": "const Small = () => <Input type=\"text\" placeholder=\"Insert value\" aria-label=\"Value\" size=\"sm\" />;",
|
|
4527
|
+
"description": "`sm` (32px) keeps dense layouts compact where vertical space is tight.",
|
|
4528
|
+
"summary": "Small 32px control for dense layouts"
|
|
4529
|
+
},
|
|
4530
|
+
{
|
|
4531
|
+
"id": "components-input--medium",
|
|
4532
|
+
"name": "Medium",
|
|
4533
|
+
"snippet": "const Medium = () => <Input type=\"text\" placeholder=\"Insert value\" aria-label=\"Value\" size=\"md\" />;",
|
|
4534
|
+
"description": "`md` (40px) is the default and covers standard form density.",
|
|
4535
|
+
"summary": "Medium 40px control, the default"
|
|
4536
|
+
},
|
|
4537
|
+
{
|
|
4538
|
+
"id": "components-input--large",
|
|
4539
|
+
"name": "Large",
|
|
4540
|
+
"snippet": "const Large = () => <Input type=\"text\" placeholder=\"Insert value\" aria-label=\"Value\" size=\"lg\" />;",
|
|
4541
|
+
"description": "`lg` (48px) suits low-density forms and larger touch targets. It also raises\nthe text to `base` and the corner radius to `lg`.",
|
|
4542
|
+
"summary": "Large 48px control for low-density forms"
|
|
4543
|
+
},
|
|
4544
|
+
{
|
|
4545
|
+
"id": "components-input--all-sizes",
|
|
4546
|
+
"name": "All Sizes",
|
|
4547
|
+
"snippet": "const AllSizes = () => <div style={{ display: 'grid', gap: '1rem', maxWidth: '20rem' }}>\n <Input type=\"text\" size=\"sm\" aria-label=\"Small input\" placeholder=\"sm — 32px\" />\n <Input type=\"text\" size=\"md\" aria-label=\"Medium input\" placeholder=\"md — 40px\" />\n <Input type=\"text\" size=\"lg\" aria-label=\"Large input\" placeholder=\"lg — 48px\" />\n</div>;",
|
|
4548
|
+
"description": "All three heights together for visual comparison.",
|
|
4549
|
+
"summary": "Visual comparison of the three input sizes"
|
|
4550
|
+
},
|
|
4551
|
+
{
|
|
4552
|
+
"id": "components-input--types",
|
|
4553
|
+
"name": "Types",
|
|
4554
|
+
"snippet": "const Types = () => <div style={{ display: 'grid', gap: '1rem', maxWidth: '20rem' }}>\n <Input type=\"text\" aria-label=\"Text\" placeholder=\"Text\" />\n <Input type=\"email\" aria-label=\"Email address\" placeholder=\"you@example.com\" />\n <Input type=\"password\" aria-label=\"Password\" placeholder=\"Password\" />\n <Input type=\"number\" aria-label=\"Amount\" placeholder=\"0\" />\n <Input type=\"date\" aria-label=\"Date\" placeholder=\"\" />\n</div>;",
|
|
4555
|
+
"description": "A range of input types. The type picks the on-screen keyboard on touch\ndevices and the browser's own parsing, so set it even when you validate\nyourself.",
|
|
4556
|
+
"summary": "Common input types side by side"
|
|
4557
|
+
},
|
|
4558
|
+
{
|
|
4559
|
+
"id": "components-input--invalid",
|
|
4560
|
+
"name": "Invalid",
|
|
4561
|
+
"snippet": "const Invalid = () => <div style={{ display: 'grid', gap: '0.25rem', maxWidth: '20rem' }}>\n <Input\n type=\"email\"\n placeholder=\"Insert value\"\n aria-label=\"Email\"\n aria-invalid\n aria-describedby=\"email-error\"\n defaultValue=\"not-an-email\" />\n <span id=\"email-error\">Enter a valid email address.</span>\n</div>;",
|
|
4562
|
+
"description": "The invalid treatment comes purely from `aria-invalid`, so the border can\nnever disagree with what assistive technology announces. Point\n`aria-describedby` at the message so it is read out with the control.",
|
|
4563
|
+
"summary": "Invalid state driven by aria-invalid"
|
|
4564
|
+
},
|
|
4565
|
+
{
|
|
4566
|
+
"id": "components-input--disabled",
|
|
4567
|
+
"name": "Disabled",
|
|
4568
|
+
"snippet": "const Disabled = () => <Input\n type=\"text\"\n placeholder=\"Insert value\"\n aria-label=\"Value\"\n disabled\n defaultValue=\"Cannot be edited\" />;",
|
|
4569
|
+
"description": "A disabled input keeps its value readable but blocks interaction, drops its\nshadow and leaves the tab order.",
|
|
4570
|
+
"summary": "Disabled state"
|
|
4571
|
+
},
|
|
4572
|
+
{
|
|
4573
|
+
"id": "components-input--read-only",
|
|
4574
|
+
"name": "Read Only",
|
|
4575
|
+
"snippet": "const ReadOnly = () => <Input\n type=\"text\"\n placeholder=\"Insert value\"\n aria-label=\"Value\"\n readOnly\n defaultValue=\"Copy me, but do not change me\" />;",
|
|
4576
|
+
"description": "Read-only inputs stay focusable and copyable and still submit their value —\nreach for this over `disabled` when the user needs to read or copy something\nthey cannot change.",
|
|
4577
|
+
"summary": "Read-only value that stays focusable and copyable"
|
|
4578
|
+
}
|
|
4579
|
+
],
|
|
4580
|
+
"import": "import { Input } from \"@agentero/design-system\";"
|
|
4581
|
+
},
|
|
4308
4582
|
"components-label": {
|
|
4309
4583
|
"id": "components-label",
|
|
4310
4584
|
"name": "Label",
|
|
@@ -7013,6 +7287,6 @@
|
|
|
7013
7287
|
},
|
|
7014
7288
|
"meta": {
|
|
7015
7289
|
"docgen": "react-component-meta",
|
|
7016
|
-
"durationMs":
|
|
7290
|
+
"durationMs": 5599
|
|
7017
7291
|
}
|
|
7018
7292
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentero/design-system",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.26.1",
|
|
4
4
|
"description": "A React component library built with Tailwind CSS v4 and Radix UI primitives",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -65,6 +65,10 @@
|
|
|
65
65
|
"types": "./src/hover-card/index.d.ts",
|
|
66
66
|
"import": "./src/hover-card/index.js"
|
|
67
67
|
},
|
|
68
|
+
"./input": {
|
|
69
|
+
"types": "./src/input/index.d.ts",
|
|
70
|
+
"import": "./src/input/index.js"
|
|
71
|
+
},
|
|
68
72
|
"./label": {
|
|
69
73
|
"types": "./src/label/index.d.ts",
|
|
70
74
|
"import": "./src/label/index.js"
|
package/src/command/command.d.ts
CHANGED
|
@@ -220,7 +220,8 @@ export declare const Group: {
|
|
|
220
220
|
* @property {string} [className] - Additional CSS classes to apply.
|
|
221
221
|
*
|
|
222
222
|
* @dataAttribute {string} data-selected - "true" on the active row, "false" otherwise
|
|
223
|
-
* @dataAttribute {string} data-disabled - "true" when disabled, "false" otherwise
|
|
223
|
+
* @dataAttribute {string} data-disabled - "true" when disabled, "false" otherwise. A disabled row
|
|
224
|
+
* drops the hover and active backgrounds and renders in the disabled text color.
|
|
224
225
|
*/
|
|
225
226
|
type ItemProps = ComponentProps<typeof CommandPrimitive.Item>;
|
|
226
227
|
/**
|
package/src/command/command.js
CHANGED
|
@@ -14,7 +14,9 @@ var a = t({ slots: {
|
|
|
14
14
|
item: [
|
|
15
15
|
"flex items-center rounded-md px-3 py-2 text-sm text-text-default-base-primary",
|
|
16
16
|
"cursor-pointer hover:bg-bg-default-base-tertiary",
|
|
17
|
-
"data-[selected=true]:bg-bg-default-base-tertiary"
|
|
17
|
+
"data-[selected=true]:bg-bg-default-base-tertiary",
|
|
18
|
+
"data-[disabled=true]:cursor-default data-[disabled=true]:text-text-default-disable-primary",
|
|
19
|
+
"data-[disabled=true]:hover:bg-transparent data-[disabled=true]:data-[selected=true]:bg-transparent"
|
|
18
20
|
]
|
|
19
21
|
} }), o = a(), s = ({ className: e, ...t }) => /* @__PURE__ */ n(i, {
|
|
20
22
|
"data-slot": "command-root",
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { ComponentPropsWithRef } from 'react';
|
|
2
|
+
import { VariantProps } from 'tailwind-variants';
|
|
3
|
+
/**
|
|
4
|
+
* Style recipe for Input. Single-element recipe with a `size` variant; the
|
|
5
|
+
* invalid treatment is driven entirely by the `aria-invalid` attribute so the
|
|
6
|
+
* visual state can never drift from what assistive technology announces.
|
|
7
|
+
*
|
|
8
|
+
* @summary tailwind-variants recipe backing the Input component styles
|
|
9
|
+
*/
|
|
10
|
+
export declare const inputRecipe: import('tailwind-variants').TVReturnType<{
|
|
11
|
+
size: {
|
|
12
|
+
sm: string;
|
|
13
|
+
md: string;
|
|
14
|
+
lg: string;
|
|
15
|
+
};
|
|
16
|
+
}, undefined, string[], {
|
|
17
|
+
size: {
|
|
18
|
+
sm: string;
|
|
19
|
+
md: string;
|
|
20
|
+
lg: string;
|
|
21
|
+
};
|
|
22
|
+
}, undefined, import('tailwind-variants').TVReturnType<{
|
|
23
|
+
size: {
|
|
24
|
+
sm: string;
|
|
25
|
+
md: string;
|
|
26
|
+
lg: string;
|
|
27
|
+
};
|
|
28
|
+
}, undefined, string[], unknown, unknown, undefined>>;
|
|
29
|
+
export type InputVariants = VariantProps<typeof inputRecipe>;
|
|
30
|
+
/** Control height. See the `size` prop for when to reach for each one. */
|
|
31
|
+
export type InputSize = NonNullable<InputVariants['size']>;
|
|
32
|
+
/**
|
|
33
|
+
* Every standard `<input>` attribute is accepted and forwarded. The handful
|
|
34
|
+
* redeclared below are the ones worth documenting: they are what most callers
|
|
35
|
+
* reach for, and `react-docgen` does not expand native attributes, so without
|
|
36
|
+
* this they would be invisible in the docs and the MCP manifest.
|
|
37
|
+
*/
|
|
38
|
+
export type InputProps = Omit<ComponentPropsWithRef<'input'>, 'size'> & {
|
|
39
|
+
/**
|
|
40
|
+
* Control height. Defaults to `'md'`.
|
|
41
|
+
* - `sm` (32px) — dense layouts where vertical space is tight.
|
|
42
|
+
* - `md` (40px) — standard form density.
|
|
43
|
+
* - `lg` (48px) — low-density forms and larger touch targets. Also raises
|
|
44
|
+
* the text to `base` and the corner radius to `lg`.
|
|
45
|
+
*/
|
|
46
|
+
size?: InputSize;
|
|
47
|
+
/**
|
|
48
|
+
* Native input type. Picks the on-screen keyboard on touch devices and the
|
|
49
|
+
* browser's own parsing, so set it even when you validate yourself.
|
|
50
|
+
* Defaults to `'text'`. Multi-line text is not one of the options — that is
|
|
51
|
+
* a TextArea.
|
|
52
|
+
*/
|
|
53
|
+
type?: ComponentPropsWithRef<'input'>['type'];
|
|
54
|
+
/**
|
|
55
|
+
* Short hint shown while the field is empty. It disappears on the first
|
|
56
|
+
* keystroke, so it is never a substitute for a label.
|
|
57
|
+
*/
|
|
58
|
+
placeholder?: string;
|
|
59
|
+
/**
|
|
60
|
+
* Blocks interaction, greys the control out and drops its shadow. The value
|
|
61
|
+
* is not submitted. When the user still needs to read or copy the value,
|
|
62
|
+
* use `readOnly` instead.
|
|
63
|
+
*/
|
|
64
|
+
disabled?: boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Keeps the value focusable and copyable but not editable, and still
|
|
67
|
+
* submits it. Unlike `disabled`, it stays in the tab order.
|
|
68
|
+
*/
|
|
69
|
+
readOnly?: boolean;
|
|
70
|
+
/** Marks the control required for both the browser and assistive technology. */
|
|
71
|
+
required?: boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Set this when the value fails validation: it drives the destructive border
|
|
74
|
+
* and is what assistive technology announces. Point `aria-describedby` at
|
|
75
|
+
* the error message so the two are read together.
|
|
76
|
+
*/
|
|
77
|
+
'aria-invalid'?: ComponentPropsWithRef<'input'>['aria-invalid'];
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Input is the design system's base single-line text control. Reach for it
|
|
81
|
+
* whenever a form collects free text, and pair it with
|
|
82
|
+
* [Label](?path=/docs/components-label--docs) so the control has an accessible
|
|
83
|
+
* name.
|
|
84
|
+
*
|
|
85
|
+
* It is deliberately self-contained: it renders the props it is given and
|
|
86
|
+
* knows nothing about form fields, form libraries, or surrounding layout.
|
|
87
|
+
* Wiring (`id`, `aria-invalid`, `aria-describedby`) arrives as plain props, so
|
|
88
|
+
* a field wrapper can inject them and standalone usage can set them by hand.
|
|
89
|
+
* There is no `status` prop — mark the control `aria-invalid` and the
|
|
90
|
+
* destructive border follows.
|
|
91
|
+
*
|
|
92
|
+
* Do not use Input for multi-line text; that is TextArea's job. It also has no
|
|
93
|
+
* slots for leading or trailing addons — an input with a currency prefix or a
|
|
94
|
+
* unit suffix belongs in an input group, not here.
|
|
95
|
+
*
|
|
96
|
+
* @summary Base single-line text control, unaware of fields and form libraries
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* <Label htmlFor="email">Email</Label>
|
|
100
|
+
* <Input id="email" type="email" placeholder="you@example.com" />
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* <Input id="email" aria-invalid aria-describedby="email-error" />
|
|
104
|
+
* <span id="email-error">Enter a valid email address.</span>
|
|
105
|
+
*/
|
|
106
|
+
export declare const Input: {
|
|
107
|
+
({ className, size, ...props }: InputProps): import("react/jsx-runtime").JSX.Element;
|
|
108
|
+
displayName: string;
|
|
109
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { cn as e } from "../../lib/utils.js";
|
|
2
|
+
import { tv as t } from "tailwind-variants";
|
|
3
|
+
import { jsx as n } from "react/jsx-runtime";
|
|
4
|
+
//#region src/input/input.tsx
|
|
5
|
+
var r = t({
|
|
6
|
+
base: [
|
|
7
|
+
"box-border w-full min-w-0 appearance-none rounded-md px-4 shadow-sm",
|
|
8
|
+
"border border-solid border-border-input-default bg-bg-input-normal text-text-input-normal",
|
|
9
|
+
"placeholder:text-text-input-placeholder placeholder-shown:text-ellipsis",
|
|
10
|
+
"outline-0 -outline-offset-1 outline-[transparent]",
|
|
11
|
+
"transition-[color,box-shadow,outline-color,outline-offset,outline-width] duration-75",
|
|
12
|
+
"focus-visible:border-border-input-focus focus-visible:outline-border-input-focus",
|
|
13
|
+
"focus-visible:outline-[0.125rem] focus-visible:outline-offset-[-0.0625rem]",
|
|
14
|
+
"aria-invalid:border-border-input-destructive",
|
|
15
|
+
"aria-invalid:focus-visible:border-border-input-destructive",
|
|
16
|
+
"aria-invalid:focus-visible:outline-border-input-destructive",
|
|
17
|
+
"disabled:cursor-default disabled:border-border-input-disable disabled:bg-bg-input-disable",
|
|
18
|
+
"disabled:text-text-input-disable disabled:shadow-none",
|
|
19
|
+
"disabled:placeholder:text-text-input-disable"
|
|
20
|
+
],
|
|
21
|
+
variants: { size: {
|
|
22
|
+
sm: "h-8 text-sm",
|
|
23
|
+
md: "h-10 text-sm",
|
|
24
|
+
lg: "h-12 rounded-lg text-base"
|
|
25
|
+
} },
|
|
26
|
+
defaultVariants: { size: "md" }
|
|
27
|
+
}), i = ({ className: t, size: i, ...a }) => /* @__PURE__ */ n("input", {
|
|
28
|
+
"data-slot": "input",
|
|
29
|
+
"data-size": i,
|
|
30
|
+
className: e(r({ size: i }), t),
|
|
31
|
+
...a
|
|
32
|
+
});
|
|
33
|
+
i.displayName = "Input";
|
|
34
|
+
//#endregion
|
|
35
|
+
export { i as Input, r as inputRecipe };
|