@cloudflare/kumo 1.19.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +248 -0
- package/ai/component-registry.json +764 -131
- package/ai/component-registry.md +1161 -163
- package/ai/schemas.ts +42 -14
- package/dist/.build-complete +1 -1
- package/dist/ai/schemas.d.ts +153 -21
- package/dist/ai/schemas.d.ts.map +1 -1
- package/dist/ai/schemas.js +1994 -1956
- package/dist/ai/schemas.js.map +1 -1
- package/dist/blocks-source/resource-list/resource-list.tsx +1 -1
- package/dist/chunks/Legend-ibjxhfm9pn2vrb6f.js +430 -0
- package/dist/chunks/Legend-ibjxhfm9pn2vrb6f.js.map +1 -0
- package/dist/chunks/autocomplete-48aq0d244bs2e8zv.js +174 -0
- package/dist/chunks/autocomplete-48aq0d244bs2e8zv.js.map +1 -0
- package/dist/chunks/{breadcrumbs-ge20hcb3o5spswrk.js → breadcrumbs-cxcwf2l1ki3ffg5d.js} +2 -2
- package/dist/chunks/{breadcrumbs-ge20hcb3o5spswrk.js.map → breadcrumbs-cxcwf2l1ki3ffg5d.js.map} +1 -1
- package/dist/chunks/{button-oaqi7ykdisyskoos.js → button-6by9ntsa3nj553mq.js} +23 -24
- package/dist/chunks/button-6by9ntsa3nj553mq.js.map +1 -0
- package/dist/chunks/checkbox-hvxfvhtx1qjo2mww.js +210 -0
- package/dist/chunks/checkbox-hvxfvhtx1qjo2mww.js.map +1 -0
- package/dist/chunks/{clipboard-text-dxczqon3d27xp6f0.js → clipboard-text-hswydzx3iql369sd.js} +45 -41
- package/dist/chunks/{clipboard-text-dxczqon3d27xp6f0.js.map → clipboard-text-hswydzx3iql369sd.js.map} +1 -1
- package/dist/chunks/{code-cz0w1y5z4h29a9eg.js → code-f9v1ikwhekqw274q.js} +4 -4
- package/dist/chunks/{code-cz0w1y5z4h29a9eg.js.map → code-f9v1ikwhekqw274q.js.map} +1 -1
- package/dist/chunks/collapsible-k8urhi16pg90jvxa.js +71 -0
- package/dist/chunks/collapsible-k8urhi16pg90jvxa.js.map +1 -0
- package/dist/chunks/{combobox-eaowwt1xr4d23gsn.js → combobox-fq36ye0hstote16x.js} +90 -78
- package/dist/chunks/combobox-fq36ye0hstote16x.js.map +1 -0
- package/dist/chunks/{command-palette-maqtbmpfev9mysqd.js → command-palette-md65owxt5hv4rt9r.js} +68 -68
- package/dist/chunks/command-palette-md65owxt5hv4rt9r.js.map +1 -0
- package/dist/chunks/{date-range-picker-j318zxjyqz4o3dak.js → date-range-picker-o8uyril1kogvhoei.js} +11 -11
- package/dist/chunks/{date-range-picker-j318zxjyqz4o3dak.js.map → date-range-picker-o8uyril1kogvhoei.js.map} +1 -1
- package/dist/chunks/{dialog-e3m5bhs7fds26p9y.js → dialog-k3f1fbam6nt96k8x.js} +3 -3
- package/dist/chunks/{dialog-e3m5bhs7fds26p9y.js.map → dialog-k3f1fbam6nt96k8x.js.map} +1 -1
- package/dist/chunks/{dropdown-ewte287db3vyt8t5.js → dropdown-zbax0zowy6m9zhmt.js} +87 -87
- package/dist/chunks/dropdown-zbax0zowy6m9zhmt.js.map +1 -0
- package/dist/chunks/{empty-dr1eckm2z40euns6.js → empty-b82oer7npkhtkx7k.js} +14 -14
- package/dist/chunks/{empty-dr1eckm2z40euns6.js.map → empty-b82oer7npkhtkx7k.js.map} +1 -1
- package/dist/chunks/{field-bo5gmna16odrrb1q.js → field-c0wf94plit2gci59.js} +7 -7
- package/dist/chunks/{field-bo5gmna16odrrb1q.js.map → field-c0wf94plit2gci59.js.map} +1 -1
- package/dist/chunks/{input-area-jkkkjej6luumrqpa.js → input-area-bkyzu6f7gsck479h.js} +4 -4
- package/dist/chunks/{input-area-jkkkjej6luumrqpa.js.map → input-area-bkyzu6f7gsck479h.js.map} +1 -1
- package/dist/chunks/input-group-bidweffa0zyg8gt0.js +505 -0
- package/dist/chunks/input-group-bidweffa0zyg8gt0.js.map +1 -0
- package/dist/chunks/{input-cw05pbqdburghkus.js → input-ncfowphv81yq7fyy.js} +44 -44
- package/dist/chunks/input-ncfowphv81yq7fyy.js.map +1 -0
- package/dist/chunks/{label-cvyvbqmt4mt757ff.js → label-c3h9i3y4wiccelt7.js} +22 -22
- package/dist/chunks/{label-cvyvbqmt4mt757ff.js.map → label-c3h9i3y4wiccelt7.js.map} +1 -1
- package/dist/chunks/{layer-card-ljqth3yxgnk04v2o.js → layer-card-ikm31xemd70w3lru.js} +5 -5
- package/dist/chunks/{layer-card-ljqth3yxgnk04v2o.js.map → layer-card-ikm31xemd70w3lru.js.map} +1 -1
- package/dist/chunks/{link-fjnhtxvfe5ieamjf.js → link-kt74pxkud4olmcer.js} +4 -4
- package/dist/chunks/{link-fjnhtxvfe5ieamjf.js.map → link-kt74pxkud4olmcer.js.map} +1 -1
- package/dist/chunks/menubar-hwev159bm4rw9ixk.js +96 -0
- package/dist/chunks/menubar-hwev159bm4rw9ixk.js.map +1 -0
- package/dist/chunks/{meter-duj3micor1lqj3y2.js → meter-n34a7yb8c3rim26i.js} +3 -3
- package/dist/chunks/{meter-duj3micor1lqj3y2.js.map → meter-n34a7yb8c3rim26i.js.map} +1 -1
- package/dist/chunks/{pagination-olaypvwr8swsmn8m.js → pagination-jb3mncivbwsoi1se.js} +56 -56
- package/dist/chunks/pagination-jb3mncivbwsoi1se.js.map +1 -0
- package/dist/chunks/{popover-nv9cmzbo7mf6bky0.js → popover-iayd9ya5yhujz6ve.js} +5 -5
- package/dist/chunks/{popover-nv9cmzbo7mf6bky0.js.map → popover-iayd9ya5yhujz6ve.js.map} +1 -1
- package/dist/chunks/{radio-ihxbe37us2jnqtzf.js → radio-datzh3pilz8ojak1.js} +86 -74
- package/dist/chunks/radio-datzh3pilz8ojak1.js.map +1 -0
- package/dist/chunks/{select-nx6ded5swra74iar.js → select-g261chvosodu22i8.js} +64 -62
- package/dist/chunks/select-g261chvosodu22i8.js.map +1 -0
- package/dist/chunks/{sensitive-input-00fujb510rrn61v9.js → sensitive-input-cijagk551mesdtk4.js} +42 -42
- package/dist/chunks/sensitive-input-cijagk551mesdtk4.js.map +1 -0
- package/dist/chunks/{sidebar-ltbfius1eolkl8tb.js → sidebar-kb9kykqfgy5yzqwr.js} +132 -129
- package/dist/chunks/sidebar-kb9kykqfgy5yzqwr.js.map +1 -0
- package/dist/chunks/{surface-dfgurg5eu3et4vw1.js → surface-k0e8mq1x00b7i8r6.js} +2 -2
- package/dist/chunks/{surface-dfgurg5eu3et4vw1.js.map → surface-k0e8mq1x00b7i8r6.js.map} +1 -1
- package/dist/chunks/{switch-fbv3iawqo3o3jgap.js → switch-jdfsr3j3oa1qxegw.js} +86 -78
- package/dist/chunks/switch-jdfsr3j3oa1qxegw.js.map +1 -0
- package/dist/chunks/{table-olwwulga2l3hdwlx.js → table-iudje0lva0z68jto.js} +89 -71
- package/dist/chunks/table-iudje0lva0z68jto.js.map +1 -0
- package/dist/chunks/table-of-contents-fzyv7uhnnyr13dqu.js +102 -0
- package/dist/chunks/table-of-contents-fzyv7uhnnyr13dqu.js.map +1 -0
- package/dist/chunks/{tabs-lohcglgppp6gj0hp.js → tabs-mkhf1uemgr3ij0ps.js} +20 -20
- package/dist/chunks/{tabs-lohcglgppp6gj0hp.js.map → tabs-mkhf1uemgr3ij0ps.js.map} +1 -1
- package/dist/chunks/{text-nmyi1rkwdj37f30f.js → text-f7t467waymhb30sx.js} +8 -8
- package/dist/chunks/text-f7t467waymhb30sx.js.map +1 -0
- package/dist/chunks/{toast-dg52x89yd231mxhe.js → toast-h573o0tc7tefivk2.js} +11 -11
- package/dist/chunks/toast-h573o0tc7tefivk2.js.map +1 -0
- package/dist/chunks/{tooltip-hikjvdbg3xghnq1x.js → tooltip-odudhkxe282wxinq.js} +5 -5
- package/dist/chunks/{tooltip-hikjvdbg3xghnq1x.js.map → tooltip-odudhkxe282wxinq.js.map} +1 -1
- package/dist/chunks/vendor-base-ui-ie71jahf0czyf58j.js +24638 -0
- package/dist/chunks/vendor-base-ui-ie71jahf0czyf58j.js.map +1 -0
- package/dist/chunks/vendor-floating-ui-dwag5e88viikh2zs.js +1311 -0
- package/dist/chunks/vendor-floating-ui-dwag5e88viikh2zs.js.map +1 -0
- package/dist/chunks/vendor-utils-ixnhxmehwihk5tr7.js +534 -0
- package/dist/chunks/vendor-utils-ixnhxmehwihk5tr7.js.map +1 -0
- package/dist/code.js +31 -31
- package/dist/code.js.map +1 -1
- package/dist/components/autocomplete.js +9 -0
- package/dist/components/autocomplete.js.map +1 -0
- 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/code.js +1 -1
- package/dist/components/collapsible.js +1 -1
- package/dist/components/combobox.js +1 -1
- package/dist/components/command-palette.js +1 -1
- package/dist/components/date-range-picker.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/input-group.js +8 -0
- package/dist/components/input-group.js.map +1 -0
- package/dist/components/input.js +9 -7
- 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 +1 -1
- package/dist/components/table.js +1 -1
- package/dist/components/tabs.js +1 -1
- package/dist/components/text.js +1 -1
- package/dist/components/toast.js +2 -2
- package/dist/components/tooltip.js +1 -1
- package/dist/index.js +149 -144
- 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 +2 -2
- 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/otp-field.js +6 -0
- package/dist/primitives/otp-field.js.map +1 -0
- package/dist/primitives/popover.js +1 -1
- package/dist/primitives/preview-card.js +2 -2
- 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 +22 -21
- package/dist/scripts/theme-generator/config.d.ts.map +1 -1
- package/dist/scripts/theme-generator/config.js +21 -4
- package/dist/scripts/theme-generator/config.js.map +1 -1
- package/dist/src/components/autocomplete/autocomplete.d.ts +180 -0
- package/dist/src/components/autocomplete/autocomplete.d.ts.map +1 -0
- package/dist/src/components/autocomplete/index.d.ts +2 -0
- package/dist/src/components/autocomplete/index.d.ts.map +1 -0
- package/dist/src/components/button/button.d.ts +3 -3
- package/dist/src/components/button/button.d.ts.map +1 -1
- package/dist/src/components/chart/Color.d.ts +36 -52
- package/dist/src/components/chart/Color.d.ts.map +1 -1
- package/dist/src/components/checkbox/checkbox.d.ts +37 -14
- package/dist/src/components/checkbox/checkbox.d.ts.map +1 -1
- package/dist/src/components/checkbox/index.d.ts +1 -1
- package/dist/src/components/checkbox/index.d.ts.map +1 -1
- package/dist/src/components/clipboard-text/clipboard-text.d.ts.map +1 -1
- package/dist/src/components/code/code.d.ts +2 -2
- package/dist/src/components/collapsible/collapsible.d.ts +77 -40
- package/dist/src/components/collapsible/collapsible.d.ts.map +1 -1
- package/dist/src/components/collapsible/index.d.ts +1 -1
- package/dist/src/components/collapsible/index.d.ts.map +1 -1
- package/dist/src/components/combobox/combobox.d.ts +3 -1
- package/dist/src/components/combobox/combobox.d.ts.map +1 -1
- package/dist/src/components/command-palette/command-palette.d.ts +2 -11
- package/dist/src/components/command-palette/command-palette.d.ts.map +1 -1
- package/dist/src/components/command-palette/index.d.ts +1 -1
- package/dist/src/components/command-palette/index.d.ts.map +1 -1
- package/dist/src/components/command-palette/types.d.ts +13 -1
- package/dist/src/components/command-palette/types.d.ts.map +1 -1
- package/dist/src/components/input/index.d.ts +16 -1
- package/dist/src/components/input/index.d.ts.map +1 -1
- package/dist/src/components/input/input.d.ts +2 -2
- package/dist/src/components/input/input.d.ts.map +1 -1
- package/dist/src/components/input-group/context.d.ts +96 -0
- package/dist/src/components/input-group/context.d.ts.map +1 -0
- package/dist/src/components/input-group/index.d.ts +2 -0
- package/dist/src/components/input-group/index.d.ts.map +1 -0
- package/dist/src/components/input-group/input-group-addon.d.ts +15 -0
- package/dist/src/components/input-group/input-group-addon.d.ts.map +1 -0
- package/dist/src/components/input-group/input-group-button.d.ts +36 -0
- package/dist/src/components/input-group/input-group-button.d.ts.map +1 -0
- package/dist/src/components/input-group/input-group-input.d.ts +9 -0
- package/dist/src/components/input-group/input-group-input.d.ts.map +1 -0
- package/dist/src/components/input-group/input-group-suffix.d.ts +13 -0
- package/dist/src/components/input-group/input-group-suffix.d.ts.map +1 -0
- package/dist/src/components/input-group/input-group.d.ts +43 -0
- package/dist/src/components/input-group/input-group.d.ts.map +1 -0
- package/dist/src/components/menubar/menubar.d.ts.map +1 -1
- package/dist/src/components/radio/index.d.ts +1 -1
- package/dist/src/components/radio/index.d.ts.map +1 -1
- package/dist/src/components/radio/radio.d.ts +43 -7
- package/dist/src/components/radio/radio.d.ts.map +1 -1
- package/dist/src/components/select/select.d.ts +3 -3
- package/dist/src/components/select/select.d.ts.map +1 -1
- package/dist/src/components/sensitive-input/sensitive-input.d.ts +2 -2
- package/dist/src/components/sidebar/sidebar.d.ts.map +1 -1
- package/dist/src/components/switch/index.d.ts +1 -1
- package/dist/src/components/switch/index.d.ts.map +1 -1
- package/dist/src/components/switch/switch.d.ts +31 -3
- package/dist/src/components/switch/switch.d.ts.map +1 -1
- package/dist/src/components/table/table.d.ts +17 -2
- package/dist/src/components/table/table.d.ts.map +1 -1
- package/dist/src/components/table-of-contents/table-of-contents.d.ts +9 -7
- package/dist/src/components/table-of-contents/table-of-contents.d.ts.map +1 -1
- package/dist/src/components/text/text.d.ts +34 -6
- package/dist/src/components/text/text.d.ts.map +1 -1
- package/dist/src/components/text/text.type-spec.d.ts +44 -0
- package/dist/src/components/text/text.type-spec.d.ts.map +1 -0
- package/dist/src/components/toast/toast.d.ts +2 -2
- package/dist/src/components/toast/toast.d.ts.map +1 -1
- package/dist/src/index.d.ts +8 -6
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/primitives/index.d.ts +1 -0
- package/dist/src/primitives/index.d.ts.map +1 -1
- package/dist/src/primitives/otp-field.d.ts +13 -0
- package/dist/src/primitives/otp-field.d.ts.map +1 -0
- package/dist/styles/kumo-binding.css +18 -0
- package/dist/styles/kumo-standalone.css +1 -1
- package/dist/styles/kumo.css +2 -2
- package/dist/styles/theme-kumo.css +15 -8
- package/package.json +14 -2
- package/scripts/component-registry/discovery.ts +1 -0
- package/scripts/component-registry/index.test.ts +265 -0
- package/scripts/component-registry/index.ts +14 -0
- package/scripts/component-registry/metadata.ts +56 -8
- package/scripts/component-registry/sub-components.ts +81 -50
- package/scripts/component-registry/types.ts +2 -0
- package/scripts/theme-generator/config.ts +19 -9
- package/dist/chunks/Legend-ks7se6149vsa3tze.js +0 -430
- package/dist/chunks/Legend-ks7se6149vsa3tze.js.map +0 -1
- package/dist/chunks/button-oaqi7ykdisyskoos.js.map +0 -1
- package/dist/chunks/checkbox-mwgmohffm22ut13s.js +0 -211
- package/dist/chunks/checkbox-mwgmohffm22ut13s.js.map +0 -1
- package/dist/chunks/collapsible-jhzee3ks51d3xowb.js +0 -58
- package/dist/chunks/collapsible-jhzee3ks51d3xowb.js.map +0 -1
- package/dist/chunks/combobox-eaowwt1xr4d23gsn.js.map +0 -1
- package/dist/chunks/command-palette-maqtbmpfev9mysqd.js.map +0 -1
- package/dist/chunks/dropdown-ewte287db3vyt8t5.js.map +0 -1
- package/dist/chunks/input-cw05pbqdburghkus.js.map +0 -1
- package/dist/chunks/input-group-lfugneuz71g42n0w.js +0 -111
- package/dist/chunks/input-group-lfugneuz71g42n0w.js.map +0 -1
- package/dist/chunks/menubar-e5e4zwfagr0wx023.js +0 -96
- package/dist/chunks/menubar-e5e4zwfagr0wx023.js.map +0 -1
- package/dist/chunks/pagination-olaypvwr8swsmn8m.js.map +0 -1
- package/dist/chunks/radio-ihxbe37us2jnqtzf.js.map +0 -1
- package/dist/chunks/select-nx6ded5swra74iar.js.map +0 -1
- package/dist/chunks/sensitive-input-00fujb510rrn61v9.js.map +0 -1
- package/dist/chunks/sidebar-ltbfius1eolkl8tb.js.map +0 -1
- package/dist/chunks/switch-fbv3iawqo3o3jgap.js.map +0 -1
- package/dist/chunks/table-of-contents-f813ivi7ta23vqdm.js +0 -88
- package/dist/chunks/table-of-contents-f813ivi7ta23vqdm.js.map +0 -1
- package/dist/chunks/table-olwwulga2l3hdwlx.js.map +0 -1
- package/dist/chunks/text-nmyi1rkwdj37f30f.js.map +0 -1
- package/dist/chunks/toast-dg52x89yd231mxhe.js.map +0 -1
- package/dist/chunks/vendor-base-ui-m5pz3e8c4grg5qmj.js +0 -22813
- package/dist/chunks/vendor-base-ui-m5pz3e8c4grg5qmj.js.map +0 -1
- package/dist/chunks/vendor-floating-ui-gr9m6tsa1cpqwn99.js +0 -1286
- package/dist/chunks/vendor-floating-ui-gr9m6tsa1cpqwn99.js.map +0 -1
- package/dist/chunks/vendor-utils-fxk97j6xi1g42z2v.js +0 -740
- package/dist/chunks/vendor-utils-fxk97j6xi1g42z2v.js.map +0 -1
- package/dist/src/components/input/input-group.d.ts +0 -39
- package/dist/src/components/input/input-group.d.ts.map +0 -1
package/ai/component-registry.md
CHANGED
|
@@ -2,6 +2,266 @@
|
|
|
2
2
|
|
|
3
3
|
> Auto-generated component metadata for AI/agent consumption.
|
|
4
4
|
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
### Autocomplete
|
|
8
|
+
|
|
9
|
+
Autocomplete — free-form text input with an optional filtered suggestion list. Unlike Combobox, the input value is not restricted to items in the list. Use Combobox when the selected value must come from the list. Compound component: `Autocomplete` (Root), `.InputGroup`, `.Content`, `.Item`, `.GroupLabel`, `.Group`, `.Separator`, `.List`, `.Collection`. `InputGroup` renders the text input with Input component styling. Pass a `size` prop to `InputGroup` to match the Input component sizes.
|
|
10
|
+
|
|
11
|
+
**Type:** component
|
|
12
|
+
|
|
13
|
+
**Import:** `import { Autocomplete } from "@cloudflare/kumo";`
|
|
14
|
+
|
|
15
|
+
**Category:** Other
|
|
16
|
+
|
|
17
|
+
**Props:**
|
|
18
|
+
|
|
19
|
+
- `items`: unknown[] (required)
|
|
20
|
+
Array of items to display in the dropdown
|
|
21
|
+
- `value`: string | number | string[]
|
|
22
|
+
The controlled input value
|
|
23
|
+
- `open`: boolean
|
|
24
|
+
Whether the popup is open (controlled)
|
|
25
|
+
- `children`: ReactNode
|
|
26
|
+
Autocomplete content (input group, popup content)
|
|
27
|
+
- `className`: string
|
|
28
|
+
Additional CSS classes
|
|
29
|
+
- `label`: ReactNode
|
|
30
|
+
Label content (enables Field wrapper)
|
|
31
|
+
- `required`: boolean
|
|
32
|
+
Whether the field is required
|
|
33
|
+
- `labelTooltip`: ReactNode
|
|
34
|
+
Tooltip content to display next to the label
|
|
35
|
+
- `description`: ReactNode
|
|
36
|
+
Helper text displayed below the field
|
|
37
|
+
- `error`: string | object
|
|
38
|
+
Error message or validation error object
|
|
39
|
+
|
|
40
|
+
**Colors (kumo tokens used):**
|
|
41
|
+
|
|
42
|
+
`bg-kumo-control`, `bg-kumo-line`, `bg-kumo-overlay`, `border-kumo-line`, `ring-kumo-line`, `text-kumo-default`, `text-kumo-strong`
|
|
43
|
+
|
|
44
|
+
**Sub-Components:**
|
|
45
|
+
|
|
46
|
+
This is a compound component. Use these sub-components:
|
|
47
|
+
|
|
48
|
+
#### Autocomplete.InputGroup
|
|
49
|
+
|
|
50
|
+
InputGroup sub-component
|
|
51
|
+
|
|
52
|
+
Props:
|
|
53
|
+
- `className`: string
|
|
54
|
+
- `size`: KumoAutocompleteSize
|
|
55
|
+
- `placeholder`: string
|
|
56
|
+
|
|
57
|
+
#### Autocomplete.Content
|
|
58
|
+
|
|
59
|
+
Content sub-component
|
|
60
|
+
|
|
61
|
+
Props:
|
|
62
|
+
- `children`: ReactNode
|
|
63
|
+
- `className`: string
|
|
64
|
+
- `align`: AutocompleteBase.Positioner.Props["align"]
|
|
65
|
+
- `alignOffset`: AutocompleteBase.Positioner.Props["alignOffset"]
|
|
66
|
+
- `side`: AutocompleteBase.Positioner.Props["side"]
|
|
67
|
+
- `sideOffset`: AutocompleteBase.Positioner.Props["sideOffset"]
|
|
68
|
+
|
|
69
|
+
#### Autocomplete.Item
|
|
70
|
+
|
|
71
|
+
Item sub-component
|
|
72
|
+
|
|
73
|
+
#### Autocomplete.GroupLabel
|
|
74
|
+
|
|
75
|
+
GroupLabel sub-component
|
|
76
|
+
|
|
77
|
+
#### Autocomplete.Group
|
|
78
|
+
|
|
79
|
+
Group sub-component
|
|
80
|
+
|
|
81
|
+
#### Autocomplete.Separator
|
|
82
|
+
|
|
83
|
+
Separator sub-component
|
|
84
|
+
|
|
85
|
+
#### Autocomplete.List
|
|
86
|
+
|
|
87
|
+
List sub-component
|
|
88
|
+
|
|
89
|
+
#### Autocomplete.Empty
|
|
90
|
+
|
|
91
|
+
Empty sub-component (wraps AutocompleteBase)
|
|
92
|
+
|
|
93
|
+
#### Autocomplete.Collection
|
|
94
|
+
|
|
95
|
+
Collection sub-component (wraps AutocompleteBase)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
**Examples:**
|
|
99
|
+
|
|
100
|
+
```tsx
|
|
101
|
+
<Autocomplete items={fruits}>
|
|
102
|
+
<Autocomplete.InputGroup placeholder="Search fruits…" />
|
|
103
|
+
<Autocomplete.Content>
|
|
104
|
+
<Autocomplete.List>
|
|
105
|
+
{(item: string) => (
|
|
106
|
+
<Autocomplete.Item key={item} value={item}>
|
|
107
|
+
{item}
|
|
108
|
+
</Autocomplete.Item>
|
|
109
|
+
)}
|
|
110
|
+
</Autocomplete.List>
|
|
111
|
+
</Autocomplete.Content>
|
|
112
|
+
</Autocomplete>
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
```tsx
|
|
116
|
+
<div className="w-80">
|
|
117
|
+
<Autocomplete
|
|
118
|
+
items={countries}
|
|
119
|
+
label="Country"
|
|
120
|
+
description="Start typing to filter countries"
|
|
121
|
+
filter={(item: Country, query: string) =>
|
|
122
|
+
item.label.toLowerCase().includes(query.toLowerCase())
|
|
123
|
+
}
|
|
124
|
+
>
|
|
125
|
+
<Autocomplete.InputGroup placeholder="Search countries…" />
|
|
126
|
+
<Autocomplete.Content>
|
|
127
|
+
<Autocomplete.List>
|
|
128
|
+
{(item: Country) => (
|
|
129
|
+
<Autocomplete.Item key={item.code} value={item}>
|
|
130
|
+
{item.label}
|
|
131
|
+
</Autocomplete.Item>
|
|
132
|
+
)}
|
|
133
|
+
</Autocomplete.List>
|
|
134
|
+
</Autocomplete.Content>
|
|
135
|
+
</Autocomplete>
|
|
136
|
+
</div>
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
```tsx
|
|
140
|
+
<div className="w-80">
|
|
141
|
+
<Autocomplete
|
|
142
|
+
items={countries}
|
|
143
|
+
label="Country"
|
|
144
|
+
error={{ message: "Please enter a valid country", match: true }}
|
|
145
|
+
filter={(item: Country, query: string) =>
|
|
146
|
+
item.label.toLowerCase().includes(query.toLowerCase())
|
|
147
|
+
}
|
|
148
|
+
>
|
|
149
|
+
<Autocomplete.InputGroup placeholder="Search countries…" />
|
|
150
|
+
<Autocomplete.Content>
|
|
151
|
+
<Autocomplete.List>
|
|
152
|
+
{(item: Country) => (
|
|
153
|
+
<Autocomplete.Item key={item.code} value={item}>
|
|
154
|
+
{item.label}
|
|
155
|
+
</Autocomplete.Item>
|
|
156
|
+
)}
|
|
157
|
+
</Autocomplete.List>
|
|
158
|
+
</Autocomplete.Content>
|
|
159
|
+
</Autocomplete>
|
|
160
|
+
</div>
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
```tsx
|
|
164
|
+
<Autocomplete items={servers}>
|
|
165
|
+
<Autocomplete.InputGroup placeholder="Select region…" />
|
|
166
|
+
<Autocomplete.Content>
|
|
167
|
+
<Autocomplete.List>
|
|
168
|
+
{(group: ServerGroup) => (
|
|
169
|
+
<Autocomplete.Group key={group.value} items={group.items}>
|
|
170
|
+
<Autocomplete.GroupLabel>{group.value}</Autocomplete.GroupLabel>
|
|
171
|
+
<Autocomplete.Collection>
|
|
172
|
+
{(item: ServerLocation) => (
|
|
173
|
+
<Autocomplete.Item key={item.value} value={item}>
|
|
174
|
+
{item.label}
|
|
175
|
+
</Autocomplete.Item>
|
|
176
|
+
)}
|
|
177
|
+
</Autocomplete.Collection>
|
|
178
|
+
</Autocomplete.Group>
|
|
179
|
+
)}
|
|
180
|
+
</Autocomplete.List>
|
|
181
|
+
</Autocomplete.Content>
|
|
182
|
+
</Autocomplete>
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
```tsx
|
|
186
|
+
<div className="flex flex-wrap items-center gap-4">
|
|
187
|
+
<Autocomplete items={fruits.slice(0, 10)}>
|
|
188
|
+
<Autocomplete.InputGroup size="xs" placeholder="xs" />
|
|
189
|
+
<Autocomplete.Content>
|
|
190
|
+
<Autocomplete.List>
|
|
191
|
+
{(item: string) => (
|
|
192
|
+
<Autocomplete.Item key={item} value={item}>
|
|
193
|
+
{item}
|
|
194
|
+
</Autocomplete.Item>
|
|
195
|
+
)}
|
|
196
|
+
</Autocomplete.List>
|
|
197
|
+
</Autocomplete.Content>
|
|
198
|
+
</Autocomplete>
|
|
199
|
+
<Autocomplete items={fruits.slice(0, 10)}>
|
|
200
|
+
<Autocomplete.InputGroup size="sm" placeholder="sm" />
|
|
201
|
+
<Autocomplete.Content>
|
|
202
|
+
<Autocomplete.List>
|
|
203
|
+
{(item: string) => (
|
|
204
|
+
<Autocomplete.Item key={item} value={item}>
|
|
205
|
+
{item}
|
|
206
|
+
</Autocomplete.Item>
|
|
207
|
+
)}
|
|
208
|
+
</Autocomplete.List>
|
|
209
|
+
</Autocomplete.Content>
|
|
210
|
+
</Autocomplete>
|
|
211
|
+
<Autocomplete items={fruits.slice(0, 10)}>
|
|
212
|
+
<Autocomplete.InputGroup size="base" placeholder="base (default)" />
|
|
213
|
+
<Autocomplete.Content>
|
|
214
|
+
<Autocomplete.List>
|
|
215
|
+
{(item: string) => (
|
|
216
|
+
<Autocomplete.Item key={item} value={item}>
|
|
217
|
+
{item}
|
|
218
|
+
</Autocomplete.Item>
|
|
219
|
+
)}
|
|
220
|
+
</Autocomplete.List>
|
|
221
|
+
</Autocomplete.Content>
|
|
222
|
+
</Autocomplete>
|
|
223
|
+
<Autocomplete items={fruits.slice(0, 10)}>
|
|
224
|
+
<Autocomplete.InputGroup size="lg" placeholder="lg" />
|
|
225
|
+
<Autocomplete.Content>
|
|
226
|
+
<Autocomplete.List>
|
|
227
|
+
{(item: string) => (
|
|
228
|
+
<Autocomplete.Item key={item} value={item}>
|
|
229
|
+
{item}
|
|
230
|
+
</Autocomplete.Item>
|
|
231
|
+
)}
|
|
232
|
+
</Autocomplete.List>
|
|
233
|
+
</Autocomplete.Content>
|
|
234
|
+
</Autocomplete>
|
|
235
|
+
</div>
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
```tsx
|
|
239
|
+
<div className="flex flex-col gap-3 w-80">
|
|
240
|
+
<Autocomplete
|
|
241
|
+
items={fruits}
|
|
242
|
+
value={value}
|
|
243
|
+
onValueChange={(v) => setValue(v)}
|
|
244
|
+
>
|
|
245
|
+
<Autocomplete.InputGroup placeholder="Type a fruit…" />
|
|
246
|
+
<Autocomplete.Content>
|
|
247
|
+
<Autocomplete.List>
|
|
248
|
+
{(item: string) => (
|
|
249
|
+
<Autocomplete.Item key={item} value={item}>
|
|
250
|
+
{item}
|
|
251
|
+
</Autocomplete.Item>
|
|
252
|
+
)}
|
|
253
|
+
</Autocomplete.List>
|
|
254
|
+
</Autocomplete.Content>
|
|
255
|
+
</Autocomplete>
|
|
256
|
+
{value && (
|
|
257
|
+
<p className="text-sm text-kumo-subtle">
|
|
258
|
+
Value: <span className="text-kumo-default font-medium">{value}</span>
|
|
259
|
+
</p>
|
|
260
|
+
)}
|
|
261
|
+
</div>
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
|
|
5
265
|
---
|
|
6
266
|
|
|
7
267
|
### Badge
|
|
@@ -353,10 +613,9 @@ Primary action trigger. Supports multiple variants, sizes, shapes, icons, and lo
|
|
|
353
613
|
**State Classes:**
|
|
354
614
|
- `"primary"`:
|
|
355
615
|
- `hover`: `hover:bg-kumo-brand-hover`
|
|
356
|
-
- `focus`: `focus:bg-kumo-brand-hover`
|
|
357
616
|
- `disabled`: `disabled:bg-kumo-brand/50`
|
|
358
617
|
- `"secondary"`:
|
|
359
|
-
- `not-disabled`: `not-disabled:hover:
|
|
618
|
+
- `not-disabled`: `not-disabled:hover:bg-kumo-tint`
|
|
360
619
|
- `disabled`: `disabled:bg-kumo-base/50 disabled:!text-kumo-default/70`
|
|
361
620
|
- `data-state`: `data-[state=open]:bg-kumo-base`
|
|
362
621
|
- `"ghost"`:
|
|
@@ -364,7 +623,7 @@ Primary action trigger. Supports multiple variants, sizes, shapes, icons, and lo
|
|
|
364
623
|
- `"destructive"`:
|
|
365
624
|
- `hover`: `hover:bg-kumo-danger/70`
|
|
366
625
|
- `"secondary-destructive"`:
|
|
367
|
-
- `not-disabled`: `not-disabled:hover:
|
|
626
|
+
- `not-disabled`: `not-disabled:hover:bg-kumo-base`
|
|
368
627
|
- `disabled`: `disabled:bg-kumo-base/50 disabled:!text-kumo-danger/70`
|
|
369
628
|
- `data-state`: `data-[state=open]:bg-kumo-base`
|
|
370
629
|
- `children`: ReactNode
|
|
@@ -383,7 +642,7 @@ Primary action trigger. Supports multiple variants, sizes, shapes, icons, and lo
|
|
|
383
642
|
|
|
384
643
|
**Colors (kumo tokens used):**
|
|
385
644
|
|
|
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`
|
|
645
|
+
`bg-kumo-base`, `bg-kumo-brand`, `bg-kumo-brand-hover`, `bg-kumo-danger`, `bg-kumo-tint`, `ring-kumo-brand`, `ring-kumo-focus`, `ring-kumo-hairline`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-subtle`
|
|
387
646
|
|
|
388
647
|
**Examples:**
|
|
389
648
|
|
|
@@ -479,7 +738,7 @@ Checkbox component
|
|
|
479
738
|
|
|
480
739
|
**State Classes:**
|
|
481
740
|
- `"default"`:
|
|
482
|
-
- `focus`: `[&:focus-within>span]:ring-kumo-
|
|
741
|
+
- `focus`: `[&:focus-within>span]:ring-kumo-focus`
|
|
483
742
|
- `hover`: `[&:hover>span]:ring-kumo-hairline`
|
|
484
743
|
- `label`: ReactNode
|
|
485
744
|
Label content for the checkbox (enables built-in Field wrapper) - can be a string or any React node
|
|
@@ -499,12 +758,10 @@ Checkbox component
|
|
|
499
758
|
Whether the field is required
|
|
500
759
|
- `className`: string
|
|
501
760
|
Additional class name
|
|
502
|
-
- `onValueChange`: (checked: boolean) => void
|
|
503
|
-
Callback when checkbox value changes
|
|
504
761
|
|
|
505
762
|
**Colors (kumo tokens used):**
|
|
506
763
|
|
|
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`
|
|
764
|
+
`bg-kumo-base`, `bg-kumo-contrast`, `ring-kumo-brand`, `ring-kumo-contrast`, `ring-kumo-danger`, `ring-kumo-focus`, `ring-kumo-hairline`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-inverse`, `text-kumo-subtle`
|
|
508
765
|
|
|
509
766
|
**Styling:**
|
|
510
767
|
|
|
@@ -535,7 +792,7 @@ Item sub-component
|
|
|
535
792
|
Group sub-component
|
|
536
793
|
|
|
537
794
|
Props:
|
|
538
|
-
- `legend`: string
|
|
795
|
+
- `legend`: string
|
|
539
796
|
- `children`: ReactNode (required)
|
|
540
797
|
- `error`: string
|
|
541
798
|
- `description`: ReactNode
|
|
@@ -545,6 +802,14 @@ Props:
|
|
|
545
802
|
- `controlFirst`: boolean
|
|
546
803
|
- `className`: string
|
|
547
804
|
|
|
805
|
+
#### Checkbox.Legend
|
|
806
|
+
|
|
807
|
+
Legend sub-component
|
|
808
|
+
|
|
809
|
+
Props:
|
|
810
|
+
- `children`: ReactNode (required)
|
|
811
|
+
- `className`: string
|
|
812
|
+
|
|
548
813
|
|
|
549
814
|
**Examples:**
|
|
550
815
|
|
|
@@ -594,6 +859,17 @@ Props:
|
|
|
594
859
|
</Checkbox.Group>
|
|
595
860
|
```
|
|
596
861
|
|
|
862
|
+
```tsx
|
|
863
|
+
<Checkbox.Group value={preferences} onValueChange={setPreferences}>
|
|
864
|
+
<Checkbox.Legend className="sr-only">
|
|
865
|
+
Notification preferences
|
|
866
|
+
</Checkbox.Legend>
|
|
867
|
+
<Checkbox.Item value="email" label="Email notifications" />
|
|
868
|
+
<Checkbox.Item value="sms" label="SMS notifications" />
|
|
869
|
+
<Checkbox.Item value="push" label="Push notifications" />
|
|
870
|
+
</Checkbox.Group>
|
|
871
|
+
```
|
|
872
|
+
|
|
597
873
|
```tsx
|
|
598
874
|
<Checkbox.Group
|
|
599
875
|
legend="Required preferences"
|
|
@@ -638,7 +914,7 @@ Read-only text field with a one-click copy-to-clipboard button.
|
|
|
638
914
|
|
|
639
915
|
**Colors (kumo tokens used):**
|
|
640
916
|
|
|
641
|
-
`bg-kumo-base`, `border-kumo-
|
|
917
|
+
`bg-kumo-base`, `border-kumo-line`, `outline-kumo-fill`, `ring-kumo-brand`, `ring-kumo-focus`, `text-kumo-default`
|
|
642
918
|
|
|
643
919
|
**Styling:**
|
|
644
920
|
|
|
@@ -1146,12 +1422,12 @@ Code component
|
|
|
1146
1422
|
|
|
1147
1423
|
**Colors (kumo tokens used):**
|
|
1148
1424
|
|
|
1149
|
-
`bg-kumo-base`, `border-kumo-fill`, `text-kumo-
|
|
1425
|
+
`bg-kumo-base`, `border-kumo-fill`, `text-kumo-subtle`
|
|
1150
1426
|
|
|
1151
1427
|
**Styling:**
|
|
1152
1428
|
|
|
1153
1429
|
- **Dimensions:** `[object Object]`
|
|
1154
|
-
- **Base Tokens:** `text-kumo-
|
|
1430
|
+
- **Base Tokens:** `text-kumo-subtle`
|
|
1155
1431
|
|
|
1156
1432
|
**Sub-Components:**
|
|
1157
1433
|
|
|
@@ -1170,7 +1446,7 @@ Props:
|
|
|
1170
1446
|
|
|
1171
1447
|
### Collapsible
|
|
1172
1448
|
|
|
1173
|
-
Collapsible component for showing/hiding content.
|
|
1449
|
+
Collapsible — a composable disclosure component for showing/hiding content. Built on Base UI's Collapsible with full composition support. ## Basic Usage ```tsx const [open, setOpen] = useState(false); <Collapsible.Root open={open} onOpenChange={setOpen}> <Collapsible.Trigger render={<Button variant="ghost" />}> Show details </Collapsible.Trigger> <Collapsible.Panel className="mt-2"> <Text>Hidden content revealed when expanded.</Text> </Collapsible.Panel> </Collapsible.Root> ``` ## With Default Styling Use `DefaultTrigger` and `DefaultPanel` for the classic Kumo style: ```tsx <Collapsible.Root> <Collapsible.DefaultTrigger>Show details</Collapsible.DefaultTrigger> <Collapsible.DefaultPanel> <Text>Content with border-left accent</Text> </Collapsible.DefaultPanel> </Collapsible.Root> ``` ## Controlled Accordion Pattern ```tsx const [activeIndex, setActiveIndex] = useState<number | null>(null); {items.map((item, i) => ( <Collapsible.Root key={i} open={activeIndex === i} onOpenChange={(open) => setActiveIndex(open ? i : null)} > <Collapsible.DefaultTrigger>{item.title}</Collapsible.DefaultTrigger> <Collapsible.DefaultPanel>{item.content}</Collapsible.DefaultPanel> </Collapsible.Root> ))} ```
|
|
1174
1450
|
|
|
1175
1451
|
**Type:** component
|
|
1176
1452
|
|
|
@@ -1180,13 +1456,8 @@ Collapsible component for showing/hiding content. Features: - Animated chevron
|
|
|
1180
1456
|
|
|
1181
1457
|
**Props:**
|
|
1182
1458
|
|
|
1183
|
-
- `children`: ReactNode
|
|
1184
|
-
- `label`: string (required)
|
|
1185
|
-
Text label displayed in the trigger button
|
|
1186
|
-
- `open`: boolean
|
|
1187
|
-
Whether the collapsible content is visible
|
|
1188
1459
|
- `className`: string
|
|
1189
|
-
Additional CSS classes
|
|
1460
|
+
Additional CSS classes
|
|
1190
1461
|
- `onOpenChange`: (open: boolean) => void
|
|
1191
1462
|
Callback when collapsed state changes
|
|
1192
1463
|
|
|
@@ -1194,35 +1465,115 @@ Collapsible component for showing/hiding content. Features: - Animated chevron
|
|
|
1194
1465
|
|
|
1195
1466
|
`border-kumo-fill`, `text-kumo-link`
|
|
1196
1467
|
|
|
1468
|
+
**Sub-Components:**
|
|
1469
|
+
|
|
1470
|
+
This is a compound component. Use these sub-components:
|
|
1471
|
+
|
|
1472
|
+
#### Collapsible.Root
|
|
1473
|
+
|
|
1474
|
+
Root sub-component
|
|
1475
|
+
|
|
1476
|
+
Props:
|
|
1477
|
+
- `className`: string
|
|
1478
|
+
|
|
1479
|
+
#### Collapsible.Trigger
|
|
1480
|
+
|
|
1481
|
+
Trigger sub-component
|
|
1482
|
+
|
|
1483
|
+
Props:
|
|
1484
|
+
- `className`: string
|
|
1485
|
+
|
|
1486
|
+
#### Collapsible.Panel
|
|
1487
|
+
|
|
1488
|
+
Panel sub-component
|
|
1489
|
+
|
|
1490
|
+
Props:
|
|
1491
|
+
- `className`: string
|
|
1492
|
+
|
|
1493
|
+
#### Collapsible.DefaultTrigger
|
|
1494
|
+
|
|
1495
|
+
DefaultTrigger sub-component
|
|
1496
|
+
|
|
1497
|
+
Props:
|
|
1498
|
+
- `children`: ReactNode (required)
|
|
1499
|
+
- `className`: string
|
|
1500
|
+
|
|
1501
|
+
#### Collapsible.DefaultPanel
|
|
1502
|
+
|
|
1503
|
+
DefaultPanel sub-component
|
|
1504
|
+
|
|
1505
|
+
Props:
|
|
1506
|
+
- `children`: ReactNode (required)
|
|
1507
|
+
- `className`: string
|
|
1508
|
+
|
|
1509
|
+
|
|
1197
1510
|
**Examples:**
|
|
1198
1511
|
|
|
1199
1512
|
```tsx
|
|
1200
1513
|
<div className="w-full">
|
|
1201
|
-
<Collapsible
|
|
1202
|
-
|
|
1203
|
-
|
|
1514
|
+
<Collapsible.Root open={isOpen} onOpenChange={setIsOpen}>
|
|
1515
|
+
<Collapsible.DefaultTrigger>What is Kumo?</Collapsible.DefaultTrigger>
|
|
1516
|
+
<Collapsible.DefaultPanel>
|
|
1517
|
+
<Text>Kumo is Cloudflare's new design system.</Text>
|
|
1518
|
+
</Collapsible.DefaultPanel>
|
|
1519
|
+
</Collapsible.Root>
|
|
1204
1520
|
</div>
|
|
1205
1521
|
```
|
|
1206
1522
|
|
|
1207
1523
|
```tsx
|
|
1208
1524
|
<div className="w-full space-y-2">
|
|
1209
|
-
<Collapsible
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1525
|
+
<Collapsible.Root open={open1} onOpenChange={setOpen1}>
|
|
1526
|
+
<Collapsible.DefaultTrigger>What is Kumo?</Collapsible.DefaultTrigger>
|
|
1527
|
+
<Collapsible.DefaultPanel>
|
|
1528
|
+
<Text>Kumo is Cloudflare's new design system.</Text>
|
|
1529
|
+
</Collapsible.DefaultPanel>
|
|
1530
|
+
</Collapsible.Root>
|
|
1531
|
+
<Collapsible.Root open={open2} onOpenChange={setOpen2}>
|
|
1532
|
+
<Collapsible.DefaultTrigger>How do I use it?</Collapsible.DefaultTrigger>
|
|
1533
|
+
<Collapsible.DefaultPanel>
|
|
1534
|
+
<Text>Install the components and import them into your project.</Text>
|
|
1535
|
+
</Collapsible.DefaultPanel>
|
|
1536
|
+
</Collapsible.Root>
|
|
1537
|
+
<Collapsible.Root open={open3} onOpenChange={setOpen3}>
|
|
1538
|
+
<Collapsible.DefaultTrigger>Is it open source?</Collapsible.DefaultTrigger>
|
|
1539
|
+
<Collapsible.DefaultPanel>
|
|
1540
|
+
<Text>Check the repository for license information.</Text>
|
|
1541
|
+
</Collapsible.DefaultPanel>
|
|
1542
|
+
</Collapsible.Root>
|
|
1543
|
+
</div>
|
|
1544
|
+
```
|
|
1545
|
+
|
|
1546
|
+
```tsx
|
|
1547
|
+
<div className="w-full">
|
|
1548
|
+
<Collapsible.Root open={isOpen} onOpenChange={setIsOpen}>
|
|
1549
|
+
<Collapsible.Trigger
|
|
1550
|
+
render={<Button variant="secondary" size="sm" />}
|
|
1551
|
+
>
|
|
1552
|
+
{isOpen ? "Hide details" : "Show details"}
|
|
1553
|
+
</Collapsible.Trigger>
|
|
1554
|
+
<Collapsible.Panel className="mt-3 rounded-lg bg-kumo-tint p-4">
|
|
1555
|
+
<Text>
|
|
1556
|
+
This panel uses custom styling instead of the default border-left accent.
|
|
1557
|
+
</Text>
|
|
1558
|
+
</Collapsible.Panel>
|
|
1559
|
+
</Collapsible.Root>
|
|
1560
|
+
</div>
|
|
1561
|
+
```
|
|
1562
|
+
|
|
1563
|
+
```tsx
|
|
1564
|
+
<div className="w-full space-y-2">
|
|
1565
|
+
{items.map((item, i) => (
|
|
1566
|
+
<Collapsible.Root
|
|
1567
|
+
key={i}
|
|
1568
|
+
open={activeIndex === i}
|
|
1569
|
+
onOpenChange={(open) => setActiveIndex(open ? i : null)}
|
|
1570
|
+
>
|
|
1571
|
+
<Collapsible.DefaultTrigger>{item.title}</Collapsible.DefaultTrigger>
|
|
1572
|
+
<Collapsible.DefaultPanel>
|
|
1573
|
+
<Text>{item.content}</Text>
|
|
1574
|
+
</Collapsible.DefaultPanel>
|
|
1575
|
+
</Collapsible.Root>
|
|
1576
|
+
))}
|
|
1226
1577
|
</div>
|
|
1227
1578
|
```
|
|
1228
1579
|
|
|
@@ -1277,7 +1628,7 @@ Combobox — autocomplete input with filterable dropdown list. Compound compone
|
|
|
1277
1628
|
|
|
1278
1629
|
**Colors (kumo tokens used):**
|
|
1279
1630
|
|
|
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-
|
|
1631
|
+
`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-subtle`
|
|
1281
1632
|
|
|
1282
1633
|
**Sub-Components:**
|
|
1283
1634
|
|
|
@@ -1524,6 +1875,36 @@ Usage:
|
|
|
1524
1875
|
</div>
|
|
1525
1876
|
```
|
|
1526
1877
|
|
|
1878
|
+
```tsx
|
|
1879
|
+
<div className="w-80">
|
|
1880
|
+
<Combobox value={value} onValueChange={setValue} items={items}>
|
|
1881
|
+
<Combobox.TriggerInput placeholder="Select database" />
|
|
1882
|
+
<Combobox.Content>
|
|
1883
|
+
<Combobox.Empty />
|
|
1884
|
+
<Combobox.List>
|
|
1885
|
+
{(item: DatabaseItemWithDisabled) => (
|
|
1886
|
+
<Combobox.Item
|
|
1887
|
+
key={item.value}
|
|
1888
|
+
value={item}
|
|
1889
|
+
disabled={item.disabled}
|
|
1890
|
+
>
|
|
1891
|
+
<span>
|
|
1892
|
+
{item.label}
|
|
1893
|
+
{item.reason && (
|
|
1894
|
+
<Text variant="secondary" size="xs" as="span">
|
|
1895
|
+
{" — "}
|
|
1896
|
+
{item.reason}
|
|
1897
|
+
</Text>
|
|
1898
|
+
)}
|
|
1899
|
+
</span>
|
|
1900
|
+
</Combobox.Item>
|
|
1901
|
+
)}
|
|
1902
|
+
</Combobox.List>
|
|
1903
|
+
</Combobox.Content>
|
|
1904
|
+
</Combobox>
|
|
1905
|
+
</div>
|
|
1906
|
+
```
|
|
1907
|
+
|
|
1527
1908
|
```tsx
|
|
1528
1909
|
<div className="w-80">
|
|
1529
1910
|
<Combobox
|
|
@@ -1656,7 +2037,7 @@ CommandPalette — accessible command palette / spotlight search overlay. Compo
|
|
|
1656
2037
|
|
|
1657
2038
|
**Colors (kumo tokens used):**
|
|
1658
2039
|
|
|
1659
|
-
`bg-kumo-base`, `bg-kumo-elevated`, `bg-kumo-overlay`, `bg-kumo-warning`, `ring-kumo-
|
|
2040
|
+
`bg-kumo-base`, `bg-kumo-elevated`, `bg-kumo-overlay`, `bg-kumo-warning`, `ring-kumo-brand`, `ring-kumo-hairline`, `text-kumo-default`, `text-kumo-subtle`
|
|
1660
2041
|
|
|
1661
2042
|
**Examples:**
|
|
1662
2043
|
|
|
@@ -1823,6 +2204,70 @@ CommandPalette — accessible command palette / spotlight search overlay. Compo
|
|
|
1823
2204
|
</div>
|
|
1824
2205
|
```
|
|
1825
2206
|
|
|
2207
|
+
```tsx
|
|
2208
|
+
<div className="flex flex-col items-start gap-4">
|
|
2209
|
+
<Button onClick={() => setOpen(true)}>
|
|
2210
|
+
Open Palette (No Autocomplete)
|
|
2211
|
+
</Button>
|
|
2212
|
+
|
|
2213
|
+
<CommandPalette.Root
|
|
2214
|
+
open={open}
|
|
2215
|
+
onOpenChange={setOpen}
|
|
2216
|
+
items={filteredGroups}
|
|
2217
|
+
value={search}
|
|
2218
|
+
onValueChange={setSearch}
|
|
2219
|
+
itemToStringValue={(group) => group.label}
|
|
2220
|
+
onSelect={(item) => {
|
|
2221
|
+
console.log("Selected:", item.title);
|
|
2222
|
+
setOpen(false);
|
|
2223
|
+
setSearch("");
|
|
2224
|
+
}}
|
|
2225
|
+
getSelectableItems={getSelectableItems}
|
|
2226
|
+
>
|
|
2227
|
+
<CommandPalette.Input
|
|
2228
|
+
placeholder="Search commands..."
|
|
2229
|
+
autoComplete="off"
|
|
2230
|
+
autoCorrect="off"
|
|
2231
|
+
autoCapitalize="none"
|
|
2232
|
+
spellCheck={false}
|
|
2233
|
+
data-1p-ignore="true"
|
|
2234
|
+
data-lpignore="true"
|
|
2235
|
+
/>
|
|
2236
|
+
<CommandPalette.List>
|
|
2237
|
+
<CommandPalette.Results>
|
|
2238
|
+
{(group: CommandGroup) => (
|
|
2239
|
+
<CommandPalette.Group key={group.id} items={group.items}>
|
|
2240
|
+
<CommandPalette.GroupLabel>
|
|
2241
|
+
{group.label}
|
|
2242
|
+
</CommandPalette.GroupLabel>
|
|
2243
|
+
<CommandPalette.Items>
|
|
2244
|
+
{(item: CommandItem) => (
|
|
2245
|
+
<CommandPalette.Item
|
|
2246
|
+
key={item.id}
|
|
2247
|
+
value={item}
|
|
2248
|
+
onClick={() => {
|
|
2249
|
+
setOpen(false);
|
|
2250
|
+
setSearch("");
|
|
2251
|
+
}}
|
|
2252
|
+
>
|
|
2253
|
+
<span className="flex items-center gap-3">
|
|
2254
|
+
{item.icon && (
|
|
2255
|
+
<span className="text-kumo-subtle">{item.icon}</span>
|
|
2256
|
+
)}
|
|
2257
|
+
<span>{item.title}</span>
|
|
2258
|
+
</span>
|
|
2259
|
+
</CommandPalette.Item>
|
|
2260
|
+
)}
|
|
2261
|
+
</CommandPalette.Items>
|
|
2262
|
+
</CommandPalette.Group>
|
|
2263
|
+
)}
|
|
2264
|
+
</CommandPalette.Results>
|
|
2265
|
+
<CommandPalette.Empty>No commands found</CommandPalette.Empty>
|
|
2266
|
+
</CommandPalette.List>
|
|
2267
|
+
</CommandPalette.Root>
|
|
2268
|
+
</div>
|
|
2269
|
+
```
|
|
2270
|
+
|
|
1826
2271
|
```tsx
|
|
1827
2272
|
<div>
|
|
1828
2273
|
<Button onClick={() => setOpen(true)}>Open with ResultItem</Button>
|
|
@@ -2013,7 +2458,7 @@ DatePicker — a date selection calendar. Built on [react-day-picker](https://d
|
|
|
2013
2458
|
className={`rounded-md px-3 py-1.5 text-left whitespace-nowrap ${
|
|
2014
2459
|
isActive
|
|
2015
2460
|
? "bg-kumo-bg-inverse text-kumo-text-inverse"
|
|
2016
|
-
: "text-kumo-
|
|
2461
|
+
: "text-kumo-subtle hover:bg-kumo-control"
|
|
2017
2462
|
}`}
|
|
2018
2463
|
>
|
|
2019
2464
|
{preset.label}
|
|
@@ -2085,7 +2530,7 @@ DateRangePicker — dual-calendar date range selector. Renders two side-by-side
|
|
|
2085
2530
|
|
|
2086
2531
|
**Colors (kumo tokens used):**
|
|
2087
2532
|
|
|
2088
|
-
`bg-kumo-base`, `bg-kumo-contrast`, `bg-kumo-fill`, `bg-kumo-interact`, `bg-kumo-overlay`, `
|
|
2533
|
+
`bg-kumo-base`, `bg-kumo-contrast`, `bg-kumo-fill`, `bg-kumo-interact`, `bg-kumo-overlay`, `ring-kumo-focus`, `text-kumo-default`, `text-kumo-inverse`, `text-kumo-subtle`
|
|
2089
2534
|
|
|
2090
2535
|
**Styling:**
|
|
2091
2536
|
|
|
@@ -2465,7 +2910,7 @@ DropdownMenu — accessible dropdown menu anchored to a trigger. Compound compo
|
|
|
2465
2910
|
|
|
2466
2911
|
**Colors (kumo tokens used):**
|
|
2467
2912
|
|
|
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`
|
|
2913
|
+
`bg-kumo-control`, `bg-kumo-danger`, `bg-kumo-hairline`, `bg-kumo-overlay`, `bg-kumo-tint`, `ring-kumo-brand`, `ring-kumo-focus`, `ring-kumo-line`, `text-kumo-danger`, `text-kumo-default`
|
|
2469
2914
|
|
|
2470
2915
|
**Sub-Components:**
|
|
2471
2916
|
|
|
@@ -2569,7 +3014,7 @@ Placeholder shown when a list, table, or page has no content to display.
|
|
|
2569
3014
|
|
|
2570
3015
|
**Colors (kumo tokens used):**
|
|
2571
3016
|
|
|
2572
|
-
`bg-kumo-control`, `bg-kumo-overlay`, `border-kumo-fill`, `border-kumo-interact`, `text-kumo-brand`, `text-kumo-default`, `text-kumo-inactive`, `text-kumo-
|
|
3017
|
+
`bg-kumo-control`, `bg-kumo-overlay`, `border-kumo-fill`, `border-kumo-interact`, `text-kumo-brand`, `text-kumo-default`, `text-kumo-inactive`, `text-kumo-subtle`, `text-kumo-success`
|
|
2573
3018
|
|
|
2574
3019
|
**Examples:**
|
|
2575
3020
|
|
|
@@ -3010,121 +3455,481 @@ Input component
|
|
|
3010
3455
|
- `"default"`: Default input appearance
|
|
3011
3456
|
- `"error"`: Error state for validation failures
|
|
3012
3457
|
|
|
3013
|
-
**State Classes:**
|
|
3014
|
-
- `"default"`:
|
|
3015
|
-
- `focus`: `focus:ring-kumo-
|
|
3016
|
-
- `"error"`:
|
|
3017
|
-
- `focus`: `focus:ring-kumo-danger`
|
|
3458
|
+
**State Classes:**
|
|
3459
|
+
- `"default"`:
|
|
3460
|
+
- `focus`: `focus:ring-kumo-focus/50 focus:ring-[1.5px]`
|
|
3461
|
+
- `"error"`:
|
|
3462
|
+
- `focus`: `focus:ring-kumo-danger/50 focus:ring-[1.5px]`
|
|
3463
|
+
|
|
3464
|
+
**Colors (kumo tokens used):**
|
|
3465
|
+
|
|
3466
|
+
`bg-kumo-control`, `ring-kumo-danger`, `ring-kumo-focus`, `ring-kumo-line`, `text-kumo-default`
|
|
3467
|
+
|
|
3468
|
+
**Styling:**
|
|
3469
|
+
|
|
3470
|
+
- **Dimensions:** `[object Object]`
|
|
3471
|
+
|
|
3472
|
+
**Examples:**
|
|
3473
|
+
|
|
3474
|
+
```tsx
|
|
3475
|
+
<Input
|
|
3476
|
+
label="Email"
|
|
3477
|
+
placeholder="you@example.com"
|
|
3478
|
+
description="We'll never share your email"
|
|
3479
|
+
/>
|
|
3480
|
+
```
|
|
3481
|
+
|
|
3482
|
+
```tsx
|
|
3483
|
+
<Input
|
|
3484
|
+
label="Email"
|
|
3485
|
+
placeholder="you@example.com"
|
|
3486
|
+
value="invalid-email"
|
|
3487
|
+
error="Please enter a valid email address"
|
|
3488
|
+
/>
|
|
3489
|
+
```
|
|
3490
|
+
|
|
3491
|
+
```tsx
|
|
3492
|
+
<Input
|
|
3493
|
+
label="Password"
|
|
3494
|
+
type="password"
|
|
3495
|
+
value="short"
|
|
3496
|
+
error={{
|
|
3497
|
+
message: "Password must be at least 8 characters",
|
|
3498
|
+
match: "tooShort",
|
|
3499
|
+
}}
|
|
3500
|
+
minLength={8}
|
|
3501
|
+
/>
|
|
3502
|
+
```
|
|
3503
|
+
|
|
3504
|
+
```tsx
|
|
3505
|
+
<div className="flex flex-col gap-4">
|
|
3506
|
+
<Input size="xs" label="Extra Small" placeholder="Extra small input" />
|
|
3507
|
+
<Input size="sm" label="Small" placeholder="Small input" />
|
|
3508
|
+
<Input label="Base" placeholder="Base input (default)" />
|
|
3509
|
+
<Input size="lg" label="Large" placeholder="Large input" />
|
|
3510
|
+
</div>
|
|
3511
|
+
```
|
|
3512
|
+
|
|
3513
|
+
```tsx
|
|
3514
|
+
<Input label="Disabled field" placeholder="Cannot edit" disabled />
|
|
3515
|
+
```
|
|
3516
|
+
|
|
3517
|
+
```tsx
|
|
3518
|
+
<div className="flex flex-col gap-4">
|
|
3519
|
+
<Input type="email" label="Email" placeholder="you@example.com" />
|
|
3520
|
+
<Input type="password" label="Password" placeholder="••••••••" />
|
|
3521
|
+
<Input type="number" label="Age" placeholder="18" />
|
|
3522
|
+
<Input type="tel" label="Phone" placeholder="+1 (555) 000-0000" />
|
|
3523
|
+
</div>
|
|
3524
|
+
```
|
|
3525
|
+
|
|
3526
|
+
```tsx
|
|
3527
|
+
<Input
|
|
3528
|
+
label="Phone Number"
|
|
3529
|
+
required={false}
|
|
3530
|
+
placeholder="+1 (555) 000-0000"
|
|
3531
|
+
/>
|
|
3532
|
+
```
|
|
3533
|
+
|
|
3534
|
+
```tsx
|
|
3535
|
+
<Input
|
|
3536
|
+
label="API Key"
|
|
3537
|
+
labelTooltip="Find this in your dashboard under Settings > API Keys"
|
|
3538
|
+
placeholder="sk_live_..."
|
|
3539
|
+
/>
|
|
3540
|
+
```
|
|
3541
|
+
|
|
3542
|
+
```tsx
|
|
3543
|
+
<Input
|
|
3544
|
+
label={
|
|
3545
|
+
<span>
|
|
3546
|
+
Email for <strong>billing</strong>
|
|
3547
|
+
</span>
|
|
3548
|
+
}
|
|
3549
|
+
required
|
|
3550
|
+
placeholder="billing@company.com"
|
|
3551
|
+
type="email"
|
|
3552
|
+
/>
|
|
3553
|
+
```
|
|
3554
|
+
|
|
3555
|
+
```tsx
|
|
3556
|
+
<Input
|
|
3557
|
+
label="With onChange"
|
|
3558
|
+
placeholder="Type something..."
|
|
3559
|
+
description={value ? `Value: ${value}` : "Uses e.target.value"}
|
|
3560
|
+
value={value}
|
|
3561
|
+
onChange={(e) => setValue(e.target.value)}
|
|
3562
|
+
/>
|
|
3563
|
+
```
|
|
3564
|
+
|
|
3565
|
+
```tsx
|
|
3566
|
+
<Input
|
|
3567
|
+
label="With onValueChange"
|
|
3568
|
+
placeholder="Type something..."
|
|
3569
|
+
description={value ? `Value: ${value}` : "Receives the value directly"}
|
|
3570
|
+
value={value}
|
|
3571
|
+
onValueChange={(v) => setValue(v)}
|
|
3572
|
+
/>
|
|
3573
|
+
```
|
|
3574
|
+
|
|
3575
|
+
|
|
3576
|
+
---
|
|
3577
|
+
|
|
3578
|
+
### InputGroup
|
|
3579
|
+
|
|
3580
|
+
InputGroup component
|
|
3581
|
+
|
|
3582
|
+
**Type:** component
|
|
3583
|
+
|
|
3584
|
+
**Import:** `import { InputGroup } from "@cloudflare/kumo";`
|
|
3585
|
+
|
|
3586
|
+
**Category:** Input
|
|
3587
|
+
|
|
3588
|
+
**Props:**
|
|
3589
|
+
|
|
3590
|
+
- `label`: ReactNode
|
|
3591
|
+
The label content — can be a string or any React node.
|
|
3592
|
+
- `description`: ReactNode
|
|
3593
|
+
Helper text displayed below the control (hidden when `error` is present).
|
|
3594
|
+
- `error`: object
|
|
3595
|
+
Validation error with a message and a browser `ValidityState` match key.
|
|
3596
|
+
- `required`: boolean
|
|
3597
|
+
When explicitly `false`, shows gray "(optional)" text after the label. When `true` or `undefined`, no indicator is shown.
|
|
3598
|
+
- `labelTooltip`: ReactNode
|
|
3599
|
+
Tooltip content displayed next to the label via an info icon.
|
|
3600
|
+
- `children`: ReactNode
|
|
3601
|
+
- `className`: string
|
|
3602
|
+
- `id`: string
|
|
3603
|
+
- `lang`: string
|
|
3604
|
+
- `title`: string
|
|
3605
|
+
- `size`: enum [default: base]
|
|
3606
|
+
- `"xs"`: Extra small size.
|
|
3607
|
+
- `"sm"`: Small size.
|
|
3608
|
+
- `"base"`: Default size.
|
|
3609
|
+
- `"lg"`: Large size.
|
|
3610
|
+
- `disabled`: boolean
|
|
3611
|
+
|
|
3612
|
+
**Colors (kumo tokens used):**
|
|
3613
|
+
|
|
3614
|
+
`border-kumo-line`, `ring-kumo-danger`, `ring-kumo-focus`, `ring-kumo-line`
|
|
3615
|
+
|
|
3616
|
+
**Sub-Components:**
|
|
3617
|
+
|
|
3618
|
+
This is a compound component. Use these sub-components:
|
|
3619
|
+
|
|
3620
|
+
#### InputGroup.Input
|
|
3621
|
+
|
|
3622
|
+
Input sub-component
|
|
3623
|
+
|
|
3624
|
+
#### InputGroup.Button
|
|
3625
|
+
|
|
3626
|
+
Button sub-component
|
|
3627
|
+
|
|
3628
|
+
Props:
|
|
3629
|
+
- `tooltip`: ReactNode - When provided, wraps the button in a Tooltip. Automatically sets aria-label from a string value.
|
|
3630
|
+
- `tooltipSide`: "top" | "right" | "bottom" | "left" [default: "bottom"] - Preferred side for the tooltip popup.
|
|
3631
|
+
- `variant`: "primary" | "secondary" | "ghost" | "destructive" | "secondary-destructive" | "outline" [default: "ghost"] - Button visual style. Defaults to ghost.
|
|
3632
|
+
- `size`: "xs" | "sm" | "base" | "lg" [default: "sm"] - Button size.
|
|
3633
|
+
|
|
3634
|
+
#### InputGroup.Addon
|
|
3018
3635
|
|
|
3019
|
-
|
|
3636
|
+
Addon sub-component
|
|
3020
3637
|
|
|
3021
|
-
|
|
3638
|
+
Props:
|
|
3639
|
+
- `align`: "start" | "end" [default: "start"] - Position relative to the input.
|
|
3640
|
+
- `className`: string - Additional CSS classes.
|
|
3022
3641
|
|
|
3023
|
-
|
|
3642
|
+
#### InputGroup.Suffix
|
|
3024
3643
|
|
|
3025
|
-
-
|
|
3644
|
+
Suffix sub-component
|
|
3026
3645
|
|
|
3027
|
-
|
|
3646
|
+
Props:
|
|
3647
|
+
- `className`: string - Additional CSS classes.
|
|
3028
3648
|
|
|
3029
|
-
|
|
3030
|
-
|
|
3031
|
-
|
|
3032
|
-
|
|
3033
|
-
|
|
3034
|
-
|
|
3035
|
-
|
|
3649
|
+
#### InputGroup.Label
|
|
3650
|
+
|
|
3651
|
+
Label sub-component
|
|
3652
|
+
|
|
3653
|
+
#### InputGroup.Description
|
|
3654
|
+
|
|
3655
|
+
Description sub-component
|
|
3656
|
+
|
|
3657
|
+
|
|
3658
|
+
**Examples:**
|
|
3036
3659
|
|
|
3037
3660
|
```tsx
|
|
3038
|
-
<
|
|
3039
|
-
|
|
3040
|
-
|
|
3041
|
-
|
|
3042
|
-
|
|
3043
|
-
|
|
3661
|
+
<div className="w-full max-w-2xs">
|
|
3662
|
+
<InputGroup>
|
|
3663
|
+
<InputGroup.Input
|
|
3664
|
+
maxLength={20}
|
|
3665
|
+
onChange={handleChange}
|
|
3666
|
+
value={value}
|
|
3667
|
+
/>
|
|
3668
|
+
<InputGroup.Suffix>.workers.dev</InputGroup.Suffix>
|
|
3669
|
+
{status !== "idle" && (
|
|
3670
|
+
<InputGroup.Addon align="end">
|
|
3671
|
+
{status === "loading" ? (
|
|
3672
|
+
<Loader />
|
|
3673
|
+
) : (
|
|
3674
|
+
<CheckCircleIcon weight="duotone" className="text-kumo-success" />
|
|
3675
|
+
)}
|
|
3676
|
+
</InputGroup.Addon>
|
|
3677
|
+
)}
|
|
3678
|
+
</InputGroup>
|
|
3679
|
+
</div>
|
|
3044
3680
|
```
|
|
3045
3681
|
|
|
3046
3682
|
```tsx
|
|
3047
|
-
<
|
|
3048
|
-
|
|
3049
|
-
|
|
3050
|
-
|
|
3051
|
-
|
|
3052
|
-
|
|
3053
|
-
match: "tooShort",
|
|
3054
|
-
}}
|
|
3055
|
-
minLength={8}
|
|
3056
|
-
/>
|
|
3683
|
+
<InputGroup className="w-full max-w-3xs">
|
|
3684
|
+
<InputGroup.Addon>
|
|
3685
|
+
<LinkIcon />
|
|
3686
|
+
</InputGroup.Addon>
|
|
3687
|
+
<InputGroup.Input placeholder="Paste a link..." aria-label="Link" />
|
|
3688
|
+
</InputGroup>
|
|
3057
3689
|
```
|
|
3058
3690
|
|
|
3059
3691
|
```tsx
|
|
3060
3692
|
<div className="flex flex-col gap-4">
|
|
3061
|
-
<
|
|
3062
|
-
|
|
3063
|
-
|
|
3064
|
-
|
|
3693
|
+
<InputGroup className="w-full max-w-3xs">
|
|
3694
|
+
<InputGroup.Addon>@</InputGroup.Addon>
|
|
3695
|
+
<InputGroup.Input placeholder="username" aria-label="Username" />
|
|
3696
|
+
</InputGroup>
|
|
3697
|
+
|
|
3698
|
+
<InputGroup className="w-full max-w-3xs">
|
|
3699
|
+
<InputGroup.Input placeholder="email" aria-label="Email" />
|
|
3700
|
+
<InputGroup.Addon align="end">@example.com</InputGroup.Addon>
|
|
3701
|
+
</InputGroup>
|
|
3702
|
+
|
|
3703
|
+
<InputGroup className="w-full max-w-3xs">
|
|
3704
|
+
<InputGroup.Addon>/api/</InputGroup.Addon>
|
|
3705
|
+
<InputGroup.Input placeholder="endpoint" aria-label="API path" />
|
|
3706
|
+
<InputGroup.Addon align="end">.json</InputGroup.Addon>
|
|
3707
|
+
</InputGroup>
|
|
3065
3708
|
</div>
|
|
3066
3709
|
```
|
|
3067
3710
|
|
|
3068
3711
|
```tsx
|
|
3069
|
-
<
|
|
3712
|
+
<div className="flex flex-col gap-4">
|
|
3713
|
+
<InputGroup className="w-full max-w-3xs">
|
|
3714
|
+
<InputGroup.Input
|
|
3715
|
+
type={show ? "text" : "password"}
|
|
3716
|
+
defaultValue="password"
|
|
3717
|
+
aria-label="Password"
|
|
3718
|
+
/>
|
|
3719
|
+
<InputGroup.Addon align="end">
|
|
3720
|
+
<InputGroup.Button
|
|
3721
|
+
className="text-kumo-subtle"
|
|
3722
|
+
icon={show ? EyeSlashIcon : EyeIcon}
|
|
3723
|
+
aria-label={show ? "Hide password" : "Show password"}
|
|
3724
|
+
onClick={() => setShow(!show)}
|
|
3725
|
+
/>
|
|
3726
|
+
</InputGroup.Addon>
|
|
3727
|
+
</InputGroup>
|
|
3728
|
+
|
|
3729
|
+
<InputGroup className="w-full max-w-3xs">
|
|
3730
|
+
<InputGroup.Addon>
|
|
3731
|
+
<MagnifyingGlassIcon />
|
|
3732
|
+
</InputGroup.Addon>
|
|
3733
|
+
<InputGroup.Input
|
|
3734
|
+
value={searchValue}
|
|
3735
|
+
placeholder="Search"
|
|
3736
|
+
aria-label="Search"
|
|
3737
|
+
onChange={(e) => setSearchValue(e.target.value)}
|
|
3738
|
+
/>
|
|
3739
|
+
{searchValue && (
|
|
3740
|
+
<InputGroup.Addon align="end" className="pr-1">
|
|
3741
|
+
<InputGroup.Button
|
|
3742
|
+
aria-label="Clear search"
|
|
3743
|
+
onClick={() => setSearchValue("")}
|
|
3744
|
+
>
|
|
3745
|
+
<XIcon />
|
|
3746
|
+
</InputGroup.Button>
|
|
3747
|
+
</InputGroup.Addon>
|
|
3748
|
+
)}
|
|
3749
|
+
<InputGroup.Button variant="secondary" onClick={() => {}}>
|
|
3750
|
+
Search
|
|
3751
|
+
</InputGroup.Button>
|
|
3752
|
+
</InputGroup>
|
|
3753
|
+
</div>
|
|
3070
3754
|
```
|
|
3071
3755
|
|
|
3072
3756
|
```tsx
|
|
3073
|
-
<
|
|
3074
|
-
<
|
|
3075
|
-
|
|
3076
|
-
|
|
3077
|
-
<Input
|
|
3078
|
-
|
|
3757
|
+
<InputGroup className="w-full max-w-2xs">
|
|
3758
|
+
<InputGroup.Addon>
|
|
3759
|
+
<MagnifyingGlassIcon />
|
|
3760
|
+
</InputGroup.Addon>
|
|
3761
|
+
<InputGroup.Input
|
|
3762
|
+
placeholder="Search with query language..."
|
|
3763
|
+
aria-label="Search"
|
|
3764
|
+
/>
|
|
3765
|
+
<InputGroup.Addon align="end">
|
|
3766
|
+
<InputGroup.Button
|
|
3767
|
+
className="text-kumo-subtle"
|
|
3768
|
+
icon={QuestionIcon}
|
|
3769
|
+
tooltip="Query language help"
|
|
3770
|
+
onClick={() => {}}
|
|
3771
|
+
/>
|
|
3772
|
+
</InputGroup.Addon>
|
|
3773
|
+
</InputGroup>
|
|
3079
3774
|
```
|
|
3080
3775
|
|
|
3081
3776
|
```tsx
|
|
3082
|
-
<
|
|
3083
|
-
|
|
3084
|
-
|
|
3085
|
-
|
|
3086
|
-
|
|
3777
|
+
<InputGroup className="w-full max-w-3xs">
|
|
3778
|
+
<InputGroup.Addon>
|
|
3779
|
+
<MagnifyingGlassIcon />
|
|
3780
|
+
</InputGroup.Addon>
|
|
3781
|
+
<InputGroup.Input placeholder="Search..." aria-label="Search" />
|
|
3782
|
+
<InputGroup.Addon align="end">
|
|
3783
|
+
<kbd className="bg-none! border-none!">⌘K</kbd>
|
|
3784
|
+
</InputGroup.Addon>
|
|
3785
|
+
</InputGroup>
|
|
3087
3786
|
```
|
|
3088
3787
|
|
|
3089
3788
|
```tsx
|
|
3090
|
-
<
|
|
3091
|
-
label="
|
|
3092
|
-
|
|
3093
|
-
|
|
3094
|
-
|
|
3789
|
+
<InputGroup className="w-full max-w-3xs">
|
|
3790
|
+
<InputGroup.Input defaultValue="kumo" aria-label="kumo" />
|
|
3791
|
+
<InputGroup.Addon align="end">
|
|
3792
|
+
<Loader />
|
|
3793
|
+
</InputGroup.Addon>
|
|
3794
|
+
</InputGroup>
|
|
3095
3795
|
```
|
|
3096
3796
|
|
|
3097
3797
|
```tsx
|
|
3098
|
-
<
|
|
3099
|
-
label=
|
|
3100
|
-
<
|
|
3101
|
-
|
|
3102
|
-
|
|
3103
|
-
|
|
3104
|
-
|
|
3105
|
-
|
|
3106
|
-
|
|
3107
|
-
|
|
3798
|
+
<div className="flex w-full max-w-2xs flex-col gap-4">
|
|
3799
|
+
<InputGroup label="Subdomain">
|
|
3800
|
+
<InputGroup.Input
|
|
3801
|
+
aria-label="Subdomain"
|
|
3802
|
+
defaultValue="kumo"
|
|
3803
|
+
maxLength={20}
|
|
3804
|
+
/>
|
|
3805
|
+
<InputGroup.Suffix>.workers.dev</InputGroup.Suffix>
|
|
3806
|
+
<InputGroup.Addon align="end">
|
|
3807
|
+
<CheckCircleIcon weight="duotone" className="text-kumo-success" />
|
|
3808
|
+
</InputGroup.Addon>
|
|
3809
|
+
</InputGroup>
|
|
3810
|
+
|
|
3811
|
+
<InputGroup
|
|
3812
|
+
label="Subdomain"
|
|
3813
|
+
error={{ message: "This subdomain is unavailable", match: true }}
|
|
3814
|
+
>
|
|
3815
|
+
<InputGroup.Input
|
|
3816
|
+
aria-label="Subdomain"
|
|
3817
|
+
defaultValue="kumo"
|
|
3818
|
+
maxLength={20}
|
|
3819
|
+
/>
|
|
3820
|
+
<InputGroup.Suffix>.workers.dev</InputGroup.Suffix>
|
|
3821
|
+
<InputGroup.Addon align="end">
|
|
3822
|
+
<XCircleIcon weight="duotone" className="text-kumo-danger" />
|
|
3823
|
+
</InputGroup.Addon>
|
|
3824
|
+
</InputGroup>
|
|
3825
|
+
</div>
|
|
3108
3826
|
```
|
|
3109
3827
|
|
|
3110
3828
|
```tsx
|
|
3111
|
-
<
|
|
3112
|
-
label="
|
|
3113
|
-
|
|
3114
|
-
|
|
3115
|
-
|
|
3116
|
-
|
|
3117
|
-
|
|
3829
|
+
<div className="flex w-full max-w-3xs flex-col gap-4">
|
|
3830
|
+
<InputGroup size="xs" label="Extra Small">
|
|
3831
|
+
<InputGroup.Addon>
|
|
3832
|
+
<MagnifyingGlassIcon />
|
|
3833
|
+
</InputGroup.Addon>
|
|
3834
|
+
<InputGroup.Input placeholder="Extra small input" />
|
|
3835
|
+
<InputGroup.Addon align="end">
|
|
3836
|
+
<InputGroup.Button
|
|
3837
|
+
className="text-kumo-subtle"
|
|
3838
|
+
icon={QuestionIcon}
|
|
3839
|
+
shape="square"
|
|
3840
|
+
aria-label="Help"
|
|
3841
|
+
/>
|
|
3842
|
+
</InputGroup.Addon>
|
|
3843
|
+
</InputGroup>
|
|
3844
|
+
|
|
3845
|
+
<InputGroup size="sm" label="Small">
|
|
3846
|
+
<InputGroup.Addon>
|
|
3847
|
+
<MagnifyingGlassIcon />
|
|
3848
|
+
</InputGroup.Addon>
|
|
3849
|
+
<InputGroup.Input placeholder="Small input" />
|
|
3850
|
+
<InputGroup.Addon align="end">
|
|
3851
|
+
<InputGroup.Button
|
|
3852
|
+
className="text-kumo-subtle"
|
|
3853
|
+
icon={QuestionIcon}
|
|
3854
|
+
shape="square"
|
|
3855
|
+
aria-label="Help"
|
|
3856
|
+
/>
|
|
3857
|
+
</InputGroup.Addon>
|
|
3858
|
+
</InputGroup>
|
|
3859
|
+
|
|
3860
|
+
<InputGroup label="Base (default)">
|
|
3861
|
+
<InputGroup.Addon>
|
|
3862
|
+
<MagnifyingGlassIcon />
|
|
3863
|
+
</InputGroup.Addon>
|
|
3864
|
+
<InputGroup.Input placeholder="Base input" />
|
|
3865
|
+
<InputGroup.Addon align="end">
|
|
3866
|
+
<InputGroup.Button
|
|
3867
|
+
className="text-kumo-subtle"
|
|
3868
|
+
icon={QuestionIcon}
|
|
3869
|
+
shape="square"
|
|
3870
|
+
aria-label="Help"
|
|
3871
|
+
/>
|
|
3872
|
+
</InputGroup.Addon>
|
|
3873
|
+
</InputGroup>
|
|
3874
|
+
|
|
3875
|
+
<InputGroup size="lg" label="Large">
|
|
3876
|
+
<InputGroup.Addon>
|
|
3877
|
+
<MagnifyingGlassIcon />
|
|
3878
|
+
</InputGroup.Addon>
|
|
3879
|
+
<InputGroup.Input placeholder="Large input" />
|
|
3880
|
+
<InputGroup.Addon align="end">
|
|
3881
|
+
<InputGroup.Button
|
|
3882
|
+
className="text-kumo-subtle"
|
|
3883
|
+
icon={QuestionIcon}
|
|
3884
|
+
shape="square"
|
|
3885
|
+
aria-label="Help"
|
|
3886
|
+
/>
|
|
3887
|
+
</InputGroup.Addon>
|
|
3888
|
+
</InputGroup>
|
|
3889
|
+
</div>
|
|
3118
3890
|
```
|
|
3119
3891
|
|
|
3120
3892
|
```tsx
|
|
3121
|
-
<
|
|
3122
|
-
|
|
3123
|
-
|
|
3124
|
-
|
|
3125
|
-
|
|
3126
|
-
|
|
3127
|
-
|
|
3893
|
+
<div className="flex w-full max-w-3xs flex-col gap-4">
|
|
3894
|
+
<InputGroup
|
|
3895
|
+
label="Error State"
|
|
3896
|
+
error={{ message: "Please enter a valid email address", match: true }}
|
|
3897
|
+
>
|
|
3898
|
+
<InputGroup.Input type="email" defaultValue="invalid-email" />
|
|
3899
|
+
<InputGroup.Addon align="end">@example.com</InputGroup.Addon>
|
|
3900
|
+
</InputGroup>
|
|
3901
|
+
|
|
3902
|
+
<InputGroup label="Disabled" disabled>
|
|
3903
|
+
<InputGroup.Addon>
|
|
3904
|
+
<MagnifyingGlassIcon />
|
|
3905
|
+
</InputGroup.Addon>
|
|
3906
|
+
<InputGroup.Input placeholder="Search..." />
|
|
3907
|
+
</InputGroup>
|
|
3908
|
+
|
|
3909
|
+
<InputGroup label="Optional Field" required={false}>
|
|
3910
|
+
<InputGroup.Addon>$</InputGroup.Addon>
|
|
3911
|
+
<InputGroup.Input placeholder="0.00" />
|
|
3912
|
+
</InputGroup>
|
|
3913
|
+
|
|
3914
|
+
<InputGroup
|
|
3915
|
+
label="With Description"
|
|
3916
|
+
description="Must be at least 8 characters"
|
|
3917
|
+
labelTooltip="Your password is stored securely"
|
|
3918
|
+
>
|
|
3919
|
+
<InputGroup.Input
|
|
3920
|
+
type={show ? "text" : "password"}
|
|
3921
|
+
placeholder="Password"
|
|
3922
|
+
/>
|
|
3923
|
+
<InputGroup.Addon align="end">
|
|
3924
|
+
<InputGroup.Button
|
|
3925
|
+
className="text-kumo-subtle"
|
|
3926
|
+
icon={show ? EyeSlashIcon : EyeIcon}
|
|
3927
|
+
aria-label={show ? "Hide password" : "Show password"}
|
|
3928
|
+
onClick={() => setShow(!show)}
|
|
3929
|
+
/>
|
|
3930
|
+
</InputGroup.Addon>
|
|
3931
|
+
</InputGroup>
|
|
3932
|
+
</div>
|
|
3128
3933
|
```
|
|
3129
3934
|
|
|
3130
3935
|
|
|
@@ -3157,7 +3962,7 @@ Label component for form fields. Provides a standardized way to display labels
|
|
|
3157
3962
|
|
|
3158
3963
|
**Colors (kumo tokens used):**
|
|
3159
3964
|
|
|
3160
|
-
`text-kumo-default`, `text-kumo-
|
|
3965
|
+
`text-kumo-default`, `text-kumo-subtle`
|
|
3161
3966
|
|
|
3162
3967
|
**Examples:**
|
|
3163
3968
|
|
|
@@ -3227,7 +4032,7 @@ LayerCard component
|
|
|
3227
4032
|
**Props:**
|
|
3228
4033
|
|
|
3229
4034
|
- `render`: ReactNode
|
|
3230
|
-
Allows you to replace the component
|
|
4035
|
+
Allows you to replace the component's HTML element with a different tag, or compose it with another component.
|
|
3231
4036
|
|
|
3232
4037
|
Accepts a `ReactElement` or a function that returns the element to render.
|
|
3233
4038
|
- `children`: ReactNode
|
|
@@ -3238,7 +4043,7 @@ Accepts a `ReactElement` or a function that returns the element to render.
|
|
|
3238
4043
|
|
|
3239
4044
|
**Colors (kumo tokens used):**
|
|
3240
4045
|
|
|
3241
|
-
`bg-kumo-base`, `bg-kumo-elevated`, `ring-kumo-fill`, `ring-kumo-hairline`, `ring-kumo-line`, `text-kumo-
|
|
4046
|
+
`bg-kumo-base`, `bg-kumo-elevated`, `ring-kumo-fill`, `ring-kumo-hairline`, `ring-kumo-line`, `text-kumo-subtle`
|
|
3242
4047
|
|
|
3243
4048
|
**Styling:**
|
|
3244
4049
|
|
|
@@ -3338,7 +4143,7 @@ Link component
|
|
|
3338
4143
|
- `type`: string
|
|
3339
4144
|
- `referrerPolicy`: enum
|
|
3340
4145
|
- `render`: ReactNode
|
|
3341
|
-
Allows you to replace the component
|
|
4146
|
+
Allows you to replace the component's HTML element with a different tag, or compose it with another component.
|
|
3342
4147
|
|
|
3343
4148
|
Accepts a `ReactElement` or a function that returns the element to render.
|
|
3344
4149
|
|
|
@@ -3484,7 +4289,7 @@ MenuBar — horizontal icon-button toolbar with keyboard arrow-key navigation.
|
|
|
3484
4289
|
|
|
3485
4290
|
**Colors (kumo tokens used):**
|
|
3486
4291
|
|
|
3487
|
-
`bg-kumo-base`, `bg-kumo-
|
|
4292
|
+
`bg-kumo-base`, `bg-kumo-recessed`, `border-kumo-recessed`, `ring-kumo-brand`, `ring-kumo-focus`, `ring-kumo-line`
|
|
3488
4293
|
|
|
3489
4294
|
**Styling:**
|
|
3490
4295
|
|
|
@@ -3546,7 +4351,7 @@ Progress bar showing a measured value within a known range (e.g. quota usage).
|
|
|
3546
4351
|
|
|
3547
4352
|
**Colors (kumo tokens used):**
|
|
3548
4353
|
|
|
3549
|
-
`bg-kumo-fill`, `text-kumo-default`, `text-kumo-
|
|
4354
|
+
`bg-kumo-fill`, `text-kumo-default`, `text-kumo-subtle`
|
|
3550
4355
|
|
|
3551
4356
|
**Examples:**
|
|
3552
4357
|
|
|
@@ -3610,7 +4415,7 @@ For visible text like "Showing X of Y", use render props on sub-components:
|
|
|
3610
4415
|
|
|
3611
4416
|
**Colors (kumo tokens used):**
|
|
3612
4417
|
|
|
3613
|
-
`border-kumo-hairline`, `ring-kumo-hairline`, `text-kumo-
|
|
4418
|
+
`border-kumo-hairline`, `ring-kumo-hairline`, `text-kumo-subtle`
|
|
3614
4419
|
|
|
3615
4420
|
**Styling:**
|
|
3616
4421
|
|
|
@@ -4059,7 +4864,7 @@ Close sub-component
|
|
|
4059
4864
|
|
|
4060
4865
|
### Radio
|
|
4061
4866
|
|
|
4062
|
-
Radio — radio button group for single-select choices. Compound component: `Radio.Group` (with built-in Fieldset) and `Radio.
|
|
4867
|
+
Radio — radio button group for single-select choices. Compound component: `Radio.Group` (with built-in Fieldset), `Radio.Item`, and `Radio.Legend`. Built on `@base-ui/react/radio-group` + `@base-ui/react/radio`.
|
|
4063
4868
|
|
|
4064
4869
|
**Type:** component
|
|
4065
4870
|
|
|
@@ -4069,10 +4874,10 @@ Radio — radio button group for single-select choices. Compound component: `Ra
|
|
|
4069
4874
|
|
|
4070
4875
|
**Props:**
|
|
4071
4876
|
|
|
4072
|
-
- `legend`: string
|
|
4073
|
-
Legend text for the group (required for accessibility)
|
|
4877
|
+
- `legend`: string
|
|
4878
|
+
Legend text for the group (required for accessibility). For more control over legend styling, omit this prop and use `<Radio.Legend>` as a child instead.
|
|
4074
4879
|
- `children`: ReactNode
|
|
4075
|
-
Child Radio.Item components
|
|
4880
|
+
Child Radio.Item components (and optionally a Radio.Legend)
|
|
4076
4881
|
- `orientation`: enum
|
|
4077
4882
|
Layout direction of the radio items
|
|
4078
4883
|
- `appearance`: enum [default: default]
|
|
@@ -4091,7 +4896,7 @@ Radio — radio button group for single-select choices. Compound component: `Ra
|
|
|
4091
4896
|
- `disabled`: boolean
|
|
4092
4897
|
Whether all radios in the group are disabled
|
|
4093
4898
|
- `controlPosition`: enum
|
|
4094
|
-
Position of radio control relative to label: "start"
|
|
4899
|
+
Position of radio control relative to label: "start" puts radio before label, "end" puts label before radio. Defaults to "start" for default appearance and "end" for card appearance.
|
|
4095
4900
|
- `name`: string
|
|
4096
4901
|
Form submission name for the radio group
|
|
4097
4902
|
- `className`: string
|
|
@@ -4099,7 +4904,7 @@ Radio — radio button group for single-select choices. Compound component: `Ra
|
|
|
4099
4904
|
|
|
4100
4905
|
**Colors (kumo tokens used):**
|
|
4101
4906
|
|
|
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`
|
|
4907
|
+
`bg-kumo-base`, `bg-kumo-contrast`, `bg-kumo-tint`, `border-kumo-danger`, `border-kumo-hairline`, `border-kumo-interact`, `ring-kumo-brand`, `ring-kumo-danger`, `ring-kumo-focus`, `ring-kumo-hairline`, `ring-kumo-line`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-subtle`
|
|
4103
4908
|
|
|
4104
4909
|
**Sub-Components:**
|
|
4105
4910
|
|
|
@@ -4114,7 +4919,7 @@ Item sub-component
|
|
|
4114
4919
|
Group sub-component
|
|
4115
4920
|
|
|
4116
4921
|
Props:
|
|
4117
|
-
- `legend`: string
|
|
4922
|
+
- `legend`: string
|
|
4118
4923
|
- `children`: ReactNode (required)
|
|
4119
4924
|
- `orientation`: "vertical" | "horizontal"
|
|
4120
4925
|
- `appearance`: KumoRadioAppearance
|
|
@@ -4122,12 +4927,19 @@ Props:
|
|
|
4122
4927
|
- `description`: ReactNode
|
|
4123
4928
|
- `value`: string
|
|
4124
4929
|
- `disabled`: boolean
|
|
4125
|
-
- `label`: "start"
|
|
4126
|
-
- `Note`: In card appearance (required)
|
|
4930
|
+
- `label`: "start" puts radio before label (required)
|
|
4127
4931
|
- `controlPosition`: RadioControlPosition
|
|
4128
4932
|
- `name`: string
|
|
4129
4933
|
- `className`: string
|
|
4130
4934
|
|
|
4935
|
+
#### Radio.Legend
|
|
4936
|
+
|
|
4937
|
+
Legend sub-component
|
|
4938
|
+
|
|
4939
|
+
Props:
|
|
4940
|
+
- `children`: ReactNode (required)
|
|
4941
|
+
- `className`: string
|
|
4942
|
+
|
|
4131
4943
|
|
|
4132
4944
|
**Examples:**
|
|
4133
4945
|
|
|
@@ -4283,6 +5095,76 @@ Props:
|
|
|
4283
5095
|
</Radio.Group>
|
|
4284
5096
|
```
|
|
4285
5097
|
|
|
5098
|
+
```tsx
|
|
5099
|
+
<Radio.Group defaultValue="all" value={value} onValueChange={setValue}>
|
|
5100
|
+
<Radio.Legend className="sr-only">Paths</Radio.Legend>
|
|
5101
|
+
<Radio.Item label="Allow all paths" value="all" />
|
|
5102
|
+
<Radio.Item label="Restrict to specific paths" value="specific" />
|
|
5103
|
+
</Radio.Group>
|
|
5104
|
+
```
|
|
5105
|
+
|
|
5106
|
+
```tsx
|
|
5107
|
+
<Radio.Group value={value} onValueChange={setValue}>
|
|
5108
|
+
<Radio.Legend className="text-sm font-normal text-kumo-subtle">
|
|
5109
|
+
Notification preference
|
|
5110
|
+
</Radio.Legend>
|
|
5111
|
+
<Radio.Item label="Email" value="email" />
|
|
5112
|
+
<Radio.Item label="SMS" value="sms" />
|
|
5113
|
+
<Radio.Item label="Push notification" value="push" />
|
|
5114
|
+
</Radio.Group>
|
|
5115
|
+
```
|
|
5116
|
+
|
|
5117
|
+
```tsx
|
|
5118
|
+
<Radio.Group
|
|
5119
|
+
legend="Choose a plan"
|
|
5120
|
+
appearance="card"
|
|
5121
|
+
controlPosition="start"
|
|
5122
|
+
value={value}
|
|
5123
|
+
onValueChange={setValue}
|
|
5124
|
+
>
|
|
5125
|
+
<Radio.Item
|
|
5126
|
+
label="Free"
|
|
5127
|
+
description="For personal or hobby projects that aren't business-critical."
|
|
5128
|
+
value="free"
|
|
5129
|
+
/>
|
|
5130
|
+
<Radio.Item
|
|
5131
|
+
label="Pro"
|
|
5132
|
+
description="For professional websites that aren't business-critical."
|
|
5133
|
+
value="pro"
|
|
5134
|
+
/>
|
|
5135
|
+
</Radio.Group>
|
|
5136
|
+
```
|
|
5137
|
+
|
|
5138
|
+
```tsx
|
|
5139
|
+
<Radio.Group
|
|
5140
|
+
legend="Choose a plan"
|
|
5141
|
+
appearance="card"
|
|
5142
|
+
value={value}
|
|
5143
|
+
onValueChange={setValue}
|
|
5144
|
+
>
|
|
5145
|
+
<Radio.Item
|
|
5146
|
+
label={
|
|
5147
|
+
<span className="flex items-center gap-2">
|
|
5148
|
+
Free
|
|
5149
|
+
<Badge variant="neutral">$0</Badge>
|
|
5150
|
+
</span>
|
|
5151
|
+
}
|
|
5152
|
+
description="For personal or hobby projects."
|
|
5153
|
+
value="free"
|
|
5154
|
+
/>
|
|
5155
|
+
<Radio.Item
|
|
5156
|
+
label={
|
|
5157
|
+
<span className="flex items-center gap-2">
|
|
5158
|
+
Pro
|
|
5159
|
+
<Badge variant="primary">Popular</Badge>
|
|
5160
|
+
</span>
|
|
5161
|
+
}
|
|
5162
|
+
description="For professional websites."
|
|
5163
|
+
value="pro"
|
|
5164
|
+
/>
|
|
5165
|
+
</Radio.Group>
|
|
5166
|
+
```
|
|
5167
|
+
|
|
4286
5168
|
```tsx
|
|
4287
5169
|
<Radio.Group
|
|
4288
5170
|
legend="Choose a plan"
|
|
@@ -4361,7 +5243,7 @@ Select component
|
|
|
4361
5243
|
|
|
4362
5244
|
**Colors (kumo tokens used):**
|
|
4363
5245
|
|
|
4364
|
-
`bg-kumo-base`, `bg-kumo-hairline`, `bg-kumo-tint`, `ring-kumo-
|
|
5246
|
+
`bg-kumo-base`, `bg-kumo-elevated`, `bg-kumo-hairline`, `bg-kumo-tint`, `border-kumo-line`, `ring-kumo-brand`, `ring-kumo-focus`, `ring-kumo-line`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-placeholder`, `text-kumo-subtle`
|
|
4365
5247
|
|
|
4366
5248
|
**Styling:**
|
|
4367
5249
|
|
|
@@ -4746,7 +5628,7 @@ Password/secret input that masks its value by default and reveals on click. Incl
|
|
|
4746
5628
|
|
|
4747
5629
|
**Colors (kumo tokens used):**
|
|
4748
5630
|
|
|
4749
|
-
`bg-kumo-brand`, `bg-kumo-control`, `outline-kumo-
|
|
5631
|
+
`bg-kumo-brand`, `bg-kumo-control`, `outline-kumo-focus`, `ring-kumo-brand`, `ring-kumo-focus`, `text-kumo-default`, `text-kumo-subtle`
|
|
4750
5632
|
|
|
4751
5633
|
**Examples:**
|
|
4752
5634
|
|
|
@@ -4863,7 +5745,7 @@ Sidebar — responsive navigation panel with expand/collapse support. Compound
|
|
|
4863
5745
|
|
|
4864
5746
|
**Colors (kumo tokens used):**
|
|
4865
5747
|
|
|
4866
|
-
`bg-kumo-base`, `bg-kumo-brand`, `bg-kumo-hairline`, `bg-kumo-overlay`, `bg-kumo-recessed`, `bg-kumo-tint`, `border-kumo-hairline`, `ring-kumo-
|
|
5748
|
+
`bg-kumo-base`, `bg-kumo-brand`, `bg-kumo-hairline`, `bg-kumo-overlay`, `bg-kumo-recessed`, `bg-kumo-tint`, `border-kumo-hairline`, `ring-kumo-brand`, `ring-kumo-hairline`, `text-kumo-default`, `text-kumo-subtle`
|
|
4867
5749
|
|
|
4868
5750
|
**Styling:**
|
|
4869
5751
|
|
|
@@ -4893,66 +5775,129 @@ Props:
|
|
|
4893
5775
|
|
|
4894
5776
|
Header sub-component
|
|
4895
5777
|
|
|
5778
|
+
Props:
|
|
5779
|
+
- `collapsible`: boolean
|
|
5780
|
+
- `defaultOpen`: boolean
|
|
5781
|
+
- `open`: boolean
|
|
5782
|
+
|
|
4896
5783
|
#### Sidebar.Content
|
|
4897
5784
|
|
|
4898
5785
|
Content sub-component
|
|
4899
5786
|
|
|
5787
|
+
Props:
|
|
5788
|
+
- `collapsible`: boolean
|
|
5789
|
+
- `defaultOpen`: boolean
|
|
5790
|
+
- `open`: boolean
|
|
5791
|
+
|
|
4900
5792
|
#### Sidebar.Footer
|
|
4901
5793
|
|
|
4902
5794
|
Footer sub-component
|
|
4903
5795
|
|
|
5796
|
+
Props:
|
|
5797
|
+
- `collapsible`: boolean
|
|
5798
|
+
- `defaultOpen`: boolean
|
|
5799
|
+
- `open`: boolean
|
|
5800
|
+
|
|
4904
5801
|
#### Sidebar.Group
|
|
4905
5802
|
|
|
4906
5803
|
Group sub-component
|
|
4907
5804
|
|
|
5805
|
+
Props:
|
|
5806
|
+
- `collapsible`: boolean
|
|
5807
|
+
- `defaultOpen`: boolean
|
|
5808
|
+
- `open`: boolean
|
|
5809
|
+
|
|
4908
5810
|
#### Sidebar.GroupLabel
|
|
4909
5811
|
|
|
4910
5812
|
GroupLabel sub-component
|
|
4911
5813
|
|
|
5814
|
+
Props:
|
|
5815
|
+
- `icon`: React.ComponentType<{ className?: string
|
|
5816
|
+
|
|
4912
5817
|
#### Sidebar.GroupContent
|
|
4913
5818
|
|
|
4914
5819
|
GroupContent sub-component
|
|
4915
5820
|
|
|
5821
|
+
Props:
|
|
5822
|
+
- `icon`: React.ComponentType<{ className?: string
|
|
5823
|
+
|
|
4916
5824
|
#### Sidebar.Menu
|
|
4917
5825
|
|
|
4918
5826
|
Menu sub-component
|
|
4919
5827
|
|
|
5828
|
+
Props:
|
|
5829
|
+
- `icon`: React.ComponentType<{ className?: string
|
|
5830
|
+
|
|
4920
5831
|
#### Sidebar.MenuItem
|
|
4921
5832
|
|
|
4922
5833
|
MenuItem sub-component
|
|
4923
5834
|
|
|
5835
|
+
Props:
|
|
5836
|
+
- `icon`: React.ComponentType<{ className?: string
|
|
5837
|
+
|
|
4924
5838
|
#### Sidebar.MenuButton
|
|
4925
5839
|
|
|
4926
5840
|
MenuButton sub-component
|
|
4927
5841
|
|
|
5842
|
+
Props:
|
|
5843
|
+
- `icon`: React.ComponentType<{ className?: string
|
|
5844
|
+
|
|
4928
5845
|
#### Sidebar.MenuAction
|
|
4929
5846
|
|
|
4930
5847
|
MenuAction sub-component
|
|
4931
5848
|
|
|
5849
|
+
Props:
|
|
5850
|
+
- `active`: boolean
|
|
5851
|
+
- `href`: string
|
|
5852
|
+
|
|
4932
5853
|
#### Sidebar.MenuBadge
|
|
4933
5854
|
|
|
4934
5855
|
MenuBadge sub-component
|
|
4935
5856
|
|
|
5857
|
+
Props:
|
|
5858
|
+
- `active`: boolean
|
|
5859
|
+
- `href`: string
|
|
5860
|
+
|
|
4936
5861
|
#### Sidebar.MenuSub
|
|
4937
5862
|
|
|
4938
5863
|
MenuSub sub-component
|
|
4939
5864
|
|
|
5865
|
+
Props:
|
|
5866
|
+
- `active`: boolean
|
|
5867
|
+
- `href`: string
|
|
5868
|
+
|
|
4940
5869
|
#### Sidebar.MenuSubItem
|
|
4941
5870
|
|
|
4942
5871
|
MenuSubItem sub-component
|
|
4943
5872
|
|
|
5873
|
+
Props:
|
|
5874
|
+
- `active`: boolean
|
|
5875
|
+
- `href`: string
|
|
5876
|
+
|
|
4944
5877
|
#### Sidebar.MenuSubButton
|
|
4945
5878
|
|
|
4946
5879
|
MenuSubButton sub-component
|
|
4947
5880
|
|
|
5881
|
+
Props:
|
|
5882
|
+
- `active`: boolean
|
|
5883
|
+
- `href`: string
|
|
5884
|
+
|
|
4948
5885
|
#### Sidebar.Separator
|
|
4949
5886
|
|
|
4950
5887
|
Separator sub-component
|
|
4951
5888
|
|
|
5889
|
+
Props:
|
|
5890
|
+
- `placeholder`: string
|
|
5891
|
+
- `shortcut`: string
|
|
5892
|
+
|
|
4952
5893
|
#### Sidebar.Input
|
|
4953
5894
|
|
|
4954
5895
|
Input sub-component
|
|
4955
5896
|
|
|
5897
|
+
Props:
|
|
5898
|
+
- `placeholder`: string
|
|
5899
|
+
- `shortcut`: string
|
|
5900
|
+
|
|
4956
5901
|
#### Sidebar.Trigger
|
|
4957
5902
|
|
|
4958
5903
|
Trigger sub-component
|
|
@@ -4969,6 +5914,9 @@ ResizeHandle sub-component
|
|
|
4969
5914
|
|
|
4970
5915
|
MenuChevron sub-component
|
|
4971
5916
|
|
|
5917
|
+
Props:
|
|
5918
|
+
- `className`: string
|
|
5919
|
+
|
|
4972
5920
|
#### Sidebar.Collapsible
|
|
4973
5921
|
|
|
4974
5922
|
Collapsible sub-component
|
|
@@ -5310,7 +6258,7 @@ Surface component
|
|
|
5310
6258
|
|
|
5311
6259
|
- `as`: React.ElementType
|
|
5312
6260
|
- `render`: ReactNode
|
|
5313
|
-
Allows you to replace the component
|
|
6261
|
+
Allows you to replace the component's HTML element with a different tag, or compose it with another component.
|
|
5314
6262
|
|
|
5315
6263
|
Accepts a `ReactElement` or a function that returns the element to render.
|
|
5316
6264
|
- `children`: ReactNode
|
|
@@ -5363,7 +6311,7 @@ Switch component
|
|
|
5363
6311
|
|
|
5364
6312
|
**Colors (kumo tokens used):**
|
|
5365
6313
|
|
|
5366
|
-
`bg-kumo-base`, `
|
|
6314
|
+
`bg-kumo-base`, `ring-kumo-brand`, `ring-kumo-focus`, `ring-kumo-hairline`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-subtle`
|
|
5367
6315
|
|
|
5368
6316
|
**Sub-Components:**
|
|
5369
6317
|
|
|
@@ -5378,7 +6326,7 @@ Item sub-component
|
|
|
5378
6326
|
Group sub-component
|
|
5379
6327
|
|
|
5380
6328
|
Props:
|
|
5381
|
-
- `legend`: string
|
|
6329
|
+
- `legend`: string
|
|
5382
6330
|
- `children`: ReactNode (required)
|
|
5383
6331
|
- `error`: string
|
|
5384
6332
|
- `description`: ReactNode
|
|
@@ -5386,6 +6334,14 @@ Props:
|
|
|
5386
6334
|
- `controlFirst`: boolean
|
|
5387
6335
|
- `className`: string
|
|
5388
6336
|
|
|
6337
|
+
#### Switch.Legend
|
|
6338
|
+
|
|
6339
|
+
Legend sub-component
|
|
6340
|
+
|
|
6341
|
+
Props:
|
|
6342
|
+
- `children`: ReactNode (required)
|
|
6343
|
+
- `className`: string
|
|
6344
|
+
|
|
5389
6345
|
|
|
5390
6346
|
**Examples:**
|
|
5391
6347
|
|
|
@@ -5457,6 +6413,23 @@ Props:
|
|
|
5457
6413
|
/>
|
|
5458
6414
|
```
|
|
5459
6415
|
|
|
6416
|
+
```tsx
|
|
6417
|
+
<Switch.Group legend="Notification settings">
|
|
6418
|
+
<Switch.Item label="Email notifications" />
|
|
6419
|
+
<Switch.Item label="SMS notifications" />
|
|
6420
|
+
<Switch.Item label="Push notifications" />
|
|
6421
|
+
</Switch.Group>
|
|
6422
|
+
```
|
|
6423
|
+
|
|
6424
|
+
```tsx
|
|
6425
|
+
<Switch.Group>
|
|
6426
|
+
<Switch.Legend className="sr-only">Notification settings</Switch.Legend>
|
|
6427
|
+
<Switch.Item label="Email notifications" />
|
|
6428
|
+
<Switch.Item label="SMS notifications" />
|
|
6429
|
+
<Switch.Item label="Push notifications" />
|
|
6430
|
+
</Switch.Group>
|
|
6431
|
+
```
|
|
6432
|
+
|
|
5460
6433
|
```tsx
|
|
5461
6434
|
<div className="flex flex-col gap-4">
|
|
5462
6435
|
<Switch
|
|
@@ -5511,7 +6484,7 @@ Table — semantic HTML table with styled rows, cells, and selection support. C
|
|
|
5511
6484
|
|
|
5512
6485
|
**Colors (kumo tokens used):**
|
|
5513
6486
|
|
|
5514
|
-
`bg-kumo-base`, `bg-kumo-elevated`, `bg-kumo-hairline`, `bg-kumo-tint`, `border-kumo-fill`, `text-kumo-default`, `text-kumo-strong`
|
|
6487
|
+
`bg-kumo-base`, `bg-kumo-elevated`, `bg-kumo-hairline`, `bg-kumo-tint`, `border-kumo-fill`, `ring-kumo-brand`, `text-kumo-default`, `text-kumo-strong`
|
|
5515
6488
|
|
|
5516
6489
|
**Sub-Components:**
|
|
5517
6490
|
|
|
@@ -5589,7 +6562,7 @@ ResizeHandle sub-component
|
|
|
5589
6562
|
indeterminate={
|
|
5590
6563
|
selectedIds.size > 0 && selectedIds.size < rows.length
|
|
5591
6564
|
}
|
|
5592
|
-
|
|
6565
|
+
onCheckedChange={toggleAll}
|
|
5593
6566
|
aria-label="Select all rows"
|
|
5594
6567
|
/>
|
|
5595
6568
|
<Table.Head>Subject</Table.Head>
|
|
@@ -5602,7 +6575,7 @@ ResizeHandle sub-component
|
|
|
5602
6575
|
<Table.Row key={row.id}>
|
|
5603
6576
|
<Table.CheckCell
|
|
5604
6577
|
checked={selectedIds.has(row.id)}
|
|
5605
|
-
|
|
6578
|
+
onCheckedChange={() => toggleRow(row.id)}
|
|
5606
6579
|
aria-label={`Select ${row.subject}`}
|
|
5607
6580
|
/>
|
|
5608
6581
|
<Table.Cell>{row.subject}</Table.Cell>
|
|
@@ -5648,7 +6621,7 @@ ResizeHandle sub-component
|
|
|
5648
6621
|
indeterminate={
|
|
5649
6622
|
selectedIds.size > 0 && selectedIds.size < rows.length
|
|
5650
6623
|
}
|
|
5651
|
-
|
|
6624
|
+
onCheckedChange={toggleAll}
|
|
5652
6625
|
aria-label="Select all rows"
|
|
5653
6626
|
/>
|
|
5654
6627
|
<Table.Head>Subject</Table.Head>
|
|
@@ -5664,7 +6637,7 @@ ResizeHandle sub-component
|
|
|
5664
6637
|
>
|
|
5665
6638
|
<Table.CheckCell
|
|
5666
6639
|
checked={selectedIds.has(row.id)}
|
|
5667
|
-
|
|
6640
|
+
onCheckedChange={() => toggleRow(row.id)}
|
|
5668
6641
|
aria-label={`Select ${row.subject}`}
|
|
5669
6642
|
/>
|
|
5670
6643
|
<Table.Cell>{row.subject}</Table.Cell>
|
|
@@ -5863,7 +6836,7 @@ ResizeHandle sub-component
|
|
|
5863
6836
|
indeterminate={
|
|
5864
6837
|
selectedIds.size > 0 && selectedIds.size < emailData.length
|
|
5865
6838
|
}
|
|
5866
|
-
|
|
6839
|
+
onCheckedChange={toggleAll}
|
|
5867
6840
|
aria-label="Select all rows"
|
|
5868
6841
|
/>
|
|
5869
6842
|
<Table.Head>Subject</Table.Head>
|
|
@@ -5880,7 +6853,7 @@ ResizeHandle sub-component
|
|
|
5880
6853
|
>
|
|
5881
6854
|
<Table.CheckCell
|
|
5882
6855
|
checked={selectedIds.has(row.id)}
|
|
5883
|
-
|
|
6856
|
+
onCheckedChange={() => toggleRow(row.id)}
|
|
5884
6857
|
aria-label={`Select ${row.subject}`}
|
|
5885
6858
|
/>
|
|
5886
6859
|
<Table.Cell>
|
|
@@ -5958,7 +6931,7 @@ TableOfContents — presentational compound component for section navigation. P
|
|
|
5958
6931
|
|
|
5959
6932
|
**Colors (kumo tokens used):**
|
|
5960
6933
|
|
|
5961
|
-
`
|
|
6934
|
+
`border-kumo-brand`, `border-kumo-hairline`, `border-kumo-line`, `text-kumo-default`, `text-kumo-subtle`
|
|
5962
6935
|
|
|
5963
6936
|
**Sub-Components:**
|
|
5964
6937
|
|
|
@@ -5976,10 +6949,18 @@ List sub-component
|
|
|
5976
6949
|
|
|
5977
6950
|
Item sub-component
|
|
5978
6951
|
|
|
6952
|
+
Props:
|
|
6953
|
+
- `active`: boolean
|
|
6954
|
+
|
|
5979
6955
|
#### TableOfContents.Group
|
|
5980
6956
|
|
|
5981
6957
|
Group sub-component
|
|
5982
6958
|
|
|
6959
|
+
Props:
|
|
6960
|
+
- `label`: string (required)
|
|
6961
|
+
- `href`: string
|
|
6962
|
+
- `active`: boolean
|
|
6963
|
+
|
|
5983
6964
|
|
|
5984
6965
|
**Examples:**
|
|
5985
6966
|
|
|
@@ -6045,6 +7026,14 @@ Group sub-component
|
|
|
6045
7026
|
<TableOfContents.Item active className="cursor-pointer">
|
|
6046
7027
|
Overview
|
|
6047
7028
|
</TableOfContents.Item>
|
|
7029
|
+
<TableOfContents.Group label="Examples" href="#examples-demo">
|
|
7030
|
+
<TableOfContents.Item className="cursor-pointer">
|
|
7031
|
+
Basic example
|
|
7032
|
+
</TableOfContents.Item>
|
|
7033
|
+
<TableOfContents.Item className="cursor-pointer">
|
|
7034
|
+
Advanced example
|
|
7035
|
+
</TableOfContents.Item>
|
|
7036
|
+
</TableOfContents.Group>
|
|
6048
7037
|
<TableOfContents.Group label="Getting Started">
|
|
6049
7038
|
<TableOfContents.Item className="cursor-pointer">
|
|
6050
7039
|
Installation
|
|
@@ -6053,7 +7042,7 @@ Group sub-component
|
|
|
6053
7042
|
Configuration
|
|
6054
7043
|
</TableOfContents.Item>
|
|
6055
7044
|
</TableOfContents.Group>
|
|
6056
|
-
<TableOfContents.Group label="API">
|
|
7045
|
+
<TableOfContents.Group label="API" href="#api-demo">
|
|
6057
7046
|
<TableOfContents.Item className="cursor-pointer">
|
|
6058
7047
|
Props
|
|
6059
7048
|
</TableOfContents.Item>
|
|
@@ -6128,7 +7117,7 @@ Tab navigation component with segmented or underline style. Built on Base UI Tab
|
|
|
6128
7117
|
|
|
6129
7118
|
**Colors (kumo tokens used):**
|
|
6130
7119
|
|
|
6131
|
-
`bg-kumo-base`, `bg-kumo-brand`, `bg-kumo-recessed`, `bg-kumo-tint`, `border-kumo-hairline`, `ring-kumo-
|
|
7120
|
+
`bg-kumo-base`, `bg-kumo-brand`, `bg-kumo-recessed`, `bg-kumo-tint`, `border-kumo-hairline`, `ring-kumo-brand`, `ring-kumo-focus`, `ring-kumo-hairline`, `ring-kumo-line`, `text-kumo-default`, `text-kumo-subtle`
|
|
6132
7121
|
|
|
6133
7122
|
**Styling:**
|
|
6134
7123
|
|
|
@@ -6265,8 +7254,11 @@ Text component
|
|
|
6265
7254
|
Whether to use bold font weight (only applies to body variants).
|
|
6266
7255
|
- `truncate`: boolean
|
|
6267
7256
|
Whether to truncate overflowing text with an ellipsis. Adds `truncate min-w-0` classes.
|
|
6268
|
-
- `as`:
|
|
6269
|
-
The HTML element
|
|
7257
|
+
- `as`: enum
|
|
7258
|
+
The HTML element to render. Accepts headings (`"h1"`–`"h6"`), block text (`"p"`, `"pre"`), inline text (`"span"`, `"code"`, `"em"`, `"strong"`, `"small"`, `"abbr"`, `"time"`), form-related (`"label"`, `"legend"`), list/definition (`"dt"`, `"dd"`, `"li"`), and `"figcaption"`.
|
|
7259
|
+
|
|
7260
|
+
- **Required** for heading variants (`"heading1"`, `"heading2"`, `"heading3"`) — pick the element that reflects this text's place in the document outline, or `"span"` for decorative heading-styled text that is not a section heading.
|
|
7261
|
+
- **Optional** for body variants (defaults to `"p"`) and monospace variants (defaults to `"span"`).
|
|
6270
7262
|
- `children`: ReactNode
|
|
6271
7263
|
Text content.
|
|
6272
7264
|
|
|
@@ -6282,15 +7274,21 @@ Text component
|
|
|
6282
7274
|
```tsx
|
|
6283
7275
|
<div className="grid w-full grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3">
|
|
6284
7276
|
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4">
|
|
6285
|
-
<Text variant="heading1"
|
|
7277
|
+
<Text variant="heading1" as="h1">
|
|
7278
|
+
Heading 1
|
|
7279
|
+
</Text>
|
|
6286
7280
|
<Text variant="mono-secondary">text-3xl (30px)</Text>
|
|
6287
7281
|
</div>
|
|
6288
7282
|
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4">
|
|
6289
|
-
<Text variant="heading2"
|
|
7283
|
+
<Text variant="heading2" as="h2">
|
|
7284
|
+
Heading 2
|
|
7285
|
+
</Text>
|
|
6290
7286
|
<Text variant="mono-secondary">text-2xl (24px)</Text>
|
|
6291
7287
|
</div>
|
|
6292
7288
|
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4">
|
|
6293
|
-
<Text variant="heading3"
|
|
7289
|
+
<Text variant="heading3" as="h3">
|
|
7290
|
+
Heading 3
|
|
7291
|
+
</Text>
|
|
6294
7292
|
<Text variant="mono-secondary">text-lg (16px)</Text>
|
|
6295
7293
|
</div>
|
|
6296
7294
|
<div className="flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4">
|
|
@@ -6379,7 +7377,7 @@ Toasty — toast notification provider and viewport. Renders a `Toast.Provider`
|
|
|
6379
7377
|
|
|
6380
7378
|
**Colors (kumo tokens used):**
|
|
6381
7379
|
|
|
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-
|
|
7380
|
+
`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-subtle`, `text-kumo-success`, `text-kumo-warning`
|
|
6383
7381
|
|
|
6384
7382
|
**Styling:**
|
|
6385
7383
|
|
|
@@ -6516,11 +7514,11 @@ Multi-line textarea input with Input variants and InputArea-specific dimensions
|
|
|
6516
7514
|
## Quick Reference
|
|
6517
7515
|
|
|
6518
7516
|
**Components by Category:**
|
|
7517
|
+
- **Other:** Autocomplete, CloudflareLogo, DatePicker, Label, Link, SensitiveInput, Sidebar, Table, TableOfContents, DeleteResource
|
|
6519
7518
|
- **Display:** Badge, Breadcrumbs, Code, Collapsible, Empty, LayerCard, Meter, Text
|
|
6520
7519
|
- **Feedback:** Banner, Loader, Toasty
|
|
6521
7520
|
- **Action:** Button, ClipboardText
|
|
6522
|
-
- **Input:** Checkbox, Combobox, DateRangePicker, Field, Input, Radio, Select, Switch
|
|
6523
|
-
- **Other:** CloudflareLogo, DatePicker, Label, Link, SensitiveInput, Sidebar, Table, TableOfContents, DeleteResource
|
|
7521
|
+
- **Input:** Checkbox, Combobox, DateRangePicker, Field, Input, InputGroup, Radio, Select, Switch
|
|
6524
7522
|
- **Navigation:** CommandPalette, MenuBar, Pagination, Tabs
|
|
6525
7523
|
- **Overlay:** Dialog, DropdownMenu, Popover, Tooltip
|
|
6526
7524
|
- **Layout:** Grid, Surface, PageHeader, ResourceListPage
|