@agentero/design-system 0.9.8 → 0.11.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.
@@ -576,17 +576,172 @@
576
576
  <header>
577
577
  <div class="wrap">
578
578
  <h1>Manifest Debugger</h1>
579
- <div class="summary"><a class="filter-pill all" data-k="all" href="#filter-all">All</a><span class="filter-pill ok" aria-disabled="true">10 components ok</span><span class="filter-pill ok" aria-disabled="true">110 stories ok</span></div>
579
+ <div class="summary"><a class="filter-pill all" data-k="all" href="#filter-all">All</a><span class="filter-pill ok" aria-disabled="true">12 components ok</span><span class="filter-pill ok" aria-disabled="true">127 stories ok</span></div>
580
580
  </div>
581
581
  </header>
582
582
  <main>
583
583
  <div class="wrap">
584
584
  <div class="note ok" style="margin-bottom: 16px;">
585
- Using <code>react-docgen-typescript</code>. Generation took <strong>2.9s</strong>.
585
+ Using <code>react-docgen-typescript</code>. Generation took <strong>3.0s</strong>.
586
586
  </div>
587
587
  <h2 class="section-title">Components</h2>
588
588
  <div class="grid" role="list">
589
589
 
590
+ <article
591
+ class="card
592
+ no-error
593
+ no-info
594
+ no-story-error
595
+ no-doc-error"
596
+ role="listitem"
597
+ aria-label="Accordion.Root">
598
+ <div class="head">
599
+ <div class="title">
600
+ <h2><span class="status-dot dot-ok"></span> Accordion.Root</h2>
601
+ <div class="badges">
602
+
603
+
604
+ <label for="c-0-components-accordion-stories" class="badge ok as-toggle">7 stories</label>
605
+
606
+ </div>
607
+ </div>
608
+ <div class="meta" title="./src/accordion/accordion.stories.tsx">components-accordion · ./src/accordion/accordion.stories.tsx</div>
609
+
610
+ <div class="hint">Stacked, collapsible sections built on Radix UI&#39;s Accordion (keyboard nav and ARIA come for free). Compose `Root` with `Item`s, each holding a `Trigger` and `Content`. `type=&quot;single&quot;` (optionally `collapsible`) opens one at a time; `type=&quot;multiple&quot;` opens sections independently. `enclosed` renders the group as a bordered card.</div>
611
+
612
+ </div>
613
+
614
+ <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
615
+
616
+
617
+ <input id="c-0-components-accordion-stories" class="tg tg-stories" type="checkbox" hidden />
618
+
619
+
620
+
621
+ <div class="panels">
622
+
623
+
624
+
625
+
626
+ <div class="panel panel-stories">
627
+
628
+
629
+
630
+ <div class="note ok">
631
+ <div class="row">
632
+ <span class="ex-name">Imports</span>
633
+ </div>
634
+ <pre><code>import { Accordion, IconKeyboardArrowDown } from "@agentero/design-system";</code></pre>
635
+ </div>
636
+
637
+
638
+ <div class="note ok">
639
+ <div class="row">
640
+ <span class="ex-name">Default</span>
641
+ <span class="badge ok">story ok</span>
642
+ </div>
643
+
644
+ <div class="hint">Exclusive accordion: one item open at a time, `collapsible` lets it close.</div>
645
+ <pre><code>const Default = () =&gt; &lt;Accordion.Root type=&quot;single&quot; collapsible enclosed={false} disabled={false}&gt;
646
+ &lt;FaqItems /&gt;
647
+ &lt;/Accordion.Root&gt;;</code></pre>
648
+ </div>
649
+ <div class="note ok">
650
+ <div class="row">
651
+ <span class="ex-name">Multiple</span>
652
+ <span class="badge ok">story ok</span>
653
+ </div>
654
+
655
+ <div class="hint">`type=&quot;multiple&quot;` lets several sections stay open at once.</div>
656
+ <pre><code>const Multiple = () =&gt; (
657
+ &lt;Accordion.Root type=&quot;multiple&quot; defaultValue={[&#39;covered&#39;, &#39;payment&#39;]}&gt;
658
+ &lt;FaqItems /&gt;
659
+ &lt;/Accordion.Root&gt;
660
+ );</code></pre>
661
+ </div>
662
+ <div class="note ok">
663
+ <div class="row">
664
+ <span class="ex-name">Enclosed</span>
665
+ <span class="badge ok">story ok</span>
666
+ </div>
667
+
668
+ <div class="hint">`enclosed` wraps the group in a bordered card (default borderless on top).</div>
669
+ <pre><code>const Enclosed = () =&gt; (
670
+ &lt;div className=&quot;flex flex-col gap-8&quot;&gt;
671
+ &lt;Accordion.Root type=&quot;multiple&quot; defaultValue={[&#39;covered&#39;]}&gt;
672
+ &lt;FaqItems /&gt;
673
+ &lt;/Accordion.Root&gt;
674
+ &lt;Accordion.Root type=&quot;multiple&quot; enclosed defaultValue={[&#39;claim&#39;]}&gt;
675
+ &lt;FaqItems /&gt;
676
+ &lt;/Accordion.Root&gt;
677
+ &lt;/div&gt;
678
+ );</code></pre>
679
+ </div>
680
+ <div class="note ok">
681
+ <div class="row">
682
+ <span class="ex-name">Custom Trigger</span>
683
+ <span class="badge ok">story ok</span>
684
+ </div>
685
+
686
+ <div class="hint">`asChild` delegates the trigger to a custom element; the built-in chevron is omitted.</div>
687
+ <pre><code>const CustomTrigger = () =&gt; (
688
+ &lt;Accordion.Root type=&quot;single&quot; collapsible defaultValue=&quot;covered&quot;&gt;
689
+ &lt;Accordion.Item value=&quot;covered&quot;&gt;
690
+ &lt;Accordion.Trigger asChild&gt;
691
+ &lt;button className=&quot;group flex w-full items-center gap-2 py-4 text-left text-base font-semibold&quot;&gt;
692
+ &lt;IconKeyboardArrowDown className=&quot;size-5 shrink-0 transition-transform duration-200 group-data-[state=open]:rotate-180&quot; /&gt;
693
+ What is covered?
694
+ &lt;/button&gt;
695
+ &lt;/Accordion.Trigger&gt;
696
+ &lt;Accordion.Content&gt;{FAQS[0].answer}&lt;/Accordion.Content&gt;
697
+ &lt;/Accordion.Item&gt;
698
+ &lt;/Accordion.Root&gt;
699
+ );</code></pre>
700
+ </div>
701
+ <div class="note ok">
702
+ <div class="row">
703
+ <span class="ex-name">Styled Titles</span>
704
+ <span class="badge ok">story ok</span>
705
+ </div>
706
+
707
+ <div class="hint">The consumer controls title weight/size via the children passed to `Trigger`.</div>
708
+ <pre><code>const StyledTitles = () =&gt; &lt;Accordion.Root type=&quot;single&quot; collapsible&gt;
709
+ {FAQS.map(({ value, question, answer }) =&gt; (
710
+ &lt;Accordion.Item key={value} value={value}&gt;
711
+ &lt;Accordion.Trigger&gt;
712
+ &lt;span className=&quot;text-lg font-bold&quot;&gt;{question}&lt;/span&gt;
713
+ &lt;/Accordion.Trigger&gt;
714
+ &lt;Accordion.Content&gt;{answer}&lt;/Accordion.Content&gt;
715
+ &lt;/Accordion.Item&gt;
716
+ ))}
717
+ &lt;/Accordion.Root&gt;;</code></pre>
718
+ </div>
719
+ <div class="note ok">
720
+ <div class="row">
721
+ <span class="ex-name">Expand Collapse</span>
722
+ <span class="badge ok">story ok</span>
723
+ </div>
724
+
725
+ <div class="hint">`collapsible` lets clicking the open item close it (reach an all-closed state).</div>
726
+ <pre><code>const ExpandCollapse = () =&gt; &lt;Accordion.Root type=&quot;single&quot; collapsible&gt;
727
+ &lt;FaqItems /&gt;
728
+ &lt;/Accordion.Root&gt;;</code></pre>
729
+ </div>
730
+ <div class="note ok">
731
+ <div class="row">
732
+ <span class="ex-name">Non Collapsible</span>
733
+ <span class="badge ok">story ok</span>
734
+ </div>
735
+
736
+ <div class="hint">Without `collapsible`, clicking the already-open item keeps it open.</div>
737
+ <pre><code>const NonCollapsible = () =&gt; &lt;Accordion.Root type=&quot;single&quot; collapsible={false} defaultValue=&quot;covered&quot;&gt;
738
+ &lt;FaqItems /&gt;
739
+ &lt;/Accordion.Root&gt;;</code></pre>
740
+ </div>
741
+ </div>
742
+
743
+ </div>
744
+ </article>
590
745
  <article
591
746
  class="card
592
747
  no-error
@@ -599,9 +754,9 @@
599
754
  <div class="title">
600
755
  <h2><span class="status-dot dot-ok"></span> Alert</h2>
601
756
  <div class="badges">
602
- <label for="c-0-components-alert-props" class="badge ok as-toggle">6 prop types</label>
757
+ <label for="c-1-components-alert-props" class="badge ok as-toggle">6 prop types</label>
603
758
 
604
- <label for="c-0-components-alert-stories" class="badge ok as-toggle">23 stories</label>
759
+ <label for="c-1-components-alert-stories" class="badge ok as-toggle">23 stories</label>
605
760
 
606
761
  </div>
607
762
  </div>
@@ -614,9 +769,9 @@
614
769
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
615
770
 
616
771
 
617
- <input id="c-0-components-alert-stories" class="tg tg-stories" type="checkbox" hidden />
772
+ <input id="c-1-components-alert-stories" class="tg tg-stories" type="checkbox" hidden />
618
773
 
619
- <input id="c-0-components-alert-props" class="tg tg-props" type="checkbox" hidden />
774
+ <input id="c-1-components-alert-props" class="tg tg-props" type="checkbox" hidden />
620
775
 
621
776
  <div class="panels">
622
777
 
@@ -1153,9 +1308,9 @@ size?: AlertSizeType = sm</code></pre>
1153
1308
  <div class="title">
1154
1309
  <h2><span class="status-dot dot-ok"></span> Avatar</h2>
1155
1310
  <div class="badges">
1156
- <label for="c-1-components-avatar-props" class="badge ok as-toggle">8 prop types</label>
1311
+ <label for="c-2-components-avatar-props" class="badge ok as-toggle">8 prop types</label>
1157
1312
 
1158
- <label for="c-1-components-avatar-stories" class="badge ok as-toggle">22 stories</label>
1313
+ <label for="c-2-components-avatar-stories" class="badge ok as-toggle">22 stories</label>
1159
1314
 
1160
1315
  </div>
1161
1316
  </div>
@@ -1168,9 +1323,9 @@ size?: AlertSizeType = sm</code></pre>
1168
1323
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
1169
1324
 
1170
1325
 
1171
- <input id="c-1-components-avatar-stories" class="tg tg-stories" type="checkbox" hidden />
1326
+ <input id="c-2-components-avatar-stories" class="tg tg-stories" type="checkbox" hidden />
1172
1327
 
1173
- <input id="c-1-components-avatar-props" class="tg tg-props" type="checkbox" hidden />
1328
+ <input id="c-2-components-avatar-props" class="tg tg-props" type="checkbox" hidden />
1174
1329
 
1175
1330
  <div class="panels">
1176
1331
 
@@ -1569,9 +1724,9 @@ variant?: &quot;circle&quot; | &quot;square&quot; | &quot;pillow&quot; | &quot;p
1569
1724
  <div class="title">
1570
1725
  <h2><span class="status-dot dot-ok"></span> Button</h2>
1571
1726
  <div class="badges">
1572
- <label for="c-2-components-button-props" class="badge ok as-toggle">12 prop types</label>
1727
+ <label for="c-3-components-button-props" class="badge ok as-toggle">12 prop types</label>
1573
1728
 
1574
- <label for="c-2-components-button-stories" class="badge ok as-toggle">10 stories</label>
1729
+ <label for="c-3-components-button-stories" class="badge ok as-toggle">10 stories</label>
1575
1730
 
1576
1731
  </div>
1577
1732
  </div>
@@ -1584,9 +1739,9 @@ variant?: &quot;circle&quot; | &quot;square&quot; | &quot;pillow&quot; | &quot;p
1584
1739
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
1585
1740
 
1586
1741
 
1587
- <input id="c-2-components-button-stories" class="tg tg-stories" type="checkbox" hidden />
1742
+ <input id="c-3-components-button-stories" class="tg tg-stories" type="checkbox" hidden />
1588
1743
 
1589
- <input id="c-2-components-button-props" class="tg tg-props" type="checkbox" hidden />
1744
+ <input id="c-3-components-button-props" class="tg tg-props" type="checkbox" hidden />
1590
1745
 
1591
1746
  <div class="panels">
1592
1747
 
@@ -1937,7 +2092,7 @@ variant?: ButtonVariantType</code></pre>
1937
2092
  <div class="badges">
1938
2093
 
1939
2094
 
1940
- <label for="c-3-components-datatable-stories" class="badge ok as-toggle">4 stories</label>
2095
+ <label for="c-4-components-datatable-stories" class="badge ok as-toggle">4 stories</label>
1941
2096
 
1942
2097
  </div>
1943
2098
  </div>
@@ -1950,7 +2105,7 @@ variant?: ButtonVariantType</code></pre>
1950
2105
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
1951
2106
 
1952
2107
 
1953
- <input id="c-3-components-datatable-stories" class="tg tg-stories" type="checkbox" hidden />
2108
+ <input id="c-4-components-datatable-stories" class="tg tg-stories" type="checkbox" hidden />
1954
2109
 
1955
2110
 
1956
2111
 
@@ -2080,9 +2235,9 @@ variant?: ButtonVariantType</code></pre>
2080
2235
  <div class="title">
2081
2236
  <h2><span class="status-dot dot-ok"></span> Divider</h2>
2082
2237
  <div class="badges">
2083
- <label for="c-4-components-divider-props" class="badge ok as-toggle">2 prop types</label>
2238
+ <label for="c-5-components-divider-props" class="badge ok as-toggle">2 prop types</label>
2084
2239
 
2085
- <label for="c-4-components-divider-stories" class="badge ok as-toggle">10 stories</label>
2240
+ <label for="c-5-components-divider-stories" class="badge ok as-toggle">10 stories</label>
2086
2241
 
2087
2242
  </div>
2088
2243
  </div>
@@ -2095,9 +2250,9 @@ variant?: ButtonVariantType</code></pre>
2095
2250
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
2096
2251
 
2097
2252
 
2098
- <input id="c-4-components-divider-stories" class="tg tg-stories" type="checkbox" hidden />
2253
+ <input id="c-5-components-divider-stories" class="tg tg-stories" type="checkbox" hidden />
2099
2254
 
2100
- <input id="c-4-components-divider-props" class="tg tg-props" type="checkbox" hidden />
2255
+ <input id="c-5-components-divider-props" class="tg tg-props" type="checkbox" hidden />
2101
2256
 
2102
2257
  <div class="panels">
2103
2258
 
@@ -2377,7 +2532,7 @@ label?: ReactNode</code></pre>
2377
2532
  <div class="badges">
2378
2533
 
2379
2534
 
2380
- <label for="c-5-components-dropdownmenu-stories" class="badge ok as-toggle">7 stories</label>
2535
+ <label for="c-6-components-dropdownmenu-stories" class="badge ok as-toggle">7 stories</label>
2381
2536
 
2382
2537
  </div>
2383
2538
  </div>
@@ -2390,7 +2545,7 @@ label?: ReactNode</code></pre>
2390
2545
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
2391
2546
 
2392
2547
 
2393
- <input id="c-5-components-dropdownmenu-stories" class="tg tg-stories" type="checkbox" hidden />
2548
+ <input id="c-6-components-dropdownmenu-stories" class="tg tg-stories" type="checkbox" hidden />
2394
2549
 
2395
2550
 
2396
2551
 
@@ -2759,9 +2914,9 @@ label?: ReactNode</code></pre>
2759
2914
  <div class="title">
2760
2915
  <h2><span class="status-dot dot-ok"></span> Loading</h2>
2761
2916
  <div class="badges">
2762
- <label for="c-6-components-loading-props" class="badge ok as-toggle">1 prop type</label>
2917
+ <label for="c-7-components-loading-props" class="badge ok as-toggle">1 prop type</label>
2763
2918
 
2764
- <label for="c-6-components-loading-stories" class="badge ok as-toggle">7 stories</label>
2919
+ <label for="c-7-components-loading-stories" class="badge ok as-toggle">7 stories</label>
2765
2920
 
2766
2921
  </div>
2767
2922
  </div>
@@ -2774,9 +2929,9 @@ label?: ReactNode</code></pre>
2774
2929
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
2775
2930
 
2776
2931
 
2777
- <input id="c-6-components-loading-stories" class="tg tg-stories" type="checkbox" hidden />
2932
+ <input id="c-7-components-loading-stories" class="tg tg-stories" type="checkbox" hidden />
2778
2933
 
2779
- <input id="c-6-components-loading-props" class="tg tg-props" type="checkbox" hidden />
2934
+ <input id="c-7-components-loading-props" class="tg tg-props" type="checkbox" hidden />
2780
2935
 
2781
2936
  <div class="panels">
2782
2937
 
@@ -2916,9 +3071,9 @@ size?: &quot;sm&quot; | &quot;md&quot; | &quot;lg&quot;</code></pre>
2916
3071
  <div class="title">
2917
3072
  <h2><span class="status-dot dot-ok"></span> Pagination</h2>
2918
3073
  <div class="badges">
2919
- <label for="c-7-components-pagination-props" class="badge ok as-toggle">5 prop types</label>
3074
+ <label for="c-8-components-pagination-props" class="badge ok as-toggle">5 prop types</label>
2920
3075
 
2921
- <label for="c-7-components-pagination-stories" class="badge ok as-toggle">7 stories</label>
3076
+ <label for="c-8-components-pagination-stories" class="badge ok as-toggle">7 stories</label>
2922
3077
 
2923
3078
  </div>
2924
3079
  </div>
@@ -2931,9 +3086,9 @@ size?: &quot;sm&quot; | &quot;md&quot; | &quot;lg&quot;</code></pre>
2931
3086
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
2932
3087
 
2933
3088
 
2934
- <input id="c-7-components-pagination-stories" class="tg tg-stories" type="checkbox" hidden />
3089
+ <input id="c-8-components-pagination-stories" class="tg tg-stories" type="checkbox" hidden />
2935
3090
 
2936
- <input id="c-7-components-pagination-props" class="tg tg-props" type="checkbox" hidden />
3091
+ <input id="c-8-components-pagination-props" class="tg tg-props" type="checkbox" hidden />
2937
3092
 
2938
3093
  <div class="panels">
2939
3094
 
@@ -3079,7 +3234,7 @@ totalCount: number</code></pre>
3079
3234
  <div class="badges">
3080
3235
 
3081
3236
 
3082
- <label for="c-8-components-table-stories" class="badge ok as-toggle">9 stories</label>
3237
+ <label for="c-9-components-table-stories" class="badge ok as-toggle">9 stories</label>
3083
3238
 
3084
3239
  </div>
3085
3240
  </div>
@@ -3092,7 +3247,7 @@ totalCount: number</code></pre>
3092
3247
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
3093
3248
 
3094
3249
 
3095
- <input id="c-8-components-table-stories" class="tg tg-stories" type="checkbox" hidden />
3250
+ <input id="c-9-components-table-stories" class="tg tg-stories" type="checkbox" hidden />
3096
3251
 
3097
3252
 
3098
3253
 
@@ -3254,6 +3409,380 @@ import { Fragment } from "react";</code></pre>
3254
3409
 
3255
3410
  </div>
3256
3411
  </article>
3412
+ <article
3413
+ class="card
3414
+ no-error
3415
+ no-info
3416
+ no-story-error
3417
+ no-doc-error"
3418
+ role="listitem"
3419
+ aria-label="Tag">
3420
+ <div class="head">
3421
+ <div class="title">
3422
+ <h2><span class="status-dot dot-ok"></span> Tag</h2>
3423
+ <div class="badges">
3424
+ <label for="c-10-components-tag-props" class="badge ok as-toggle">6 prop types</label>
3425
+
3426
+ <label for="c-10-components-tag-stories" class="badge ok as-toggle">10 stories</label>
3427
+
3428
+ </div>
3429
+ </div>
3430
+ <div class="meta" title="./src/tag/tag.stories.tsx">components-tag · ./src/tag/tag.stories.tsx</div>
3431
+
3432
+ <div class="hint">Tag is a compact semantic label for statuses, categories, counts, and attributes. Pick `color` for meaning, `variant` for fill emphasis, and `size` for prominence. A plain Tag is a static badge; pass `asChild` to make it an interactive link or button, which adds the pointer cursor and hover fill.</div>
3433
+
3434
+ </div>
3435
+
3436
+ <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
3437
+
3438
+
3439
+ <input id="c-10-components-tag-stories" class="tg tg-stories" type="checkbox" hidden />
3440
+
3441
+ <input id="c-10-components-tag-props" class="tg tg-props" type="checkbox" hidden />
3442
+
3443
+ <div class="panels">
3444
+
3445
+
3446
+
3447
+ <div class="panel panel-props">
3448
+ <div class="note ok">
3449
+ <div class="row">
3450
+ <span class="ex-name">Prop types <small>(react-docgen-typescript)</small></span>
3451
+ <span class="badge ok">6 prop types</span>
3452
+ </div>
3453
+ <pre><code>Component: src/tag/tag.tsx::Tag</code></pre>
3454
+ <pre><code>Props:</code></pre>
3455
+ <pre><code>/**
3456
+ * Render the single child element instead of a `&lt;span&gt;` (via Radix `Slot`),
3457
+ * keeping Tag framework-agnostic. Marks the Tag interactive: adds the pointer
3458
+ * cursor and the hover fill (a plain `&lt;span&gt;` Tag is a static badge).
3459
+ */
3460
+ asChild?: boolean
3461
+
3462
+ color?: &quot;neutral&quot; | &quot;danger&quot; | &quot;warning&quot; | &quot;creative&quot; | &quot;dynamic&quot; | &quot;playful&quot; | &quot;positive&quot; | &quot;informative&quot;
3463
+
3464
+ pill?: boolean
3465
+
3466
+ size?: &quot;sm&quot; | &quot;md&quot; | &quot;xs&quot;
3467
+
3468
+ truncate?: boolean
3469
+
3470
+ variant?: &quot;ghost&quot; | &quot;secondary&quot; | &quot;tertiary&quot; | &quot;invisible&quot;</code></pre>
3471
+ </div>
3472
+ </div>
3473
+
3474
+ <div class="panel panel-stories">
3475
+
3476
+
3477
+
3478
+ <div class="note ok">
3479
+ <div class="row">
3480
+ <span class="ex-name">Imports</span>
3481
+ </div>
3482
+ <pre><code>import { Tag } from "@agentero/design-system";</code></pre>
3483
+ </div>
3484
+
3485
+
3486
+ <div class="note ok">
3487
+ <div class="row">
3488
+ <span class="ex-name">Default</span>
3489
+ <span class="badge ok">story ok</span>
3490
+ </div>
3491
+ <div>Default args playground for Tag</div>
3492
+ <div class="hint">Args-controlled playground. Toggle `color`, `variant`, `size`, `pill`, and `truncate` from the Controls panel to explore every visual combination.</div>
3493
+ <pre><code>const Default = () =&gt; &lt;Tag color=&quot;neutral&quot; variant=&quot;secondary&quot; size=&quot;sm&quot;&gt;Default&lt;/Tag&gt;;</code></pre>
3494
+ </div>
3495
+ <div class="note ok">
3496
+ <div class="row">
3497
+ <span class="ex-name">Sizes</span>
3498
+ <span class="badge ok">story ok</span>
3499
+ </div>
3500
+ <div>All three sizes across icon-only, icon + text, and text-only</div>
3501
+ <div class="hint">The three sizes — `xs` (20px), `sm` (24px, default), and `md` (32px) — each shown icon-only, icon + text, and text-only so the type and icon scale are visible.</div>
3502
+ <pre><code>const Sizes = () =&gt; (
3503
+ &lt;Stack&gt;
3504
+ {([&#39;xs&#39;, &#39;sm&#39;, &#39;md&#39;] as const).map(size =&gt; (
3505
+ &lt;Stack gap=&quot;0.5rem&quot; key={size}&gt;
3506
+ &lt;strong&gt;{size}:&lt;/strong&gt;
3507
+ &lt;Row&gt;
3508
+ &lt;Tag
3509
+ size={size}
3510
+ color=&quot;informative&quot;
3511
+ variant=&quot;secondary&quot;
3512
+ role=&quot;img&quot;
3513
+ aria-label={`${size} icon only`}&gt;
3514
+ &lt;IconAdd /&gt;
3515
+ &lt;/Tag&gt;
3516
+ &lt;Tag size={size} color=&quot;informative&quot; variant=&quot;secondary&quot;&gt;
3517
+ &lt;IconAdd /&gt;
3518
+ {size}
3519
+ &lt;/Tag&gt;
3520
+ &lt;Tag size={size} color=&quot;informative&quot; variant=&quot;secondary&quot;&gt;
3521
+ {size}
3522
+ &lt;/Tag&gt;
3523
+ &lt;/Row&gt;
3524
+ &lt;/Stack&gt;
3525
+ ))}
3526
+ &lt;/Stack&gt;
3527
+ );</code></pre>
3528
+ </div>
3529
+ <div class="note ok">
3530
+ <div class="row">
3531
+ <span class="ex-name">Styles</span>
3532
+ <span class="badge ok">story ok</span>
3533
+ </div>
3534
+ <div>Rounded (default) vs pill</div>
3535
+ <div class="hint">The `Style` axis: the default rounded corners (top row) versus `pill` fully rounded (bottom row), shown across every fill variant.</div>
3536
+ <pre><code>const Styles = () =&gt; (
3537
+ &lt;Stack gap=&quot;0.5rem&quot;&gt;
3538
+ &lt;Row&gt;
3539
+ {VARIANTS.map(variant =&gt; (
3540
+ &lt;Tag key={variant} color=&quot;informative&quot; variant={variant}&gt;
3541
+ {variant}
3542
+ &lt;/Tag&gt;
3543
+ ))}
3544
+ &lt;/Row&gt;
3545
+ &lt;Row&gt;
3546
+ {VARIANTS.map(variant =&gt; (
3547
+ &lt;Tag key={variant} color=&quot;informative&quot; variant={variant} pill&gt;
3548
+ {variant}
3549
+ &lt;/Tag&gt;
3550
+ ))}
3551
+ &lt;/Row&gt;
3552
+ &lt;/Stack&gt;
3553
+ );</code></pre>
3554
+ </div>
3555
+ <div class="note ok">
3556
+ <div class="row">
3557
+ <span class="ex-name">Interactive</span>
3558
+ <span class="badge ok">story ok</span>
3559
+ </div>
3560
+ <div>Static badge vs interactive (asChild) hover</div>
3561
+ <div class="hint">Static badge vs interactive Tag. A plain `&lt;span&gt;` badge has no hover; pass `asChild` with a `&lt;button&gt;` (or `&lt;a&gt;`) to make it interactive — that adds the pointer cursor and reveals the hover fill on `:hover`. Hover the middle and right Tags to see it.</div>
3562
+ <pre><code>const Interactive = () =&gt; (
3563
+ &lt;Row&gt;
3564
+ &lt;Tag color=&quot;informative&quot; variant=&quot;secondary&quot;&gt;
3565
+ badge
3566
+ &lt;/Tag&gt;
3567
+ &lt;Tag color=&quot;informative&quot; variant=&quot;secondary&quot; asChild&gt;
3568
+ &lt;button type=&quot;button&quot;&gt;interactive&lt;/button&gt;
3569
+ &lt;/Tag&gt;
3570
+ &lt;Tag color=&quot;informative&quot; variant=&quot;secondary&quot; asChild aria-label=&quot;add&quot;&gt;
3571
+ &lt;button type=&quot;button&quot;&gt;
3572
+ &lt;IconAdd /&gt;
3573
+ &lt;/button&gt;
3574
+ &lt;/Tag&gt;
3575
+ &lt;/Row&gt;
3576
+ );</code></pre>
3577
+ </div>
3578
+ <div class="note ok">
3579
+ <div class="row">
3580
+ <span class="ex-name">Secondary</span>
3581
+ <span class="badge ok">story ok</span>
3582
+ </div>
3583
+ <div>`secondary` variant across all colors</div>
3584
+ <div class="hint">`secondary` fills with a tinted background plus a matching border, shown across every color.</div>
3585
+ <pre><code>const Secondary = () =&gt; (
3586
+ &lt;Row&gt;
3587
+ {COLORS.map(color =&gt; (
3588
+ &lt;Tag key={color} variant=&quot;secondary&quot; color={color}&gt;
3589
+ {color}
3590
+ &lt;/Tag&gt;
3591
+ ))}
3592
+ &lt;/Row&gt;
3593
+ );</code></pre>
3594
+ </div>
3595
+ <div class="note ok">
3596
+ <div class="row">
3597
+ <span class="ex-name">Tertiary</span>
3598
+ <span class="badge ok">story ok</span>
3599
+ </div>
3600
+ <div>`tertiary` variant across all colors</div>
3601
+ <div class="hint">`tertiary` (default) fills with a tinted background and no border, shown across every color.</div>
3602
+ <pre><code>const Tertiary = () =&gt; (
3603
+ &lt;Row&gt;
3604
+ {COLORS.map(color =&gt; (
3605
+ &lt;Tag key={color} variant=&quot;tertiary&quot; color={color}&gt;
3606
+ {color}
3607
+ &lt;/Tag&gt;
3608
+ ))}
3609
+ &lt;/Row&gt;
3610
+ );</code></pre>
3611
+ </div>
3612
+ <div class="note ok">
3613
+ <div class="row">
3614
+ <span class="ex-name">Ghost</span>
3615
+ <span class="badge ok">story ok</span>
3616
+ </div>
3617
+ <div>`ghost` variant across all colors</div>
3618
+ <div class="hint">`ghost` shows colored text alone with no background or border, across every color.</div>
3619
+ <pre><code>const Ghost = () =&gt; (
3620
+ &lt;Row&gt;
3621
+ {COLORS.map(color =&gt; (
3622
+ &lt;Tag key={color} variant=&quot;ghost&quot; color={color}&gt;
3623
+ {color}
3624
+ &lt;/Tag&gt;
3625
+ ))}
3626
+ &lt;/Row&gt;
3627
+ );</code></pre>
3628
+ </div>
3629
+ <div class="note ok">
3630
+ <div class="row">
3631
+ <span class="ex-name">Invisible</span>
3632
+ <span class="badge ok">story ok</span>
3633
+ </div>
3634
+ <div>`invisible` variant as span and as interactive button</div>
3635
+ <div class="hint">`invisible` stays fully transparent until hovered, then reveals its fill. The top row renders plain `&lt;span&gt;` Tags; the bottom row renders interactive Tags via `asChild` with a `&lt;button&gt;` child.</div>
3636
+ <pre><code>const Invisible = () =&gt; (
3637
+ &lt;Stack gap=&quot;0.5rem&quot;&gt;
3638
+ &lt;Row&gt;
3639
+ {COLORS.map(color =&gt; (
3640
+ &lt;Tag key={color} variant=&quot;invisible&quot; color={color}&gt;
3641
+ {color}
3642
+ &lt;/Tag&gt;
3643
+ ))}
3644
+ &lt;/Row&gt;
3645
+ &lt;Row&gt;
3646
+ {COLORS.map(color =&gt; (
3647
+ &lt;Tag key={color} variant=&quot;invisible&quot; color={color} asChild&gt;
3648
+ &lt;button type=&quot;button&quot;&gt;{color}&lt;/button&gt;
3649
+ &lt;/Tag&gt;
3650
+ ))}
3651
+ &lt;/Row&gt;
3652
+ &lt;/Stack&gt;
3653
+ );</code></pre>
3654
+ </div>
3655
+ <div class="note ok">
3656
+ <div class="row">
3657
+ <span class="ex-name">With Icon</span>
3658
+ <span class="badge ok">story ok</span>
3659
+ </div>
3660
+ <div>Variant × color grid with icons</div>
3661
+ <div class="hint">Every variant for every color rendered with a leading and trailing icon. Icons are tinted with each color&#39;s `icon-tag-*` token.</div>
3662
+ <pre><code>const WithIcon = () =&gt; (
3663
+ &lt;Stack&gt;
3664
+ {COLORS.map(color =&gt; (
3665
+ &lt;Row key={color}&gt;
3666
+ {VARIANTS.map(variant =&gt; (
3667
+ &lt;Tag key={variant} color={color} variant={variant}&gt;
3668
+ &lt;IconAdd /&gt;
3669
+ tag
3670
+ &lt;IconAdd /&gt;
3671
+ &lt;/Tag&gt;
3672
+ ))}
3673
+ &lt;/Row&gt;
3674
+ ))}
3675
+ &lt;/Stack&gt;
3676
+ );</code></pre>
3677
+ </div>
3678
+ <div class="note ok">
3679
+ <div class="row">
3680
+ <span class="ex-name">Colors</span>
3681
+ <span class="badge ok">story ok</span>
3682
+ </div>
3683
+ <div>Variant × color matrix — default, pill, button, and icon layouts</div>
3684
+ <div class="hint">Full matrix: every variant for every color, repeated as default, as `pill`, as an interactive `asChild` `&lt;button&gt;`, with a single leading icon, with leading + trailing icons, and icon-only.</div>
3685
+ <pre><code>const Colors = () =&gt; (
3686
+ &lt;div style={{ display: &#39;flex&#39;, gap: &#39;4rem&#39;, flexWrap: &#39;wrap&#39; }}&gt;
3687
+ &lt;Stack&gt;
3688
+ {COLORS.map(color =&gt; (
3689
+ &lt;Stack gap=&quot;0.5rem&quot; key={color}&gt;
3690
+ &lt;strong&gt;{color}:&lt;/strong&gt;
3691
+ &lt;Row&gt;
3692
+ {VARIANTS.map(variant =&gt; (
3693
+ &lt;Tag key={variant} color={color} variant={variant}&gt;
3694
+ {variant}
3695
+ &lt;/Tag&gt;
3696
+ ))}
3697
+ &lt;/Row&gt;
3698
+ &lt;/Stack&gt;
3699
+ ))}
3700
+ &lt;/Stack&gt;
3701
+ &lt;Stack&gt;
3702
+ {COLORS.map(color =&gt; (
3703
+ &lt;Stack gap=&quot;0.5rem&quot; key={color}&gt;
3704
+ &lt;strong&gt;{color} with pill:&lt;/strong&gt;
3705
+ &lt;Row&gt;
3706
+ {VARIANTS.map(variant =&gt; (
3707
+ &lt;Tag key={variant} color={color} variant={variant} pill&gt;
3708
+ {variant}
3709
+ &lt;/Tag&gt;
3710
+ ))}
3711
+ &lt;/Row&gt;
3712
+ &lt;/Stack&gt;
3713
+ ))}
3714
+ &lt;/Stack&gt;
3715
+ &lt;Stack&gt;
3716
+ {COLORS.map(color =&gt; (
3717
+ &lt;Stack gap=&quot;0.5rem&quot; key={color}&gt;
3718
+ &lt;strong&gt;{color} as button:&lt;/strong&gt;
3719
+ &lt;Row&gt;
3720
+ {VARIANTS.map(variant =&gt; (
3721
+ &lt;Tag key={variant} color={color} variant={variant} asChild&gt;
3722
+ &lt;button type=&quot;button&quot;&gt;{variant}&lt;/button&gt;
3723
+ &lt;/Tag&gt;
3724
+ ))}
3725
+ &lt;/Row&gt;
3726
+ &lt;/Stack&gt;
3727
+ ))}
3728
+ &lt;/Stack&gt;
3729
+ &lt;Stack&gt;
3730
+ {COLORS.map(color =&gt; (
3731
+ &lt;Stack gap=&quot;0.5rem&quot; key={color}&gt;
3732
+ &lt;strong&gt;{color} with icon:&lt;/strong&gt;
3733
+ &lt;Row&gt;
3734
+ {VARIANTS.map(variant =&gt; (
3735
+ &lt;Tag key={variant} color={color} variant={variant}&gt;
3736
+ &lt;IconAdd /&gt;
3737
+ {variant}
3738
+ &lt;/Tag&gt;
3739
+ ))}
3740
+ &lt;/Row&gt;
3741
+ &lt;/Stack&gt;
3742
+ ))}
3743
+ &lt;/Stack&gt;
3744
+ &lt;Stack&gt;
3745
+ {COLORS.map(color =&gt; (
3746
+ &lt;Stack gap=&quot;0.5rem&quot; key={color}&gt;
3747
+ &lt;strong&gt;{color} with icons:&lt;/strong&gt;
3748
+ &lt;Row&gt;
3749
+ {VARIANTS.map(variant =&gt; (
3750
+ &lt;Tag key={variant} color={color} variant={variant}&gt;
3751
+ &lt;IconAdd /&gt;
3752
+ {variant}
3753
+ &lt;IconAdd /&gt;
3754
+ &lt;/Tag&gt;
3755
+ ))}
3756
+ &lt;/Row&gt;
3757
+ &lt;/Stack&gt;
3758
+ ))}
3759
+ &lt;/Stack&gt;
3760
+ &lt;Stack&gt;
3761
+ {COLORS.map(color =&gt; (
3762
+ &lt;Stack gap=&quot;0.5rem&quot; key={color}&gt;
3763
+ &lt;strong&gt;{color} icon only:&lt;/strong&gt;
3764
+ &lt;Row&gt;
3765
+ {VARIANTS.map(variant =&gt; (
3766
+ &lt;Tag
3767
+ key={variant}
3768
+ color={color}
3769
+ variant={variant}
3770
+ role=&quot;img&quot;
3771
+ aria-label={`${color} ${variant}`}&gt;
3772
+ &lt;IconAdd /&gt;
3773
+ &lt;/Tag&gt;
3774
+ ))}
3775
+ &lt;/Row&gt;
3776
+ &lt;/Stack&gt;
3777
+ ))}
3778
+ &lt;/Stack&gt;
3779
+ &lt;/div&gt;
3780
+ );</code></pre>
3781
+ </div>
3782
+ </div>
3783
+
3784
+ </div>
3785
+ </article>
3257
3786
  <article
3258
3787
  class="card
3259
3788
  no-error
@@ -3266,9 +3795,9 @@ import { Fragment } from "react";</code></pre>
3266
3795
  <div class="title">
3267
3796
  <h2><span class="status-dot dot-ok"></span> Toast</h2>
3268
3797
  <div class="badges">
3269
- <label for="c-9-components-toast-props" class="badge ok as-toggle">11 prop types</label>
3798
+ <label for="c-11-components-toast-props" class="badge ok as-toggle">11 prop types</label>
3270
3799
 
3271
- <label for="c-9-components-toast-stories" class="badge ok as-toggle">11 stories</label>
3800
+ <label for="c-11-components-toast-stories" class="badge ok as-toggle">11 stories</label>
3272
3801
 
3273
3802
  </div>
3274
3803
  </div>
@@ -3281,9 +3810,9 @@ import { Fragment } from "react";</code></pre>
3281
3810
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
3282
3811
 
3283
3812
 
3284
- <input id="c-9-components-toast-stories" class="tg tg-stories" type="checkbox" hidden />
3813
+ <input id="c-11-components-toast-stories" class="tg tg-stories" type="checkbox" hidden />
3285
3814
 
3286
- <input id="c-9-components-toast-props" class="tg tg-props" type="checkbox" hidden />
3815
+ <input id="c-11-components-toast-props" class="tg tg-props" type="checkbox" hidden />
3287
3816
 
3288
3817
  <div class="panels">
3289
3818