@cloudflare/kumo 1.18.0 → 1.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +90 -0
- package/ai/component-registry.json +174 -66
- package/ai/component-registry.md +836 -503
- package/ai/schemas.ts +19 -3
- package/dist/.build-complete +1 -1
- package/dist/ai/schemas.d.ts +55 -8
- package/dist/ai/schemas.d.ts.map +1 -1
- package/dist/ai/schemas.js +163 -146
- package/dist/ai/schemas.js.map +1 -1
- package/dist/chunks/{Legend-o0ntojbaplmszwk0.js → Legend-ks7se6149vsa3tze.js} +127 -118
- package/dist/chunks/Legend-ks7se6149vsa3tze.js.map +1 -0
- package/dist/chunks/{breadcrumbs-k39s28qx05vbxxth.js → breadcrumbs-ge20hcb3o5spswrk.js} +2 -2
- package/dist/chunks/{breadcrumbs-k39s28qx05vbxxth.js.map → breadcrumbs-ge20hcb3o5spswrk.js.map} +1 -1
- package/dist/chunks/{button-cdxnqcgzwko8ooha.js → button-oaqi7ykdisyskoos.js} +12 -12
- package/dist/chunks/button-oaqi7ykdisyskoos.js.map +1 -0
- package/dist/chunks/{checkbox-kt1uojk2f9e0d0h1.js → checkbox-mwgmohffm22ut13s.js} +5 -5
- package/dist/chunks/checkbox-mwgmohffm22ut13s.js.map +1 -0
- package/dist/chunks/{clipboard-text-vcbvmtne4zjk4b18.js → clipboard-text-dxczqon3d27xp6f0.js} +10 -10
- package/dist/chunks/{clipboard-text-vcbvmtne4zjk4b18.js.map → clipboard-text-dxczqon3d27xp6f0.js.map} +1 -1
- package/dist/chunks/{cloudflare-logo-bgts2jgsdh7sslw4.js → cloudflare-logo-pbavoe1wu8nr5c4n.js} +9 -9
- package/dist/chunks/{cloudflare-logo-bgts2jgsdh7sslw4.js.map → cloudflare-logo-pbavoe1wu8nr5c4n.js.map} +1 -1
- package/dist/chunks/{combobox-he2hd9e2ruknq5mp.js → combobox-eaowwt1xr4d23gsn.js} +113 -101
- package/dist/chunks/combobox-eaowwt1xr4d23gsn.js.map +1 -0
- package/dist/chunks/{command-palette-jc1w07jwakxvj23a.js → command-palette-maqtbmpfev9mysqd.js} +19 -19
- package/dist/chunks/command-palette-maqtbmpfev9mysqd.js.map +1 -0
- package/dist/chunks/{dialog-oqh8l3l3zutpibxx.js → dialog-e3m5bhs7fds26p9y.js} +25 -25
- package/dist/chunks/dialog-e3m5bhs7fds26p9y.js.map +1 -0
- package/dist/chunks/{dropdown-ncwhcd912vmone8k.js → dropdown-ewte287db3vyt8t5.js} +94 -92
- package/dist/chunks/{dropdown-ncwhcd912vmone8k.js.map → dropdown-ewte287db3vyt8t5.js.map} +1 -1
- package/dist/chunks/{empty-cj898km1r8xwuw44.js → empty-dr1eckm2z40euns6.js} +2 -2
- package/dist/chunks/{empty-cj898km1r8xwuw44.js.map → empty-dr1eckm2z40euns6.js.map} +1 -1
- package/dist/chunks/{field-krp6z6vfbkrvufz2.js → field-bo5gmna16odrrb1q.js} +3 -3
- package/dist/chunks/{field-krp6z6vfbkrvufz2.js.map → field-bo5gmna16odrrb1q.js.map} +1 -1
- package/dist/chunks/{grid-m9r71jxo2b8q1972.js → grid-hj1ylz16p7g5uelh.js} +2 -2
- package/dist/chunks/{grid-m9r71jxo2b8q1972.js.map → grid-hj1ylz16p7g5uelh.js.map} +1 -1
- package/dist/chunks/{input-area-no30c09udyjxshu5.js → input-area-jkkkjej6luumrqpa.js} +4 -4
- package/dist/chunks/{input-area-no30c09udyjxshu5.js.map → input-area-jkkkjej6luumrqpa.js.map} +1 -1
- package/dist/chunks/{input-h48k3uagzrgb98au.js → input-cw05pbqdburghkus.js} +31 -31
- package/dist/chunks/input-cw05pbqdburghkus.js.map +1 -0
- package/dist/chunks/{input-group-lxdd09p60cf27pe1.js → input-group-lfugneuz71g42n0w.js} +6 -6
- package/dist/chunks/input-group-lfugneuz71g42n0w.js.map +1 -0
- package/dist/chunks/label-cvyvbqmt4mt757ff.js +68 -0
- package/dist/chunks/{label-latndvb1ngem7we8.js.map → label-cvyvbqmt4mt757ff.js.map} +1 -1
- package/dist/chunks/layer-card-ljqth3yxgnk04v2o.js +46 -0
- package/dist/chunks/layer-card-ljqth3yxgnk04v2o.js.map +1 -0
- package/dist/chunks/{link-hn5ejal7nhh0o0b4.js → link-fjnhtxvfe5ieamjf.js} +2 -2
- package/dist/chunks/{link-hn5ejal7nhh0o0b4.js.map → link-fjnhtxvfe5ieamjf.js.map} +1 -1
- package/dist/chunks/menubar-e5e4zwfagr0wx023.js +96 -0
- package/dist/chunks/menubar-e5e4zwfagr0wx023.js.map +1 -0
- package/dist/chunks/{meter-gfa1hz9fhjnvx784.js → meter-duj3micor1lqj3y2.js} +2 -2
- package/dist/chunks/{meter-gfa1hz9fhjnvx784.js.map → meter-duj3micor1lqj3y2.js.map} +1 -1
- package/dist/chunks/pagination-olaypvwr8swsmn8m.js +266 -0
- package/dist/chunks/pagination-olaypvwr8swsmn8m.js.map +1 -0
- package/dist/chunks/{popover-h300w4vit0s2ayej.js → popover-nv9cmzbo7mf6bky0.js} +70 -74
- package/dist/chunks/popover-nv9cmzbo7mf6bky0.js.map +1 -0
- package/dist/chunks/{radio-jouttv89lbvhs55r.js → radio-ihxbe37us2jnqtzf.js} +5 -5
- package/dist/chunks/radio-ihxbe37us2jnqtzf.js.map +1 -0
- package/dist/chunks/select-nx6ded5swra74iar.js +213 -0
- package/dist/chunks/select-nx6ded5swra74iar.js.map +1 -0
- package/dist/chunks/{sensitive-input-hd4tpqkzifad1yca.js → sensitive-input-00fujb510rrn61v9.js} +4 -4
- package/dist/chunks/{sensitive-input-hd4tpqkzifad1yca.js.map → sensitive-input-00fujb510rrn61v9.js.map} +1 -1
- package/dist/chunks/{sidebar-hljy3ssm8itc0ucx.js → sidebar-ltbfius1eolkl8tb.js} +22 -26
- package/dist/chunks/sidebar-ltbfius1eolkl8tb.js.map +1 -0
- package/dist/chunks/surface-dfgurg5eu3et4vw1.js +29 -0
- package/dist/chunks/surface-dfgurg5eu3et4vw1.js.map +1 -0
- package/dist/chunks/{switch-ihaydbzem62bey4p.js → switch-fbv3iawqo3o3jgap.js} +17 -17
- package/dist/chunks/switch-fbv3iawqo3o3jgap.js.map +1 -0
- package/dist/chunks/table-of-contents-f813ivi7ta23vqdm.js +88 -0
- package/dist/chunks/table-of-contents-f813ivi7ta23vqdm.js.map +1 -0
- package/dist/chunks/table-olwwulga2l3hdwlx.js +189 -0
- package/dist/chunks/table-olwwulga2l3hdwlx.js.map +1 -0
- package/dist/chunks/{tabs-e7eh7l3mpk3xgmwq.js → tabs-lohcglgppp6gj0hp.js} +4 -4
- package/dist/chunks/{tabs-e7eh7l3mpk3xgmwq.js.map → tabs-lohcglgppp6gj0hp.js.map} +1 -1
- package/dist/chunks/{toast-bpz6iaq54u9jmuu8.js → toast-dg52x89yd231mxhe.js} +4 -4
- package/dist/chunks/{toast-bpz6iaq54u9jmuu8.js.map → toast-dg52x89yd231mxhe.js.map} +1 -1
- package/dist/chunks/{tooltip-belkznz8t8333h5f.js → tooltip-hikjvdbg3xghnq1x.js} +38 -37
- package/dist/chunks/tooltip-hikjvdbg3xghnq1x.js.map +1 -0
- package/dist/chunks/{vendor-base-ui-k7bzesq81ie36nya.js → vendor-base-ui-m5pz3e8c4grg5qmj.js} +21 -21
- package/dist/chunks/{vendor-base-ui-k7bzesq81ie36nya.js.map → vendor-base-ui-m5pz3e8c4grg5qmj.js.map} +1 -1
- package/dist/code.js +1 -1
- package/dist/components/breadcrumbs.js +1 -1
- package/dist/components/button.js +1 -1
- package/dist/components/chart.js +1 -1
- package/dist/components/checkbox.js +1 -1
- package/dist/components/clipboard-text.js +1 -1
- package/dist/components/cloudflare-logo.js +1 -1
- package/dist/components/combobox.js +1 -1
- package/dist/components/command-palette.js +1 -1
- package/dist/components/dialog.js +1 -1
- package/dist/components/dropdown.js +1 -1
- package/dist/components/empty.js +1 -1
- package/dist/components/field.js +1 -1
- package/dist/components/flow.js +2 -2
- package/dist/components/flow.js.map +1 -1
- package/dist/components/grid.js +1 -1
- package/dist/components/input.js +3 -3
- package/dist/components/label.js +1 -1
- package/dist/components/layer-card.js +1 -1
- package/dist/components/link.js +1 -1
- package/dist/components/menubar.js +1 -1
- package/dist/components/meter.js +1 -1
- package/dist/components/pagination.js +1 -1
- package/dist/components/popover.js +1 -1
- package/dist/components/radio.js +1 -1
- package/dist/components/select.js +1 -1
- package/dist/components/sensitive-input.js +1 -1
- package/dist/components/sidebar.js +1 -1
- package/dist/components/surface.js +1 -1
- package/dist/components/switch.js +1 -1
- package/dist/components/table-of-contents.js +8 -0
- package/dist/components/table-of-contents.js.map +1 -0
- package/dist/components/table.js +1 -1
- package/dist/components/tabs.js +1 -1
- package/dist/components/toast.js +2 -2
- package/dist/components/tooltip.js +1 -1
- package/dist/index.js +124 -120
- package/dist/index.js.map +1 -1
- package/dist/primitives/accordion.js +1 -1
- package/dist/primitives/alert-dialog.js +1 -1
- package/dist/primitives/autocomplete.js +1 -1
- package/dist/primitives/avatar.js +1 -1
- package/dist/primitives/button.js +1 -1
- package/dist/primitives/checkbox-group.js +1 -1
- package/dist/primitives/checkbox.js +1 -1
- package/dist/primitives/collapsible.js +1 -1
- package/dist/primitives/combobox.js +1 -1
- package/dist/primitives/context-menu.js +1 -1
- package/dist/primitives/csp-provider.js +1 -1
- package/dist/primitives/dialog.js +1 -1
- package/dist/primitives/direction-provider.js +1 -1
- package/dist/primitives/drawer.js +1 -1
- package/dist/primitives/field.js +1 -1
- package/dist/primitives/fieldset.js +1 -1
- package/dist/primitives/form.js +1 -1
- package/dist/primitives/input.js +1 -1
- package/dist/primitives/menu.js +1 -1
- package/dist/primitives/menubar.js +1 -1
- package/dist/primitives/meter.js +1 -1
- package/dist/primitives/navigation-menu.js +1 -1
- package/dist/primitives/number-field.js +1 -1
- package/dist/primitives/popover.js +1 -1
- package/dist/primitives/preview-card.js +1 -1
- package/dist/primitives/progress.js +1 -1
- package/dist/primitives/radio-group.js +1 -1
- package/dist/primitives/radio.js +1 -1
- package/dist/primitives/scroll-area.js +1 -1
- package/dist/primitives/select.js +1 -1
- package/dist/primitives/separator.js +1 -1
- package/dist/primitives/slider.js +1 -1
- package/dist/primitives/switch.js +1 -1
- package/dist/primitives/tabs.js +1 -1
- package/dist/primitives/toast.js +1 -1
- package/dist/primitives/toggle-group.js +1 -1
- package/dist/primitives/toggle.js +1 -1
- package/dist/primitives/toolbar.js +1 -1
- package/dist/primitives/tooltip.js +1 -1
- package/dist/primitives.js +1 -1
- package/dist/scripts/theme-generator/config.d.ts.map +1 -1
- package/dist/scripts/theme-generator/config.js +3 -3
- package/dist/scripts/theme-generator/config.js.map +1 -1
- package/dist/src/components/button/button.d.ts +1 -1
- package/dist/src/components/button/button.d.ts.map +1 -1
- package/dist/src/components/chart/EChart.d.ts +18 -2
- package/dist/src/components/chart/EChart.d.ts.map +1 -1
- package/dist/src/components/chart/TimeseriesChart.d.ts.map +1 -1
- package/dist/src/components/chart/index.d.ts +1 -1
- package/dist/src/components/chart/index.d.ts.map +1 -1
- package/dist/src/components/combobox/combobox.d.ts +16 -2
- package/dist/src/components/combobox/combobox.d.ts.map +1 -1
- package/dist/src/components/dropdown/dropdown.d.ts.map +1 -1
- package/dist/src/components/input/input.d.ts.map +1 -1
- package/dist/src/components/label/label.d.ts.map +1 -1
- package/dist/src/components/layer-card/layer-card.d.ts +39 -5
- package/dist/src/components/layer-card/layer-card.d.ts.map +1 -1
- package/dist/src/components/menubar/menubar.d.ts.map +1 -1
- package/dist/src/components/pagination/pagination.d.ts +51 -1
- package/dist/src/components/pagination/pagination.d.ts.map +1 -1
- package/dist/src/components/popover/popover.d.ts +35 -8
- package/dist/src/components/popover/popover.d.ts.map +1 -1
- package/dist/src/components/radio/radio.d.ts +1 -1
- package/dist/src/components/select/select.d.ts +49 -5
- package/dist/src/components/select/select.d.ts.map +1 -1
- package/dist/src/components/sidebar/sidebar.d.ts +2 -2
- package/dist/src/components/sidebar/sidebar.d.ts.map +1 -1
- package/dist/src/components/surface/index.d.ts +3 -0
- package/dist/src/components/surface/index.d.ts.map +1 -1
- package/dist/src/components/surface/surface.d.ts +14 -10
- package/dist/src/components/surface/surface.d.ts.map +1 -1
- package/dist/src/components/table/table.d.ts.map +1 -1
- package/dist/src/components/table-of-contents/index.d.ts +2 -0
- package/dist/src/components/table-of-contents/index.d.ts.map +1 -0
- package/dist/src/components/table-of-contents/table-of-contents.d.ts +70 -0
- package/dist/src/components/table-of-contents/table-of-contents.d.ts.map +1 -0
- package/dist/src/components/tooltip/tooltip.d.ts +15 -6
- package/dist/src/components/tooltip/tooltip.d.ts.map +1 -1
- package/dist/src/index.d.ts +6 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/styles/kumo-binding.css +1 -0
- package/dist/styles/kumo-standalone.css +1 -1
- package/dist/styles/theme-kumo.css +6 -6
- package/package.json +5 -1
- package/scripts/theme-generator/config.ts +8 -6
- package/dist/chunks/Legend-o0ntojbaplmszwk0.js.map +0 -1
- package/dist/chunks/button-cdxnqcgzwko8ooha.js.map +0 -1
- package/dist/chunks/checkbox-kt1uojk2f9e0d0h1.js.map +0 -1
- package/dist/chunks/combobox-he2hd9e2ruknq5mp.js.map +0 -1
- package/dist/chunks/command-palette-jc1w07jwakxvj23a.js.map +0 -1
- package/dist/chunks/dialog-oqh8l3l3zutpibxx.js.map +0 -1
- package/dist/chunks/input-group-lxdd09p60cf27pe1.js.map +0 -1
- package/dist/chunks/input-h48k3uagzrgb98au.js.map +0 -1
- package/dist/chunks/label-latndvb1ngem7we8.js +0 -62
- package/dist/chunks/layer-card-l5yjvrxry1dhte57.js +0 -44
- package/dist/chunks/layer-card-l5yjvrxry1dhte57.js.map +0 -1
- package/dist/chunks/menubar-f1pilzooe5mue7c4.js +0 -92
- package/dist/chunks/menubar-f1pilzooe5mue7c4.js.map +0 -1
- package/dist/chunks/pagination-cu5lm6p5dxuycta4.js +0 -243
- package/dist/chunks/pagination-cu5lm6p5dxuycta4.js.map +0 -1
- package/dist/chunks/popover-h300w4vit0s2ayej.js.map +0 -1
- package/dist/chunks/radio-jouttv89lbvhs55r.js.map +0 -1
- package/dist/chunks/select-kva5ru5f673kah1m.js +0 -179
- package/dist/chunks/select-kva5ru5f673kah1m.js.map +0 -1
- package/dist/chunks/sidebar-hljy3ssm8itc0ucx.js.map +0 -1
- package/dist/chunks/surface-cilvbyhmyujz1bee.js +0 -36
- package/dist/chunks/surface-cilvbyhmyujz1bee.js.map +0 -1
- package/dist/chunks/switch-ihaydbzem62bey4p.js.map +0 -1
- package/dist/chunks/table-inweecadl3her7pd.js +0 -183
- package/dist/chunks/table-inweecadl3her7pd.js.map +0 -1
- package/dist/chunks/tooltip-belkznz8t8333h5f.js.map +0 -1
package/ai/component-registry.md
CHANGED
|
@@ -383,7 +383,7 @@ Primary action trigger. Supports multiple variants, sizes, shapes, icons, and lo
|
|
|
383
383
|
|
|
384
384
|
**Colors (kumo tokens used):**
|
|
385
385
|
|
|
386
|
-
`bg-kumo-base`, `bg-kumo-brand`, `bg-kumo-brand-hover`, `bg-kumo-danger`, `bg-kumo-tint`, `ring-kumo-hairline`, `
|
|
386
|
+
`bg-kumo-base`, `bg-kumo-brand`, `bg-kumo-brand-hover`, `bg-kumo-danger`, `bg-kumo-tint`, `ring-kumo-hairline`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-subtle`
|
|
387
387
|
|
|
388
388
|
**Examples:**
|
|
389
389
|
|
|
@@ -504,7 +504,7 @@ Checkbox component
|
|
|
504
504
|
|
|
505
505
|
**Colors (kumo tokens used):**
|
|
506
506
|
|
|
507
|
-
`bg-kumo-base`, `bg-kumo-contrast`, `ring-kumo-contrast`, `ring-kumo-danger`, `ring-kumo-hairline`, `
|
|
507
|
+
`bg-kumo-base`, `bg-kumo-contrast`, `ring-kumo-contrast`, `ring-kumo-danger`, `ring-kumo-hairline`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-inverse`, `text-kumo-subtle`
|
|
508
508
|
|
|
509
509
|
**Styling:**
|
|
510
510
|
|
|
@@ -638,7 +638,7 @@ Read-only text field with a one-click copy-to-clipboard button.
|
|
|
638
638
|
|
|
639
639
|
**Colors (kumo tokens used):**
|
|
640
640
|
|
|
641
|
-
`bg-kumo-base`, `border-kumo-
|
|
641
|
+
`bg-kumo-base`, `border-kumo-hairline`, `outline-kumo-fill`, `text-kumo-default`
|
|
642
642
|
|
|
643
643
|
**Styling:**
|
|
644
644
|
|
|
@@ -980,7 +980,7 @@ Cloudflare logo component.
|
|
|
980
980
|
|
|
981
981
|
**Colors (kumo tokens used):**
|
|
982
982
|
|
|
983
|
-
`bg-kumo-base`, `ring-kumo-
|
|
983
|
+
`bg-kumo-base`, `ring-kumo-hairline`, `text-kumo-default`
|
|
984
984
|
|
|
985
985
|
**Examples:**
|
|
986
986
|
|
|
@@ -1108,7 +1108,7 @@ Cloudflare logo component.
|
|
|
1108
1108
|
```
|
|
1109
1109
|
|
|
1110
1110
|
```tsx
|
|
1111
|
-
<footer className="flex w-full items-center justify-between rounded-lg border border-kumo-
|
|
1111
|
+
<footer className="flex w-full items-center justify-between rounded-lg border border-kumo-hairline bg-kumo-elevated px-6 py-4">
|
|
1112
1112
|
<span className="text-sm text-kumo-subtle">
|
|
1113
1113
|
© 2026 Your Company. All rights reserved.
|
|
1114
1114
|
</span>
|
|
@@ -1277,7 +1277,7 @@ Combobox — autocomplete input with filterable dropdown list. Compound compone
|
|
|
1277
1277
|
|
|
1278
1278
|
**Colors (kumo tokens used):**
|
|
1279
1279
|
|
|
1280
|
-
`bg-kumo-base`, `bg-kumo-fill-hover`, `bg-kumo-overlay`, `bg-kumo-tint`, `border-kumo-
|
|
1280
|
+
`bg-kumo-base`, `bg-kumo-fill-hover`, `bg-kumo-overlay`, `bg-kumo-tint`, `border-kumo-hairline`, `ring-kumo-hairline`, `ring-kumo-line`, `text-kumo-default`, `text-kumo-strong`, `text-kumo-subtle`
|
|
1281
1281
|
|
|
1282
1282
|
**Sub-Components:**
|
|
1283
1283
|
|
|
@@ -1656,7 +1656,7 @@ CommandPalette — accessible command palette / spotlight search overlay. Compo
|
|
|
1656
1656
|
|
|
1657
1657
|
**Colors (kumo tokens used):**
|
|
1658
1658
|
|
|
1659
|
-
`bg-kumo-base`, `bg-kumo-elevated`, `bg-kumo-overlay`, `bg-kumo-warning`, `ring-kumo-
|
|
1659
|
+
`bg-kumo-base`, `bg-kumo-elevated`, `bg-kumo-overlay`, `bg-kumo-warning`, `ring-kumo-hairline`, `text-kumo-default`, `text-kumo-strong`, `text-kumo-subtle`
|
|
1660
1660
|
|
|
1661
1661
|
**Examples:**
|
|
1662
1662
|
|
|
@@ -1714,13 +1714,13 @@ CommandPalette — accessible command palette / spotlight search overlay. Compo
|
|
|
1714
1714
|
</CommandPalette.List>
|
|
1715
1715
|
<CommandPalette.Footer>
|
|
1716
1716
|
<span className="flex items-center gap-2">
|
|
1717
|
-
<kbd className="rounded border border-kumo-
|
|
1717
|
+
<kbd className="rounded border border-kumo-hairline bg-kumo-base px-1.5 py-0.5 text-[10px]">
|
|
1718
1718
|
↑↓
|
|
1719
1719
|
</kbd>
|
|
1720
1720
|
<span>Navigate</span>
|
|
1721
1721
|
</span>
|
|
1722
1722
|
<span className="flex items-center gap-2">
|
|
1723
|
-
<kbd className="rounded border border-kumo-
|
|
1723
|
+
<kbd className="rounded border border-kumo-hairline bg-kumo-base px-1.5 py-0.5 text-[10px]">
|
|
1724
1724
|
↵
|
|
1725
1725
|
</kbd>
|
|
1726
1726
|
<span>Select</span>
|
|
@@ -1857,13 +1857,13 @@ CommandPalette — accessible command palette / spotlight search overlay. Compo
|
|
|
1857
1857
|
</CommandPalette.List>
|
|
1858
1858
|
<CommandPalette.Footer>
|
|
1859
1859
|
<span className="flex items-center gap-2">
|
|
1860
|
-
<kbd className="rounded border border-kumo-
|
|
1860
|
+
<kbd className="rounded border border-kumo-hairline bg-kumo-base px-1.5 py-0.5 text-[10px]">
|
|
1861
1861
|
↑↓
|
|
1862
1862
|
</kbd>
|
|
1863
1863
|
<span>Navigate</span>
|
|
1864
1864
|
</span>
|
|
1865
1865
|
<span className="flex items-center gap-2">
|
|
1866
|
-
<kbd className="rounded border border-kumo-
|
|
1866
|
+
<kbd className="rounded border border-kumo-hairline bg-kumo-base px-1.5 py-0.5 text-[10px]">
|
|
1867
1867
|
⌘↵
|
|
1868
1868
|
</kbd>
|
|
1869
1869
|
<span>Open in new tab</span>
|
|
@@ -1901,11 +1901,15 @@ DatePicker — a date selection calendar. Built on [react-day-picker](https://d
|
|
|
1901
1901
|
|
|
1902
1902
|
```tsx
|
|
1903
1903
|
<div className="flex flex-col gap-4">
|
|
1904
|
-
<DatePicker
|
|
1905
|
-
|
|
1906
|
-
|
|
1907
|
-
|
|
1908
|
-
|
|
1904
|
+
<DatePicker
|
|
1905
|
+
mode="single"
|
|
1906
|
+
selected={date}
|
|
1907
|
+
onChange={(d) => {
|
|
1908
|
+
if (d) {
|
|
1909
|
+
setDate(d);
|
|
1910
|
+
}
|
|
1911
|
+
}}
|
|
1912
|
+
/>
|
|
1909
1913
|
<p className="text-sm text-kumo-subtle">
|
|
1910
1914
|
Selected: {date ? date.toLocaleDateString() : "None"}
|
|
1911
1915
|
</p>
|
|
@@ -1960,10 +1964,10 @@ DatePicker — a date selection calendar. Built on [react-day-picker](https://d
|
|
|
1960
1964
|
|
|
1961
1965
|
```tsx
|
|
1962
1966
|
<Popover>
|
|
1963
|
-
<Popover.Trigger
|
|
1964
|
-
<Button variant="outline" icon={CalendarDotsIcon}
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
+
<Popover.Trigger
|
|
1968
|
+
render={<Button variant="outline" icon={CalendarDotsIcon} />}
|
|
1969
|
+
>
|
|
1970
|
+
{date ? date.toLocaleDateString() : "Pick a date"}
|
|
1967
1971
|
</Popover.Trigger>
|
|
1968
1972
|
<Popover.Content className="p-3">
|
|
1969
1973
|
<DatePicker mode="single" selected={date} onChange={setDate} />
|
|
@@ -1973,10 +1977,10 @@ DatePicker — a date selection calendar. Built on [react-day-picker](https://d
|
|
|
1973
1977
|
|
|
1974
1978
|
```tsx
|
|
1975
1979
|
<Popover>
|
|
1976
|
-
<Popover.Trigger
|
|
1977
|
-
<Button variant="outline" icon={CalendarDotsIcon}
|
|
1978
|
-
|
|
1979
|
-
|
|
1980
|
+
<Popover.Trigger
|
|
1981
|
+
render={<Button variant="outline" icon={CalendarDotsIcon} />}
|
|
1982
|
+
>
|
|
1983
|
+
{formatRange()}
|
|
1980
1984
|
</Popover.Trigger>
|
|
1981
1985
|
<Popover.Content className="p-3">
|
|
1982
1986
|
<DatePicker
|
|
@@ -1991,14 +1995,14 @@ DatePicker — a date selection calendar. Built on [react-day-picker](https://d
|
|
|
1991
1995
|
|
|
1992
1996
|
```tsx
|
|
1993
1997
|
<Popover>
|
|
1994
|
-
<Popover.Trigger
|
|
1995
|
-
<Button variant="outline" icon={CalendarDotsIcon}
|
|
1996
|
-
|
|
1997
|
-
|
|
1998
|
+
<Popover.Trigger
|
|
1999
|
+
render={<Button variant="outline" icon={CalendarDotsIcon} />}
|
|
2000
|
+
>
|
|
2001
|
+
{formatRange()}
|
|
1998
2002
|
</Popover.Trigger>
|
|
1999
2003
|
<Popover.Content className="p-0">
|
|
2000
2004
|
<div className="flex">
|
|
2001
|
-
<div className="flex flex-col gap-1 border-r border-kumo-
|
|
2005
|
+
<div className="flex flex-col gap-1 border-r border-kumo-hairline p-2 text-sm">
|
|
2002
2006
|
{presets.map((preset) => {
|
|
2003
2007
|
const isActive = isPresetActive(preset);
|
|
2004
2008
|
return (
|
|
@@ -2006,10 +2010,11 @@ DatePicker — a date selection calendar. Built on [react-day-picker](https://d
|
|
|
2006
2010
|
key={preset.label}
|
|
2007
2011
|
type="button"
|
|
2008
2012
|
onClick={() => handlePresetClick(preset)}
|
|
2009
|
-
className={`rounded-md px-3 py-1.5 text-left whitespace-nowrap ${
|
|
2010
|
-
|
|
2011
|
-
|
|
2012
|
-
|
|
2013
|
+
className={`rounded-md px-3 py-1.5 text-left whitespace-nowrap ${
|
|
2014
|
+
isActive
|
|
2015
|
+
? "bg-kumo-bg-inverse text-kumo-text-inverse"
|
|
2016
|
+
: "text-kumo-strong hover:bg-kumo-control"
|
|
2017
|
+
}`}
|
|
2013
2018
|
>
|
|
2014
2019
|
{preset.label}
|
|
2015
2020
|
</button>
|
|
@@ -2144,7 +2149,7 @@ Dialog component
|
|
|
2144
2149
|
|
|
2145
2150
|
**Colors (kumo tokens used):**
|
|
2146
2151
|
|
|
2147
|
-
`bg-kumo-base`, `bg-kumo-recessed`, `text-kumo-default`
|
|
2152
|
+
`bg-kumo-base`, `bg-kumo-recessed`, `ring-kumo-line`, `text-kumo-default`
|
|
2148
2153
|
|
|
2149
2154
|
**Styling:**
|
|
2150
2155
|
|
|
@@ -2460,7 +2465,7 @@ DropdownMenu — accessible dropdown menu anchored to a trigger. Compound compo
|
|
|
2460
2465
|
|
|
2461
2466
|
**Colors (kumo tokens used):**
|
|
2462
2467
|
|
|
2463
|
-
`bg-kumo-control`, `bg-kumo-danger`, `bg-kumo-
|
|
2468
|
+
`bg-kumo-control`, `bg-kumo-danger`, `bg-kumo-hairline`, `bg-kumo-overlay`, `bg-kumo-tint`, `ring-kumo-line`, `text-kumo-danger`, `text-kumo-default`
|
|
2464
2469
|
|
|
2465
2470
|
**Sub-Components:**
|
|
2466
2471
|
|
|
@@ -2726,7 +2731,7 @@ Responsive CSS grid layout container with preset column configurations.
|
|
|
2726
2731
|
|
|
2727
2732
|
**Colors (kumo tokens used):**
|
|
2728
2733
|
|
|
2729
|
-
`border-kumo-
|
|
2734
|
+
`border-kumo-hairline`
|
|
2730
2735
|
|
|
2731
2736
|
**Examples:**
|
|
2732
2737
|
|
|
@@ -3013,7 +3018,7 @@ Input component
|
|
|
3013
3018
|
|
|
3014
3019
|
**Colors (kumo tokens used):**
|
|
3015
3020
|
|
|
3016
|
-
`bg-kumo-control`, `ring-kumo-danger`, `ring-kumo-hairline`, `
|
|
3021
|
+
`bg-kumo-control`, `ring-kumo-danger`, `ring-kumo-hairline`, `text-kumo-default`, `text-kumo-subtle`
|
|
3017
3022
|
|
|
3018
3023
|
**Styling:**
|
|
3019
3024
|
|
|
@@ -3102,6 +3107,26 @@ Input component
|
|
|
3102
3107
|
/>
|
|
3103
3108
|
```
|
|
3104
3109
|
|
|
3110
|
+
```tsx
|
|
3111
|
+
<Input
|
|
3112
|
+
label="With onChange"
|
|
3113
|
+
placeholder="Type something..."
|
|
3114
|
+
description={value ? `Value: ${value}` : "Uses e.target.value"}
|
|
3115
|
+
value={value}
|
|
3116
|
+
onChange={(e) => setValue(e.target.value)}
|
|
3117
|
+
/>
|
|
3118
|
+
```
|
|
3119
|
+
|
|
3120
|
+
```tsx
|
|
3121
|
+
<Input
|
|
3122
|
+
label="With onValueChange"
|
|
3123
|
+
placeholder="Type something..."
|
|
3124
|
+
description={value ? `Value: ${value}` : "Receives the value directly"}
|
|
3125
|
+
value={value}
|
|
3126
|
+
onValueChange={(v) => setValue(v)}
|
|
3127
|
+
/>
|
|
3128
|
+
```
|
|
3129
|
+
|
|
3105
3130
|
|
|
3106
3131
|
---
|
|
3107
3132
|
|
|
@@ -3201,13 +3226,19 @@ LayerCard component
|
|
|
3201
3226
|
|
|
3202
3227
|
**Props:**
|
|
3203
3228
|
|
|
3229
|
+
- `render`: ReactNode
|
|
3230
|
+
Allows you to replace the component’s HTML element with a different tag, or compose it with another component.
|
|
3231
|
+
|
|
3232
|
+
Accepts a `ReactElement` or a function that returns the element to render.
|
|
3204
3233
|
- `children`: ReactNode
|
|
3205
3234
|
- `className`: string
|
|
3206
|
-
|
|
3235
|
+
- `id`: string
|
|
3236
|
+
- `lang`: string
|
|
3237
|
+
- `title`: string
|
|
3207
3238
|
|
|
3208
3239
|
**Colors (kumo tokens used):**
|
|
3209
3240
|
|
|
3210
|
-
`bg-kumo-base`, `bg-kumo-elevated`, `ring-kumo-fill`, `ring-kumo-line`, `text-kumo-strong`
|
|
3241
|
+
`bg-kumo-base`, `bg-kumo-elevated`, `ring-kumo-fill`, `ring-kumo-hairline`, `ring-kumo-line`, `text-kumo-strong`
|
|
3211
3242
|
|
|
3212
3243
|
**Styling:**
|
|
3213
3244
|
|
|
@@ -3453,7 +3484,7 @@ MenuBar — horizontal icon-button toolbar with keyboard arrow-key navigation.
|
|
|
3453
3484
|
|
|
3454
3485
|
**Colors (kumo tokens used):**
|
|
3455
3486
|
|
|
3456
|
-
`bg-kumo-base`, `bg-kumo-
|
|
3487
|
+
`bg-kumo-base`, `bg-kumo-elevated`, `bg-kumo-recessed`, `border-kumo-recessed`, `ring-kumo-line`
|
|
3457
3488
|
|
|
3458
3489
|
**Styling:**
|
|
3459
3490
|
|
|
@@ -3564,6 +3595,12 @@ Pagination component
|
|
|
3564
3595
|
Total number of items across all pages.
|
|
3565
3596
|
- `className`: string
|
|
3566
3597
|
Additional CSS classes for the container
|
|
3598
|
+
- `labels`: PaginationLabels
|
|
3599
|
+
Labels for internationalization of aria-labels. All labels have English defaults.
|
|
3600
|
+
|
|
3601
|
+
For visible text like "Showing X of Y", use render props on sub-components:
|
|
3602
|
+
- `Pagination.Info` children for the info text
|
|
3603
|
+
- `Pagination.PageSize` label prop for the "Per page:" text
|
|
3567
3604
|
- `children`: ReactNode
|
|
3568
3605
|
Compound component children for custom layouts. Use Pagination.Info, Pagination.PageSize, Pagination.Controls, and Pagination.Separator.
|
|
3569
3606
|
- `controls`: enum [default: full]
|
|
@@ -3573,7 +3610,7 @@ Pagination component
|
|
|
3573
3610
|
|
|
3574
3611
|
**Colors (kumo tokens used):**
|
|
3575
3612
|
|
|
3576
|
-
`border-kumo-
|
|
3613
|
+
`border-kumo-hairline`, `ring-kumo-hairline`, `text-kumo-strong`
|
|
3577
3614
|
|
|
3578
3615
|
**Styling:**
|
|
3579
3616
|
|
|
@@ -3600,6 +3637,7 @@ PageSize sub-component
|
|
|
3600
3637
|
Props:
|
|
3601
3638
|
- `value`: number (required)
|
|
3602
3639
|
- `options`: number[]
|
|
3640
|
+
- `page`: " (required)
|
|
3603
3641
|
- `label`: ReactNode
|
|
3604
3642
|
- `className`: string
|
|
3605
3643
|
|
|
@@ -3731,6 +3769,34 @@ Props:
|
|
|
3731
3769
|
</Pagination>
|
|
3732
3770
|
```
|
|
3733
3771
|
|
|
3772
|
+
```tsx
|
|
3773
|
+
<Pagination
|
|
3774
|
+
page={page}
|
|
3775
|
+
setPage={setPage}
|
|
3776
|
+
perPage={10}
|
|
3777
|
+
totalCount={100}
|
|
3778
|
+
labels={{
|
|
3779
|
+
firstPage: "Première page",
|
|
3780
|
+
previousPage: "Page précédente",
|
|
3781
|
+
nextPage: "Page suivante",
|
|
3782
|
+
lastPage: "Dernière page",
|
|
3783
|
+
pageNumber: "Numéro de page",
|
|
3784
|
+
pageSize: "Taille de page",
|
|
3785
|
+
}}
|
|
3786
|
+
>
|
|
3787
|
+
<Pagination.Info>
|
|
3788
|
+
{({ pageShowingRange, totalCount }) => (
|
|
3789
|
+
<>
|
|
3790
|
+
Affichage de{" "}
|
|
3791
|
+
<span className="tabular-nums">{pageShowingRange}</span> sur{" "}
|
|
3792
|
+
<span className="tabular-nums">{totalCount}</span>
|
|
3793
|
+
</>
|
|
3794
|
+
)}
|
|
3795
|
+
</Pagination.Info>
|
|
3796
|
+
<Pagination.Controls />
|
|
3797
|
+
</Pagination>
|
|
3798
|
+
```
|
|
3799
|
+
|
|
3734
3800
|
|
|
3735
3801
|
---
|
|
3736
3802
|
|
|
@@ -3785,9 +3851,11 @@ Close sub-component
|
|
|
3785
3851
|
|
|
3786
3852
|
```tsx
|
|
3787
3853
|
<Popover>
|
|
3788
|
-
<Popover.Trigger
|
|
3789
|
-
|
|
3790
|
-
|
|
3854
|
+
<Popover.Trigger
|
|
3855
|
+
render={
|
|
3856
|
+
<Button shape="square" icon={BellIcon} aria-label="Notifications" />
|
|
3857
|
+
}
|
|
3858
|
+
/>
|
|
3791
3859
|
<Popover.Content>
|
|
3792
3860
|
<Popover.Title>Notifications</Popover.Title>
|
|
3793
3861
|
<Popover.Description>
|
|
@@ -3799,9 +3867,7 @@ Close sub-component
|
|
|
3799
3867
|
|
|
3800
3868
|
```tsx
|
|
3801
3869
|
<Popover>
|
|
3802
|
-
<Popover.Trigger
|
|
3803
|
-
<Button>Open Popover</Button>
|
|
3804
|
-
</Popover.Trigger>
|
|
3870
|
+
<Popover.Trigger render={<Button />}>Open Popover</Popover.Trigger>
|
|
3805
3871
|
<Popover.Content>
|
|
3806
3872
|
<Popover.Title>Popover Title</Popover.Title>
|
|
3807
3873
|
<Popover.Description>
|
|
@@ -3813,19 +3879,15 @@ Close sub-component
|
|
|
3813
3879
|
|
|
3814
3880
|
```tsx
|
|
3815
3881
|
<Popover>
|
|
3816
|
-
<Popover.Trigger
|
|
3817
|
-
<Button>Open Settings</Button>
|
|
3818
|
-
</Popover.Trigger>
|
|
3882
|
+
<Popover.Trigger render={<Button />}>Open Settings</Popover.Trigger>
|
|
3819
3883
|
<Popover.Content>
|
|
3820
3884
|
<Popover.Title>Settings</Popover.Title>
|
|
3821
3885
|
<Popover.Description>
|
|
3822
3886
|
Configure your preferences below.
|
|
3823
3887
|
</Popover.Description>
|
|
3824
3888
|
<div className="mt-3">
|
|
3825
|
-
<Popover.Close
|
|
3826
|
-
|
|
3827
|
-
Close
|
|
3828
|
-
</Button>
|
|
3889
|
+
<Popover.Close render={<Button variant="secondary" size="sm" />}>
|
|
3890
|
+
Close
|
|
3829
3891
|
</Popover.Close>
|
|
3830
3892
|
</div>
|
|
3831
3893
|
</Popover.Content>
|
|
@@ -3835,8 +3897,8 @@ Close sub-component
|
|
|
3835
3897
|
```tsx
|
|
3836
3898
|
<div className="flex flex-wrap gap-4">
|
|
3837
3899
|
<Popover>
|
|
3838
|
-
<Popover.Trigger
|
|
3839
|
-
|
|
3900
|
+
<Popover.Trigger render={<Button variant="secondary" />}>
|
|
3901
|
+
Bottom
|
|
3840
3902
|
</Popover.Trigger>
|
|
3841
3903
|
<Popover.Content side="bottom">
|
|
3842
3904
|
<Popover.Title>Bottom</Popover.Title>
|
|
@@ -3847,8 +3909,8 @@ Close sub-component
|
|
|
3847
3909
|
</Popover>
|
|
3848
3910
|
|
|
3849
3911
|
<Popover>
|
|
3850
|
-
<Popover.Trigger
|
|
3851
|
-
|
|
3912
|
+
<Popover.Trigger render={<Button variant="secondary" />}>
|
|
3913
|
+
Top
|
|
3852
3914
|
</Popover.Trigger>
|
|
3853
3915
|
<Popover.Content side="top">
|
|
3854
3916
|
<Popover.Title>Top</Popover.Title>
|
|
@@ -3857,8 +3919,8 @@ Close sub-component
|
|
|
3857
3919
|
</Popover>
|
|
3858
3920
|
|
|
3859
3921
|
<Popover>
|
|
3860
|
-
<Popover.Trigger
|
|
3861
|
-
|
|
3922
|
+
<Popover.Trigger render={<Button variant="secondary" />}>
|
|
3923
|
+
Left
|
|
3862
3924
|
</Popover.Trigger>
|
|
3863
3925
|
<Popover.Content side="left">
|
|
3864
3926
|
<Popover.Title>Left</Popover.Title>
|
|
@@ -3867,8 +3929,8 @@ Close sub-component
|
|
|
3867
3929
|
</Popover>
|
|
3868
3930
|
|
|
3869
3931
|
<Popover>
|
|
3870
|
-
<Popover.Trigger
|
|
3871
|
-
|
|
3932
|
+
<Popover.Trigger render={<Button variant="secondary" />}>
|
|
3933
|
+
Right
|
|
3872
3934
|
</Popover.Trigger>
|
|
3873
3935
|
<Popover.Content side="right">
|
|
3874
3936
|
<Popover.Title>Right</Popover.Title>
|
|
@@ -3880,9 +3942,7 @@ Close sub-component
|
|
|
3880
3942
|
|
|
3881
3943
|
```tsx
|
|
3882
3944
|
<Popover>
|
|
3883
|
-
<Popover.Trigger
|
|
3884
|
-
<Button>User Profile</Button>
|
|
3885
|
-
</Popover.Trigger>
|
|
3945
|
+
<Popover.Trigger render={<Button />}>User Profile</Popover.Trigger>
|
|
3886
3946
|
<Popover.Content className="w-64">
|
|
3887
3947
|
<div className="flex items-center gap-3">
|
|
3888
3948
|
<div className="size-10 rounded-full bg-kumo-recessed" />
|
|
@@ -3891,14 +3951,14 @@ Close sub-component
|
|
|
3891
3951
|
<p className="text-sm text-kumo-subtle">jane@example.com</p>
|
|
3892
3952
|
</div>
|
|
3893
3953
|
</div>
|
|
3894
|
-
<div className="mt-3 flex gap-2 border-t border-kumo-
|
|
3954
|
+
<div className="mt-3 flex gap-2 border-t border-kumo-hairline pt-3">
|
|
3895
3955
|
<Button variant="secondary" size="sm" className="flex-1">
|
|
3896
3956
|
Profile
|
|
3897
3957
|
</Button>
|
|
3898
|
-
<Popover.Close
|
|
3899
|
-
<Button variant="ghost" size="sm" className="flex-1"
|
|
3900
|
-
|
|
3901
|
-
|
|
3958
|
+
<Popover.Close
|
|
3959
|
+
render={<Button variant="ghost" size="sm" className="flex-1" />}
|
|
3960
|
+
>
|
|
3961
|
+
Sign Out
|
|
3902
3962
|
</Popover.Close>
|
|
3903
3963
|
</div>
|
|
3904
3964
|
</Popover.Content>
|
|
@@ -3907,8 +3967,12 @@ Close sub-component
|
|
|
3907
3967
|
|
|
3908
3968
|
```tsx
|
|
3909
3969
|
<Popover>
|
|
3910
|
-
<Popover.Trigger
|
|
3911
|
-
|
|
3970
|
+
<Popover.Trigger
|
|
3971
|
+
openOnHover
|
|
3972
|
+
delay={200}
|
|
3973
|
+
render={<Button variant="secondary" />}
|
|
3974
|
+
>
|
|
3975
|
+
Hover Me
|
|
3912
3976
|
</Popover.Trigger>
|
|
3913
3977
|
<Popover.Content>
|
|
3914
3978
|
<Popover.Title>Hover Triggered</Popover.Title>
|
|
@@ -3917,16 +3981,79 @@ Close sub-component
|
|
|
3917
3981
|
interactive content like buttons and links.
|
|
3918
3982
|
</Popover.Description>
|
|
3919
3983
|
<div className="mt-3">
|
|
3920
|
-
<Popover.Close
|
|
3921
|
-
|
|
3922
|
-
Got it
|
|
3923
|
-
</Button>
|
|
3984
|
+
<Popover.Close render={<Button variant="secondary" size="sm" />}>
|
|
3985
|
+
Got it
|
|
3924
3986
|
</Popover.Close>
|
|
3925
3987
|
</div>
|
|
3926
3988
|
</Popover.Content>
|
|
3927
3989
|
</Popover>
|
|
3928
3990
|
```
|
|
3929
3991
|
|
|
3992
|
+
```tsx
|
|
3993
|
+
<div className="w-full">
|
|
3994
|
+
<div className="overflow-hidden rounded-lg border border-kumo-hairline">
|
|
3995
|
+
<table className="w-full text-sm">
|
|
3996
|
+
<thead className="bg-kumo-elevated">
|
|
3997
|
+
<tr>
|
|
3998
|
+
<th className="px-4 py-2 text-left font-medium">Name</th>
|
|
3999
|
+
<th className="px-4 py-2 text-left font-medium">Status</th>
|
|
4000
|
+
<th className="w-12 px-4 py-2"></th>
|
|
4001
|
+
</tr>
|
|
4002
|
+
</thead>
|
|
4003
|
+
<tbody className="divide-y divide-kumo-hairline">
|
|
4004
|
+
{rows.map((row) => (
|
|
4005
|
+
<tr
|
|
4006
|
+
key={row.id}
|
|
4007
|
+
ref={(el) => {
|
|
4008
|
+
if (el) rowRefs.current.set(row.id, el);
|
|
4009
|
+
}}
|
|
4010
|
+
className={
|
|
4011
|
+
selectedRow === row.id ? "bg-kumo-recessed" : "bg-kumo-base"
|
|
4012
|
+
}
|
|
4013
|
+
>
|
|
4014
|
+
<td className="px-4 py-2 font-mono">{row.name}</td>
|
|
4015
|
+
<td className="px-4 py-2 text-kumo-subtle">{row.status}</td>
|
|
4016
|
+
<td className="px-4 py-2">
|
|
4017
|
+
<Button
|
|
4018
|
+
size="xs"
|
|
4019
|
+
variant="ghost"
|
|
4020
|
+
shape="square"
|
|
4021
|
+
icon={DotsThree}
|
|
4022
|
+
aria-label={`Actions for ${row.name}`}
|
|
4023
|
+
onClick={() => handleEdit(row.id)}
|
|
4024
|
+
/>
|
|
4025
|
+
</td>
|
|
4026
|
+
</tr>
|
|
4027
|
+
))}
|
|
4028
|
+
</tbody>
|
|
4029
|
+
</table>
|
|
4030
|
+
</div>
|
|
4031
|
+
<Popover
|
|
4032
|
+
open={!!selectedRow}
|
|
4033
|
+
onOpenChange={(open) => !open && setSelectedRow(null)}
|
|
4034
|
+
>
|
|
4035
|
+
<Popover.Content
|
|
4036
|
+
side="left"
|
|
4037
|
+
anchor={
|
|
4038
|
+
anchorRect ? { getBoundingClientRect: () => anchorRect } : undefined
|
|
4039
|
+
}
|
|
4040
|
+
>
|
|
4041
|
+
<Popover.Title>
|
|
4042
|
+
Edit {rows.find((r) => r.id === selectedRow)?.name}
|
|
4043
|
+
</Popover.Title>
|
|
4044
|
+
<Popover.Description>
|
|
4045
|
+
The popover anchors to the selected row, not the icon button.
|
|
4046
|
+
</Popover.Description>
|
|
4047
|
+
<div className="mt-3">
|
|
4048
|
+
<Popover.Close render={<Button size="sm" variant="secondary" />}>
|
|
4049
|
+
Close
|
|
4050
|
+
</Popover.Close>
|
|
4051
|
+
</div>
|
|
4052
|
+
</Popover.Content>
|
|
4053
|
+
</Popover>
|
|
4054
|
+
</div>
|
|
4055
|
+
```
|
|
4056
|
+
|
|
3930
4057
|
|
|
3931
4058
|
---
|
|
3932
4059
|
|
|
@@ -3972,7 +4099,7 @@ Radio — radio button group for single-select choices. Compound component: `Ra
|
|
|
3972
4099
|
|
|
3973
4100
|
**Colors (kumo tokens used):**
|
|
3974
4101
|
|
|
3975
|
-
`bg-kumo-base`, `bg-kumo-contrast`, `bg-kumo-tint`, `border-kumo-danger`, `border-kumo-hairline`, `border-kumo-interact`, `ring-kumo-danger`, `ring-kumo-hairline`, `
|
|
4102
|
+
`bg-kumo-base`, `bg-kumo-contrast`, `bg-kumo-tint`, `border-kumo-danger`, `border-kumo-hairline`, `border-kumo-interact`, `ring-kumo-danger`, `ring-kumo-hairline`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-subtle`
|
|
3976
4103
|
|
|
3977
4104
|
**Sub-Components:**
|
|
3978
4105
|
|
|
@@ -4204,6 +4331,8 @@ Select component
|
|
|
4204
4331
|
|
|
4205
4332
|
- `className`: string
|
|
4206
4333
|
Additional CSS classes merged via `cn()`.
|
|
4334
|
+
- `size`: enum [default: base]
|
|
4335
|
+
Size of the select trigger. Matches Input component sizes.
|
|
4207
4336
|
- `label`: ReactNode
|
|
4208
4337
|
Label content for the select. When provided, enables the Field wrapper with a visible label above the select. For accessibility without a visible label, use `aria-label` instead.
|
|
4209
4338
|
- `hideLabel`: boolean
|
|
@@ -4232,7 +4361,7 @@ Select component
|
|
|
4232
4361
|
|
|
4233
4362
|
**Colors (kumo tokens used):**
|
|
4234
4363
|
|
|
4235
|
-
`bg-kumo-base`, `bg-kumo-
|
|
4364
|
+
`bg-kumo-base`, `bg-kumo-hairline`, `bg-kumo-tint`, `ring-kumo-hairline`, `ring-kumo-line`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-placeholder`, `text-kumo-subtle`
|
|
4236
4365
|
|
|
4237
4366
|
**Styling:**
|
|
4238
4367
|
|
|
@@ -4270,6 +4399,51 @@ Separator sub-component
|
|
|
4270
4399
|
/>
|
|
4271
4400
|
```
|
|
4272
4401
|
|
|
4402
|
+
```tsx
|
|
4403
|
+
<div className="grid gap-4">
|
|
4404
|
+
<div className="flex items-center gap-3">
|
|
4405
|
+
<span className="w-10 text-sm text-kumo-subtle">xs</span>
|
|
4406
|
+
<Select
|
|
4407
|
+
aria-label="Select size xs"
|
|
4408
|
+
size="xs"
|
|
4409
|
+
className="w-[200px]"
|
|
4410
|
+
placeholder="Choose..."
|
|
4411
|
+
items={{ a: "Option A", b: "Option B" }}
|
|
4412
|
+
/>
|
|
4413
|
+
</div>
|
|
4414
|
+
<div className="flex items-center gap-3">
|
|
4415
|
+
<span className="w-10 text-sm text-kumo-subtle">sm</span>
|
|
4416
|
+
<Select
|
|
4417
|
+
aria-label="Select size sm"
|
|
4418
|
+
size="sm"
|
|
4419
|
+
className="w-[200px]"
|
|
4420
|
+
placeholder="Choose..."
|
|
4421
|
+
items={{ a: "Option A", b: "Option B" }}
|
|
4422
|
+
/>
|
|
4423
|
+
</div>
|
|
4424
|
+
<div className="flex items-center gap-3">
|
|
4425
|
+
<span className="w-10 text-sm text-kumo-subtle">base</span>
|
|
4426
|
+
<Select
|
|
4427
|
+
aria-label="Select size base"
|
|
4428
|
+
size="base"
|
|
4429
|
+
className="w-[200px]"
|
|
4430
|
+
placeholder="Choose..."
|
|
4431
|
+
items={{ a: "Option A", b: "Option B" }}
|
|
4432
|
+
/>
|
|
4433
|
+
</div>
|
|
4434
|
+
<div className="flex items-center gap-3">
|
|
4435
|
+
<span className="w-10 text-sm text-kumo-subtle">lg</span>
|
|
4436
|
+
<Select
|
|
4437
|
+
aria-label="Select size lg"
|
|
4438
|
+
size="lg"
|
|
4439
|
+
className="w-[200px]"
|
|
4440
|
+
placeholder="Choose..."
|
|
4441
|
+
items={{ a: "Option A", b: "Option B" }}
|
|
4442
|
+
/>
|
|
4443
|
+
</div>
|
|
4444
|
+
</div>
|
|
4445
|
+
```
|
|
4446
|
+
|
|
4273
4447
|
```tsx
|
|
4274
4448
|
<Select
|
|
4275
4449
|
label="Issue Type"
|
|
@@ -4432,13 +4606,12 @@ Separator sub-component
|
|
|
4432
4606
|
<Select
|
|
4433
4607
|
label="Author"
|
|
4434
4608
|
description="Select the primary author for this document"
|
|
4609
|
+
placeholder="Select an author"
|
|
4435
4610
|
className="w-[200px]"
|
|
4436
4611
|
onValueChange={(v) => setValue(v as (typeof authors)[0] | null)}
|
|
4437
4612
|
value={value}
|
|
4438
4613
|
isItemEqualToValue={(item, value) => item?.id === value?.id}
|
|
4439
|
-
renderValue={(author) =>
|
|
4440
|
-
return author?.name ?? "Select an author";
|
|
4441
|
-
}}
|
|
4614
|
+
renderValue={(author) => author.name}
|
|
4442
4615
|
>
|
|
4443
4616
|
{authors.map((author) => (
|
|
4444
4617
|
<Select.Option key={author.id} value={author}>
|
|
@@ -4457,16 +4630,18 @@ Separator sub-component
|
|
|
4457
4630
|
placeholder="Choose a region..."
|
|
4458
4631
|
className="w-[250px]"
|
|
4459
4632
|
value={value}
|
|
4460
|
-
onValueChange={(v) => setValue(v as
|
|
4633
|
+
onValueChange={(v) => setValue(v as Region | null)}
|
|
4634
|
+
isItemEqualToValue={(item, val) => item.value === val.value}
|
|
4461
4635
|
>
|
|
4462
|
-
|
|
4463
|
-
|
|
4464
|
-
|
|
4465
|
-
|
|
4466
|
-
|
|
4467
|
-
|
|
4468
|
-
|
|
4469
|
-
|
|
4636
|
+
{regions.map((region) => (
|
|
4637
|
+
<Select.Option
|
|
4638
|
+
key={region.value}
|
|
4639
|
+
value={region}
|
|
4640
|
+
disabled={region.disabled}
|
|
4641
|
+
>
|
|
4642
|
+
{region.label}
|
|
4643
|
+
</Select.Option>
|
|
4644
|
+
))}
|
|
4470
4645
|
</Select>
|
|
4471
4646
|
```
|
|
4472
4647
|
|
|
@@ -4476,47 +4651,25 @@ Separator sub-component
|
|
|
4476
4651
|
placeholder="Pick a food..."
|
|
4477
4652
|
className="w-[220px]"
|
|
4478
4653
|
value={value}
|
|
4479
|
-
onValueChange={(v) => setValue(v as
|
|
4654
|
+
onValueChange={(v) => setValue(v as Food | null)}
|
|
4655
|
+
isItemEqualToValue={(item, val) => item.value === val.value}
|
|
4480
4656
|
>
|
|
4481
4657
|
<Select.Group>
|
|
4482
4658
|
<Select.GroupLabel>Fruits</Select.GroupLabel>
|
|
4483
|
-
|
|
4484
|
-
|
|
4485
|
-
|
|
4659
|
+
{foods.fruits.map((food) => (
|
|
4660
|
+
<Select.Option key={food.value} value={food}>
|
|
4661
|
+
{food.label}
|
|
4662
|
+
</Select.Option>
|
|
4663
|
+
))}
|
|
4486
4664
|
</Select.Group>
|
|
4487
4665
|
<Select.Separator />
|
|
4488
4666
|
<Select.Group>
|
|
4489
4667
|
<Select.GroupLabel>Vegetables</Select.GroupLabel>
|
|
4490
|
-
|
|
4491
|
-
|
|
4492
|
-
|
|
4493
|
-
|
|
4494
|
-
|
|
4495
|
-
```
|
|
4496
|
-
|
|
4497
|
-
```tsx
|
|
4498
|
-
<Select
|
|
4499
|
-
label="Server Region"
|
|
4500
|
-
placeholder="Select a region..."
|
|
4501
|
-
className="w-[260px]"
|
|
4502
|
-
value={value}
|
|
4503
|
-
onValueChange={(v) => setValue(v as string | null)}
|
|
4504
|
-
>
|
|
4505
|
-
<Select.Group>
|
|
4506
|
-
<Select.GroupLabel>Available</Select.GroupLabel>
|
|
4507
|
-
<Select.Option value="us-east-1">US East (N. Virginia)</Select.Option>
|
|
4508
|
-
<Select.Option value="us-west-2">US West (Oregon)</Select.Option>
|
|
4509
|
-
<Select.Option value="eu-west-1">EU West (Ireland)</Select.Option>
|
|
4510
|
-
</Select.Group>
|
|
4511
|
-
<Select.Separator />
|
|
4512
|
-
<Select.Group>
|
|
4513
|
-
<Select.GroupLabel>Unavailable</Select.GroupLabel>
|
|
4514
|
-
<Select.Option value="ap-south-1" disabled>
|
|
4515
|
-
AP South (Mumbai)
|
|
4516
|
-
</Select.Option>
|
|
4517
|
-
<Select.Option value="sa-east-1" disabled>
|
|
4518
|
-
SA East (São Paulo)
|
|
4519
|
-
</Select.Option>
|
|
4668
|
+
{foods.vegetables.map((food) => (
|
|
4669
|
+
<Select.Option key={food.value} value={food}>
|
|
4670
|
+
{food.label}
|
|
4671
|
+
</Select.Option>
|
|
4672
|
+
))}
|
|
4520
4673
|
</Select.Group>
|
|
4521
4674
|
</Select>
|
|
4522
4675
|
```
|
|
@@ -4528,10 +4681,11 @@ Separator sub-component
|
|
|
4528
4681
|
placeholder="Choose an option..."
|
|
4529
4682
|
className="w-[220px]"
|
|
4530
4683
|
value={value}
|
|
4531
|
-
onValueChange={(v) => setValue(v as
|
|
4684
|
+
onValueChange={(v) => setValue(v as LongListItem | null)}
|
|
4685
|
+
isItemEqualToValue={(item, val) => item.value === val.value}
|
|
4532
4686
|
>
|
|
4533
4687
|
{longListItems.map((item) => (
|
|
4534
|
-
<Select.Option key={item.value} value={item
|
|
4688
|
+
<Select.Option key={item.value} value={item}>
|
|
4535
4689
|
{item.label}
|
|
4536
4690
|
</Select.Option>
|
|
4537
4691
|
))}
|
|
@@ -4709,7 +4863,7 @@ Sidebar — responsive navigation panel with expand/collapse support. Compound
|
|
|
4709
4863
|
|
|
4710
4864
|
**Colors (kumo tokens used):**
|
|
4711
4865
|
|
|
4712
|
-
`bg-kumo-base`, `bg-kumo-brand`, `bg-kumo-
|
|
4866
|
+
`bg-kumo-base`, `bg-kumo-brand`, `bg-kumo-hairline`, `bg-kumo-overlay`, `bg-kumo-recessed`, `bg-kumo-tint`, `border-kumo-hairline`, `ring-kumo-hairline`, `text-kumo-default`, `text-kumo-strong`, `text-kumo-subtle`
|
|
4713
4867
|
|
|
4714
4868
|
**Styling:**
|
|
4715
4869
|
|
|
@@ -5144,7 +5298,7 @@ CollapsibleContent sub-component
|
|
|
5144
5298
|
|
|
5145
5299
|
### Surface
|
|
5146
5300
|
|
|
5147
|
-
|
|
5301
|
+
Surface component
|
|
5148
5302
|
|
|
5149
5303
|
**Type:** component
|
|
5150
5304
|
|
|
@@ -5165,49 +5319,6 @@ Accepts a `ReactElement` or a function that returns the element to render.
|
|
|
5165
5319
|
- `lang`: string
|
|
5166
5320
|
- `title`: string
|
|
5167
5321
|
|
|
5168
|
-
**Colors (kumo tokens used):**
|
|
5169
|
-
|
|
5170
|
-
`bg-kumo-base`, `ring-kumo-line`
|
|
5171
|
-
|
|
5172
|
-
**Examples:**
|
|
5173
|
-
|
|
5174
|
-
```tsx
|
|
5175
|
-
<Surface className="rounded-lg p-6">
|
|
5176
|
-
<Text size="lg" bold>
|
|
5177
|
-
Surface Component
|
|
5178
|
-
</Text>
|
|
5179
|
-
<div className="mt-2">
|
|
5180
|
-
<Text variant="secondary">
|
|
5181
|
-
A container with consistent elevation and border styling.
|
|
5182
|
-
</Text>
|
|
5183
|
-
</div>
|
|
5184
|
-
</Surface>
|
|
5185
|
-
```
|
|
5186
|
-
|
|
5187
|
-
```tsx
|
|
5188
|
-
<div className="flex flex-col gap-4">
|
|
5189
|
-
<Surface render={<section />} className="rounded-lg p-4">
|
|
5190
|
-
<Text bold>As section element</Text>
|
|
5191
|
-
</Surface>
|
|
5192
|
-
<Surface render={<article />} className="rounded-lg p-4">
|
|
5193
|
-
<Text bold>As article element</Text>
|
|
5194
|
-
</Surface>
|
|
5195
|
-
<Surface render={<aside />} className="rounded-lg p-4">
|
|
5196
|
-
<Text bold>As aside element</Text>
|
|
5197
|
-
</Surface>
|
|
5198
|
-
</div>
|
|
5199
|
-
```
|
|
5200
|
-
|
|
5201
|
-
```tsx
|
|
5202
|
-
<Surface className="rounded-lg p-6">
|
|
5203
|
-
<Text bold>Outer Surface</Text>
|
|
5204
|
-
<Surface className="mt-4 rounded-md bg-kumo-elevated p-4">
|
|
5205
|
-
<Text variant="secondary">Nested Surface</Text>
|
|
5206
|
-
</Surface>
|
|
5207
|
-
</Surface>
|
|
5208
|
-
```
|
|
5209
|
-
|
|
5210
|
-
|
|
5211
5322
|
---
|
|
5212
5323
|
|
|
5213
5324
|
### Switch
|
|
@@ -5252,7 +5363,7 @@ Switch component
|
|
|
5252
5363
|
|
|
5253
5364
|
**Colors (kumo tokens used):**
|
|
5254
5365
|
|
|
5255
|
-
`bg-kumo-base`, `border-kumo-
|
|
5366
|
+
`bg-kumo-base`, `border-kumo-hairline`, `ring-kumo-hairline`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-subtle`
|
|
5256
5367
|
|
|
5257
5368
|
**Sub-Components:**
|
|
5258
5369
|
|
|
@@ -5446,326 +5557,537 @@ ResizeHandle sub-component
|
|
|
5446
5557
|
**Examples:**
|
|
5447
5558
|
|
|
5448
5559
|
```tsx
|
|
5449
|
-
<LayerCard>
|
|
5450
|
-
<
|
|
5451
|
-
<Table>
|
|
5452
|
-
<Table.
|
|
5453
|
-
<Table.
|
|
5454
|
-
|
|
5455
|
-
|
|
5456
|
-
|
|
5560
|
+
<LayerCard className="p-0">
|
|
5561
|
+
<Table>
|
|
5562
|
+
<Table.Header>
|
|
5563
|
+
<Table.Row>
|
|
5564
|
+
<Table.Head>Subject</Table.Head>
|
|
5565
|
+
<Table.Head>From</Table.Head>
|
|
5566
|
+
<Table.Head>Date</Table.Head>
|
|
5567
|
+
</Table.Row>
|
|
5568
|
+
</Table.Header>
|
|
5569
|
+
<Table.Body>
|
|
5570
|
+
{emailData.slice(0, 3).map((row) => (
|
|
5571
|
+
<Table.Row key={row.id}>
|
|
5572
|
+
<Table.Cell>{row.subject}</Table.Cell>
|
|
5573
|
+
<Table.Cell>{row.from}</Table.Cell>
|
|
5574
|
+
<Table.Cell>{row.date}</Table.Cell>
|
|
5457
5575
|
</Table.Row>
|
|
5458
|
-
|
|
5459
|
-
|
|
5460
|
-
|
|
5461
|
-
<Table.Row key={row.id}>
|
|
5462
|
-
<Table.Cell>{row.subject}</Table.Cell>
|
|
5463
|
-
<Table.Cell>{row.from}</Table.Cell>
|
|
5464
|
-
<Table.Cell>{row.date}</Table.Cell>
|
|
5465
|
-
</Table.Row>
|
|
5466
|
-
))}
|
|
5467
|
-
</Table.Body>
|
|
5468
|
-
</Table>
|
|
5469
|
-
</LayerCard.Primary>
|
|
5576
|
+
))}
|
|
5577
|
+
</Table.Body>
|
|
5578
|
+
</Table>
|
|
5470
5579
|
</LayerCard>
|
|
5471
5580
|
```
|
|
5472
5581
|
|
|
5473
5582
|
```tsx
|
|
5474
|
-
<LayerCard>
|
|
5475
|
-
<
|
|
5476
|
-
<Table>
|
|
5477
|
-
<Table.
|
|
5478
|
-
<Table.
|
|
5479
|
-
|
|
5480
|
-
|
|
5481
|
-
|
|
5482
|
-
|
|
5483
|
-
|
|
5484
|
-
|
|
5485
|
-
|
|
5583
|
+
<LayerCard className="p-0">
|
|
5584
|
+
<Table>
|
|
5585
|
+
<Table.Header>
|
|
5586
|
+
<Table.Row>
|
|
5587
|
+
<Table.CheckHead
|
|
5588
|
+
checked={selectedIds.size === rows.length}
|
|
5589
|
+
indeterminate={
|
|
5590
|
+
selectedIds.size > 0 && selectedIds.size < rows.length
|
|
5591
|
+
}
|
|
5592
|
+
onValueChange={toggleAll}
|
|
5593
|
+
aria-label="Select all rows"
|
|
5594
|
+
/>
|
|
5595
|
+
<Table.Head>Subject</Table.Head>
|
|
5596
|
+
<Table.Head>From</Table.Head>
|
|
5597
|
+
<Table.Head>Date</Table.Head>
|
|
5598
|
+
</Table.Row>
|
|
5599
|
+
</Table.Header>
|
|
5600
|
+
<Table.Body>
|
|
5601
|
+
{rows.map((row) => (
|
|
5602
|
+
<Table.Row key={row.id}>
|
|
5603
|
+
<Table.CheckCell
|
|
5604
|
+
checked={selectedIds.has(row.id)}
|
|
5605
|
+
onValueChange={() => toggleRow(row.id)}
|
|
5606
|
+
aria-label={`Select ${row.subject}`}
|
|
5486
5607
|
/>
|
|
5487
|
-
<Table.
|
|
5488
|
-
<Table.
|
|
5489
|
-
<Table.
|
|
5608
|
+
<Table.Cell>{row.subject}</Table.Cell>
|
|
5609
|
+
<Table.Cell>{row.from}</Table.Cell>
|
|
5610
|
+
<Table.Cell>{row.date}</Table.Cell>
|
|
5490
5611
|
</Table.Row>
|
|
5491
|
-
|
|
5492
|
-
|
|
5493
|
-
|
|
5494
|
-
<Table.Row key={row.id}>
|
|
5495
|
-
<Table.CheckCell
|
|
5496
|
-
checked={selectedIds.has(row.id)}
|
|
5497
|
-
onValueChange={() => toggleRow(row.id)}
|
|
5498
|
-
aria-label={`Select ${row.subject}`}
|
|
5499
|
-
/>
|
|
5500
|
-
<Table.Cell>{row.subject}</Table.Cell>
|
|
5501
|
-
<Table.Cell>{row.from}</Table.Cell>
|
|
5502
|
-
<Table.Cell>{row.date}</Table.Cell>
|
|
5503
|
-
</Table.Row>
|
|
5504
|
-
))}
|
|
5505
|
-
</Table.Body>
|
|
5506
|
-
</Table>
|
|
5507
|
-
</LayerCard.Primary>
|
|
5612
|
+
))}
|
|
5613
|
+
</Table.Body>
|
|
5614
|
+
</Table>
|
|
5508
5615
|
</LayerCard>
|
|
5509
5616
|
```
|
|
5510
5617
|
|
|
5511
5618
|
```tsx
|
|
5512
|
-
<LayerCard>
|
|
5513
|
-
<
|
|
5514
|
-
<Table>
|
|
5515
|
-
<Table.
|
|
5516
|
-
<Table.
|
|
5517
|
-
|
|
5518
|
-
|
|
5519
|
-
|
|
5619
|
+
<LayerCard className="p-0">
|
|
5620
|
+
<Table>
|
|
5621
|
+
<Table.Header variant="compact">
|
|
5622
|
+
<Table.Row>
|
|
5623
|
+
<Table.Head>Subject</Table.Head>
|
|
5624
|
+
<Table.Head>From</Table.Head>
|
|
5625
|
+
<Table.Head>Date</Table.Head>
|
|
5626
|
+
</Table.Row>
|
|
5627
|
+
</Table.Header>
|
|
5628
|
+
<Table.Body>
|
|
5629
|
+
{emailData.slice(0, 3).map((row) => (
|
|
5630
|
+
<Table.Row key={row.id}>
|
|
5631
|
+
<Table.Cell>{row.subject}</Table.Cell>
|
|
5632
|
+
<Table.Cell>{row.from}</Table.Cell>
|
|
5633
|
+
<Table.Cell>{row.date}</Table.Cell>
|
|
5520
5634
|
</Table.Row>
|
|
5521
|
-
|
|
5522
|
-
|
|
5523
|
-
|
|
5524
|
-
<Table.Row key={row.id}>
|
|
5525
|
-
<Table.Cell>{row.subject}</Table.Cell>
|
|
5526
|
-
<Table.Cell>{row.from}</Table.Cell>
|
|
5527
|
-
<Table.Cell>{row.date}</Table.Cell>
|
|
5528
|
-
</Table.Row>
|
|
5529
|
-
))}
|
|
5530
|
-
</Table.Body>
|
|
5531
|
-
</Table>
|
|
5532
|
-
</LayerCard.Primary>
|
|
5635
|
+
))}
|
|
5636
|
+
</Table.Body>
|
|
5637
|
+
</Table>
|
|
5533
5638
|
</LayerCard>
|
|
5534
5639
|
```
|
|
5535
5640
|
|
|
5536
5641
|
```tsx
|
|
5537
|
-
<LayerCard>
|
|
5538
|
-
<
|
|
5539
|
-
<Table>
|
|
5540
|
-
<Table.
|
|
5541
|
-
<Table.
|
|
5542
|
-
|
|
5543
|
-
|
|
5544
|
-
|
|
5545
|
-
|
|
5546
|
-
|
|
5547
|
-
|
|
5548
|
-
|
|
5642
|
+
<LayerCard className="p-0">
|
|
5643
|
+
<Table>
|
|
5644
|
+
<Table.Header>
|
|
5645
|
+
<Table.Row>
|
|
5646
|
+
<Table.CheckHead
|
|
5647
|
+
checked={selectedIds.size === rows.length}
|
|
5648
|
+
indeterminate={
|
|
5649
|
+
selectedIds.size > 0 && selectedIds.size < rows.length
|
|
5650
|
+
}
|
|
5651
|
+
onValueChange={toggleAll}
|
|
5652
|
+
aria-label="Select all rows"
|
|
5653
|
+
/>
|
|
5654
|
+
<Table.Head>Subject</Table.Head>
|
|
5655
|
+
<Table.Head>From</Table.Head>
|
|
5656
|
+
<Table.Head>Date</Table.Head>
|
|
5657
|
+
</Table.Row>
|
|
5658
|
+
</Table.Header>
|
|
5659
|
+
<Table.Body>
|
|
5660
|
+
{rows.map((row) => (
|
|
5661
|
+
<Table.Row
|
|
5662
|
+
key={row.id}
|
|
5663
|
+
variant={selectedIds.has(row.id) ? "selected" : "default"}
|
|
5664
|
+
>
|
|
5665
|
+
<Table.CheckCell
|
|
5666
|
+
checked={selectedIds.has(row.id)}
|
|
5667
|
+
onValueChange={() => toggleRow(row.id)}
|
|
5668
|
+
aria-label={`Select ${row.subject}`}
|
|
5549
5669
|
/>
|
|
5550
|
-
<Table.
|
|
5551
|
-
<Table.
|
|
5552
|
-
<Table.
|
|
5670
|
+
<Table.Cell>{row.subject}</Table.Cell>
|
|
5671
|
+
<Table.Cell>{row.from}</Table.Cell>
|
|
5672
|
+
<Table.Cell>{row.date}</Table.Cell>
|
|
5553
5673
|
</Table.Row>
|
|
5554
|
-
|
|
5555
|
-
|
|
5556
|
-
|
|
5557
|
-
<Table.Row
|
|
5558
|
-
key={row.id}
|
|
5559
|
-
variant={selectedIds.has(row.id) ? "selected" : "default"}
|
|
5560
|
-
>
|
|
5561
|
-
<Table.CheckCell
|
|
5562
|
-
checked={selectedIds.has(row.id)}
|
|
5563
|
-
onValueChange={() => toggleRow(row.id)}
|
|
5564
|
-
aria-label={`Select ${row.subject}`}
|
|
5565
|
-
/>
|
|
5566
|
-
<Table.Cell>{row.subject}</Table.Cell>
|
|
5567
|
-
<Table.Cell>{row.from}</Table.Cell>
|
|
5568
|
-
<Table.Cell>{row.date}</Table.Cell>
|
|
5569
|
-
</Table.Row>
|
|
5570
|
-
))}
|
|
5571
|
-
</Table.Body>
|
|
5572
|
-
</Table>
|
|
5573
|
-
</LayerCard.Primary>
|
|
5674
|
+
))}
|
|
5675
|
+
</Table.Body>
|
|
5676
|
+
</Table>
|
|
5574
5677
|
</LayerCard>
|
|
5575
5678
|
```
|
|
5576
5679
|
|
|
5577
5680
|
```tsx
|
|
5578
|
-
<LayerCard>
|
|
5579
|
-
<
|
|
5580
|
-
<
|
|
5581
|
-
<
|
|
5582
|
-
|
|
5583
|
-
|
|
5584
|
-
|
|
5585
|
-
|
|
5586
|
-
<Table.
|
|
5587
|
-
<Table.
|
|
5588
|
-
|
|
5589
|
-
|
|
5590
|
-
|
|
5681
|
+
<LayerCard className="p-0">
|
|
5682
|
+
<Table layout="fixed">
|
|
5683
|
+
<colgroup>
|
|
5684
|
+
<col />
|
|
5685
|
+
<col className="w-[150px]" />
|
|
5686
|
+
<col className="w-[150px]" />
|
|
5687
|
+
</colgroup>
|
|
5688
|
+
<Table.Header>
|
|
5689
|
+
<Table.Row>
|
|
5690
|
+
<Table.Head>Subject</Table.Head>
|
|
5691
|
+
<Table.Head>From</Table.Head>
|
|
5692
|
+
<Table.Head>Date</Table.Head>
|
|
5693
|
+
</Table.Row>
|
|
5694
|
+
</Table.Header>
|
|
5695
|
+
<Table.Body>
|
|
5696
|
+
{emailData.map((row) => (
|
|
5697
|
+
<Table.Row key={row.id}>
|
|
5698
|
+
<Table.Cell>{row.subject}</Table.Cell>
|
|
5699
|
+
<Table.Cell>{row.from}</Table.Cell>
|
|
5700
|
+
<Table.Cell>{row.date}</Table.Cell>
|
|
5591
5701
|
</Table.Row>
|
|
5592
|
-
|
|
5593
|
-
|
|
5594
|
-
|
|
5595
|
-
<Table.Row key={row.id}>
|
|
5596
|
-
<Table.Cell>{row.subject}</Table.Cell>
|
|
5597
|
-
<Table.Cell>{row.from}</Table.Cell>
|
|
5598
|
-
<Table.Cell>{row.date}</Table.Cell>
|
|
5599
|
-
</Table.Row>
|
|
5600
|
-
))}
|
|
5601
|
-
</Table.Body>
|
|
5602
|
-
</Table>
|
|
5603
|
-
</LayerCard.Primary>
|
|
5702
|
+
))}
|
|
5703
|
+
</Table.Body>
|
|
5704
|
+
</Table>
|
|
5604
5705
|
</LayerCard>
|
|
5605
5706
|
```
|
|
5606
5707
|
|
|
5607
5708
|
```tsx
|
|
5608
|
-
<LayerCard>
|
|
5609
|
-
<
|
|
5610
|
-
<Table>
|
|
5611
|
-
<Table.
|
|
5612
|
-
<Table.
|
|
5613
|
-
|
|
5614
|
-
|
|
5615
|
-
|
|
5616
|
-
|
|
5617
|
-
<
|
|
5618
|
-
|
|
5619
|
-
|
|
5709
|
+
<LayerCard className="w-full max-w-md overflow-x-auto p-0">
|
|
5710
|
+
<Table>
|
|
5711
|
+
<Table.Header variant="compact">
|
|
5712
|
+
<Table.Row>
|
|
5713
|
+
<Table.Head>Subject</Table.Head>
|
|
5714
|
+
<Table.Head>From</Table.Head>
|
|
5715
|
+
<Table.Head>Date</Table.Head>
|
|
5716
|
+
<Table.Head>Tags</Table.Head>
|
|
5717
|
+
<Table.Head sticky="right">
|
|
5718
|
+
<span className="sr-only">Actions</span>
|
|
5719
|
+
</Table.Head>
|
|
5720
|
+
</Table.Row>
|
|
5721
|
+
</Table.Header>
|
|
5722
|
+
<Table.Body>
|
|
5723
|
+
{emailData.map((row) => (
|
|
5724
|
+
<Table.Row key={row.id}>
|
|
5725
|
+
<Table.Cell className="whitespace-nowrap">
|
|
5726
|
+
{row.subject}
|
|
5727
|
+
</Table.Cell>
|
|
5728
|
+
<Table.Cell className="whitespace-nowrap">
|
|
5729
|
+
{row.from}
|
|
5730
|
+
</Table.Cell>
|
|
5731
|
+
<Table.Cell className="whitespace-nowrap">
|
|
5732
|
+
{row.date}
|
|
5733
|
+
</Table.Cell>
|
|
5734
|
+
<Table.Cell className="whitespace-nowrap">
|
|
5735
|
+
{row.tags ? (
|
|
5736
|
+
<div className="inline-flex gap-1">
|
|
5737
|
+
{row.tags.map((tag) => (
|
|
5738
|
+
<Badge key={tag}>{tag}</Badge>
|
|
5739
|
+
))}
|
|
5740
|
+
</div>
|
|
5741
|
+
) : (
|
|
5742
|
+
"—"
|
|
5743
|
+
)}
|
|
5744
|
+
</Table.Cell>
|
|
5745
|
+
<Table.Cell sticky="right" className="text-right">
|
|
5746
|
+
<DropdownMenu>
|
|
5747
|
+
<DropdownMenu.Trigger
|
|
5748
|
+
render={
|
|
5749
|
+
<Button
|
|
5750
|
+
variant="ghost"
|
|
5751
|
+
size="sm"
|
|
5752
|
+
shape="square"
|
|
5753
|
+
aria-label="More options"
|
|
5754
|
+
>
|
|
5755
|
+
<DotsThree weight="bold" size={16} />
|
|
5756
|
+
</Button>
|
|
5757
|
+
}
|
|
5758
|
+
/>
|
|
5759
|
+
<DropdownMenu.Content>
|
|
5760
|
+
<DropdownMenu.Item icon={Eye}>View</DropdownMenu.Item>
|
|
5761
|
+
<DropdownMenu.Item icon={PencilSimple}>
|
|
5762
|
+
Edit
|
|
5763
|
+
</DropdownMenu.Item>
|
|
5764
|
+
<DropdownMenu.Separator />
|
|
5765
|
+
<DropdownMenu.Item icon={Trash} variant="danger">
|
|
5766
|
+
Delete
|
|
5767
|
+
</DropdownMenu.Item>
|
|
5768
|
+
</DropdownMenu.Content>
|
|
5769
|
+
</DropdownMenu>
|
|
5770
|
+
</Table.Cell>
|
|
5771
|
+
</Table.Row>
|
|
5772
|
+
))}
|
|
5773
|
+
</Table.Body>
|
|
5774
|
+
</Table>
|
|
5775
|
+
</LayerCard>
|
|
5776
|
+
```
|
|
5777
|
+
|
|
5778
|
+
```tsx
|
|
5779
|
+
<LayerCard className="w-full max-w-md overflow-x-auto p-0">
|
|
5780
|
+
<Table>
|
|
5781
|
+
<Table.Header>
|
|
5782
|
+
<Table.Row>
|
|
5783
|
+
<Table.Head>Subject</Table.Head>
|
|
5784
|
+
<Table.Head>From</Table.Head>
|
|
5785
|
+
<Table.Head>Date</Table.Head>
|
|
5786
|
+
<Table.Head>Tags</Table.Head>
|
|
5787
|
+
<Table.Head sticky="right">
|
|
5788
|
+
<span className="sr-only">Actions</span>
|
|
5789
|
+
</Table.Head>
|
|
5790
|
+
</Table.Row>
|
|
5791
|
+
</Table.Header>
|
|
5792
|
+
<Table.Body>
|
|
5793
|
+
{emailData.map((row) => (
|
|
5794
|
+
<Table.Row key={row.id}>
|
|
5795
|
+
<Table.Cell className="whitespace-nowrap">
|
|
5796
|
+
{row.subject}
|
|
5797
|
+
</Table.Cell>
|
|
5798
|
+
<Table.Cell className="whitespace-nowrap">
|
|
5799
|
+
{row.from}
|
|
5800
|
+
</Table.Cell>
|
|
5801
|
+
<Table.Cell className="whitespace-nowrap">
|
|
5802
|
+
{row.date}
|
|
5803
|
+
</Table.Cell>
|
|
5804
|
+
<Table.Cell className="whitespace-nowrap">
|
|
5805
|
+
{row.tags ? (
|
|
5806
|
+
<div className="inline-flex gap-1">
|
|
5807
|
+
{row.tags.map((tag) => (
|
|
5808
|
+
<Badge key={tag}>{tag}</Badge>
|
|
5809
|
+
))}
|
|
5810
|
+
</div>
|
|
5811
|
+
) : (
|
|
5812
|
+
"—"
|
|
5813
|
+
)}
|
|
5814
|
+
</Table.Cell>
|
|
5815
|
+
<Table.Cell sticky="right" className="text-right">
|
|
5816
|
+
<DropdownMenu>
|
|
5817
|
+
<DropdownMenu.Trigger
|
|
5818
|
+
render={
|
|
5819
|
+
<Button
|
|
5820
|
+
variant="ghost"
|
|
5821
|
+
size="sm"
|
|
5822
|
+
shape="square"
|
|
5823
|
+
aria-label="More options"
|
|
5824
|
+
>
|
|
5825
|
+
<DotsThree weight="bold" size={16} />
|
|
5826
|
+
</Button>
|
|
5827
|
+
}
|
|
5828
|
+
/>
|
|
5829
|
+
<DropdownMenu.Content>
|
|
5830
|
+
<DropdownMenu.Item icon={Eye}>View</DropdownMenu.Item>
|
|
5831
|
+
<DropdownMenu.Item icon={PencilSimple}>
|
|
5832
|
+
Edit
|
|
5833
|
+
</DropdownMenu.Item>
|
|
5834
|
+
<DropdownMenu.Separator />
|
|
5835
|
+
<DropdownMenu.Item icon={Trash} variant="danger">
|
|
5836
|
+
Delete
|
|
5837
|
+
</DropdownMenu.Item>
|
|
5838
|
+
</DropdownMenu.Content>
|
|
5839
|
+
</DropdownMenu>
|
|
5840
|
+
</Table.Cell>
|
|
5620
5841
|
</Table.Row>
|
|
5621
|
-
|
|
5622
|
-
|
|
5623
|
-
|
|
5624
|
-
|
|
5625
|
-
|
|
5626
|
-
|
|
5627
|
-
|
|
5628
|
-
|
|
5629
|
-
|
|
5630
|
-
|
|
5631
|
-
|
|
5632
|
-
|
|
5633
|
-
|
|
5634
|
-
|
|
5635
|
-
|
|
5636
|
-
|
|
5842
|
+
))}
|
|
5843
|
+
</Table.Body>
|
|
5844
|
+
</Table>
|
|
5845
|
+
</LayerCard>
|
|
5846
|
+
```
|
|
5847
|
+
|
|
5848
|
+
```tsx
|
|
5849
|
+
<LayerCard className="w-full overflow-x-auto p-0">
|
|
5850
|
+
<Table layout="fixed">
|
|
5851
|
+
<colgroup>
|
|
5852
|
+
<col />{" "}
|
|
5853
|
+
{/* Checkbox column - width handled by Table.CheckHead/CheckCell */}
|
|
5854
|
+
<col />
|
|
5855
|
+
<col style={{ width: "150px" }} />
|
|
5856
|
+
<col style={{ width: "120px" }} />
|
|
5857
|
+
<col style={{ width: "50px" }} />
|
|
5858
|
+
</colgroup>
|
|
5859
|
+
<Table.Header>
|
|
5860
|
+
<Table.Row>
|
|
5861
|
+
<Table.CheckHead
|
|
5862
|
+
checked={selectedIds.size === emailData.length}
|
|
5863
|
+
indeterminate={
|
|
5864
|
+
selectedIds.size > 0 && selectedIds.size < emailData.length
|
|
5865
|
+
}
|
|
5866
|
+
onValueChange={toggleAll}
|
|
5867
|
+
aria-label="Select all rows"
|
|
5868
|
+
/>
|
|
5869
|
+
<Table.Head>Subject</Table.Head>
|
|
5870
|
+
<Table.Head>From</Table.Head>
|
|
5871
|
+
<Table.Head>Date</Table.Head>
|
|
5872
|
+
<Table.Head></Table.Head>
|
|
5873
|
+
</Table.Row>
|
|
5874
|
+
</Table.Header>
|
|
5875
|
+
<Table.Body>
|
|
5876
|
+
{emailData.map((row) => (
|
|
5877
|
+
<Table.Row
|
|
5878
|
+
key={row.id}
|
|
5879
|
+
variant={selectedIds.has(row.id) ? "selected" : "default"}
|
|
5880
|
+
>
|
|
5881
|
+
<Table.CheckCell
|
|
5882
|
+
checked={selectedIds.has(row.id)}
|
|
5883
|
+
onValueChange={() => toggleRow(row.id)}
|
|
5884
|
+
aria-label={`Select ${row.subject}`}
|
|
5885
|
+
/>
|
|
5886
|
+
<Table.Cell>
|
|
5887
|
+
<div className="flex items-center gap-2">
|
|
5888
|
+
<EnvelopeSimple size={16} />
|
|
5889
|
+
<span className="truncate">{row.subject}</span>
|
|
5890
|
+
{row.tags && (
|
|
5891
|
+
<div className="ml-2 inline-flex gap-1">
|
|
5637
5892
|
{row.tags.map((tag) => (
|
|
5638
5893
|
<Badge key={tag}>{tag}</Badge>
|
|
5639
5894
|
))}
|
|
5640
5895
|
</div>
|
|
5641
|
-
) : (
|
|
5642
|
-
"—"
|
|
5643
5896
|
)}
|
|
5644
|
-
</
|
|
5645
|
-
|
|
5646
|
-
|
|
5647
|
-
|
|
5648
|
-
|
|
5649
|
-
|
|
5650
|
-
|
|
5651
|
-
|
|
5652
|
-
|
|
5653
|
-
|
|
5654
|
-
|
|
5655
|
-
|
|
5656
|
-
|
|
5657
|
-
|
|
5658
|
-
|
|
5659
|
-
|
|
5660
|
-
|
|
5661
|
-
|
|
5662
|
-
|
|
5663
|
-
</
|
|
5664
|
-
|
|
5665
|
-
|
|
5666
|
-
|
|
5667
|
-
|
|
5668
|
-
|
|
5669
|
-
|
|
5670
|
-
|
|
5671
|
-
|
|
5672
|
-
|
|
5673
|
-
|
|
5674
|
-
|
|
5675
|
-
|
|
5897
|
+
</div>
|
|
5898
|
+
</Table.Cell>
|
|
5899
|
+
<Table.Cell>
|
|
5900
|
+
<span className="truncate">{row.from}</span>
|
|
5901
|
+
</Table.Cell>
|
|
5902
|
+
<Table.Cell>
|
|
5903
|
+
<span className="truncate">{row.date}</span>
|
|
5904
|
+
</Table.Cell>
|
|
5905
|
+
<Table.Cell className="text-right">
|
|
5906
|
+
<DropdownMenu>
|
|
5907
|
+
<DropdownMenu.Trigger
|
|
5908
|
+
render={
|
|
5909
|
+
<Button
|
|
5910
|
+
variant="ghost"
|
|
5911
|
+
size="sm"
|
|
5912
|
+
shape="square"
|
|
5913
|
+
aria-label="More options"
|
|
5914
|
+
>
|
|
5915
|
+
<DotsThree weight="bold" size={16} />
|
|
5916
|
+
</Button>
|
|
5917
|
+
}
|
|
5918
|
+
/>
|
|
5919
|
+
<DropdownMenu.Content>
|
|
5920
|
+
<DropdownMenu.Item icon={Eye}>View</DropdownMenu.Item>
|
|
5921
|
+
<DropdownMenu.Item icon={PencilSimple}>
|
|
5922
|
+
Edit
|
|
5923
|
+
</DropdownMenu.Item>
|
|
5924
|
+
<DropdownMenu.Separator />
|
|
5925
|
+
<DropdownMenu.Item icon={Trash} variant="danger">
|
|
5926
|
+
Delete
|
|
5927
|
+
</DropdownMenu.Item>
|
|
5928
|
+
</DropdownMenu.Content>
|
|
5929
|
+
</DropdownMenu>
|
|
5930
|
+
</Table.Cell>
|
|
5931
|
+
</Table.Row>
|
|
5932
|
+
))}
|
|
5933
|
+
</Table.Body>
|
|
5934
|
+
</Table>
|
|
5676
5935
|
</LayerCard>
|
|
5677
5936
|
```
|
|
5678
5937
|
|
|
5938
|
+
|
|
5939
|
+
---
|
|
5940
|
+
|
|
5941
|
+
### TableOfContents
|
|
5942
|
+
|
|
5943
|
+
TableOfContents — presentational compound component for section navigation. Purely visual; all interaction logic (scroll tracking, active state management) is left to the consumer.
|
|
5944
|
+
|
|
5945
|
+
**Type:** component
|
|
5946
|
+
|
|
5947
|
+
**Import:** `import { TableOfContents } from "@cloudflare/kumo";`
|
|
5948
|
+
|
|
5949
|
+
**Category:** Other
|
|
5950
|
+
|
|
5951
|
+
**Props:**
|
|
5952
|
+
|
|
5953
|
+
- `children`: ReactNode
|
|
5954
|
+
- `className`: string
|
|
5955
|
+
- `id`: string
|
|
5956
|
+
- `lang`: string
|
|
5957
|
+
- `title`: string
|
|
5958
|
+
|
|
5959
|
+
**Colors (kumo tokens used):**
|
|
5960
|
+
|
|
5961
|
+
`bg-kumo-brand`, `bg-kumo-line`, `bg-kumo-tint`, `text-kumo-default`, `text-kumo-subtle`
|
|
5962
|
+
|
|
5963
|
+
**Sub-Components:**
|
|
5964
|
+
|
|
5965
|
+
This is a compound component. Use these sub-components:
|
|
5966
|
+
|
|
5967
|
+
#### TableOfContents.Title
|
|
5968
|
+
|
|
5969
|
+
Title sub-component
|
|
5970
|
+
|
|
5971
|
+
#### TableOfContents.List
|
|
5972
|
+
|
|
5973
|
+
List sub-component
|
|
5974
|
+
|
|
5975
|
+
#### TableOfContents.Item
|
|
5976
|
+
|
|
5977
|
+
Item sub-component
|
|
5978
|
+
|
|
5979
|
+
#### TableOfContents.Group
|
|
5980
|
+
|
|
5981
|
+
Group sub-component
|
|
5982
|
+
|
|
5983
|
+
|
|
5984
|
+
**Examples:**
|
|
5985
|
+
|
|
5986
|
+
```tsx
|
|
5987
|
+
<DemoWrapper>
|
|
5988
|
+
<TableOfContents>
|
|
5989
|
+
<TableOfContents.Title>On this page</TableOfContents.Title>
|
|
5990
|
+
<TableOfContents.List>
|
|
5991
|
+
{headings.map((heading) => (
|
|
5992
|
+
<TableOfContents.Item
|
|
5993
|
+
key={heading.text}
|
|
5994
|
+
active={heading.text === "Usage"}
|
|
5995
|
+
className="cursor-pointer"
|
|
5996
|
+
>
|
|
5997
|
+
{heading.text}
|
|
5998
|
+
</TableOfContents.Item>
|
|
5999
|
+
))}
|
|
6000
|
+
</TableOfContents.List>
|
|
6001
|
+
</TableOfContents>
|
|
6002
|
+
</DemoWrapper>
|
|
6003
|
+
```
|
|
6004
|
+
|
|
6005
|
+
```tsx
|
|
6006
|
+
<DemoWrapper>
|
|
6007
|
+
<TableOfContents>
|
|
6008
|
+
<TableOfContents.Title>On this page</TableOfContents.Title>
|
|
6009
|
+
<TableOfContents.List>
|
|
6010
|
+
{headings.map((heading) => (
|
|
6011
|
+
<TableOfContents.Item
|
|
6012
|
+
key={heading.text}
|
|
6013
|
+
active={heading.text === active}
|
|
6014
|
+
onClick={() => setActive(heading.text)}
|
|
6015
|
+
className="cursor-pointer"
|
|
6016
|
+
>
|
|
6017
|
+
{heading.text}
|
|
6018
|
+
</TableOfContents.Item>
|
|
6019
|
+
))}
|
|
6020
|
+
</TableOfContents.List>
|
|
6021
|
+
</TableOfContents>
|
|
6022
|
+
</DemoWrapper>
|
|
6023
|
+
```
|
|
6024
|
+
|
|
5679
6025
|
```tsx
|
|
5680
|
-
<
|
|
5681
|
-
<
|
|
5682
|
-
<
|
|
5683
|
-
|
|
5684
|
-
|
|
5685
|
-
{
|
|
5686
|
-
|
|
5687
|
-
|
|
5688
|
-
|
|
5689
|
-
|
|
5690
|
-
|
|
5691
|
-
|
|
5692
|
-
|
|
5693
|
-
|
|
5694
|
-
|
|
5695
|
-
|
|
5696
|
-
|
|
5697
|
-
|
|
5698
|
-
|
|
5699
|
-
|
|
5700
|
-
|
|
5701
|
-
|
|
5702
|
-
|
|
5703
|
-
|
|
5704
|
-
|
|
5705
|
-
</
|
|
5706
|
-
|
|
5707
|
-
|
|
5708
|
-
|
|
5709
|
-
|
|
5710
|
-
|
|
5711
|
-
|
|
6026
|
+
<DemoWrapper>
|
|
6027
|
+
<TableOfContents>
|
|
6028
|
+
<TableOfContents.Title>On this page</TableOfContents.Title>
|
|
6029
|
+
<TableOfContents.List>
|
|
6030
|
+
{headings.map((heading) => (
|
|
6031
|
+
<TableOfContents.Item key={heading.text} className="cursor-pointer">
|
|
6032
|
+
{heading.text}
|
|
6033
|
+
</TableOfContents.Item>
|
|
6034
|
+
))}
|
|
6035
|
+
</TableOfContents.List>
|
|
6036
|
+
</TableOfContents>
|
|
6037
|
+
</DemoWrapper>
|
|
6038
|
+
```
|
|
6039
|
+
|
|
6040
|
+
```tsx
|
|
6041
|
+
<DemoWrapper>
|
|
6042
|
+
<TableOfContents>
|
|
6043
|
+
<TableOfContents.Title>On this page</TableOfContents.Title>
|
|
6044
|
+
<TableOfContents.List>
|
|
6045
|
+
<TableOfContents.Item active className="cursor-pointer">
|
|
6046
|
+
Overview
|
|
6047
|
+
</TableOfContents.Item>
|
|
6048
|
+
<TableOfContents.Group label="Getting Started">
|
|
6049
|
+
<TableOfContents.Item className="cursor-pointer">
|
|
6050
|
+
Installation
|
|
6051
|
+
</TableOfContents.Item>
|
|
6052
|
+
<TableOfContents.Item className="cursor-pointer">
|
|
6053
|
+
Configuration
|
|
6054
|
+
</TableOfContents.Item>
|
|
6055
|
+
</TableOfContents.Group>
|
|
6056
|
+
<TableOfContents.Group label="API">
|
|
6057
|
+
<TableOfContents.Item className="cursor-pointer">
|
|
6058
|
+
Props
|
|
6059
|
+
</TableOfContents.Item>
|
|
6060
|
+
<TableOfContents.Item className="cursor-pointer">
|
|
6061
|
+
Events
|
|
6062
|
+
</TableOfContents.Item>
|
|
6063
|
+
</TableOfContents.Group>
|
|
6064
|
+
</TableOfContents.List>
|
|
6065
|
+
</TableOfContents>
|
|
6066
|
+
</DemoWrapper>
|
|
6067
|
+
```
|
|
6068
|
+
|
|
6069
|
+
```tsx
|
|
6070
|
+
<DemoWrapper>
|
|
6071
|
+
<div className="space-y-3">
|
|
6072
|
+
<TableOfContents>
|
|
6073
|
+
<TableOfContents.List>
|
|
6074
|
+
{["Introduction", "Installation", "Usage"].map((text) => (
|
|
6075
|
+
<TableOfContents.Item
|
|
6076
|
+
key={text}
|
|
6077
|
+
render={<button type="button" />}
|
|
6078
|
+
onClick={() => setClicked(text)}
|
|
6079
|
+
active={text === "Introduction"}
|
|
5712
6080
|
>
|
|
5713
|
-
|
|
5714
|
-
|
|
5715
|
-
onValueChange={() => toggleRow(row.id)}
|
|
5716
|
-
aria-label={`Select ${row.subject}`}
|
|
5717
|
-
/>
|
|
5718
|
-
<Table.Cell>
|
|
5719
|
-
<div className="flex items-center gap-2">
|
|
5720
|
-
<EnvelopeSimple size={16} />
|
|
5721
|
-
<span className="truncate">{row.subject}</span>
|
|
5722
|
-
{row.tags && (
|
|
5723
|
-
<div className="ml-2 inline-flex gap-1">
|
|
5724
|
-
{row.tags.map((tag) => (
|
|
5725
|
-
<Badge key={tag}>{tag}</Badge>
|
|
5726
|
-
))}
|
|
5727
|
-
</div>
|
|
5728
|
-
)}
|
|
5729
|
-
</div>
|
|
5730
|
-
</Table.Cell>
|
|
5731
|
-
<Table.Cell>
|
|
5732
|
-
<span className="truncate">{row.from}</span>
|
|
5733
|
-
</Table.Cell>
|
|
5734
|
-
<Table.Cell>
|
|
5735
|
-
<span className="truncate">{row.date}</span>
|
|
5736
|
-
</Table.Cell>
|
|
5737
|
-
<Table.Cell className="text-right">
|
|
5738
|
-
<DropdownMenu>
|
|
5739
|
-
<DropdownMenu.Trigger
|
|
5740
|
-
render={
|
|
5741
|
-
<Button
|
|
5742
|
-
variant="ghost"
|
|
5743
|
-
size="sm"
|
|
5744
|
-
shape="square"
|
|
5745
|
-
aria-label="More options"
|
|
5746
|
-
>
|
|
5747
|
-
<DotsThree weight="bold" size={16} />
|
|
5748
|
-
</Button>
|
|
5749
|
-
}
|
|
5750
|
-
/>
|
|
5751
|
-
<DropdownMenu.Content>
|
|
5752
|
-
<DropdownMenu.Item icon={Eye}>View</DropdownMenu.Item>
|
|
5753
|
-
<DropdownMenu.Item icon={PencilSimple}>
|
|
5754
|
-
Edit
|
|
5755
|
-
</DropdownMenu.Item>
|
|
5756
|
-
<DropdownMenu.Separator />
|
|
5757
|
-
<DropdownMenu.Item icon={Trash} variant="danger">
|
|
5758
|
-
Delete
|
|
5759
|
-
</DropdownMenu.Item>
|
|
5760
|
-
</DropdownMenu.Content>
|
|
5761
|
-
</DropdownMenu>
|
|
5762
|
-
</Table.Cell>
|
|
5763
|
-
</Table.Row>
|
|
6081
|
+
{text}
|
|
6082
|
+
</TableOfContents.Item>
|
|
5764
6083
|
))}
|
|
5765
|
-
</
|
|
5766
|
-
</
|
|
5767
|
-
|
|
5768
|
-
|
|
6084
|
+
</TableOfContents.List>
|
|
6085
|
+
</TableOfContents>
|
|
6086
|
+
{clicked && (
|
|
6087
|
+
<p className="text-xs text-kumo-subtle">Clicked: {clicked}</p>
|
|
6088
|
+
)}
|
|
6089
|
+
</div>
|
|
6090
|
+
</DemoWrapper>
|
|
5769
6091
|
```
|
|
5770
6092
|
|
|
5771
6093
|
|
|
@@ -5959,69 +6281,69 @@ Text component
|
|
|
5959
6281
|
|
|
5960
6282
|
```tsx
|
|
5961
6283
|
<div className="grid w-full grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3">
|
|
5962
|
-
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-
|
|
6284
|
+
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4">
|
|
5963
6285
|
<Text variant="heading1">Heading 1</Text>
|
|
5964
|
-
<
|
|
6286
|
+
<Text variant="mono-secondary">text-3xl (30px)</Text>
|
|
5965
6287
|
</div>
|
|
5966
|
-
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-
|
|
6288
|
+
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4">
|
|
5967
6289
|
<Text variant="heading2">Heading 2</Text>
|
|
5968
|
-
<
|
|
6290
|
+
<Text variant="mono-secondary">text-2xl (24px)</Text>
|
|
5969
6291
|
</div>
|
|
5970
|
-
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-
|
|
6292
|
+
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4">
|
|
5971
6293
|
<Text variant="heading3">Heading 3</Text>
|
|
5972
|
-
<
|
|
6294
|
+
<Text variant="mono-secondary">text-lg (16px)</Text>
|
|
5973
6295
|
</div>
|
|
5974
|
-
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-
|
|
6296
|
+
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4">
|
|
5975
6297
|
<Text>Body</Text>
|
|
5976
|
-
<
|
|
6298
|
+
<Text variant="mono-secondary">text-base (14px)</Text>
|
|
5977
6299
|
</div>
|
|
5978
|
-
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-
|
|
6300
|
+
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4">
|
|
5979
6301
|
<Text bold>Body bold</Text>
|
|
5980
|
-
<
|
|
6302
|
+
<Text variant="mono-secondary">text-base (14px)</Text>
|
|
5981
6303
|
</div>
|
|
5982
|
-
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-
|
|
6304
|
+
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4">
|
|
5983
6305
|
<Text size="lg">Body lg</Text>
|
|
5984
|
-
<
|
|
6306
|
+
<Text variant="mono-secondary">text-lg (16px)</Text>
|
|
5985
6307
|
</div>
|
|
5986
|
-
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-
|
|
6308
|
+
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4">
|
|
5987
6309
|
<Text size="sm">Body sm</Text>
|
|
5988
|
-
<
|
|
6310
|
+
<Text variant="mono-secondary">text-sm (13px)</Text>
|
|
5989
6311
|
</div>
|
|
5990
|
-
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-
|
|
6312
|
+
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4">
|
|
5991
6313
|
<Text size="xs">Body xs</Text>
|
|
5992
|
-
<
|
|
6314
|
+
<Text variant="mono-secondary">text-xs (12px)</Text>
|
|
5993
6315
|
</div>
|
|
5994
|
-
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-
|
|
6316
|
+
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4">
|
|
5995
6317
|
<Text variant="secondary">Body secondary</Text>
|
|
5996
|
-
<
|
|
6318
|
+
<Text variant="mono-secondary">text-base (14px)</Text>
|
|
5997
6319
|
</div>
|
|
5998
|
-
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-
|
|
6320
|
+
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4">
|
|
5999
6321
|
<Text variant="mono">Monospace</Text>
|
|
6000
|
-
<
|
|
6322
|
+
<Text variant="mono-secondary">text-sm (13px)</Text>
|
|
6001
6323
|
</div>
|
|
6002
|
-
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-
|
|
6324
|
+
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4">
|
|
6003
6325
|
<Text variant="mono" size="lg">
|
|
6004
6326
|
Monospace lg
|
|
6005
6327
|
</Text>
|
|
6006
|
-
<
|
|
6328
|
+
<Text variant="mono-secondary">text-base (14px)</Text>
|
|
6007
6329
|
</div>
|
|
6008
|
-
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-
|
|
6330
|
+
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4">
|
|
6009
6331
|
<Text variant="mono-secondary">Monospace secondary</Text>
|
|
6010
|
-
<
|
|
6332
|
+
<Text variant="mono-secondary">text-sm (13px)</Text>
|
|
6011
6333
|
</div>
|
|
6012
|
-
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-
|
|
6334
|
+
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4">
|
|
6013
6335
|
<Text variant="success">Success</Text>
|
|
6014
|
-
<
|
|
6336
|
+
<Text variant="mono-secondary">text-base (14px)</Text>
|
|
6015
6337
|
</div>
|
|
6016
|
-
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-
|
|
6338
|
+
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4">
|
|
6017
6339
|
<Text variant="error">Error</Text>
|
|
6018
|
-
<
|
|
6340
|
+
<Text variant="mono-secondary">text-base (14px)</Text>
|
|
6019
6341
|
</div>
|
|
6020
6342
|
</div>
|
|
6021
6343
|
```
|
|
6022
6344
|
|
|
6023
6345
|
```tsx
|
|
6024
|
-
<div className="w-64 rounded-lg border border-kumo-
|
|
6346
|
+
<div className="w-64 rounded-lg border border-kumo-hairline bg-kumo-base p-4">
|
|
6025
6347
|
<Text truncate>
|
|
6026
6348
|
This is a long piece of text that will be truncated with an ellipsis
|
|
6027
6349
|
when it overflows its container.
|
|
@@ -6057,7 +6379,7 @@ Toasty — toast notification provider and viewport. Renders a `Toast.Provider`
|
|
|
6057
6379
|
|
|
6058
6380
|
**Colors (kumo tokens used):**
|
|
6059
6381
|
|
|
6060
|
-
`bg-kumo-base`, `bg-kumo-contrast`, `bg-kumo-control`, `bg-kumo-danger`, `bg-kumo-fill-hover`, `bg-kumo-info`, `bg-kumo-success`, `bg-kumo-warning`, `border-kumo-fill`, `ring-kumo-danger`, `ring-kumo-hairline`, `ring-kumo-info`, `ring-kumo-success`, `ring-kumo-warning`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-info`, `text-kumo-strong`, `text-kumo-subtle`, `text-kumo-success`, `text-kumo-warning`
|
|
6382
|
+
`bg-kumo-base`, `bg-kumo-contrast`, `bg-kumo-control`, `bg-kumo-danger`, `bg-kumo-fill-hover`, `bg-kumo-info`, `bg-kumo-success`, `bg-kumo-warning`, `border-kumo-fill`, `ring-kumo-danger`, `ring-kumo-hairline`, `ring-kumo-info`, `ring-kumo-line`, `ring-kumo-success`, `ring-kumo-warning`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-info`, `text-kumo-strong`, `text-kumo-subtle`, `text-kumo-success`, `text-kumo-warning`
|
|
6061
6383
|
|
|
6062
6384
|
**Styling:**
|
|
6063
6385
|
|
|
@@ -6096,25 +6418,32 @@ Accessible popup that shows additional information on hover/focus. Wrap your app
|
|
|
6096
6418
|
|
|
6097
6419
|
```tsx
|
|
6098
6420
|
<TooltipProvider>
|
|
6099
|
-
<Tooltip
|
|
6100
|
-
|
|
6101
|
-
|
|
6421
|
+
<Tooltip
|
|
6422
|
+
content="Add new item"
|
|
6423
|
+
render={
|
|
6424
|
+
<Button shape="square" icon={PlusIcon} aria-label="Add new item" />
|
|
6425
|
+
}
|
|
6426
|
+
/>
|
|
6102
6427
|
</TooltipProvider>
|
|
6103
6428
|
```
|
|
6104
6429
|
|
|
6105
6430
|
```tsx
|
|
6106
6431
|
<TooltipProvider>
|
|
6107
6432
|
<div className="flex gap-2">
|
|
6108
|
-
<Tooltip
|
|
6109
|
-
|
|
6110
|
-
|
|
6111
|
-
|
|
6112
|
-
|
|
6113
|
-
|
|
6114
|
-
|
|
6115
|
-
|
|
6116
|
-
|
|
6117
|
-
|
|
6433
|
+
<Tooltip
|
|
6434
|
+
content="Add"
|
|
6435
|
+
render={<Button shape="square" icon={PlusIcon} aria-label="Add" />}
|
|
6436
|
+
/>
|
|
6437
|
+
<Tooltip
|
|
6438
|
+
content="Change language"
|
|
6439
|
+
render={
|
|
6440
|
+
<Button
|
|
6441
|
+
shape="square"
|
|
6442
|
+
icon={TranslateIcon}
|
|
6443
|
+
aria-label="Change language"
|
|
6444
|
+
/>
|
|
6445
|
+
}
|
|
6446
|
+
/>
|
|
6118
6447
|
</div>
|
|
6119
6448
|
</TooltipProvider>
|
|
6120
6449
|
```
|
|
@@ -6134,23 +6463,27 @@ Accessible popup that shows additional information on hover/focus. Wrap your app
|
|
|
6134
6463
|
```tsx
|
|
6135
6464
|
<TooltipProvider>
|
|
6136
6465
|
<div className="flex gap-4">
|
|
6137
|
-
<Tooltip
|
|
6138
|
-
|
|
6466
|
+
<Tooltip
|
|
6467
|
+
content="Opens after 1 second"
|
|
6468
|
+
delay={1000}
|
|
6469
|
+
render={<Button variant="secondary" />}
|
|
6470
|
+
>
|
|
6471
|
+
1s open delay
|
|
6139
6472
|
</Tooltip>
|
|
6140
6473
|
<Tooltip
|
|
6141
6474
|
content="Stays open 500ms after leaving"
|
|
6142
6475
|
closeDelay={500}
|
|
6143
|
-
|
|
6476
|
+
render={<Button variant="secondary" />}
|
|
6144
6477
|
>
|
|
6145
|
-
|
|
6478
|
+
500ms close delay
|
|
6146
6479
|
</Tooltip>
|
|
6147
6480
|
<Tooltip
|
|
6148
6481
|
content="Instant open, stays 1s"
|
|
6149
6482
|
delay={0}
|
|
6150
6483
|
closeDelay={1000}
|
|
6151
|
-
|
|
6484
|
+
render={<Button variant="secondary" />}
|
|
6152
6485
|
>
|
|
6153
|
-
|
|
6486
|
+
Instant + 1s close
|
|
6154
6487
|
</Tooltip>
|
|
6155
6488
|
</div>
|
|
6156
6489
|
</TooltipProvider>
|
|
@@ -6187,7 +6520,7 @@ Multi-line textarea input with Input variants and InputArea-specific dimensions
|
|
|
6187
6520
|
- **Feedback:** Banner, Loader, Toasty
|
|
6188
6521
|
- **Action:** Button, ClipboardText
|
|
6189
6522
|
- **Input:** Checkbox, Combobox, DateRangePicker, Field, Input, Radio, Select, Switch
|
|
6190
|
-
- **Other:** CloudflareLogo, DatePicker, Label, Link, SensitiveInput, Sidebar, Table, DeleteResource
|
|
6523
|
+
- **Other:** CloudflareLogo, DatePicker, Label, Link, SensitiveInput, Sidebar, Table, TableOfContents, DeleteResource
|
|
6191
6524
|
- **Navigation:** CommandPalette, MenuBar, Pagination, Tabs
|
|
6192
6525
|
- **Overlay:** Dialog, DropdownMenu, Popover, Tooltip
|
|
6193
6526
|
- **Layout:** Grid, Surface, PageHeader, ResourceListPage
|