@agentero/design-system 0.10.0 → 0.12.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,13 +576,13 @@
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">11 components ok</span><span class="filter-pill ok" aria-disabled="true">117 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">13 components ok</span><span class="filter-pill ok" aria-disabled="true">133 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.6s</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">
@@ -3220,6 +3220,171 @@ totalCount: number</code></pre>
3220
3220
 
3221
3221
  </div>
3222
3222
  </article>
3223
+ <article
3224
+ class="card
3225
+ no-error
3226
+ no-info
3227
+ no-story-error
3228
+ no-doc-error"
3229
+ role="listitem"
3230
+ aria-label="Switch">
3231
+ <div class="head">
3232
+ <div class="title">
3233
+ <h2><span class="status-dot dot-ok"></span> Switch</h2>
3234
+ <div class="badges">
3235
+ <label for="c-9-components-switch-props" class="badge ok as-toggle">2 prop types</label>
3236
+
3237
+ <label for="c-9-components-switch-stories" class="badge ok as-toggle">6 stories</label>
3238
+
3239
+ </div>
3240
+ </div>
3241
+ <div class="meta" title="./src/switch/switch.stories.tsx">components-switch · ./src/switch/switch.stories.tsx</div>
3242
+
3243
+ <div class="hint">Two-state toggle for a setting that takes effect immediately. Prefer it over a Checkbox for a single boolean that applies instantly, and pair it with a `&lt;label htmlFor&gt;` to give it an accessible name.</div>
3244
+
3245
+ </div>
3246
+
3247
+ <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
3248
+
3249
+
3250
+ <input id="c-9-components-switch-stories" class="tg tg-stories" type="checkbox" hidden />
3251
+
3252
+ <input id="c-9-components-switch-props" class="tg tg-props" type="checkbox" hidden />
3253
+
3254
+ <div class="panels">
3255
+
3256
+
3257
+
3258
+ <div class="panel panel-props">
3259
+ <div class="note ok">
3260
+ <div class="row">
3261
+ <span class="ex-name">Prop types <small>(react-docgen-typescript)</small></span>
3262
+ <span class="badge ok">2 prop types</span>
3263
+ </div>
3264
+ <pre><code>Component: src/switch/switch.tsx::Switch</code></pre>
3265
+ <pre><code>Props:</code></pre>
3266
+ <pre><code>asChild?: boolean
3267
+
3268
+ size?: &quot;sm&quot; | &quot;md&quot;</code></pre>
3269
+ </div>
3270
+ </div>
3271
+
3272
+ <div class="panel panel-stories">
3273
+
3274
+
3275
+
3276
+ <div class="note ok">
3277
+ <div class="row">
3278
+ <span class="ex-name">Imports</span>
3279
+ </div>
3280
+ <pre><code>import { Switch } from "@agentero/design-system";</code></pre>
3281
+ </div>
3282
+
3283
+
3284
+ <div class="note ok">
3285
+ <div class="row">
3286
+ <span class="ex-name">Default</span>
3287
+ <span class="badge ok">story ok</span>
3288
+ </div>
3289
+
3290
+
3291
+ <pre><code>const Default = () =&gt; &lt;Switch size=&quot;md&quot; disabled={false} defaultChecked aria-label=&quot;Toggle setting&quot; /&gt;;</code></pre>
3292
+ </div>
3293
+ <div class="note ok">
3294
+ <div class="row">
3295
+ <span class="ex-name">Sizes</span>
3296
+ <span class="badge ok">story ok</span>
3297
+ </div>
3298
+
3299
+ <div class="hint">The `sm` and `md` sizes compared.</div>
3300
+ <pre><code>const Sizes = () =&gt; (
3301
+ &lt;div className=&quot;flex items-center gap-6&quot;&gt;
3302
+ &lt;div className=&quot;flex items-center gap-2&quot;&gt;
3303
+ &lt;Switch id=&quot;size-sm&quot; size=&quot;sm&quot; defaultChecked /&gt;
3304
+ &lt;label htmlFor=&quot;size-sm&quot; className=&quot;text-sm text-text-default-base-primary&quot;&gt;
3305
+ Small
3306
+ &lt;/label&gt;
3307
+ &lt;/div&gt;
3308
+ &lt;div className=&quot;flex items-center gap-2&quot;&gt;
3309
+ &lt;Switch id=&quot;size-md&quot; size=&quot;md&quot; defaultChecked /&gt;
3310
+ &lt;label htmlFor=&quot;size-md&quot; className=&quot;text-sm text-text-default-base-primary&quot;&gt;
3311
+ Medium
3312
+ &lt;/label&gt;
3313
+ &lt;/div&gt;
3314
+ &lt;/div&gt;
3315
+ );</code></pre>
3316
+ </div>
3317
+ <div class="note ok">
3318
+ <div class="row">
3319
+ <span class="ex-name">States</span>
3320
+ <span class="badge ok">story ok</span>
3321
+ </div>
3322
+
3323
+ <div class="hint">Unchecked and checked tracks.</div>
3324
+ <pre><code>const States = () =&gt; &lt;div className=&quot;flex items-center gap-6&quot;&gt;
3325
+ &lt;Switch size=&quot;md&quot; disabled={false} defaultChecked={false} aria-label=&quot;Off&quot; /&gt;
3326
+ &lt;Switch size=&quot;md&quot; disabled={false} defaultChecked aria-label=&quot;On&quot; /&gt;
3327
+ &lt;/div&gt;;</code></pre>
3328
+ </div>
3329
+ <div class="note ok">
3330
+ <div class="row">
3331
+ <span class="ex-name">Disabled</span>
3332
+ <span class="badge ok">story ok</span>
3333
+ </div>
3334
+
3335
+ <div class="hint">Disabled switches are dimmed and reject pointer and keyboard interaction.</div>
3336
+ <pre><code>const Disabled = () =&gt; (
3337
+ &lt;div className=&quot;flex items-center gap-6&quot;&gt;
3338
+ &lt;Switch disabled aria-label=&quot;Disabled off&quot; /&gt;
3339
+ &lt;Switch disabled defaultChecked aria-label=&quot;Disabled on&quot; /&gt;
3340
+ &lt;/div&gt;
3341
+ );</code></pre>
3342
+ </div>
3343
+ <div class="note ok">
3344
+ <div class="row">
3345
+ <span class="ex-name">Controlled</span>
3346
+ <span class="badge ok">story ok</span>
3347
+ </div>
3348
+
3349
+ <div class="hint">Controlled switch wired to component state via `checked` + `onCheckedChange`.</div>
3350
+ <pre><code>const Controlled = () =&gt; {
3351
+ const [enabled, setEnabled] = useState(false);
3352
+
3353
+ return (
3354
+ &lt;div className=&quot;flex items-center gap-2&quot;&gt;
3355
+ &lt;Switch id=&quot;controlled&quot; checked={enabled} onCheckedChange={setEnabled} /&gt;
3356
+ &lt;label htmlFor=&quot;controlled&quot; className=&quot;text-sm text-text-default-base-primary&quot;&gt;
3357
+ Notifications {enabled ? &#39;on&#39; : &#39;off&#39;}
3358
+ &lt;/label&gt;
3359
+ &lt;/div&gt;
3360
+ );
3361
+ };</code></pre>
3362
+ </div>
3363
+ <div class="note ok">
3364
+ <div class="row">
3365
+ <span class="ex-name">Setting Row</span>
3366
+ <span class="badge ok">story ok</span>
3367
+ </div>
3368
+
3369
+ <div class="hint">Switch aligned in a labelled settings row.</div>
3370
+ <pre><code>const SettingRow = () =&gt; (
3371
+ &lt;div className=&quot;flex w-80 items-center justify-between gap-4 rounded-lg border border-border-default-base-primary bg-bg-default-base-primary p-4&quot;&gt;
3372
+ &lt;div className=&quot;flex flex-col gap-0.5&quot;&gt;
3373
+ &lt;label htmlFor=&quot;marketing&quot; className=&quot;text-sm font-medium text-text-default-base-primary&quot;&gt;
3374
+ Marketing emails
3375
+ &lt;/label&gt;
3376
+ &lt;p className=&quot;text-xs text-text-default-base-secondary&quot;&gt;
3377
+ Receive product updates and offers.
3378
+ &lt;/p&gt;
3379
+ &lt;/div&gt;
3380
+ &lt;Switch id=&quot;marketing&quot; defaultChecked /&gt;
3381
+ &lt;/div&gt;
3382
+ );</code></pre>
3383
+ </div>
3384
+ </div>
3385
+
3386
+ </div>
3387
+ </article>
3223
3388
  <article
3224
3389
  class="card
3225
3390
  no-error
@@ -3234,7 +3399,7 @@ totalCount: number</code></pre>
3234
3399
  <div class="badges">
3235
3400
 
3236
3401
 
3237
- <label for="c-9-components-table-stories" class="badge ok as-toggle">9 stories</label>
3402
+ <label for="c-10-components-table-stories" class="badge ok as-toggle">9 stories</label>
3238
3403
 
3239
3404
  </div>
3240
3405
  </div>
@@ -3247,7 +3412,7 @@ totalCount: number</code></pre>
3247
3412
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
3248
3413
 
3249
3414
 
3250
- <input id="c-9-components-table-stories" class="tg tg-stories" type="checkbox" hidden />
3415
+ <input id="c-10-components-table-stories" class="tg tg-stories" type="checkbox" hidden />
3251
3416
 
3252
3417
 
3253
3418
 
@@ -3409,6 +3574,380 @@ import { Fragment } from "react";</code></pre>
3409
3574
 
3410
3575
  </div>
3411
3576
  </article>
3577
+ <article
3578
+ class="card
3579
+ no-error
3580
+ no-info
3581
+ no-story-error
3582
+ no-doc-error"
3583
+ role="listitem"
3584
+ aria-label="Tag">
3585
+ <div class="head">
3586
+ <div class="title">
3587
+ <h2><span class="status-dot dot-ok"></span> Tag</h2>
3588
+ <div class="badges">
3589
+ <label for="c-11-components-tag-props" class="badge ok as-toggle">6 prop types</label>
3590
+
3591
+ <label for="c-11-components-tag-stories" class="badge ok as-toggle">10 stories</label>
3592
+
3593
+ </div>
3594
+ </div>
3595
+ <div class="meta" title="./src/tag/tag.stories.tsx">components-tag · ./src/tag/tag.stories.tsx</div>
3596
+
3597
+ <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>
3598
+
3599
+ </div>
3600
+
3601
+ <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
3602
+
3603
+
3604
+ <input id="c-11-components-tag-stories" class="tg tg-stories" type="checkbox" hidden />
3605
+
3606
+ <input id="c-11-components-tag-props" class="tg tg-props" type="checkbox" hidden />
3607
+
3608
+ <div class="panels">
3609
+
3610
+
3611
+
3612
+ <div class="panel panel-props">
3613
+ <div class="note ok">
3614
+ <div class="row">
3615
+ <span class="ex-name">Prop types <small>(react-docgen-typescript)</small></span>
3616
+ <span class="badge ok">6 prop types</span>
3617
+ </div>
3618
+ <pre><code>Component: src/tag/tag.tsx::Tag</code></pre>
3619
+ <pre><code>Props:</code></pre>
3620
+ <pre><code>/**
3621
+ * Render the single child element instead of a `&lt;span&gt;` (via Radix `Slot`),
3622
+ * keeping Tag framework-agnostic. Marks the Tag interactive: adds the pointer
3623
+ * cursor and the hover fill (a plain `&lt;span&gt;` Tag is a static badge).
3624
+ */
3625
+ asChild?: boolean
3626
+
3627
+ 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;
3628
+
3629
+ pill?: boolean
3630
+
3631
+ size?: &quot;sm&quot; | &quot;md&quot; | &quot;xs&quot;
3632
+
3633
+ truncate?: boolean
3634
+
3635
+ variant?: &quot;ghost&quot; | &quot;secondary&quot; | &quot;tertiary&quot; | &quot;invisible&quot;</code></pre>
3636
+ </div>
3637
+ </div>
3638
+
3639
+ <div class="panel panel-stories">
3640
+
3641
+
3642
+
3643
+ <div class="note ok">
3644
+ <div class="row">
3645
+ <span class="ex-name">Imports</span>
3646
+ </div>
3647
+ <pre><code>import { Tag } from "@agentero/design-system";</code></pre>
3648
+ </div>
3649
+
3650
+
3651
+ <div class="note ok">
3652
+ <div class="row">
3653
+ <span class="ex-name">Default</span>
3654
+ <span class="badge ok">story ok</span>
3655
+ </div>
3656
+ <div>Default args playground for Tag</div>
3657
+ <div class="hint">Args-controlled playground. Toggle `color`, `variant`, `size`, `pill`, and `truncate` from the Controls panel to explore every visual combination.</div>
3658
+ <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>
3659
+ </div>
3660
+ <div class="note ok">
3661
+ <div class="row">
3662
+ <span class="ex-name">Sizes</span>
3663
+ <span class="badge ok">story ok</span>
3664
+ </div>
3665
+ <div>All three sizes across icon-only, icon + text, and text-only</div>
3666
+ <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>
3667
+ <pre><code>const Sizes = () =&gt; (
3668
+ &lt;Stack&gt;
3669
+ {([&#39;xs&#39;, &#39;sm&#39;, &#39;md&#39;] as const).map(size =&gt; (
3670
+ &lt;Stack gap=&quot;0.5rem&quot; key={size}&gt;
3671
+ &lt;strong&gt;{size}:&lt;/strong&gt;
3672
+ &lt;Row&gt;
3673
+ &lt;Tag
3674
+ size={size}
3675
+ color=&quot;informative&quot;
3676
+ variant=&quot;secondary&quot;
3677
+ role=&quot;img&quot;
3678
+ aria-label={`${size} icon only`}&gt;
3679
+ &lt;IconAdd /&gt;
3680
+ &lt;/Tag&gt;
3681
+ &lt;Tag size={size} color=&quot;informative&quot; variant=&quot;secondary&quot;&gt;
3682
+ &lt;IconAdd /&gt;
3683
+ {size}
3684
+ &lt;/Tag&gt;
3685
+ &lt;Tag size={size} color=&quot;informative&quot; variant=&quot;secondary&quot;&gt;
3686
+ {size}
3687
+ &lt;/Tag&gt;
3688
+ &lt;/Row&gt;
3689
+ &lt;/Stack&gt;
3690
+ ))}
3691
+ &lt;/Stack&gt;
3692
+ );</code></pre>
3693
+ </div>
3694
+ <div class="note ok">
3695
+ <div class="row">
3696
+ <span class="ex-name">Styles</span>
3697
+ <span class="badge ok">story ok</span>
3698
+ </div>
3699
+ <div>Rounded (default) vs pill</div>
3700
+ <div class="hint">The `Style` axis: the default rounded corners (top row) versus `pill` fully rounded (bottom row), shown across every fill variant.</div>
3701
+ <pre><code>const Styles = () =&gt; (
3702
+ &lt;Stack gap=&quot;0.5rem&quot;&gt;
3703
+ &lt;Row&gt;
3704
+ {VARIANTS.map(variant =&gt; (
3705
+ &lt;Tag key={variant} color=&quot;informative&quot; variant={variant}&gt;
3706
+ {variant}
3707
+ &lt;/Tag&gt;
3708
+ ))}
3709
+ &lt;/Row&gt;
3710
+ &lt;Row&gt;
3711
+ {VARIANTS.map(variant =&gt; (
3712
+ &lt;Tag key={variant} color=&quot;informative&quot; variant={variant} pill&gt;
3713
+ {variant}
3714
+ &lt;/Tag&gt;
3715
+ ))}
3716
+ &lt;/Row&gt;
3717
+ &lt;/Stack&gt;
3718
+ );</code></pre>
3719
+ </div>
3720
+ <div class="note ok">
3721
+ <div class="row">
3722
+ <span class="ex-name">Interactive</span>
3723
+ <span class="badge ok">story ok</span>
3724
+ </div>
3725
+ <div>Static badge vs interactive (asChild) hover</div>
3726
+ <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>
3727
+ <pre><code>const Interactive = () =&gt; (
3728
+ &lt;Row&gt;
3729
+ &lt;Tag color=&quot;informative&quot; variant=&quot;secondary&quot;&gt;
3730
+ badge
3731
+ &lt;/Tag&gt;
3732
+ &lt;Tag color=&quot;informative&quot; variant=&quot;secondary&quot; asChild&gt;
3733
+ &lt;button type=&quot;button&quot;&gt;interactive&lt;/button&gt;
3734
+ &lt;/Tag&gt;
3735
+ &lt;Tag color=&quot;informative&quot; variant=&quot;secondary&quot; asChild aria-label=&quot;add&quot;&gt;
3736
+ &lt;button type=&quot;button&quot;&gt;
3737
+ &lt;IconAdd /&gt;
3738
+ &lt;/button&gt;
3739
+ &lt;/Tag&gt;
3740
+ &lt;/Row&gt;
3741
+ );</code></pre>
3742
+ </div>
3743
+ <div class="note ok">
3744
+ <div class="row">
3745
+ <span class="ex-name">Secondary</span>
3746
+ <span class="badge ok">story ok</span>
3747
+ </div>
3748
+ <div>`secondary` variant across all colors</div>
3749
+ <div class="hint">`secondary` fills with a tinted background plus a matching border, shown across every color.</div>
3750
+ <pre><code>const Secondary = () =&gt; (
3751
+ &lt;Row&gt;
3752
+ {COLORS.map(color =&gt; (
3753
+ &lt;Tag key={color} variant=&quot;secondary&quot; color={color}&gt;
3754
+ {color}
3755
+ &lt;/Tag&gt;
3756
+ ))}
3757
+ &lt;/Row&gt;
3758
+ );</code></pre>
3759
+ </div>
3760
+ <div class="note ok">
3761
+ <div class="row">
3762
+ <span class="ex-name">Tertiary</span>
3763
+ <span class="badge ok">story ok</span>
3764
+ </div>
3765
+ <div>`tertiary` variant across all colors</div>
3766
+ <div class="hint">`tertiary` (default) fills with a tinted background and no border, shown across every color.</div>
3767
+ <pre><code>const Tertiary = () =&gt; (
3768
+ &lt;Row&gt;
3769
+ {COLORS.map(color =&gt; (
3770
+ &lt;Tag key={color} variant=&quot;tertiary&quot; color={color}&gt;
3771
+ {color}
3772
+ &lt;/Tag&gt;
3773
+ ))}
3774
+ &lt;/Row&gt;
3775
+ );</code></pre>
3776
+ </div>
3777
+ <div class="note ok">
3778
+ <div class="row">
3779
+ <span class="ex-name">Ghost</span>
3780
+ <span class="badge ok">story ok</span>
3781
+ </div>
3782
+ <div>`ghost` variant across all colors</div>
3783
+ <div class="hint">`ghost` shows colored text alone with no background or border, across every color.</div>
3784
+ <pre><code>const Ghost = () =&gt; (
3785
+ &lt;Row&gt;
3786
+ {COLORS.map(color =&gt; (
3787
+ &lt;Tag key={color} variant=&quot;ghost&quot; color={color}&gt;
3788
+ {color}
3789
+ &lt;/Tag&gt;
3790
+ ))}
3791
+ &lt;/Row&gt;
3792
+ );</code></pre>
3793
+ </div>
3794
+ <div class="note ok">
3795
+ <div class="row">
3796
+ <span class="ex-name">Invisible</span>
3797
+ <span class="badge ok">story ok</span>
3798
+ </div>
3799
+ <div>`invisible` variant as span and as interactive button</div>
3800
+ <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>
3801
+ <pre><code>const Invisible = () =&gt; (
3802
+ &lt;Stack gap=&quot;0.5rem&quot;&gt;
3803
+ &lt;Row&gt;
3804
+ {COLORS.map(color =&gt; (
3805
+ &lt;Tag key={color} variant=&quot;invisible&quot; color={color}&gt;
3806
+ {color}
3807
+ &lt;/Tag&gt;
3808
+ ))}
3809
+ &lt;/Row&gt;
3810
+ &lt;Row&gt;
3811
+ {COLORS.map(color =&gt; (
3812
+ &lt;Tag key={color} variant=&quot;invisible&quot; color={color} asChild&gt;
3813
+ &lt;button type=&quot;button&quot;&gt;{color}&lt;/button&gt;
3814
+ &lt;/Tag&gt;
3815
+ ))}
3816
+ &lt;/Row&gt;
3817
+ &lt;/Stack&gt;
3818
+ );</code></pre>
3819
+ </div>
3820
+ <div class="note ok">
3821
+ <div class="row">
3822
+ <span class="ex-name">With Icon</span>
3823
+ <span class="badge ok">story ok</span>
3824
+ </div>
3825
+ <div>Variant × color grid with icons</div>
3826
+ <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>
3827
+ <pre><code>const WithIcon = () =&gt; (
3828
+ &lt;Stack&gt;
3829
+ {COLORS.map(color =&gt; (
3830
+ &lt;Row key={color}&gt;
3831
+ {VARIANTS.map(variant =&gt; (
3832
+ &lt;Tag key={variant} color={color} variant={variant}&gt;
3833
+ &lt;IconAdd /&gt;
3834
+ tag
3835
+ &lt;IconAdd /&gt;
3836
+ &lt;/Tag&gt;
3837
+ ))}
3838
+ &lt;/Row&gt;
3839
+ ))}
3840
+ &lt;/Stack&gt;
3841
+ );</code></pre>
3842
+ </div>
3843
+ <div class="note ok">
3844
+ <div class="row">
3845
+ <span class="ex-name">Colors</span>
3846
+ <span class="badge ok">story ok</span>
3847
+ </div>
3848
+ <div>Variant × color matrix — default, pill, button, and icon layouts</div>
3849
+ <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>
3850
+ <pre><code>const Colors = () =&gt; (
3851
+ &lt;div style={{ display: &#39;flex&#39;, gap: &#39;4rem&#39;, flexWrap: &#39;wrap&#39; }}&gt;
3852
+ &lt;Stack&gt;
3853
+ {COLORS.map(color =&gt; (
3854
+ &lt;Stack gap=&quot;0.5rem&quot; key={color}&gt;
3855
+ &lt;strong&gt;{color}:&lt;/strong&gt;
3856
+ &lt;Row&gt;
3857
+ {VARIANTS.map(variant =&gt; (
3858
+ &lt;Tag key={variant} color={color} variant={variant}&gt;
3859
+ {variant}
3860
+ &lt;/Tag&gt;
3861
+ ))}
3862
+ &lt;/Row&gt;
3863
+ &lt;/Stack&gt;
3864
+ ))}
3865
+ &lt;/Stack&gt;
3866
+ &lt;Stack&gt;
3867
+ {COLORS.map(color =&gt; (
3868
+ &lt;Stack gap=&quot;0.5rem&quot; key={color}&gt;
3869
+ &lt;strong&gt;{color} with pill:&lt;/strong&gt;
3870
+ &lt;Row&gt;
3871
+ {VARIANTS.map(variant =&gt; (
3872
+ &lt;Tag key={variant} color={color} variant={variant} pill&gt;
3873
+ {variant}
3874
+ &lt;/Tag&gt;
3875
+ ))}
3876
+ &lt;/Row&gt;
3877
+ &lt;/Stack&gt;
3878
+ ))}
3879
+ &lt;/Stack&gt;
3880
+ &lt;Stack&gt;
3881
+ {COLORS.map(color =&gt; (
3882
+ &lt;Stack gap=&quot;0.5rem&quot; key={color}&gt;
3883
+ &lt;strong&gt;{color} as button:&lt;/strong&gt;
3884
+ &lt;Row&gt;
3885
+ {VARIANTS.map(variant =&gt; (
3886
+ &lt;Tag key={variant} color={color} variant={variant} asChild&gt;
3887
+ &lt;button type=&quot;button&quot;&gt;{variant}&lt;/button&gt;
3888
+ &lt;/Tag&gt;
3889
+ ))}
3890
+ &lt;/Row&gt;
3891
+ &lt;/Stack&gt;
3892
+ ))}
3893
+ &lt;/Stack&gt;
3894
+ &lt;Stack&gt;
3895
+ {COLORS.map(color =&gt; (
3896
+ &lt;Stack gap=&quot;0.5rem&quot; key={color}&gt;
3897
+ &lt;strong&gt;{color} with icon:&lt;/strong&gt;
3898
+ &lt;Row&gt;
3899
+ {VARIANTS.map(variant =&gt; (
3900
+ &lt;Tag key={variant} color={color} variant={variant}&gt;
3901
+ &lt;IconAdd /&gt;
3902
+ {variant}
3903
+ &lt;/Tag&gt;
3904
+ ))}
3905
+ &lt;/Row&gt;
3906
+ &lt;/Stack&gt;
3907
+ ))}
3908
+ &lt;/Stack&gt;
3909
+ &lt;Stack&gt;
3910
+ {COLORS.map(color =&gt; (
3911
+ &lt;Stack gap=&quot;0.5rem&quot; key={color}&gt;
3912
+ &lt;strong&gt;{color} with icons:&lt;/strong&gt;
3913
+ &lt;Row&gt;
3914
+ {VARIANTS.map(variant =&gt; (
3915
+ &lt;Tag key={variant} color={color} variant={variant}&gt;
3916
+ &lt;IconAdd /&gt;
3917
+ {variant}
3918
+ &lt;IconAdd /&gt;
3919
+ &lt;/Tag&gt;
3920
+ ))}
3921
+ &lt;/Row&gt;
3922
+ &lt;/Stack&gt;
3923
+ ))}
3924
+ &lt;/Stack&gt;
3925
+ &lt;Stack&gt;
3926
+ {COLORS.map(color =&gt; (
3927
+ &lt;Stack gap=&quot;0.5rem&quot; key={color}&gt;
3928
+ &lt;strong&gt;{color} icon only:&lt;/strong&gt;
3929
+ &lt;Row&gt;
3930
+ {VARIANTS.map(variant =&gt; (
3931
+ &lt;Tag
3932
+ key={variant}
3933
+ color={color}
3934
+ variant={variant}
3935
+ role=&quot;img&quot;
3936
+ aria-label={`${color} ${variant}`}&gt;
3937
+ &lt;IconAdd /&gt;
3938
+ &lt;/Tag&gt;
3939
+ ))}
3940
+ &lt;/Row&gt;
3941
+ &lt;/Stack&gt;
3942
+ ))}
3943
+ &lt;/Stack&gt;
3944
+ &lt;/div&gt;
3945
+ );</code></pre>
3946
+ </div>
3947
+ </div>
3948
+
3949
+ </div>
3950
+ </article>
3412
3951
  <article
3413
3952
  class="card
3414
3953
  no-error
@@ -3421,9 +3960,9 @@ import { Fragment } from "react";</code></pre>
3421
3960
  <div class="title">
3422
3961
  <h2><span class="status-dot dot-ok"></span> Toast</h2>
3423
3962
  <div class="badges">
3424
- <label for="c-10-components-toast-props" class="badge ok as-toggle">11 prop types</label>
3963
+ <label for="c-12-components-toast-props" class="badge ok as-toggle">11 prop types</label>
3425
3964
 
3426
- <label for="c-10-components-toast-stories" class="badge ok as-toggle">11 stories</label>
3965
+ <label for="c-12-components-toast-stories" class="badge ok as-toggle">11 stories</label>
3427
3966
 
3428
3967
  </div>
3429
3968
  </div>
@@ -3436,9 +3975,9 @@ import { Fragment } from "react";</code></pre>
3436
3975
  <!-- ⬇️ Hidden toggles must be siblings BEFORE .panels -->
3437
3976
 
3438
3977
 
3439
- <input id="c-10-components-toast-stories" class="tg tg-stories" type="checkbox" hidden />
3978
+ <input id="c-12-components-toast-stories" class="tg tg-stories" type="checkbox" hidden />
3440
3979
 
3441
- <input id="c-10-components-toast-props" class="tg tg-props" type="checkbox" hidden />
3980
+ <input id="c-12-components-toast-props" class="tg tg-props" type="checkbox" hidden />
3442
3981
 
3443
3982
  <div class="panels">
3444
3983