@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
|
@@ -1,6 +1,171 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": "1.0.0",
|
|
3
3
|
"components": {
|
|
4
|
+
"Autocomplete": {
|
|
5
|
+
"name": "Autocomplete",
|
|
6
|
+
"type": "component",
|
|
7
|
+
"description": "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.",
|
|
8
|
+
"importPath": "@cloudflare/kumo",
|
|
9
|
+
"category": "Other",
|
|
10
|
+
"props": {
|
|
11
|
+
"items": {
|
|
12
|
+
"type": "unknown[]",
|
|
13
|
+
"required": true,
|
|
14
|
+
"description": "Array of items to display in the dropdown"
|
|
15
|
+
},
|
|
16
|
+
"value": {
|
|
17
|
+
"type": "string | number | string[]",
|
|
18
|
+
"optional": true,
|
|
19
|
+
"description": "The controlled input value"
|
|
20
|
+
},
|
|
21
|
+
"open": {
|
|
22
|
+
"type": "boolean",
|
|
23
|
+
"optional": true,
|
|
24
|
+
"description": "Whether the popup is open (controlled)"
|
|
25
|
+
},
|
|
26
|
+
"children": {
|
|
27
|
+
"type": "ReactNode",
|
|
28
|
+
"optional": true,
|
|
29
|
+
"description": "Autocomplete content (input group, popup content)"
|
|
30
|
+
},
|
|
31
|
+
"className": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"optional": true,
|
|
34
|
+
"description": "Additional CSS classes"
|
|
35
|
+
},
|
|
36
|
+
"label": {
|
|
37
|
+
"type": "ReactNode",
|
|
38
|
+
"optional": true,
|
|
39
|
+
"description": "Label content (enables Field wrapper)"
|
|
40
|
+
},
|
|
41
|
+
"required": {
|
|
42
|
+
"type": "boolean",
|
|
43
|
+
"optional": true,
|
|
44
|
+
"description": "Whether the field is required"
|
|
45
|
+
},
|
|
46
|
+
"labelTooltip": {
|
|
47
|
+
"type": "ReactNode",
|
|
48
|
+
"optional": true,
|
|
49
|
+
"description": "Tooltip content to display next to the label"
|
|
50
|
+
},
|
|
51
|
+
"description": {
|
|
52
|
+
"type": "ReactNode",
|
|
53
|
+
"optional": true,
|
|
54
|
+
"description": "Helper text displayed below the field"
|
|
55
|
+
},
|
|
56
|
+
"error": {
|
|
57
|
+
"type": "string | object",
|
|
58
|
+
"optional": true,
|
|
59
|
+
"description": "Error message or validation error object"
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"examples": [
|
|
63
|
+
"<Autocomplete items={fruits}>\n <Autocomplete.InputGroup placeholder=\"Search fruits…\" />\n <Autocomplete.Content>\n <Autocomplete.List>\n {(item: string) => (\n <Autocomplete.Item key={item} value={item}>\n {item}\n </Autocomplete.Item>\n )}\n </Autocomplete.List>\n </Autocomplete.Content>\n </Autocomplete>",
|
|
64
|
+
"<div className=\"w-80\">\n <Autocomplete\n items={countries}\n label=\"Country\"\n description=\"Start typing to filter countries\"\n filter={(item: Country, query: string) =>\n item.label.toLowerCase().includes(query.toLowerCase())\n }\n >\n <Autocomplete.InputGroup placeholder=\"Search countries…\" />\n <Autocomplete.Content>\n <Autocomplete.List>\n {(item: Country) => (\n <Autocomplete.Item key={item.code} value={item}>\n {item.label}\n </Autocomplete.Item>\n )}\n </Autocomplete.List>\n </Autocomplete.Content>\n </Autocomplete>\n </div>",
|
|
65
|
+
"<div className=\"w-80\">\n <Autocomplete\n items={countries}\n label=\"Country\"\n error={{ message: \"Please enter a valid country\", match: true }}\n filter={(item: Country, query: string) =>\n item.label.toLowerCase().includes(query.toLowerCase())\n }\n >\n <Autocomplete.InputGroup placeholder=\"Search countries…\" />\n <Autocomplete.Content>\n <Autocomplete.List>\n {(item: Country) => (\n <Autocomplete.Item key={item.code} value={item}>\n {item.label}\n </Autocomplete.Item>\n )}\n </Autocomplete.List>\n </Autocomplete.Content>\n </Autocomplete>\n </div>",
|
|
66
|
+
"<Autocomplete items={servers}>\n <Autocomplete.InputGroup placeholder=\"Select region…\" />\n <Autocomplete.Content>\n <Autocomplete.List>\n {(group: ServerGroup) => (\n <Autocomplete.Group key={group.value} items={group.items}>\n <Autocomplete.GroupLabel>{group.value}</Autocomplete.GroupLabel>\n <Autocomplete.Collection>\n {(item: ServerLocation) => (\n <Autocomplete.Item key={item.value} value={item}>\n {item.label}\n </Autocomplete.Item>\n )}\n </Autocomplete.Collection>\n </Autocomplete.Group>\n )}\n </Autocomplete.List>\n </Autocomplete.Content>\n </Autocomplete>",
|
|
67
|
+
"<div className=\"flex flex-wrap items-center gap-4\">\n <Autocomplete items={fruits.slice(0, 10)}>\n <Autocomplete.InputGroup size=\"xs\" placeholder=\"xs\" />\n <Autocomplete.Content>\n <Autocomplete.List>\n {(item: string) => (\n <Autocomplete.Item key={item} value={item}>\n {item}\n </Autocomplete.Item>\n )}\n </Autocomplete.List>\n </Autocomplete.Content>\n </Autocomplete>\n <Autocomplete items={fruits.slice(0, 10)}>\n <Autocomplete.InputGroup size=\"sm\" placeholder=\"sm\" />\n <Autocomplete.Content>\n <Autocomplete.List>\n {(item: string) => (\n <Autocomplete.Item key={item} value={item}>\n {item}\n </Autocomplete.Item>\n )}\n </Autocomplete.List>\n </Autocomplete.Content>\n </Autocomplete>\n <Autocomplete items={fruits.slice(0, 10)}>\n <Autocomplete.InputGroup size=\"base\" placeholder=\"base (default)\" />\n <Autocomplete.Content>\n <Autocomplete.List>\n {(item: string) => (\n <Autocomplete.Item key={item} value={item}>\n {item}\n </Autocomplete.Item>\n )}\n </Autocomplete.List>\n </Autocomplete.Content>\n </Autocomplete>\n <Autocomplete items={fruits.slice(0, 10)}>\n <Autocomplete.InputGroup size=\"lg\" placeholder=\"lg\" />\n <Autocomplete.Content>\n <Autocomplete.List>\n {(item: string) => (\n <Autocomplete.Item key={item} value={item}>\n {item}\n </Autocomplete.Item>\n )}\n </Autocomplete.List>\n </Autocomplete.Content>\n </Autocomplete>\n </div>",
|
|
68
|
+
"<div className=\"flex flex-col gap-3 w-80\">\n <Autocomplete\n items={fruits}\n value={value}\n onValueChange={(v) => setValue(v)}\n >\n <Autocomplete.InputGroup placeholder=\"Type a fruit…\" />\n <Autocomplete.Content>\n <Autocomplete.List>\n {(item: string) => (\n <Autocomplete.Item key={item} value={item}>\n {item}\n </Autocomplete.Item>\n )}\n </Autocomplete.List>\n </Autocomplete.Content>\n </Autocomplete>\n {value && (\n <p className=\"text-sm text-kumo-subtle\">\n Value: <span className=\"text-kumo-default font-medium\">{value}</span>\n </p>\n )}\n </div>"
|
|
69
|
+
],
|
|
70
|
+
"colors": [
|
|
71
|
+
"bg-kumo-control",
|
|
72
|
+
"bg-kumo-line",
|
|
73
|
+
"bg-kumo-overlay",
|
|
74
|
+
"border-kumo-line",
|
|
75
|
+
"ring-kumo-line",
|
|
76
|
+
"text-kumo-default",
|
|
77
|
+
"text-kumo-strong"
|
|
78
|
+
],
|
|
79
|
+
"subComponents": {
|
|
80
|
+
"InputGroup": {
|
|
81
|
+
"name": "InputGroup",
|
|
82
|
+
"description": "InputGroup sub-component",
|
|
83
|
+
"props": {
|
|
84
|
+
"className": {
|
|
85
|
+
"type": "string",
|
|
86
|
+
"optional": true
|
|
87
|
+
},
|
|
88
|
+
"size": {
|
|
89
|
+
"type": "KumoAutocompleteSize",
|
|
90
|
+
"optional": true
|
|
91
|
+
},
|
|
92
|
+
"placeholder": {
|
|
93
|
+
"type": "string",
|
|
94
|
+
"optional": true
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
"Content": {
|
|
99
|
+
"name": "Content",
|
|
100
|
+
"description": "Content sub-component",
|
|
101
|
+
"props": {
|
|
102
|
+
"children": {
|
|
103
|
+
"type": "ReactNode",
|
|
104
|
+
"optional": true
|
|
105
|
+
},
|
|
106
|
+
"className": {
|
|
107
|
+
"type": "string",
|
|
108
|
+
"optional": true
|
|
109
|
+
},
|
|
110
|
+
"align": {
|
|
111
|
+
"type": "AutocompleteBase.Positioner.Props[\"align\"]",
|
|
112
|
+
"optional": true
|
|
113
|
+
},
|
|
114
|
+
"alignOffset": {
|
|
115
|
+
"type": "AutocompleteBase.Positioner.Props[\"alignOffset\"]",
|
|
116
|
+
"optional": true
|
|
117
|
+
},
|
|
118
|
+
"side": {
|
|
119
|
+
"type": "AutocompleteBase.Positioner.Props[\"side\"]",
|
|
120
|
+
"optional": true
|
|
121
|
+
},
|
|
122
|
+
"sideOffset": {
|
|
123
|
+
"type": "AutocompleteBase.Positioner.Props[\"sideOffset\"]",
|
|
124
|
+
"optional": true
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
"Item": {
|
|
129
|
+
"name": "Item",
|
|
130
|
+
"description": "Item sub-component",
|
|
131
|
+
"props": {}
|
|
132
|
+
},
|
|
133
|
+
"GroupLabel": {
|
|
134
|
+
"name": "GroupLabel",
|
|
135
|
+
"description": "GroupLabel sub-component",
|
|
136
|
+
"props": {}
|
|
137
|
+
},
|
|
138
|
+
"Group": {
|
|
139
|
+
"name": "Group",
|
|
140
|
+
"description": "Group sub-component",
|
|
141
|
+
"props": {}
|
|
142
|
+
},
|
|
143
|
+
"Separator": {
|
|
144
|
+
"name": "Separator",
|
|
145
|
+
"description": "Separator sub-component",
|
|
146
|
+
"props": {}
|
|
147
|
+
},
|
|
148
|
+
"List": {
|
|
149
|
+
"name": "List",
|
|
150
|
+
"description": "List sub-component",
|
|
151
|
+
"props": {}
|
|
152
|
+
},
|
|
153
|
+
"Empty": {
|
|
154
|
+
"name": "Empty",
|
|
155
|
+
"description": "Empty sub-component (wraps AutocompleteBase)",
|
|
156
|
+
"props": {},
|
|
157
|
+
"isPassThrough": true,
|
|
158
|
+
"baseComponent": "AutocompleteBase.Empty"
|
|
159
|
+
},
|
|
160
|
+
"Collection": {
|
|
161
|
+
"name": "Collection",
|
|
162
|
+
"description": "Collection sub-component (wraps AutocompleteBase)",
|
|
163
|
+
"props": {},
|
|
164
|
+
"isPassThrough": true,
|
|
165
|
+
"baseComponent": "AutocompleteBase.Collection"
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
},
|
|
4
169
|
"Badge": {
|
|
5
170
|
"name": "Badge",
|
|
6
171
|
"type": "component",
|
|
@@ -368,21 +533,20 @@
|
|
|
368
533
|
"outline": "Bordered button with transparent background"
|
|
369
534
|
},
|
|
370
535
|
"classes": {
|
|
371
|
-
"primary": "bg-kumo-brand !text-white hover:bg-kumo-brand-hover
|
|
372
|
-
"secondary": "bg-kumo-base !text-kumo-default ring not-disabled:hover:
|
|
536
|
+
"primary": "bg-kumo-brand !text-white hover:bg-kumo-brand-hover disabled:bg-kumo-brand/50",
|
|
537
|
+
"secondary": "bg-kumo-base !text-kumo-default ring not-disabled:hover:bg-kumo-tint disabled:bg-kumo-base/50 disabled:!text-kumo-default/70 ring-kumo-hairline data-[state=open]:bg-kumo-base",
|
|
373
538
|
"ghost": "text-kumo-default hover:bg-kumo-tint shadow-none bg-inherit",
|
|
374
539
|
"destructive": "bg-kumo-danger !text-white hover:bg-kumo-danger/70",
|
|
375
|
-
"secondary-destructive": "bg-kumo-base !text-kumo-danger ring not-disabled:hover:
|
|
540
|
+
"secondary-destructive": "bg-kumo-base !text-kumo-danger ring not-disabled:hover:bg-kumo-base disabled:bg-kumo-base/50 disabled:!text-kumo-danger/70 ring-kumo-hairline data-[state=open]:bg-kumo-base",
|
|
376
541
|
"outline": "bg-transparent text-kumo-default ring ring-kumo-hairline"
|
|
377
542
|
},
|
|
378
543
|
"stateClasses": {
|
|
379
544
|
"primary": {
|
|
380
545
|
"hover": "hover:bg-kumo-brand-hover",
|
|
381
|
-
"focus": "focus:bg-kumo-brand-hover",
|
|
382
546
|
"disabled": "disabled:bg-kumo-brand/50"
|
|
383
547
|
},
|
|
384
548
|
"secondary": {
|
|
385
|
-
"not-disabled": "not-disabled:hover:
|
|
549
|
+
"not-disabled": "not-disabled:hover:bg-kumo-tint",
|
|
386
550
|
"disabled": "disabled:bg-kumo-base/50 disabled:!text-kumo-default/70",
|
|
387
551
|
"data-state": "data-[state=open]:bg-kumo-base"
|
|
388
552
|
},
|
|
@@ -393,7 +557,7 @@
|
|
|
393
557
|
"hover": "hover:bg-kumo-danger/70"
|
|
394
558
|
},
|
|
395
559
|
"secondary-destructive": {
|
|
396
|
-
"not-disabled": "not-disabled:hover:
|
|
560
|
+
"not-disabled": "not-disabled:hover:bg-kumo-base",
|
|
397
561
|
"disabled": "disabled:bg-kumo-base/50 disabled:!text-kumo-danger/70",
|
|
398
562
|
"data-state": "data-[state=open]:bg-kumo-base"
|
|
399
563
|
}
|
|
@@ -466,7 +630,8 @@
|
|
|
466
630
|
"<Button variant=\"primary\" loading>\n Loading...\n </Button>",
|
|
467
631
|
"<Button variant=\"secondary\" disabled>\n Disabled\n </Button>",
|
|
468
632
|
"<Button variant=\"secondary\">Click me</Button>",
|
|
469
|
-
"<div className=\"flex flex-wrap items-center gap-3\">\n <Button variant=\"secondary\" title=\"Create a new Worker\">\n Create Worker\n </Button>\n <Button\n variant=\"secondary\"\n shape=\"square\"\n icon={PlusIcon}\n aria-label=\"Add item\"\n title=\"Add item\"\n />\n </div>"
|
|
633
|
+
"<div className=\"flex flex-wrap items-center gap-3\">\n <Button variant=\"secondary\" title=\"Create a new Worker\">\n Create Worker\n </Button>\n <Button\n variant=\"secondary\"\n shape=\"square\"\n icon={PlusIcon}\n aria-label=\"Add item\"\n title=\"Add item\"\n />\n </div>",
|
|
634
|
+
"<div className=\"flex flex-wrap items-center gap-3\">\n <LinkButton href=\"/components/link\" variant=\"secondary\">\n Read Link docs\n </LinkButton>\n <LinkButton\n href=\"https://developers.cloudflare.com\"\n variant=\"ghost\"\n icon={ArrowSquareOutIcon}\n external\n >\n Cloudflare Docs\n </LinkButton>\n </div>"
|
|
470
635
|
],
|
|
471
636
|
"colors": [
|
|
472
637
|
"bg-kumo-base",
|
|
@@ -474,6 +639,8 @@
|
|
|
474
639
|
"bg-kumo-brand-hover",
|
|
475
640
|
"bg-kumo-danger",
|
|
476
641
|
"bg-kumo-tint",
|
|
642
|
+
"ring-kumo-brand",
|
|
643
|
+
"ring-kumo-focus",
|
|
477
644
|
"ring-kumo-hairline",
|
|
478
645
|
"text-kumo-danger",
|
|
479
646
|
"text-kumo-default",
|
|
@@ -500,12 +667,12 @@
|
|
|
500
667
|
"error": "Error state for validation failures"
|
|
501
668
|
},
|
|
502
669
|
"classes": {
|
|
503
|
-
"default": "[&:focus-within>span]:ring-kumo-
|
|
670
|
+
"default": "[&:focus-within>span]:ring-kumo-focus [&:hover>span]:ring-kumo-hairline",
|
|
504
671
|
"error": "[&>span]:ring-kumo-danger"
|
|
505
672
|
},
|
|
506
673
|
"stateClasses": {
|
|
507
674
|
"default": {
|
|
508
|
-
"focus": "[&:focus-within>span]:ring-kumo-
|
|
675
|
+
"focus": "[&:focus-within>span]:ring-kumo-focus",
|
|
509
676
|
"hover": "[&:hover>span]:ring-kumo-hairline"
|
|
510
677
|
}
|
|
511
678
|
},
|
|
@@ -555,10 +722,6 @@
|
|
|
555
722
|
"type": "string",
|
|
556
723
|
"optional": true,
|
|
557
724
|
"description": "Additional class name"
|
|
558
|
-
},
|
|
559
|
-
"onValueChange": {
|
|
560
|
-
"type": "(checked: boolean) => void",
|
|
561
|
-
"description": "Callback when checkbox value changes"
|
|
562
725
|
}
|
|
563
726
|
},
|
|
564
727
|
"examples": [
|
|
@@ -570,13 +733,17 @@
|
|
|
570
733
|
"<Checkbox label=\"Disabled option\" disabled />",
|
|
571
734
|
"<Checkbox label=\"Invalid option\" variant=\"error\" />",
|
|
572
735
|
"<Checkbox.Group\n legend=\"Email preferences\"\n description=\"Choose how you'd like to receive updates\"\n value={preferences}\n onValueChange={setPreferences}\n >\n <Checkbox.Item value=\"email\" label=\"Email notifications\" />\n <Checkbox.Item value=\"sms\" label=\"SMS notifications\" />\n <Checkbox.Item value=\"push\" label=\"Push notifications\" />\n </Checkbox.Group>",
|
|
736
|
+
"<Checkbox.Group value={preferences} onValueChange={setPreferences}>\n <Checkbox.Legend className=\"sr-only\">\n Notification preferences\n </Checkbox.Legend>\n <Checkbox.Item value=\"email\" label=\"Email notifications\" />\n <Checkbox.Item value=\"sms\" label=\"SMS notifications\" />\n <Checkbox.Item value=\"push\" label=\"Push notifications\" />\n </Checkbox.Group>",
|
|
737
|
+
"<Checkbox.Group value={preferences} onValueChange={setPreferences}>\n <Checkbox.Legend className=\"text-sm font-normal text-kumo-subtle\">\n Notification preferences\n </Checkbox.Legend>\n <Checkbox.Item value=\"email\" label=\"Email notifications\" />\n <Checkbox.Item value=\"sms\" label=\"SMS notifications\" />\n <Checkbox.Item value=\"push\" label=\"Push notifications\" />\n </Checkbox.Group>",
|
|
573
738
|
"<Checkbox.Group\n legend=\"Required preferences\"\n error=\"Please select at least one notification method\"\n value={[]}\n onValueChange={() => {}}\n >\n <Checkbox.Item value=\"email\" label=\"Email\" variant=\"error\" />\n <Checkbox.Item value=\"sms\" label=\"SMS\" variant=\"error\" />\n </Checkbox.Group>"
|
|
574
739
|
],
|
|
575
740
|
"colors": [
|
|
576
741
|
"bg-kumo-base",
|
|
577
742
|
"bg-kumo-contrast",
|
|
743
|
+
"ring-kumo-brand",
|
|
578
744
|
"ring-kumo-contrast",
|
|
579
745
|
"ring-kumo-danger",
|
|
746
|
+
"ring-kumo-focus",
|
|
580
747
|
"ring-kumo-hairline",
|
|
581
748
|
"text-kumo-danger",
|
|
582
749
|
"text-kumo-default",
|
|
@@ -595,7 +762,7 @@
|
|
|
595
762
|
"props": {
|
|
596
763
|
"legend": {
|
|
597
764
|
"type": "string",
|
|
598
|
-
"
|
|
765
|
+
"optional": true
|
|
599
766
|
},
|
|
600
767
|
"children": {
|
|
601
768
|
"type": "ReactNode",
|
|
@@ -630,6 +797,20 @@
|
|
|
630
797
|
"optional": true
|
|
631
798
|
}
|
|
632
799
|
}
|
|
800
|
+
},
|
|
801
|
+
"Legend": {
|
|
802
|
+
"name": "Legend",
|
|
803
|
+
"description": "Legend sub-component",
|
|
804
|
+
"props": {
|
|
805
|
+
"children": {
|
|
806
|
+
"type": "ReactNode",
|
|
807
|
+
"required": true
|
|
808
|
+
},
|
|
809
|
+
"className": {
|
|
810
|
+
"type": "string",
|
|
811
|
+
"optional": true
|
|
812
|
+
}
|
|
813
|
+
}
|
|
633
814
|
}
|
|
634
815
|
},
|
|
635
816
|
"styling": {
|
|
@@ -740,8 +921,10 @@
|
|
|
740
921
|
],
|
|
741
922
|
"colors": [
|
|
742
923
|
"bg-kumo-base",
|
|
743
|
-
"border-kumo-
|
|
924
|
+
"border-kumo-line",
|
|
744
925
|
"outline-kumo-fill",
|
|
926
|
+
"ring-kumo-brand",
|
|
927
|
+
"ring-kumo-focus",
|
|
745
928
|
"text-kumo-default"
|
|
746
929
|
],
|
|
747
930
|
"styling": {
|
|
@@ -1998,7 +2181,7 @@
|
|
|
1998
2181
|
"colors": [
|
|
1999
2182
|
"bg-kumo-base",
|
|
2000
2183
|
"border-kumo-fill",
|
|
2001
|
-
"text-kumo-
|
|
2184
|
+
"text-kumo-subtle"
|
|
2002
2185
|
],
|
|
2003
2186
|
"subComponents": {
|
|
2004
2187
|
"Block": {
|
|
@@ -2018,7 +2201,7 @@
|
|
|
2018
2201
|
},
|
|
2019
2202
|
"styling": {
|
|
2020
2203
|
"baseTokens": [
|
|
2021
|
-
"text-kumo-
|
|
2204
|
+
"text-kumo-subtle"
|
|
2022
2205
|
],
|
|
2023
2206
|
"typography": {
|
|
2024
2207
|
"fontFamily": "font-mono",
|
|
@@ -2040,28 +2223,14 @@
|
|
|
2040
2223
|
"Collapsible": {
|
|
2041
2224
|
"name": "Collapsible",
|
|
2042
2225
|
"type": "component",
|
|
2043
|
-
"description": "Collapsible component for showing/hiding content.
|
|
2226
|
+
"description": "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> ))} ```",
|
|
2044
2227
|
"importPath": "@cloudflare/kumo",
|
|
2045
2228
|
"category": "Display",
|
|
2046
2229
|
"props": {
|
|
2047
|
-
"children": {
|
|
2048
|
-
"type": "ReactNode",
|
|
2049
|
-
"optional": true
|
|
2050
|
-
},
|
|
2051
|
-
"label": {
|
|
2052
|
-
"type": "string",
|
|
2053
|
-
"required": true,
|
|
2054
|
-
"description": "Text label displayed in the trigger button"
|
|
2055
|
-
},
|
|
2056
|
-
"open": {
|
|
2057
|
-
"type": "boolean",
|
|
2058
|
-
"optional": true,
|
|
2059
|
-
"description": "Whether the collapsible content is visible"
|
|
2060
|
-
},
|
|
2061
2230
|
"className": {
|
|
2062
2231
|
"type": "string",
|
|
2063
2232
|
"optional": true,
|
|
2064
|
-
"description": "Additional CSS classes
|
|
2233
|
+
"description": "Additional CSS classes"
|
|
2065
2234
|
},
|
|
2066
2235
|
"onOpenChange": {
|
|
2067
2236
|
"type": "(open: boolean) => void",
|
|
@@ -2069,14 +2238,76 @@
|
|
|
2069
2238
|
}
|
|
2070
2239
|
},
|
|
2071
2240
|
"examples": [
|
|
2072
|
-
"<div className=\"w-full\">\n <Collapsible
|
|
2073
|
-
"<div className=\"w-full\">\n <Collapsible
|
|
2074
|
-
"<div className=\"w-full space-y-2\">\n <Collapsible
|
|
2241
|
+
"<div className=\"w-full\">\n <Collapsible.Root open={isOpen} onOpenChange={setIsOpen}>\n <Collapsible.DefaultTrigger>What is Kumo?</Collapsible.DefaultTrigger>\n <Collapsible.DefaultPanel>\n <Text>Kumo is Cloudflare's new design system.</Text>\n </Collapsible.DefaultPanel>\n </Collapsible.Root>\n </div>",
|
|
2242
|
+
"<div className=\"w-full\">\n <Collapsible.Root open={isOpen} onOpenChange={setIsOpen}>\n <Collapsible.DefaultTrigger>What is Kumo?</Collapsible.DefaultTrigger>\n <Collapsible.DefaultPanel>\n <Text>Kumo is Cloudflare's new design system.</Text>\n </Collapsible.DefaultPanel>\n </Collapsible.Root>\n </div>",
|
|
2243
|
+
"<div className=\"w-full space-y-2\">\n <Collapsible.Root open={open1} onOpenChange={setOpen1}>\n <Collapsible.DefaultTrigger>What is Kumo?</Collapsible.DefaultTrigger>\n <Collapsible.DefaultPanel>\n <Text>Kumo is Cloudflare's new design system.</Text>\n </Collapsible.DefaultPanel>\n </Collapsible.Root>\n <Collapsible.Root open={open2} onOpenChange={setOpen2}>\n <Collapsible.DefaultTrigger>How do I use it?</Collapsible.DefaultTrigger>\n <Collapsible.DefaultPanel>\n <Text>Install the components and import them into your project.</Text>\n </Collapsible.DefaultPanel>\n </Collapsible.Root>\n <Collapsible.Root open={open3} onOpenChange={setOpen3}>\n <Collapsible.DefaultTrigger>Is it open source?</Collapsible.DefaultTrigger>\n <Collapsible.DefaultPanel>\n <Text>Check the repository for license information.</Text>\n </Collapsible.DefaultPanel>\n </Collapsible.Root>\n </div>",
|
|
2244
|
+
"<div className=\"w-full\">\n <Collapsible.Root open={isOpen} onOpenChange={setIsOpen}>\n <Collapsible.Trigger\n render={<Button variant=\"secondary\" size=\"sm\" />}\n >\n {isOpen ? \"Hide details\" : \"Show details\"}\n </Collapsible.Trigger>\n <Collapsible.Panel className=\"mt-3 rounded-lg bg-kumo-tint p-4\">\n <Text>\n This panel uses custom styling instead of the default border-left accent.\n </Text>\n </Collapsible.Panel>\n </Collapsible.Root>\n </div>",
|
|
2245
|
+
"<div className=\"w-full space-y-2\">\n {items.map((item, i) => (\n <Collapsible.Root\n key={i}\n open={activeIndex === i}\n onOpenChange={(open) => setActiveIndex(open ? i : null)}\n >\n <Collapsible.DefaultTrigger>{item.title}</Collapsible.DefaultTrigger>\n <Collapsible.DefaultPanel>\n <Text>{item.content}</Text>\n </Collapsible.DefaultPanel>\n </Collapsible.Root>\n ))}\n </div>"
|
|
2075
2246
|
],
|
|
2076
2247
|
"colors": [
|
|
2077
2248
|
"border-kumo-fill",
|
|
2078
2249
|
"text-kumo-link"
|
|
2079
|
-
]
|
|
2250
|
+
],
|
|
2251
|
+
"subComponents": {
|
|
2252
|
+
"Root": {
|
|
2253
|
+
"name": "Root",
|
|
2254
|
+
"description": "Root sub-component",
|
|
2255
|
+
"props": {
|
|
2256
|
+
"className": {
|
|
2257
|
+
"type": "string",
|
|
2258
|
+
"optional": true
|
|
2259
|
+
}
|
|
2260
|
+
}
|
|
2261
|
+
},
|
|
2262
|
+
"Trigger": {
|
|
2263
|
+
"name": "Trigger",
|
|
2264
|
+
"description": "Trigger sub-component",
|
|
2265
|
+
"props": {
|
|
2266
|
+
"className": {
|
|
2267
|
+
"type": "string",
|
|
2268
|
+
"optional": true
|
|
2269
|
+
}
|
|
2270
|
+
}
|
|
2271
|
+
},
|
|
2272
|
+
"Panel": {
|
|
2273
|
+
"name": "Panel",
|
|
2274
|
+
"description": "Panel sub-component",
|
|
2275
|
+
"props": {
|
|
2276
|
+
"className": {
|
|
2277
|
+
"type": "string",
|
|
2278
|
+
"optional": true
|
|
2279
|
+
}
|
|
2280
|
+
}
|
|
2281
|
+
},
|
|
2282
|
+
"DefaultTrigger": {
|
|
2283
|
+
"name": "DefaultTrigger",
|
|
2284
|
+
"description": "DefaultTrigger sub-component",
|
|
2285
|
+
"props": {
|
|
2286
|
+
"children": {
|
|
2287
|
+
"type": "ReactNode",
|
|
2288
|
+
"required": true
|
|
2289
|
+
},
|
|
2290
|
+
"className": {
|
|
2291
|
+
"type": "string",
|
|
2292
|
+
"optional": true
|
|
2293
|
+
}
|
|
2294
|
+
}
|
|
2295
|
+
},
|
|
2296
|
+
"DefaultPanel": {
|
|
2297
|
+
"name": "DefaultPanel",
|
|
2298
|
+
"description": "DefaultPanel sub-component",
|
|
2299
|
+
"props": {
|
|
2300
|
+
"children": {
|
|
2301
|
+
"type": "ReactNode",
|
|
2302
|
+
"required": true
|
|
2303
|
+
},
|
|
2304
|
+
"className": {
|
|
2305
|
+
"type": "string",
|
|
2306
|
+
"optional": true
|
|
2307
|
+
}
|
|
2308
|
+
}
|
|
2309
|
+
}
|
|
2310
|
+
}
|
|
2080
2311
|
},
|
|
2081
2312
|
"Combobox": {
|
|
2082
2313
|
"name": "Combobox",
|
|
@@ -2176,6 +2407,7 @@
|
|
|
2176
2407
|
"<div className=\"flex gap-2\">\n <Combobox\n value={value}\n onValueChange={setValue}\n items={bots}\n isItemEqualToValue={(bot: BotItem, selected: BotItem) =>\n bot.value === selected.value\n }\n multiple\n >\n <Combobox.TriggerMultipleWithInput\n className=\"w-[400px]\"\n placeholder=\"Select bots\"\n renderItem={(selected: BotItem) => (\n <Combobox.Chip key={selected.value}>{selected.label}</Combobox.Chip>\n )}\n inputSide=\"right\"\n />\n <Combobox.Content className=\"max-h-[200px] min-w-auto overflow-y-auto\">\n <Combobox.Empty />\n <Combobox.List>\n {(item: BotItem) => (\n <Combobox.Item key={item.value} value={item}>\n <div className=\"flex gap-2\">\n <Text>{item.label}</Text>\n <Text variant=\"secondary\">{item.author}</Text>\n </div>\n </Combobox.Item>\n )}\n </Combobox.List>\n </Combobox.Content>\n </Combobox>\n <Button variant=\"primary\">Submit</Button>\n </div>",
|
|
2177
2408
|
"<div className=\"w-80\">\n <Combobox\n items={databases}\n value={value}\n onValueChange={setValue}\n label=\"Database\"\n description=\"Select your preferred database\"\n >\n <Combobox.TriggerInput placeholder=\"Select database\" />\n <Combobox.Content>\n <Combobox.Empty />\n <Combobox.List>\n {(item: DatabaseItem) => (\n <Combobox.Item key={item.value} value={item}>\n {item.label}\n </Combobox.Item>\n )}\n </Combobox.List>\n </Combobox.Content>\n </Combobox>\n </div>",
|
|
2178
2409
|
"<div className=\"flex flex-wrap gap-4 items-start\">\n <Combobox value=\"Apple\" items={fruits} disabled>\n <Combobox.TriggerInput\n className=\"w-[200px]\"\n placeholder=\"Select fruit\"\n />\n <Combobox.Content>\n <Combobox.Empty />\n <Combobox.List>\n {(item: string) => (\n <Combobox.Item key={item} value={item}>\n {item}\n </Combobox.Item>\n )}\n </Combobox.List>\n </Combobox.Content>\n </Combobox>\n\n <Combobox value={languages[0]} items={languages} disabled>\n <Combobox.TriggerValue className=\"w-[200px]\" />\n <Combobox.Content>\n <Combobox.Input placeholder=\"Search\" />\n <Combobox.Empty />\n <Combobox.List>\n {(item: Language) => (\n <Combobox.Item key={item.value} value={item}>\n {item.emoji} {item.label}\n </Combobox.Item>\n )}\n </Combobox.List>\n </Combobox.Content>\n </Combobox>\n </div>",
|
|
2410
|
+
"<div className=\"w-80\">\n <Combobox value={value} onValueChange={setValue} items={items}>\n <Combobox.TriggerInput placeholder=\"Select database\" />\n <Combobox.Content>\n <Combobox.Empty />\n <Combobox.List>\n {(item: DatabaseItemWithDisabled) => (\n <Combobox.Item\n key={item.value}\n value={item}\n disabled={item.disabled}\n >\n <span>\n {item.label}\n {item.reason && (\n <Text variant=\"secondary\" size=\"xs\" as=\"span\">\n {\" — \"}\n {item.reason}\n </Text>\n )}\n </span>\n </Combobox.Item>\n )}\n </Combobox.List>\n </Combobox.Content>\n </Combobox>\n </div>",
|
|
2179
2411
|
"<div className=\"w-80\">\n <Combobox\n items={databases}\n value={value}\n onValueChange={setValue}\n label=\"Database\"\n error={{ message: \"Please select a database\", match: true }}\n >\n <Combobox.TriggerInput placeholder=\"Select database\" />\n <Combobox.Content>\n <Combobox.Empty />\n <Combobox.List>\n {(item: DatabaseItem) => (\n <Combobox.Item key={item.value} value={item}>\n {item.label}\n </Combobox.Item>\n )}\n </Combobox.List>\n </Combobox.Content>\n </Combobox>\n </div>",
|
|
2180
2412
|
"<div className=\"flex flex-wrap items-center gap-4\">\n <Combobox\n size=\"sm\"\n value={smValue}\n onValueChange={(v) => setSmValue(v as string | null)}\n items={fruits.slice(0, 8)}\n >\n <Combobox.TriggerInput placeholder=\"Small (sm)\" />\n <Combobox.Content>\n <Combobox.Empty />\n <Combobox.List>\n {(item: string) => (\n <Combobox.Item key={item} value={item}>\n {item}\n </Combobox.Item>\n )}\n </Combobox.List>\n </Combobox.Content>\n </Combobox>\n <Combobox\n size=\"base\"\n value={baseValue}\n onValueChange={(v) => setBaseValue(v as string | null)}\n items={fruits.slice(0, 8)}\n >\n <Combobox.TriggerInput placeholder=\"Base (default)\" />\n <Combobox.Content>\n <Combobox.Empty />\n <Combobox.List>\n {(item: string) => (\n <Combobox.Item key={item} value={item}>\n {item}\n </Combobox.Item>\n )}\n </Combobox.List>\n </Combobox.Content>\n </Combobox>\n </div>",
|
|
2181
2413
|
"<div className=\"flex flex-wrap items-center gap-4\">\n <Combobox\n size=\"sm\"\n value={smValue}\n onValueChange={(v) => setSmValue(v as Language)}\n items={languages}\n >\n <Combobox.TriggerValue className=\"w-[160px]\" />\n <Combobox.Content>\n <Combobox.Input placeholder=\"Search\" />\n <Combobox.Empty />\n <Combobox.List>\n {(item: Language) => (\n <Combobox.Item key={item.value} value={item}>\n {item.emoji} {item.label}\n </Combobox.Item>\n )}\n </Combobox.List>\n </Combobox.Content>\n </Combobox>\n <Combobox\n size=\"base\"\n value={baseValue}\n onValueChange={(v) => setBaseValue(v as Language)}\n items={languages}\n >\n <Combobox.TriggerValue className=\"w-[180px]\" />\n <Combobox.Content>\n <Combobox.Input placeholder=\"Search\" />\n <Combobox.Empty />\n <Combobox.List>\n {(item: Language) => (\n <Combobox.Item key={item.value} value={item}>\n {item.emoji} {item.label}\n </Combobox.Item>\n )}\n </Combobox.List>\n </Combobox.Content>\n </Combobox>\n </div>"
|
|
@@ -2189,7 +2421,6 @@
|
|
|
2189
2421
|
"ring-kumo-hairline",
|
|
2190
2422
|
"ring-kumo-line",
|
|
2191
2423
|
"text-kumo-default",
|
|
2192
|
-
"text-kumo-strong",
|
|
2193
2424
|
"text-kumo-subtle"
|
|
2194
2425
|
],
|
|
2195
2426
|
"subComponents": {
|
|
@@ -2318,6 +2549,7 @@
|
|
|
2318
2549
|
"<div className=\"flex flex-col items-start gap-4\">\n <Button onClick={() => setOpen(true)}>Open Command Palette</Button>\n {selectedItem && (\n <p className=\"text-sm text-kumo-subtle\">\n Last selected:{\" \"}\n <span className=\"text-kumo-default\">{selectedItem}</span>\n </p>\n )}\n\n <CommandPalette.Root\n open={open}\n onOpenChange={setOpen}\n items={filteredGroups}\n value={search}\n onValueChange={setSearch}\n itemToStringValue={(group) => group.label}\n onSelect={(item, { newTab }) => {\n console.log(\"Selected:\", item.title, newTab ? \"(new tab)\" : \"\");\n handleSelect(item);\n }}\n getSelectableItems={getSelectableItems}\n >\n <CommandPalette.Input placeholder=\"Type a command or search...\" />\n <CommandPalette.List>\n <CommandPalette.Results>\n {(group: CommandGroup) => (\n <CommandPalette.Group key={group.id} items={group.items}>\n <CommandPalette.GroupLabel>\n {group.label}\n </CommandPalette.GroupLabel>\n <CommandPalette.Items>\n {(item: CommandItem) => (\n <CommandPalette.Item\n key={item.id}\n value={item}\n onClick={() => handleSelect(item)}\n >\n <span className=\"flex items-center gap-3\">\n {item.icon && (\n <span className=\"text-kumo-subtle\">{item.icon}</span>\n )}\n <span>{item.title}</span>\n </span>\n </CommandPalette.Item>\n )}\n </CommandPalette.Items>\n </CommandPalette.Group>\n )}\n </CommandPalette.Results>\n <CommandPalette.Empty>No commands found</CommandPalette.Empty>\n </CommandPalette.List>\n <CommandPalette.Footer>\n <span className=\"flex items-center gap-2\">\n <kbd className=\"rounded border border-kumo-hairline bg-kumo-base px-1.5 py-0.5 text-[10px]\">\n ↑↓\n </kbd>\n <span>Navigate</span>\n </span>\n <span className=\"flex items-center gap-2\">\n <kbd className=\"rounded border border-kumo-hairline bg-kumo-base px-1.5 py-0.5 text-[10px]\">\n ↵\n </kbd>\n <span>Select</span>\n </span>\n </CommandPalette.Footer>\n </CommandPalette.Root>\n </div>",
|
|
2319
2550
|
"<div>\n <Button onClick={() => setOpen(true)}>Open Simple Palette</Button>\n\n <CommandPalette.Root\n open={open}\n onOpenChange={setOpen}\n items={simpleItems}\n value={search}\n onValueChange={setSearch}\n itemToStringValue={(item) => item.title}\n onSelect={(item) => {\n console.log(\"Selected:\", item.title);\n setOpen(false);\n }}\n getSelectableItems={(items) => items}\n >\n <CommandPalette.Input placeholder=\"Search actions...\" />\n <CommandPalette.List>\n <CommandPalette.Results>\n {(item: SimpleItem) => (\n <CommandPalette.Item\n key={item.id}\n value={item}\n onClick={() => {\n console.log(\"Clicked:\", item.title);\n setOpen(false);\n }}\n >\n {item.title}\n </CommandPalette.Item>\n )}\n </CommandPalette.Results>\n <CommandPalette.Empty>No actions found</CommandPalette.Empty>\n </CommandPalette.List>\n </CommandPalette.Root>\n </div>",
|
|
2320
2551
|
"<div>\n <Button onClick={handleOpen}>Open with Loading</Button>\n\n <CommandPalette.Root\n open={open}\n onOpenChange={setOpen}\n items={loading ? [] : filteredGroups}\n value={search}\n onValueChange={setSearch}\n itemToStringValue={(group) => group.label}\n getSelectableItems={getSelectableItems}\n >\n <CommandPalette.Input placeholder=\"Search...\" />\n <CommandPalette.List>\n {loading ? (\n <CommandPalette.Loading />\n ) : (\n <>\n <CommandPalette.Results>\n {(group: CommandGroup) => (\n <CommandPalette.Group key={group.id} items={group.items}>\n <CommandPalette.GroupLabel>\n {group.label}\n </CommandPalette.GroupLabel>\n <CommandPalette.Items>\n {(item: CommandItem) => (\n <CommandPalette.Item\n key={item.id}\n value={item}\n onClick={() => setOpen(false)}\n >\n <span className=\"flex items-center gap-3\">\n {item.icon && (\n <span className=\"text-kumo-subtle\">\n {item.icon}\n </span>\n )}\n <span>{item.title}</span>\n </span>\n </CommandPalette.Item>\n )}\n </CommandPalette.Items>\n </CommandPalette.Group>\n )}\n </CommandPalette.Results>\n <CommandPalette.Empty>No results found</CommandPalette.Empty>\n </>\n )}\n </CommandPalette.List>\n </CommandPalette.Root>\n </div>",
|
|
2552
|
+
"<div className=\"flex flex-col items-start gap-4\">\n <Button onClick={() => setOpen(true)}>\n Open Palette (No Autocomplete)\n </Button>\n\n <CommandPalette.Root\n open={open}\n onOpenChange={setOpen}\n items={filteredGroups}\n value={search}\n onValueChange={setSearch}\n itemToStringValue={(group) => group.label}\n onSelect={(item) => {\n console.log(\"Selected:\", item.title);\n setOpen(false);\n setSearch(\"\");\n }}\n getSelectableItems={getSelectableItems}\n >\n <CommandPalette.Input\n placeholder=\"Search commands...\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"none\"\n spellCheck={false}\n data-1p-ignore=\"true\"\n data-lpignore=\"true\"\n />\n <CommandPalette.List>\n <CommandPalette.Results>\n {(group: CommandGroup) => (\n <CommandPalette.Group key={group.id} items={group.items}>\n <CommandPalette.GroupLabel>\n {group.label}\n </CommandPalette.GroupLabel>\n <CommandPalette.Items>\n {(item: CommandItem) => (\n <CommandPalette.Item\n key={item.id}\n value={item}\n onClick={() => {\n setOpen(false);\n setSearch(\"\");\n }}\n >\n <span className=\"flex items-center gap-3\">\n {item.icon && (\n <span className=\"text-kumo-subtle\">{item.icon}</span>\n )}\n <span>{item.title}</span>\n </span>\n </CommandPalette.Item>\n )}\n </CommandPalette.Items>\n </CommandPalette.Group>\n )}\n </CommandPalette.Results>\n <CommandPalette.Empty>No commands found</CommandPalette.Empty>\n </CommandPalette.List>\n </CommandPalette.Root>\n </div>",
|
|
2321
2553
|
"<div>\n <Button onClick={() => setOpen(true)}>Open with ResultItem</Button>\n\n <CommandPalette.Root\n open={open}\n onOpenChange={setOpen}\n items={searchResults}\n value={search}\n onValueChange={setSearch}\n itemToStringValue={(item) => item.title}\n getSelectableItems={(items) => items}\n >\n <CommandPalette.Input placeholder=\"Search documentation...\" />\n <CommandPalette.List>\n <CommandPalette.Results>\n {(item: SearchResult) => (\n <CommandPalette.ResultItem\n key={item.id}\n value={item}\n title={item.title}\n breadcrumbs={item.breadcrumbs}\n icon={item.icon}\n onClick={() => {\n console.log(\"Navigate to:\", item.title);\n setOpen(false);\n }}\n />\n )}\n </CommandPalette.Results>\n <CommandPalette.Empty>No pages found</CommandPalette.Empty>\n </CommandPalette.List>\n <CommandPalette.Footer>\n <span className=\"flex items-center gap-2\">\n <kbd className=\"rounded border border-kumo-hairline bg-kumo-base px-1.5 py-0.5 text-[10px]\">\n ↑↓\n </kbd>\n <span>Navigate</span>\n </span>\n <span className=\"flex items-center gap-2\">\n <kbd className=\"rounded border border-kumo-hairline bg-kumo-base px-1.5 py-0.5 text-[10px]\">\n ⌘↵\n </kbd>\n <span>Open in new tab</span>\n </span>\n </CommandPalette.Footer>\n </CommandPalette.Root>\n </div>"
|
|
2322
2554
|
],
|
|
2323
2555
|
"colors": [
|
|
@@ -2325,9 +2557,9 @@
|
|
|
2325
2557
|
"bg-kumo-elevated",
|
|
2326
2558
|
"bg-kumo-overlay",
|
|
2327
2559
|
"bg-kumo-warning",
|
|
2560
|
+
"ring-kumo-brand",
|
|
2328
2561
|
"ring-kumo-hairline",
|
|
2329
2562
|
"text-kumo-default",
|
|
2330
|
-
"text-kumo-strong",
|
|
2331
2563
|
"text-kumo-subtle"
|
|
2332
2564
|
]
|
|
2333
2565
|
},
|
|
@@ -2354,7 +2586,7 @@
|
|
|
2354
2586
|
"<div className=\"flex flex-col gap-4\">\n <DatePicker\n mode=\"range\"\n selected={range}\n onChange={setRange}\n min={3}\n max={7}\n footer={\n <span className=\"text-xs text-kumo-subtle\">Select 3-7 nights</span>\n }\n />\n </div>",
|
|
2355
2587
|
"<Popover>\n <Popover.Trigger\n render={<Button variant=\"outline\" icon={CalendarDotsIcon} />}\n >\n {date ? date.toLocaleDateString() : \"Pick a date\"}\n </Popover.Trigger>\n <Popover.Content className=\"p-3\">\n <DatePicker mode=\"single\" selected={date} onChange={setDate} />\n </Popover.Content>\n </Popover>",
|
|
2356
2588
|
"<Popover>\n <Popover.Trigger\n render={<Button variant=\"outline\" icon={CalendarDotsIcon} />}\n >\n {formatRange()}\n </Popover.Trigger>\n <Popover.Content className=\"p-3\">\n <DatePicker\n mode=\"range\"\n selected={range}\n onChange={setRange}\n numberOfMonths={2}\n />\n </Popover.Content>\n </Popover>",
|
|
2357
|
-
"<Popover>\n <Popover.Trigger\n render={<Button variant=\"outline\" icon={CalendarDotsIcon} />}\n >\n {formatRange()}\n </Popover.Trigger>\n <Popover.Content className=\"p-0\">\n <div className=\"flex\">\n <div className=\"flex flex-col gap-1 border-r border-kumo-hairline p-2 text-sm\">\n {presets.map((preset) => {\n const isActive = isPresetActive(preset);\n return (\n <button\n key={preset.label}\n type=\"button\"\n onClick={() => handlePresetClick(preset)}\n className={`rounded-md px-3 py-1.5 text-left whitespace-nowrap ${\n isActive\n ? \"bg-kumo-bg-inverse text-kumo-text-inverse\"\n : \"text-kumo-
|
|
2589
|
+
"<Popover>\n <Popover.Trigger\n render={<Button variant=\"outline\" icon={CalendarDotsIcon} />}\n >\n {formatRange()}\n </Popover.Trigger>\n <Popover.Content className=\"p-0\">\n <div className=\"flex\">\n <div className=\"flex flex-col gap-1 border-r border-kumo-hairline p-2 text-sm\">\n {presets.map((preset) => {\n const isActive = isPresetActive(preset);\n return (\n <button\n key={preset.label}\n type=\"button\"\n onClick={() => handlePresetClick(preset)}\n className={`rounded-md px-3 py-1.5 text-left whitespace-nowrap ${\n isActive\n ? \"bg-kumo-bg-inverse text-kumo-text-inverse\"\n : \"text-kumo-subtle hover:bg-kumo-control\"\n }`}\n >\n {preset.label}\n </button>\n );\n })}\n </div>\n <div className=\"p-3\">\n <DatePicker\n mode=\"range\"\n selected={range}\n onChange={setRange}\n month={month}\n onMonthChange={setMonth}\n numberOfMonths={2}\n />\n </div>\n </div>\n </Popover.Content>\n </Popover>",
|
|
2358
2590
|
"<DatePicker\n mode=\"multiple\"\n selected={dates}\n onChange={setDates}\n max={maxDays}\n disabled={unavailableDates}\n fixedWeeks\n footer={\n <p className=\"text-xs text-kumo-subtle pt-2 w-full\">\n {selectedCount}/{maxDays} days selected. Grayed dates are unavailable.\n </p>\n }\n />"
|
|
2359
2591
|
],
|
|
2360
2592
|
"colors": [
|
|
@@ -2433,9 +2665,9 @@
|
|
|
2433
2665
|
"bg-kumo-fill",
|
|
2434
2666
|
"bg-kumo-interact",
|
|
2435
2667
|
"bg-kumo-overlay",
|
|
2668
|
+
"ring-kumo-focus",
|
|
2436
2669
|
"text-kumo-default",
|
|
2437
2670
|
"text-kumo-inverse",
|
|
2438
|
-
"text-kumo-strong",
|
|
2439
2671
|
"text-kumo-subtle"
|
|
2440
2672
|
],
|
|
2441
2673
|
"styling": {
|
|
@@ -2675,6 +2907,8 @@
|
|
|
2675
2907
|
"bg-kumo-hairline",
|
|
2676
2908
|
"bg-kumo-overlay",
|
|
2677
2909
|
"bg-kumo-tint",
|
|
2910
|
+
"ring-kumo-brand",
|
|
2911
|
+
"ring-kumo-focus",
|
|
2678
2912
|
"ring-kumo-line",
|
|
2679
2913
|
"text-kumo-danger",
|
|
2680
2914
|
"text-kumo-default"
|
|
@@ -2845,7 +3079,7 @@
|
|
|
2845
3079
|
"text-kumo-brand",
|
|
2846
3080
|
"text-kumo-default",
|
|
2847
3081
|
"text-kumo-inactive",
|
|
2848
|
-
"text-kumo-
|
|
3082
|
+
"text-kumo-subtle",
|
|
2849
3083
|
"text-kumo-success"
|
|
2850
3084
|
]
|
|
2851
3085
|
},
|
|
@@ -3071,15 +3305,15 @@
|
|
|
3071
3305
|
"error": "Error state for validation failures"
|
|
3072
3306
|
},
|
|
3073
3307
|
"classes": {
|
|
3074
|
-
"default": "focus:ring-kumo-
|
|
3075
|
-
"error": "!ring-kumo-danger focus:ring-kumo-danger"
|
|
3308
|
+
"default": "focus:ring-kumo-focus/50 focus:ring-[1.5px]",
|
|
3309
|
+
"error": "!ring-kumo-danger focus:ring-kumo-danger/50 focus:ring-[1.5px]"
|
|
3076
3310
|
},
|
|
3077
3311
|
"stateClasses": {
|
|
3078
3312
|
"default": {
|
|
3079
|
-
"focus": "focus:ring-kumo-
|
|
3313
|
+
"focus": "focus:ring-kumo-focus/50 focus:ring-[1.5px]"
|
|
3080
3314
|
},
|
|
3081
3315
|
"error": {
|
|
3082
|
-
"focus": "focus:ring-kumo-danger"
|
|
3316
|
+
"focus": "focus:ring-kumo-danger/50 focus:ring-[1.5px]"
|
|
3083
3317
|
}
|
|
3084
3318
|
},
|
|
3085
3319
|
"default": "default"
|
|
@@ -3103,9 +3337,9 @@
|
|
|
3103
3337
|
"colors": [
|
|
3104
3338
|
"bg-kumo-control",
|
|
3105
3339
|
"ring-kumo-danger",
|
|
3106
|
-
"ring-kumo-
|
|
3107
|
-
"
|
|
3108
|
-
"text-kumo-
|
|
3340
|
+
"ring-kumo-focus",
|
|
3341
|
+
"ring-kumo-line",
|
|
3342
|
+
"text-kumo-default"
|
|
3109
3343
|
],
|
|
3110
3344
|
"styling": {
|
|
3111
3345
|
"dimensions": {
|
|
@@ -3158,34 +3392,200 @@
|
|
|
3158
3392
|
}
|
|
3159
3393
|
}
|
|
3160
3394
|
},
|
|
3161
|
-
"
|
|
3162
|
-
"name": "
|
|
3395
|
+
"InputGroup": {
|
|
3396
|
+
"name": "InputGroup",
|
|
3163
3397
|
"type": "component",
|
|
3164
|
-
"description": "
|
|
3398
|
+
"description": "InputGroup component",
|
|
3165
3399
|
"importPath": "@cloudflare/kumo",
|
|
3166
|
-
"category": "
|
|
3400
|
+
"category": "Input",
|
|
3167
3401
|
"props": {
|
|
3168
|
-
"
|
|
3402
|
+
"label": {
|
|
3169
3403
|
"type": "ReactNode",
|
|
3170
3404
|
"optional": true,
|
|
3171
3405
|
"description": "The label content — can be a string or any React node."
|
|
3172
3406
|
},
|
|
3173
|
-
"
|
|
3407
|
+
"description": {
|
|
3408
|
+
"type": "ReactNode",
|
|
3409
|
+
"optional": true,
|
|
3410
|
+
"description": "Helper text displayed below the control (hidden when `error` is present)."
|
|
3411
|
+
},
|
|
3412
|
+
"error": {
|
|
3413
|
+
"type": "object",
|
|
3414
|
+
"optional": true,
|
|
3415
|
+
"description": "Validation error with a message and a browser `ValidityState` match key."
|
|
3416
|
+
},
|
|
3417
|
+
"required": {
|
|
3174
3418
|
"type": "boolean",
|
|
3175
3419
|
"optional": true,
|
|
3176
|
-
"description": "When `
|
|
3420
|
+
"description": "When explicitly `false`, shows gray \"(optional)\" text after the label. When `true` or `undefined`, no indicator is shown."
|
|
3177
3421
|
},
|
|
3178
|
-
"
|
|
3422
|
+
"labelTooltip": {
|
|
3179
3423
|
"type": "ReactNode",
|
|
3180
3424
|
"optional": true,
|
|
3181
3425
|
"description": "Tooltip content displayed next to the label via an info icon."
|
|
3182
3426
|
},
|
|
3427
|
+
"children": {
|
|
3428
|
+
"type": "ReactNode",
|
|
3429
|
+
"optional": true
|
|
3430
|
+
},
|
|
3183
3431
|
"className": {
|
|
3184
3432
|
"type": "string",
|
|
3185
|
-
"optional": true
|
|
3186
|
-
"description": "Additional CSS classes merged via `cn()`."
|
|
3433
|
+
"optional": true
|
|
3187
3434
|
},
|
|
3188
|
-
"
|
|
3435
|
+
"id": {
|
|
3436
|
+
"type": "string",
|
|
3437
|
+
"optional": true
|
|
3438
|
+
},
|
|
3439
|
+
"lang": {
|
|
3440
|
+
"type": "string",
|
|
3441
|
+
"optional": true
|
|
3442
|
+
},
|
|
3443
|
+
"title": {
|
|
3444
|
+
"type": "string",
|
|
3445
|
+
"optional": true
|
|
3446
|
+
},
|
|
3447
|
+
"size": {
|
|
3448
|
+
"type": "enum",
|
|
3449
|
+
"optional": true,
|
|
3450
|
+
"values": [
|
|
3451
|
+
"xs",
|
|
3452
|
+
"sm",
|
|
3453
|
+
"base",
|
|
3454
|
+
"lg"
|
|
3455
|
+
],
|
|
3456
|
+
"descriptions": {
|
|
3457
|
+
"xs": "Extra small size.",
|
|
3458
|
+
"sm": "Small size.",
|
|
3459
|
+
"base": "Default size.",
|
|
3460
|
+
"lg": "Large size."
|
|
3461
|
+
},
|
|
3462
|
+
"classes": {
|
|
3463
|
+
"xs": "h-6 text-xs",
|
|
3464
|
+
"sm": "h-7 text-xs",
|
|
3465
|
+
"base": "h-9 text-base",
|
|
3466
|
+
"lg": "h-11 text-base"
|
|
3467
|
+
},
|
|
3468
|
+
"default": "base"
|
|
3469
|
+
},
|
|
3470
|
+
"disabled": {
|
|
3471
|
+
"type": "boolean",
|
|
3472
|
+
"optional": true
|
|
3473
|
+
}
|
|
3474
|
+
},
|
|
3475
|
+
"examples": [
|
|
3476
|
+
"<div className=\"w-full max-w-2xs\">\n <InputGroup>\n <InputGroup.Input\n maxLength={20}\n onChange={handleChange}\n value={value}\n />\n <InputGroup.Suffix>.workers.dev</InputGroup.Suffix>\n {status !== \"idle\" && (\n <InputGroup.Addon align=\"end\">\n {status === \"loading\" ? (\n <Loader />\n ) : (\n <CheckCircleIcon weight=\"duotone\" className=\"text-kumo-success\" />\n )}\n </InputGroup.Addon>\n )}\n </InputGroup>\n </div>",
|
|
3477
|
+
"<InputGroup className=\"w-full max-w-3xs\">\n <InputGroup.Addon>\n <LinkIcon />\n </InputGroup.Addon>\n <InputGroup.Input placeholder=\"Paste a link...\" aria-label=\"Link\" />\n </InputGroup>",
|
|
3478
|
+
"<div className=\"flex flex-col gap-4\">\n <InputGroup className=\"w-full max-w-3xs\">\n <InputGroup.Addon>@</InputGroup.Addon>\n <InputGroup.Input placeholder=\"username\" aria-label=\"Username\" />\n </InputGroup>\n\n <InputGroup className=\"w-full max-w-3xs\">\n <InputGroup.Input placeholder=\"email\" aria-label=\"Email\" />\n <InputGroup.Addon align=\"end\">@example.com</InputGroup.Addon>\n </InputGroup>\n\n <InputGroup className=\"w-full max-w-3xs\">\n <InputGroup.Addon>/api/</InputGroup.Addon>\n <InputGroup.Input placeholder=\"endpoint\" aria-label=\"API path\" />\n <InputGroup.Addon align=\"end\">.json</InputGroup.Addon>\n </InputGroup>\n </div>",
|
|
3479
|
+
"<div className=\"flex flex-col gap-4\">\n <InputGroup className=\"w-full max-w-3xs\">\n <InputGroup.Input\n type={show ? \"text\" : \"password\"}\n defaultValue=\"password\"\n aria-label=\"Password\"\n />\n <InputGroup.Addon align=\"end\">\n <InputGroup.Button\n className=\"text-kumo-subtle\"\n icon={show ? EyeSlashIcon : EyeIcon}\n aria-label={show ? \"Hide password\" : \"Show password\"}\n onClick={() => setShow(!show)}\n />\n </InputGroup.Addon>\n </InputGroup>\n\n <InputGroup className=\"w-full max-w-3xs\">\n <InputGroup.Addon>\n <MagnifyingGlassIcon />\n </InputGroup.Addon>\n <InputGroup.Input\n value={searchValue}\n placeholder=\"Search\"\n aria-label=\"Search\"\n onChange={(e) => setSearchValue(e.target.value)}\n />\n {searchValue && (\n <InputGroup.Addon align=\"end\" className=\"pr-1\">\n <InputGroup.Button\n aria-label=\"Clear search\"\n onClick={() => setSearchValue(\"\")}\n >\n <XIcon />\n </InputGroup.Button>\n </InputGroup.Addon>\n )}\n <InputGroup.Button variant=\"secondary\" onClick={() => {}}>\n Search\n </InputGroup.Button>\n </InputGroup>\n </div>",
|
|
3480
|
+
"<InputGroup className=\"w-full max-w-2xs\">\n <InputGroup.Addon>\n <MagnifyingGlassIcon />\n </InputGroup.Addon>\n <InputGroup.Input\n placeholder=\"Search with query language...\"\n aria-label=\"Search\"\n />\n <InputGroup.Addon align=\"end\">\n <InputGroup.Button\n className=\"text-kumo-subtle\"\n icon={QuestionIcon}\n tooltip=\"Query language help\"\n onClick={() => {}}\n />\n </InputGroup.Addon>\n </InputGroup>",
|
|
3481
|
+
"<InputGroup className=\"w-full max-w-3xs\">\n <InputGroup.Addon>\n <MagnifyingGlassIcon />\n </InputGroup.Addon>\n <InputGroup.Input placeholder=\"Search...\" aria-label=\"Search\" />\n <InputGroup.Addon align=\"end\">\n <kbd className=\"bg-none! border-none!\">⌘K</kbd>\n </InputGroup.Addon>\n </InputGroup>",
|
|
3482
|
+
"<InputGroup className=\"w-full max-w-3xs\">\n <InputGroup.Input defaultValue=\"kumo\" aria-label=\"kumo\" />\n <InputGroup.Addon align=\"end\">\n <Loader />\n </InputGroup.Addon>\n </InputGroup>",
|
|
3483
|
+
"<div className=\"flex w-full max-w-2xs flex-col gap-4\">\n <InputGroup label=\"Subdomain\">\n <InputGroup.Input\n aria-label=\"Subdomain\"\n defaultValue=\"kumo\"\n maxLength={20}\n />\n <InputGroup.Suffix>.workers.dev</InputGroup.Suffix>\n <InputGroup.Addon align=\"end\">\n <CheckCircleIcon weight=\"duotone\" className=\"text-kumo-success\" />\n </InputGroup.Addon>\n </InputGroup>\n\n <InputGroup\n label=\"Subdomain\"\n error={{ message: \"This subdomain is unavailable\", match: true }}\n >\n <InputGroup.Input\n aria-label=\"Subdomain\"\n defaultValue=\"kumo\"\n maxLength={20}\n />\n <InputGroup.Suffix>.workers.dev</InputGroup.Suffix>\n <InputGroup.Addon align=\"end\">\n <XCircleIcon weight=\"duotone\" className=\"text-kumo-danger\" />\n </InputGroup.Addon>\n </InputGroup>\n </div>",
|
|
3484
|
+
"<div className=\"flex w-full max-w-3xs flex-col gap-4\">\n <InputGroup size=\"xs\" label=\"Extra Small\">\n <InputGroup.Addon>\n <MagnifyingGlassIcon />\n </InputGroup.Addon>\n <InputGroup.Input placeholder=\"Extra small input\" />\n <InputGroup.Addon align=\"end\">\n <InputGroup.Button\n className=\"text-kumo-subtle\"\n icon={QuestionIcon}\n shape=\"square\"\n aria-label=\"Help\"\n />\n </InputGroup.Addon>\n </InputGroup>\n\n <InputGroup size=\"sm\" label=\"Small\">\n <InputGroup.Addon>\n <MagnifyingGlassIcon />\n </InputGroup.Addon>\n <InputGroup.Input placeholder=\"Small input\" />\n <InputGroup.Addon align=\"end\">\n <InputGroup.Button\n className=\"text-kumo-subtle\"\n icon={QuestionIcon}\n shape=\"square\"\n aria-label=\"Help\"\n />\n </InputGroup.Addon>\n </InputGroup>\n\n <InputGroup label=\"Base (default)\">\n <InputGroup.Addon>\n <MagnifyingGlassIcon />\n </InputGroup.Addon>\n <InputGroup.Input placeholder=\"Base input\" />\n <InputGroup.Addon align=\"end\">\n <InputGroup.Button\n className=\"text-kumo-subtle\"\n icon={QuestionIcon}\n shape=\"square\"\n aria-label=\"Help\"\n />\n </InputGroup.Addon>\n </InputGroup>\n\n <InputGroup size=\"lg\" label=\"Large\">\n <InputGroup.Addon>\n <MagnifyingGlassIcon />\n </InputGroup.Addon>\n <InputGroup.Input placeholder=\"Large input\" />\n <InputGroup.Addon align=\"end\">\n <InputGroup.Button\n className=\"text-kumo-subtle\"\n icon={QuestionIcon}\n shape=\"square\"\n aria-label=\"Help\"\n />\n </InputGroup.Addon>\n </InputGroup>\n </div>",
|
|
3485
|
+
"<div className=\"flex w-full max-w-3xs flex-col gap-4\">\n <InputGroup\n label=\"Error State\"\n error={{ message: \"Please enter a valid email address\", match: true }}\n >\n <InputGroup.Input type=\"email\" defaultValue=\"invalid-email\" />\n <InputGroup.Addon align=\"end\">@example.com</InputGroup.Addon>\n </InputGroup>\n\n <InputGroup label=\"Disabled\" disabled>\n <InputGroup.Addon>\n <MagnifyingGlassIcon />\n </InputGroup.Addon>\n <InputGroup.Input placeholder=\"Search...\" />\n </InputGroup>\n\n <InputGroup label=\"Optional Field\" required={false}>\n <InputGroup.Addon>$</InputGroup.Addon>\n <InputGroup.Input placeholder=\"0.00\" />\n </InputGroup>\n\n <InputGroup\n label=\"With Description\"\n description=\"Must be at least 8 characters\"\n labelTooltip=\"Your password is stored securely\"\n >\n <InputGroup.Input\n type={show ? \"text\" : \"password\"}\n placeholder=\"Password\"\n />\n <InputGroup.Addon align=\"end\">\n <InputGroup.Button\n className=\"text-kumo-subtle\"\n icon={show ? EyeSlashIcon : EyeIcon}\n aria-label={show ? \"Hide password\" : \"Show password\"}\n onClick={() => setShow(!show)}\n />\n </InputGroup.Addon>\n </InputGroup>\n </div>"
|
|
3486
|
+
],
|
|
3487
|
+
"colors": [
|
|
3488
|
+
"border-kumo-line",
|
|
3489
|
+
"ring-kumo-danger",
|
|
3490
|
+
"ring-kumo-focus",
|
|
3491
|
+
"ring-kumo-line"
|
|
3492
|
+
],
|
|
3493
|
+
"subComponents": {
|
|
3494
|
+
"Input": {
|
|
3495
|
+
"name": "Input",
|
|
3496
|
+
"description": "Input sub-component",
|
|
3497
|
+
"props": {}
|
|
3498
|
+
},
|
|
3499
|
+
"Button": {
|
|
3500
|
+
"name": "Button",
|
|
3501
|
+
"description": "Button sub-component",
|
|
3502
|
+
"props": {
|
|
3503
|
+
"tooltip": {
|
|
3504
|
+
"type": "ReactNode",
|
|
3505
|
+
"description": "When provided, wraps the button in a Tooltip. Automatically sets aria-label from a string value."
|
|
3506
|
+
},
|
|
3507
|
+
"tooltipSide": {
|
|
3508
|
+
"type": "\"top\" | \"right\" | \"bottom\" | \"left\"",
|
|
3509
|
+
"description": "Preferred side for the tooltip popup.",
|
|
3510
|
+
"default": "\"bottom\""
|
|
3511
|
+
},
|
|
3512
|
+
"variant": {
|
|
3513
|
+
"type": "\"primary\" | \"secondary\" | \"ghost\" | \"destructive\" | \"secondary-destructive\" | \"outline\"",
|
|
3514
|
+
"description": "Button visual style. Defaults to ghost.",
|
|
3515
|
+
"default": "\"ghost\""
|
|
3516
|
+
},
|
|
3517
|
+
"size": {
|
|
3518
|
+
"type": "\"xs\" | \"sm\" | \"base\" | \"lg\"",
|
|
3519
|
+
"description": "Button size.",
|
|
3520
|
+
"default": "\"sm\""
|
|
3521
|
+
}
|
|
3522
|
+
}
|
|
3523
|
+
},
|
|
3524
|
+
"Addon": {
|
|
3525
|
+
"name": "Addon",
|
|
3526
|
+
"description": "Addon sub-component",
|
|
3527
|
+
"props": {
|
|
3528
|
+
"align": {
|
|
3529
|
+
"type": "\"start\" | \"end\"",
|
|
3530
|
+
"description": "Position relative to the input.",
|
|
3531
|
+
"default": "\"start\""
|
|
3532
|
+
},
|
|
3533
|
+
"className": {
|
|
3534
|
+
"type": "string",
|
|
3535
|
+
"description": "Additional CSS classes."
|
|
3536
|
+
}
|
|
3537
|
+
}
|
|
3538
|
+
},
|
|
3539
|
+
"Suffix": {
|
|
3540
|
+
"name": "Suffix",
|
|
3541
|
+
"description": "Suffix sub-component",
|
|
3542
|
+
"props": {
|
|
3543
|
+
"className": {
|
|
3544
|
+
"type": "string",
|
|
3545
|
+
"description": "Additional CSS classes."
|
|
3546
|
+
}
|
|
3547
|
+
}
|
|
3548
|
+
},
|
|
3549
|
+
"Label": {
|
|
3550
|
+
"name": "Label",
|
|
3551
|
+
"description": "Label sub-component",
|
|
3552
|
+
"props": {}
|
|
3553
|
+
},
|
|
3554
|
+
"Description": {
|
|
3555
|
+
"name": "Description",
|
|
3556
|
+
"description": "Description sub-component",
|
|
3557
|
+
"props": {}
|
|
3558
|
+
}
|
|
3559
|
+
}
|
|
3560
|
+
},
|
|
3561
|
+
"Label": {
|
|
3562
|
+
"name": "Label",
|
|
3563
|
+
"type": "component",
|
|
3564
|
+
"description": "Label component for form fields. Provides a standardized way to display labels with optional indicators: - Optional indicator: gray \"(optional)\" text when `showOptional={true}` - Tooltip: info icon with hover tooltip for additional context",
|
|
3565
|
+
"importPath": "@cloudflare/kumo",
|
|
3566
|
+
"category": "Other",
|
|
3567
|
+
"props": {
|
|
3568
|
+
"children": {
|
|
3569
|
+
"type": "ReactNode",
|
|
3570
|
+
"optional": true,
|
|
3571
|
+
"description": "The label content — can be a string or any React node."
|
|
3572
|
+
},
|
|
3573
|
+
"showOptional": {
|
|
3574
|
+
"type": "boolean",
|
|
3575
|
+
"optional": true,
|
|
3576
|
+
"description": "When `true`, shows gray \"(optional)\" text after the label."
|
|
3577
|
+
},
|
|
3578
|
+
"tooltip": {
|
|
3579
|
+
"type": "ReactNode",
|
|
3580
|
+
"optional": true,
|
|
3581
|
+
"description": "Tooltip content displayed next to the label via an info icon."
|
|
3582
|
+
},
|
|
3583
|
+
"className": {
|
|
3584
|
+
"type": "string",
|
|
3585
|
+
"optional": true,
|
|
3586
|
+
"description": "Additional CSS classes merged via `cn()`."
|
|
3587
|
+
},
|
|
3588
|
+
"htmlFor": {
|
|
3189
3589
|
"type": "string",
|
|
3190
3590
|
"optional": true,
|
|
3191
3591
|
"description": "The id of the form element this label is associated with"
|
|
@@ -3206,7 +3606,7 @@
|
|
|
3206
3606
|
],
|
|
3207
3607
|
"colors": [
|
|
3208
3608
|
"text-kumo-default",
|
|
3209
|
-
"text-kumo-
|
|
3609
|
+
"text-kumo-subtle"
|
|
3210
3610
|
]
|
|
3211
3611
|
},
|
|
3212
3612
|
"LayerCard": {
|
|
@@ -3219,7 +3619,7 @@
|
|
|
3219
3619
|
"render": {
|
|
3220
3620
|
"type": "ReactNode",
|
|
3221
3621
|
"optional": true,
|
|
3222
|
-
"description": "Allows you to replace the component
|
|
3622
|
+
"description": "Allows you to replace the component's HTML element with a different tag, or compose it with another component.\n\nAccepts a `ReactElement` or a function that returns the element to render."
|
|
3223
3623
|
},
|
|
3224
3624
|
"children": {
|
|
3225
3625
|
"type": "ReactNode",
|
|
@@ -3254,7 +3654,7 @@
|
|
|
3254
3654
|
"ring-kumo-fill",
|
|
3255
3655
|
"ring-kumo-hairline",
|
|
3256
3656
|
"ring-kumo-line",
|
|
3257
|
-
"text-kumo-
|
|
3657
|
+
"text-kumo-subtle"
|
|
3258
3658
|
],
|
|
3259
3659
|
"subComponents": {
|
|
3260
3660
|
"Primary": {
|
|
@@ -3387,7 +3787,7 @@
|
|
|
3387
3787
|
"render": {
|
|
3388
3788
|
"type": "ReactNode",
|
|
3389
3789
|
"optional": true,
|
|
3390
|
-
"description": "Allows you to replace the component
|
|
3790
|
+
"description": "Allows you to replace the component's HTML element with a different tag, or compose it with another component.\n\nAccepts a `ReactElement` or a function that returns the element to render."
|
|
3391
3791
|
}
|
|
3392
3792
|
},
|
|
3393
3793
|
"examples": [
|
|
@@ -3480,9 +3880,10 @@
|
|
|
3480
3880
|
],
|
|
3481
3881
|
"colors": [
|
|
3482
3882
|
"bg-kumo-base",
|
|
3483
|
-
"bg-kumo-elevated",
|
|
3484
3883
|
"bg-kumo-recessed",
|
|
3485
3884
|
"border-kumo-recessed",
|
|
3885
|
+
"ring-kumo-brand",
|
|
3886
|
+
"ring-kumo-focus",
|
|
3486
3887
|
"ring-kumo-line"
|
|
3487
3888
|
],
|
|
3488
3889
|
"styling": {
|
|
@@ -3555,7 +3956,7 @@
|
|
|
3555
3956
|
"colors": [
|
|
3556
3957
|
"bg-kumo-fill",
|
|
3557
3958
|
"text-kumo-default",
|
|
3558
|
-
"text-kumo-
|
|
3959
|
+
"text-kumo-subtle"
|
|
3559
3960
|
]
|
|
3560
3961
|
},
|
|
3561
3962
|
"Pagination": {
|
|
@@ -3635,7 +4036,7 @@
|
|
|
3635
4036
|
"colors": [
|
|
3636
4037
|
"border-kumo-hairline",
|
|
3637
4038
|
"ring-kumo-hairline",
|
|
3638
|
-
"text-kumo-
|
|
4039
|
+
"text-kumo-subtle"
|
|
3639
4040
|
],
|
|
3640
4041
|
"subComponents": {
|
|
3641
4042
|
"Info": {
|
|
@@ -3805,19 +4206,19 @@
|
|
|
3805
4206
|
"Radio": {
|
|
3806
4207
|
"name": "Radio",
|
|
3807
4208
|
"type": "component",
|
|
3808
|
-
"description": "Radio — radio button group for single-select choices. Compound component: `Radio.Group` (with built-in Fieldset) and `Radio.
|
|
4209
|
+
"description": "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`.",
|
|
3809
4210
|
"importPath": "@cloudflare/kumo",
|
|
3810
4211
|
"category": "Input",
|
|
3811
4212
|
"props": {
|
|
3812
4213
|
"legend": {
|
|
3813
4214
|
"type": "string",
|
|
3814
|
-
"
|
|
3815
|
-
"description": "Legend text for the group (required for accessibility)"
|
|
4215
|
+
"optional": true,
|
|
4216
|
+
"description": "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."
|
|
3816
4217
|
},
|
|
3817
4218
|
"children": {
|
|
3818
4219
|
"type": "ReactNode",
|
|
3819
4220
|
"optional": true,
|
|
3820
|
-
"description": "Child Radio.Item components"
|
|
4221
|
+
"description": "Child Radio.Item components (and optionally a Radio.Legend)"
|
|
3821
4222
|
},
|
|
3822
4223
|
"orientation": {
|
|
3823
4224
|
"type": "enum",
|
|
@@ -3873,7 +4274,7 @@
|
|
|
3873
4274
|
"controlPosition": {
|
|
3874
4275
|
"type": "enum",
|
|
3875
4276
|
"optional": true,
|
|
3876
|
-
"description": "Position of radio control relative to label: \"start\"
|
|
4277
|
+
"description": "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.",
|
|
3877
4278
|
"values": [
|
|
3878
4279
|
"start",
|
|
3879
4280
|
"end"
|
|
@@ -3899,6 +4300,10 @@
|
|
|
3899
4300
|
"<div className=\"grid grid-cols-2 gap-6\">\n <Radio.Group legend=\"Disabled group\" disabled defaultValue=\"a\">\n <Radio.Item label=\"Option A\" value=\"a\" />\n <Radio.Item label=\"Option B\" value=\"b\" />\n </Radio.Group>\n <Radio.Group legend=\"Individual disabled\" defaultValue=\"available\">\n <Radio.Item label=\"Available\" value=\"available\" />\n <Radio.Item label=\"Unavailable\" value=\"unavailable\" disabled />\n </Radio.Group>\n <Radio.Group\n legend=\"Disabled card group\"\n appearance=\"card\"\n disabled\n defaultValue=\"a\"\n >\n <Radio.Item\n label=\"Option A\"\n description=\"This option is disabled.\"\n value=\"a\"\n />\n <Radio.Item\n label=\"Option B\"\n description=\"This option is disabled.\"\n value=\"b\"\n />\n </Radio.Group>\n <Radio.Group\n legend=\"Individual disabled card\"\n appearance=\"card\"\n defaultValue=\"available\"\n >\n <Radio.Item\n label=\"Available\"\n description=\"This option can be selected.\"\n value=\"available\"\n />\n <Radio.Item\n label=\"Unavailable\"\n description=\"This option is not available.\"\n value=\"unavailable\"\n disabled\n />\n </Radio.Group>\n </div>",
|
|
3900
4301
|
"<Radio.Group legend=\"Preferences\" controlPosition=\"end\" defaultValue=\"a\">\n <Radio.Item label=\"Label before radio\" value=\"a\" />\n <Radio.Item label=\"Another option\" value=\"b\" />\n </Radio.Group>",
|
|
3901
4302
|
"<Radio.Group\n legend=\"Choose a plan\"\n appearance=\"card\"\n value={value}\n onValueChange={setValue}\n >\n <Radio.Item\n label=\"Free\"\n description=\"For personal or hobby projects that aren't business-critical.\"\n value=\"free\"\n />\n <Radio.Item\n label=\"Pro\"\n description=\"For professional websites that aren't business-critical.\"\n value=\"pro\"\n />\n <Radio.Item\n label=\"Business\"\n description=\"For small businesses operating online.\"\n value=\"business\"\n />\n <Radio.Item\n label=\"Contract\"\n description=\"For mission-critical applications that are core to your business.\"\n value=\"contract\"\n />\n </Radio.Group>",
|
|
4303
|
+
"<Radio.Group defaultValue=\"all\" value={value} onValueChange={setValue}>\n <Radio.Legend className=\"sr-only\">Paths</Radio.Legend>\n <Radio.Item label=\"Allow all paths\" value=\"all\" />\n <Radio.Item label=\"Restrict to specific paths\" value=\"specific\" />\n </Radio.Group>",
|
|
4304
|
+
"<Radio.Group value={value} onValueChange={setValue}>\n <Radio.Legend className=\"text-sm font-normal text-kumo-subtle\">\n Notification preference\n </Radio.Legend>\n <Radio.Item label=\"Email\" value=\"email\" />\n <Radio.Item label=\"SMS\" value=\"sms\" />\n <Radio.Item label=\"Push notification\" value=\"push\" />\n </Radio.Group>",
|
|
4305
|
+
"<Radio.Group\n legend=\"Choose a plan\"\n appearance=\"card\"\n controlPosition=\"start\"\n value={value}\n onValueChange={setValue}\n >\n <Radio.Item\n label=\"Free\"\n description=\"For personal or hobby projects that aren't business-critical.\"\n value=\"free\"\n />\n <Radio.Item\n label=\"Pro\"\n description=\"For professional websites that aren't business-critical.\"\n value=\"pro\"\n />\n </Radio.Group>",
|
|
4306
|
+
"<Radio.Group\n legend=\"Choose a plan\"\n appearance=\"card\"\n value={value}\n onValueChange={setValue}\n >\n <Radio.Item\n label={\n <span className=\"flex items-center gap-2\">\n Free\n <Badge variant=\"neutral\">$0</Badge>\n </span>\n }\n description=\"For personal or hobby projects.\"\n value=\"free\"\n />\n <Radio.Item\n label={\n <span className=\"flex items-center gap-2\">\n Pro\n <Badge variant=\"primary\">Popular</Badge>\n </span>\n }\n description=\"For professional websites.\"\n value=\"pro\"\n />\n </Radio.Group>",
|
|
3902
4307
|
"<Radio.Group\n legend=\"Choose a plan\"\n appearance=\"card\"\n orientation=\"horizontal\"\n value={value}\n onValueChange={setValue}\n >\n <Radio.Item\n label=\"Free\"\n description=\"For personal or hobby projects that aren't business-critical.\"\n value=\"free\"\n />\n <Radio.Item\n label=\"Pro\"\n description=\"For professional websites that aren't business-critical.\"\n value=\"pro\"\n />\n <Radio.Item\n label=\"Business\"\n description=\"For small businesses operating online.\"\n value=\"business\"\n />\n <Radio.Item\n label=\"Contract\"\n description=\"For mission-critical applications that are core to your business.\"\n value=\"contract\"\n />\n </Radio.Group>"
|
|
3903
4308
|
],
|
|
3904
4309
|
"colors": [
|
|
@@ -3908,8 +4313,11 @@
|
|
|
3908
4313
|
"border-kumo-danger",
|
|
3909
4314
|
"border-kumo-hairline",
|
|
3910
4315
|
"border-kumo-interact",
|
|
4316
|
+
"ring-kumo-brand",
|
|
3911
4317
|
"ring-kumo-danger",
|
|
4318
|
+
"ring-kumo-focus",
|
|
3912
4319
|
"ring-kumo-hairline",
|
|
4320
|
+
"ring-kumo-line",
|
|
3913
4321
|
"text-kumo-danger",
|
|
3914
4322
|
"text-kumo-default",
|
|
3915
4323
|
"text-kumo-subtle"
|
|
@@ -3926,7 +4334,7 @@
|
|
|
3926
4334
|
"props": {
|
|
3927
4335
|
"legend": {
|
|
3928
4336
|
"type": "string",
|
|
3929
|
-
"
|
|
4337
|
+
"optional": true
|
|
3930
4338
|
},
|
|
3931
4339
|
"children": {
|
|
3932
4340
|
"type": "ReactNode",
|
|
@@ -3957,11 +4365,7 @@
|
|
|
3957
4365
|
"optional": true
|
|
3958
4366
|
},
|
|
3959
4367
|
"label": {
|
|
3960
|
-
"type": "\"start\"
|
|
3961
|
-
"required": true
|
|
3962
|
-
},
|
|
3963
|
-
"Note": {
|
|
3964
|
-
"type": "In card appearance",
|
|
4368
|
+
"type": "\"start\" puts radio before label",
|
|
3965
4369
|
"required": true
|
|
3966
4370
|
},
|
|
3967
4371
|
"controlPosition": {
|
|
@@ -3977,6 +4381,20 @@
|
|
|
3977
4381
|
"optional": true
|
|
3978
4382
|
}
|
|
3979
4383
|
}
|
|
4384
|
+
},
|
|
4385
|
+
"Legend": {
|
|
4386
|
+
"name": "Legend",
|
|
4387
|
+
"description": "Legend sub-component",
|
|
4388
|
+
"props": {
|
|
4389
|
+
"children": {
|
|
4390
|
+
"type": "ReactNode",
|
|
4391
|
+
"required": true
|
|
4392
|
+
},
|
|
4393
|
+
"className": {
|
|
4394
|
+
"type": "string",
|
|
4395
|
+
"optional": true
|
|
4396
|
+
}
|
|
4397
|
+
}
|
|
3980
4398
|
}
|
|
3981
4399
|
}
|
|
3982
4400
|
},
|
|
@@ -4089,9 +4507,12 @@
|
|
|
4089
4507
|
],
|
|
4090
4508
|
"colors": [
|
|
4091
4509
|
"bg-kumo-base",
|
|
4510
|
+
"bg-kumo-elevated",
|
|
4092
4511
|
"bg-kumo-hairline",
|
|
4093
4512
|
"bg-kumo-tint",
|
|
4094
|
-
"
|
|
4513
|
+
"border-kumo-line",
|
|
4514
|
+
"ring-kumo-brand",
|
|
4515
|
+
"ring-kumo-focus",
|
|
4095
4516
|
"ring-kumo-line",
|
|
4096
4517
|
"text-kumo-danger",
|
|
4097
4518
|
"text-kumo-default",
|
|
@@ -4125,7 +4546,7 @@
|
|
|
4125
4546
|
"height": 36,
|
|
4126
4547
|
"paddingX": 12,
|
|
4127
4548
|
"borderRadius": 8,
|
|
4128
|
-
"background": "
|
|
4549
|
+
"background": "bg-kumo-elevated",
|
|
4129
4550
|
"text": "text-color-surface",
|
|
4130
4551
|
"ring": "color-border",
|
|
4131
4552
|
"fontSize": 16,
|
|
@@ -4150,8 +4571,8 @@
|
|
|
4150
4571
|
}
|
|
4151
4572
|
},
|
|
4152
4573
|
"popup": {
|
|
4153
|
-
"background": "
|
|
4154
|
-
"ring": "
|
|
4574
|
+
"background": "bg-kumo-elevated",
|
|
4575
|
+
"ring": "border-kumo-line",
|
|
4155
4576
|
"borderRadius": 8,
|
|
4156
4577
|
"padding": 6
|
|
4157
4578
|
},
|
|
@@ -4292,8 +4713,9 @@
|
|
|
4292
4713
|
"colors": [
|
|
4293
4714
|
"bg-kumo-brand",
|
|
4294
4715
|
"bg-kumo-control",
|
|
4295
|
-
"outline-kumo-
|
|
4296
|
-
"ring-kumo-
|
|
4716
|
+
"outline-kumo-focus",
|
|
4717
|
+
"ring-kumo-brand",
|
|
4718
|
+
"ring-kumo-focus",
|
|
4297
4719
|
"text-kumo-default",
|
|
4298
4720
|
"text-kumo-subtle"
|
|
4299
4721
|
]
|
|
@@ -4407,9 +4829,9 @@
|
|
|
4407
4829
|
"bg-kumo-recessed",
|
|
4408
4830
|
"bg-kumo-tint",
|
|
4409
4831
|
"border-kumo-hairline",
|
|
4832
|
+
"ring-kumo-brand",
|
|
4410
4833
|
"ring-kumo-hairline",
|
|
4411
4834
|
"text-kumo-default",
|
|
4412
|
-
"text-kumo-strong",
|
|
4413
4835
|
"text-kumo-subtle"
|
|
4414
4836
|
],
|
|
4415
4837
|
"subComponents": {
|
|
@@ -4466,82 +4888,222 @@
|
|
|
4466
4888
|
"Header": {
|
|
4467
4889
|
"name": "Header",
|
|
4468
4890
|
"description": "Header sub-component",
|
|
4469
|
-
"props": {
|
|
4891
|
+
"props": {
|
|
4892
|
+
"collapsible": {
|
|
4893
|
+
"type": "boolean",
|
|
4894
|
+
"optional": true
|
|
4895
|
+
},
|
|
4896
|
+
"defaultOpen": {
|
|
4897
|
+
"type": "boolean",
|
|
4898
|
+
"optional": true
|
|
4899
|
+
},
|
|
4900
|
+
"open": {
|
|
4901
|
+
"type": "boolean",
|
|
4902
|
+
"optional": true
|
|
4903
|
+
}
|
|
4904
|
+
}
|
|
4470
4905
|
},
|
|
4471
4906
|
"Content": {
|
|
4472
4907
|
"name": "Content",
|
|
4473
4908
|
"description": "Content sub-component",
|
|
4474
|
-
"props": {
|
|
4909
|
+
"props": {
|
|
4910
|
+
"collapsible": {
|
|
4911
|
+
"type": "boolean",
|
|
4912
|
+
"optional": true
|
|
4913
|
+
},
|
|
4914
|
+
"defaultOpen": {
|
|
4915
|
+
"type": "boolean",
|
|
4916
|
+
"optional": true
|
|
4917
|
+
},
|
|
4918
|
+
"open": {
|
|
4919
|
+
"type": "boolean",
|
|
4920
|
+
"optional": true
|
|
4921
|
+
}
|
|
4922
|
+
}
|
|
4475
4923
|
},
|
|
4476
4924
|
"Footer": {
|
|
4477
4925
|
"name": "Footer",
|
|
4478
4926
|
"description": "Footer sub-component",
|
|
4479
|
-
"props": {
|
|
4927
|
+
"props": {
|
|
4928
|
+
"collapsible": {
|
|
4929
|
+
"type": "boolean",
|
|
4930
|
+
"optional": true
|
|
4931
|
+
},
|
|
4932
|
+
"defaultOpen": {
|
|
4933
|
+
"type": "boolean",
|
|
4934
|
+
"optional": true
|
|
4935
|
+
},
|
|
4936
|
+
"open": {
|
|
4937
|
+
"type": "boolean",
|
|
4938
|
+
"optional": true
|
|
4939
|
+
}
|
|
4940
|
+
}
|
|
4480
4941
|
},
|
|
4481
4942
|
"Group": {
|
|
4482
4943
|
"name": "Group",
|
|
4483
4944
|
"description": "Group sub-component",
|
|
4484
|
-
"props": {
|
|
4945
|
+
"props": {
|
|
4946
|
+
"collapsible": {
|
|
4947
|
+
"type": "boolean",
|
|
4948
|
+
"optional": true
|
|
4949
|
+
},
|
|
4950
|
+
"defaultOpen": {
|
|
4951
|
+
"type": "boolean",
|
|
4952
|
+
"optional": true
|
|
4953
|
+
},
|
|
4954
|
+
"open": {
|
|
4955
|
+
"type": "boolean",
|
|
4956
|
+
"optional": true
|
|
4957
|
+
}
|
|
4958
|
+
}
|
|
4485
4959
|
},
|
|
4486
4960
|
"GroupLabel": {
|
|
4487
4961
|
"name": "GroupLabel",
|
|
4488
4962
|
"description": "GroupLabel sub-component",
|
|
4489
|
-
"props": {
|
|
4963
|
+
"props": {
|
|
4964
|
+
"icon": {
|
|
4965
|
+
"type": "React.ComponentType<{ className?: string",
|
|
4966
|
+
"optional": true
|
|
4967
|
+
}
|
|
4968
|
+
}
|
|
4490
4969
|
},
|
|
4491
4970
|
"GroupContent": {
|
|
4492
4971
|
"name": "GroupContent",
|
|
4493
4972
|
"description": "GroupContent sub-component",
|
|
4494
|
-
"props": {
|
|
4973
|
+
"props": {
|
|
4974
|
+
"icon": {
|
|
4975
|
+
"type": "React.ComponentType<{ className?: string",
|
|
4976
|
+
"optional": true
|
|
4977
|
+
}
|
|
4978
|
+
}
|
|
4495
4979
|
},
|
|
4496
4980
|
"Menu": {
|
|
4497
4981
|
"name": "Menu",
|
|
4498
4982
|
"description": "Menu sub-component",
|
|
4499
|
-
"props": {
|
|
4983
|
+
"props": {
|
|
4984
|
+
"icon": {
|
|
4985
|
+
"type": "React.ComponentType<{ className?: string",
|
|
4986
|
+
"optional": true
|
|
4987
|
+
}
|
|
4988
|
+
}
|
|
4500
4989
|
},
|
|
4501
4990
|
"MenuItem": {
|
|
4502
4991
|
"name": "MenuItem",
|
|
4503
4992
|
"description": "MenuItem sub-component",
|
|
4504
|
-
"props": {
|
|
4993
|
+
"props": {
|
|
4994
|
+
"icon": {
|
|
4995
|
+
"type": "React.ComponentType<{ className?: string",
|
|
4996
|
+
"optional": true
|
|
4997
|
+
}
|
|
4998
|
+
}
|
|
4505
4999
|
},
|
|
4506
5000
|
"MenuButton": {
|
|
4507
5001
|
"name": "MenuButton",
|
|
4508
5002
|
"description": "MenuButton sub-component",
|
|
4509
|
-
"props": {
|
|
5003
|
+
"props": {
|
|
5004
|
+
"icon": {
|
|
5005
|
+
"type": "React.ComponentType<{ className?: string",
|
|
5006
|
+
"optional": true
|
|
5007
|
+
}
|
|
5008
|
+
}
|
|
4510
5009
|
},
|
|
4511
5010
|
"MenuAction": {
|
|
4512
5011
|
"name": "MenuAction",
|
|
4513
5012
|
"description": "MenuAction sub-component",
|
|
4514
|
-
"props": {
|
|
5013
|
+
"props": {
|
|
5014
|
+
"active": {
|
|
5015
|
+
"type": "boolean",
|
|
5016
|
+
"optional": true
|
|
5017
|
+
},
|
|
5018
|
+
"href": {
|
|
5019
|
+
"type": "string",
|
|
5020
|
+
"optional": true
|
|
5021
|
+
}
|
|
5022
|
+
}
|
|
4515
5023
|
},
|
|
4516
5024
|
"MenuBadge": {
|
|
4517
5025
|
"name": "MenuBadge",
|
|
4518
5026
|
"description": "MenuBadge sub-component",
|
|
4519
|
-
"props": {
|
|
5027
|
+
"props": {
|
|
5028
|
+
"active": {
|
|
5029
|
+
"type": "boolean",
|
|
5030
|
+
"optional": true
|
|
5031
|
+
},
|
|
5032
|
+
"href": {
|
|
5033
|
+
"type": "string",
|
|
5034
|
+
"optional": true
|
|
5035
|
+
}
|
|
5036
|
+
}
|
|
4520
5037
|
},
|
|
4521
5038
|
"MenuSub": {
|
|
4522
5039
|
"name": "MenuSub",
|
|
4523
5040
|
"description": "MenuSub sub-component",
|
|
4524
|
-
"props": {
|
|
5041
|
+
"props": {
|
|
5042
|
+
"active": {
|
|
5043
|
+
"type": "boolean",
|
|
5044
|
+
"optional": true
|
|
5045
|
+
},
|
|
5046
|
+
"href": {
|
|
5047
|
+
"type": "string",
|
|
5048
|
+
"optional": true
|
|
5049
|
+
}
|
|
5050
|
+
}
|
|
4525
5051
|
},
|
|
4526
5052
|
"MenuSubItem": {
|
|
4527
5053
|
"name": "MenuSubItem",
|
|
4528
5054
|
"description": "MenuSubItem sub-component",
|
|
4529
|
-
"props": {
|
|
5055
|
+
"props": {
|
|
5056
|
+
"active": {
|
|
5057
|
+
"type": "boolean",
|
|
5058
|
+
"optional": true
|
|
5059
|
+
},
|
|
5060
|
+
"href": {
|
|
5061
|
+
"type": "string",
|
|
5062
|
+
"optional": true
|
|
5063
|
+
}
|
|
5064
|
+
}
|
|
4530
5065
|
},
|
|
4531
5066
|
"MenuSubButton": {
|
|
4532
5067
|
"name": "MenuSubButton",
|
|
4533
5068
|
"description": "MenuSubButton sub-component",
|
|
4534
|
-
"props": {
|
|
5069
|
+
"props": {
|
|
5070
|
+
"active": {
|
|
5071
|
+
"type": "boolean",
|
|
5072
|
+
"optional": true
|
|
5073
|
+
},
|
|
5074
|
+
"href": {
|
|
5075
|
+
"type": "string",
|
|
5076
|
+
"optional": true
|
|
5077
|
+
}
|
|
5078
|
+
}
|
|
4535
5079
|
},
|
|
4536
5080
|
"Separator": {
|
|
4537
5081
|
"name": "Separator",
|
|
4538
5082
|
"description": "Separator sub-component",
|
|
4539
|
-
"props": {
|
|
5083
|
+
"props": {
|
|
5084
|
+
"placeholder": {
|
|
5085
|
+
"type": "string",
|
|
5086
|
+
"optional": true
|
|
5087
|
+
},
|
|
5088
|
+
"shortcut": {
|
|
5089
|
+
"type": "string",
|
|
5090
|
+
"optional": true
|
|
5091
|
+
}
|
|
5092
|
+
}
|
|
4540
5093
|
},
|
|
4541
5094
|
"Input": {
|
|
4542
5095
|
"name": "Input",
|
|
4543
5096
|
"description": "Input sub-component",
|
|
4544
|
-
"props": {
|
|
5097
|
+
"props": {
|
|
5098
|
+
"placeholder": {
|
|
5099
|
+
"type": "string",
|
|
5100
|
+
"optional": true
|
|
5101
|
+
},
|
|
5102
|
+
"shortcut": {
|
|
5103
|
+
"type": "string",
|
|
5104
|
+
"optional": true
|
|
5105
|
+
}
|
|
5106
|
+
}
|
|
4545
5107
|
},
|
|
4546
5108
|
"Trigger": {
|
|
4547
5109
|
"name": "Trigger",
|
|
@@ -4561,7 +5123,12 @@
|
|
|
4561
5123
|
"MenuChevron": {
|
|
4562
5124
|
"name": "MenuChevron",
|
|
4563
5125
|
"description": "MenuChevron sub-component",
|
|
4564
|
-
"props": {
|
|
5126
|
+
"props": {
|
|
5127
|
+
"className": {
|
|
5128
|
+
"type": "string",
|
|
5129
|
+
"optional": true
|
|
5130
|
+
}
|
|
5131
|
+
}
|
|
4565
5132
|
},
|
|
4566
5133
|
"Collapsible": {
|
|
4567
5134
|
"name": "Collapsible",
|
|
@@ -4603,7 +5170,7 @@
|
|
|
4603
5170
|
"render": {
|
|
4604
5171
|
"type": "ReactNode",
|
|
4605
5172
|
"optional": true,
|
|
4606
|
-
"description": "Allows you to replace the component
|
|
5173
|
+
"description": "Allows you to replace the component's HTML element with a different tag, or compose it with another component.\n\nAccepts a `ReactElement` or a function that returns the element to render."
|
|
4607
5174
|
},
|
|
4608
5175
|
"children": {
|
|
4609
5176
|
"type": "ReactNode",
|
|
@@ -4750,11 +5317,15 @@
|
|
|
4750
5317
|
"<div className=\"flex flex-col gap-4\">\n <Switch\n label=\"Neutral off\"\n variant=\"neutral\"\n checked={false}\n onCheckedChange={() => {}}\n />\n <Switch\n label=\"Neutral on\"\n variant=\"neutral\"\n checked={true}\n onCheckedChange={() => {}}\n />\n <Switch\n label=\"Neutral disabled\"\n variant=\"neutral\"\n checked={false}\n disabled\n />\n </div>",
|
|
4751
5318
|
"<div className=\"grid grid-cols-2 gap-x-8 gap-y-4\">\n <Switch label=\"Default off\" checked={false} onCheckedChange={() => {}} />\n <Switch label=\"Default on\" checked={true} onCheckedChange={() => {}} />\n <Switch\n label=\"Neutral off\"\n variant=\"neutral\"\n checked={false}\n onCheckedChange={() => {}}\n />\n <Switch\n label=\"Neutral on\"\n variant=\"neutral\"\n checked={true}\n onCheckedChange={() => {}}\n />\n </div>",
|
|
4752
5319
|
"<Switch\n id=\"my-custom-switch\"\n label=\"Custom ID\"\n checked={checked}\n onCheckedChange={setChecked}\n />",
|
|
5320
|
+
"<Switch.Group legend=\"Notification settings\">\n <Switch.Item label=\"Email notifications\" />\n <Switch.Item label=\"SMS notifications\" />\n <Switch.Item label=\"Push notifications\" />\n </Switch.Group>",
|
|
5321
|
+
"<Switch.Group>\n <Switch.Legend className=\"sr-only\">Notification settings</Switch.Legend>\n <Switch.Item label=\"Email notifications\" />\n <Switch.Item label=\"SMS notifications\" />\n <Switch.Item label=\"Push notifications\" />\n </Switch.Group>",
|
|
5322
|
+
"<Switch.Group>\n <Switch.Legend className=\"text-sm font-normal text-kumo-subtle\">\n Notification settings\n </Switch.Legend>\n <Switch.Item label=\"Email notifications\" />\n <Switch.Item label=\"SMS notifications\" />\n <Switch.Item label=\"Push notifications\" />\n </Switch.Group>",
|
|
4753
5323
|
"<div className=\"flex flex-col gap-4\">\n <Switch\n label=\"Small\"\n size=\"sm\"\n checked={true}\n onCheckedChange={() => {}}\n />\n <Switch\n label=\"Base (default)\"\n size=\"base\"\n checked={true}\n onCheckedChange={() => {}}\n />\n <Switch\n label=\"Large\"\n size=\"lg\"\n checked={true}\n onCheckedChange={() => {}}\n />\n </div>"
|
|
4754
5324
|
],
|
|
4755
5325
|
"colors": [
|
|
4756
5326
|
"bg-kumo-base",
|
|
4757
|
-
"
|
|
5327
|
+
"ring-kumo-brand",
|
|
5328
|
+
"ring-kumo-focus",
|
|
4758
5329
|
"ring-kumo-hairline",
|
|
4759
5330
|
"text-kumo-danger",
|
|
4760
5331
|
"text-kumo-default",
|
|
@@ -4772,7 +5343,7 @@
|
|
|
4772
5343
|
"props": {
|
|
4773
5344
|
"legend": {
|
|
4774
5345
|
"type": "string",
|
|
4775
|
-
"
|
|
5346
|
+
"optional": true
|
|
4776
5347
|
},
|
|
4777
5348
|
"children": {
|
|
4778
5349
|
"type": "ReactNode",
|
|
@@ -4799,6 +5370,20 @@
|
|
|
4799
5370
|
"optional": true
|
|
4800
5371
|
}
|
|
4801
5372
|
}
|
|
5373
|
+
},
|
|
5374
|
+
"Legend": {
|
|
5375
|
+
"name": "Legend",
|
|
5376
|
+
"description": "Legend sub-component",
|
|
5377
|
+
"props": {
|
|
5378
|
+
"children": {
|
|
5379
|
+
"type": "ReactNode",
|
|
5380
|
+
"required": true
|
|
5381
|
+
},
|
|
5382
|
+
"className": {
|
|
5383
|
+
"type": "string",
|
|
5384
|
+
"optional": true
|
|
5385
|
+
}
|
|
5386
|
+
}
|
|
4802
5387
|
}
|
|
4803
5388
|
}
|
|
4804
5389
|
},
|
|
@@ -4865,13 +5450,13 @@
|
|
|
4865
5450
|
},
|
|
4866
5451
|
"examples": [
|
|
4867
5452
|
"<LayerCard className=\"p-0\">\n <Table>\n <Table.Header>\n <Table.Row>\n <Table.Head>Subject</Table.Head>\n <Table.Head>From</Table.Head>\n <Table.Head>Date</Table.Head>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {emailData.slice(0, 3).map((row) => (\n <Table.Row key={row.id}>\n <Table.Cell>{row.subject}</Table.Cell>\n <Table.Cell>{row.from}</Table.Cell>\n <Table.Cell>{row.date}</Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table>\n </LayerCard>",
|
|
4868
|
-
"<LayerCard className=\"p-0\">\n <Table>\n <Table.Header>\n <Table.Row>\n <Table.CheckHead\n checked={selectedIds.size === rows.length}\n indeterminate={\n selectedIds.size > 0 && selectedIds.size < rows.length\n }\n
|
|
5453
|
+
"<LayerCard className=\"p-0\">\n <Table>\n <Table.Header>\n <Table.Row>\n <Table.CheckHead\n checked={selectedIds.size === rows.length}\n indeterminate={\n selectedIds.size > 0 && selectedIds.size < rows.length\n }\n onCheckedChange={toggleAll}\n aria-label=\"Select all rows\"\n />\n <Table.Head>Subject</Table.Head>\n <Table.Head>From</Table.Head>\n <Table.Head>Date</Table.Head>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {rows.map((row) => (\n <Table.Row key={row.id}>\n <Table.CheckCell\n checked={selectedIds.has(row.id)}\n onCheckedChange={() => toggleRow(row.id)}\n aria-label={`Select ${row.subject}`}\n />\n <Table.Cell>{row.subject}</Table.Cell>\n <Table.Cell>{row.from}</Table.Cell>\n <Table.Cell>{row.date}</Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table>\n </LayerCard>",
|
|
4869
5454
|
"<LayerCard className=\"p-0\">\n <Table>\n <Table.Header variant=\"compact\">\n <Table.Row>\n <Table.Head>Subject</Table.Head>\n <Table.Head>From</Table.Head>\n <Table.Head>Date</Table.Head>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {emailData.slice(0, 3).map((row) => (\n <Table.Row key={row.id}>\n <Table.Cell>{row.subject}</Table.Cell>\n <Table.Cell>{row.from}</Table.Cell>\n <Table.Cell>{row.date}</Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table>\n </LayerCard>",
|
|
4870
|
-
"<LayerCard className=\"p-0\">\n <Table>\n <Table.Header>\n <Table.Row>\n <Table.CheckHead\n checked={selectedIds.size === rows.length}\n indeterminate={\n selectedIds.size > 0 && selectedIds.size < rows.length\n }\n
|
|
5455
|
+
"<LayerCard className=\"p-0\">\n <Table>\n <Table.Header>\n <Table.Row>\n <Table.CheckHead\n checked={selectedIds.size === rows.length}\n indeterminate={\n selectedIds.size > 0 && selectedIds.size < rows.length\n }\n onCheckedChange={toggleAll}\n aria-label=\"Select all rows\"\n />\n <Table.Head>Subject</Table.Head>\n <Table.Head>From</Table.Head>\n <Table.Head>Date</Table.Head>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {rows.map((row) => (\n <Table.Row\n key={row.id}\n variant={selectedIds.has(row.id) ? \"selected\" : \"default\"}\n >\n <Table.CheckCell\n checked={selectedIds.has(row.id)}\n onCheckedChange={() => toggleRow(row.id)}\n aria-label={`Select ${row.subject}`}\n />\n <Table.Cell>{row.subject}</Table.Cell>\n <Table.Cell>{row.from}</Table.Cell>\n <Table.Cell>{row.date}</Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table>\n </LayerCard>",
|
|
4871
5456
|
"<LayerCard className=\"p-0\">\n <Table layout=\"fixed\">\n <colgroup>\n <col />\n <col className=\"w-[150px]\" />\n <col className=\"w-[150px]\" />\n </colgroup>\n <Table.Header>\n <Table.Row>\n <Table.Head>Subject</Table.Head>\n <Table.Head>From</Table.Head>\n <Table.Head>Date</Table.Head>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {emailData.map((row) => (\n <Table.Row key={row.id}>\n <Table.Cell>{row.subject}</Table.Cell>\n <Table.Cell>{row.from}</Table.Cell>\n <Table.Cell>{row.date}</Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table>\n </LayerCard>",
|
|
4872
5457
|
"<LayerCard className=\"w-full max-w-md overflow-x-auto p-0\">\n <Table>\n <Table.Header variant=\"compact\">\n <Table.Row>\n <Table.Head>Subject</Table.Head>\n <Table.Head>From</Table.Head>\n <Table.Head>Date</Table.Head>\n <Table.Head>Tags</Table.Head>\n <Table.Head sticky=\"right\">\n <span className=\"sr-only\">Actions</span>\n </Table.Head>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {emailData.map((row) => (\n <Table.Row key={row.id}>\n <Table.Cell className=\"whitespace-nowrap\">\n {row.subject}\n </Table.Cell>\n <Table.Cell className=\"whitespace-nowrap\">\n {row.from}\n </Table.Cell>\n <Table.Cell className=\"whitespace-nowrap\">\n {row.date}\n </Table.Cell>\n <Table.Cell className=\"whitespace-nowrap\">\n {row.tags ? (\n <div className=\"inline-flex gap-1\">\n {row.tags.map((tag) => (\n <Badge key={tag}>{tag}</Badge>\n ))}\n </div>\n ) : (\n \"—\"\n )}\n </Table.Cell>\n <Table.Cell sticky=\"right\" className=\"text-right\">\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <Button\n variant=\"ghost\"\n size=\"sm\"\n shape=\"square\"\n aria-label=\"More options\"\n >\n <DotsThree weight=\"bold\" size={16} />\n </Button>\n }\n />\n <DropdownMenu.Content>\n <DropdownMenu.Item icon={Eye}>View</DropdownMenu.Item>\n <DropdownMenu.Item icon={PencilSimple}>\n Edit\n </DropdownMenu.Item>\n <DropdownMenu.Separator />\n <DropdownMenu.Item icon={Trash} variant=\"danger\">\n Delete\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table>\n </LayerCard>",
|
|
4873
5458
|
"<LayerCard className=\"w-full max-w-md overflow-x-auto p-0\">\n <Table>\n <Table.Header>\n <Table.Row>\n <Table.Head>Subject</Table.Head>\n <Table.Head>From</Table.Head>\n <Table.Head>Date</Table.Head>\n <Table.Head>Tags</Table.Head>\n <Table.Head sticky=\"right\">\n <span className=\"sr-only\">Actions</span>\n </Table.Head>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {emailData.map((row) => (\n <Table.Row key={row.id}>\n <Table.Cell className=\"whitespace-nowrap\">\n {row.subject}\n </Table.Cell>\n <Table.Cell className=\"whitespace-nowrap\">\n {row.from}\n </Table.Cell>\n <Table.Cell className=\"whitespace-nowrap\">\n {row.date}\n </Table.Cell>\n <Table.Cell className=\"whitespace-nowrap\">\n {row.tags ? (\n <div className=\"inline-flex gap-1\">\n {row.tags.map((tag) => (\n <Badge key={tag}>{tag}</Badge>\n ))}\n </div>\n ) : (\n \"—\"\n )}\n </Table.Cell>\n <Table.Cell sticky=\"right\" className=\"text-right\">\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <Button\n variant=\"ghost\"\n size=\"sm\"\n shape=\"square\"\n aria-label=\"More options\"\n >\n <DotsThree weight=\"bold\" size={16} />\n </Button>\n }\n />\n <DropdownMenu.Content>\n <DropdownMenu.Item icon={Eye}>View</DropdownMenu.Item>\n <DropdownMenu.Item icon={PencilSimple}>\n Edit\n </DropdownMenu.Item>\n <DropdownMenu.Separator />\n <DropdownMenu.Item icon={Trash} variant=\"danger\">\n Delete\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table>\n </LayerCard>",
|
|
4874
|
-
"<LayerCard className=\"w-full overflow-x-auto p-0\">\n <Table layout=\"fixed\">\n <colgroup>\n <col />{\" \"}\n {/* Checkbox column - width handled by Table.CheckHead/CheckCell */}\n <col />\n <col style={{ width: \"150px\" }} />\n <col style={{ width: \"120px\" }} />\n <col style={{ width: \"50px\" }} />\n </colgroup>\n <Table.Header>\n <Table.Row>\n <Table.CheckHead\n checked={selectedIds.size === emailData.length}\n indeterminate={\n selectedIds.size > 0 && selectedIds.size < emailData.length\n }\n
|
|
5459
|
+
"<LayerCard className=\"w-full overflow-x-auto p-0\">\n <Table layout=\"fixed\">\n <colgroup>\n <col />{\" \"}\n {/* Checkbox column - width handled by Table.CheckHead/CheckCell */}\n <col />\n <col style={{ width: \"150px\" }} />\n <col style={{ width: \"120px\" }} />\n <col style={{ width: \"50px\" }} />\n </colgroup>\n <Table.Header>\n <Table.Row>\n <Table.CheckHead\n checked={selectedIds.size === emailData.length}\n indeterminate={\n selectedIds.size > 0 && selectedIds.size < emailData.length\n }\n onCheckedChange={toggleAll}\n aria-label=\"Select all rows\"\n />\n <Table.Head>Subject</Table.Head>\n <Table.Head>From</Table.Head>\n <Table.Head>Date</Table.Head>\n <Table.Head></Table.Head>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {emailData.map((row) => (\n <Table.Row\n key={row.id}\n variant={selectedIds.has(row.id) ? \"selected\" : \"default\"}\n >\n <Table.CheckCell\n checked={selectedIds.has(row.id)}\n onCheckedChange={() => toggleRow(row.id)}\n aria-label={`Select ${row.subject}`}\n />\n <Table.Cell>\n <div className=\"flex items-center gap-2\">\n <EnvelopeSimple size={16} />\n <span className=\"truncate\">{row.subject}</span>\n {row.tags && (\n <div className=\"ml-2 inline-flex gap-1\">\n {row.tags.map((tag) => (\n <Badge key={tag}>{tag}</Badge>\n ))}\n </div>\n )}\n </div>\n </Table.Cell>\n <Table.Cell>\n <span className=\"truncate\">{row.from}</span>\n </Table.Cell>\n <Table.Cell>\n <span className=\"truncate\">{row.date}</span>\n </Table.Cell>\n <Table.Cell className=\"text-right\">\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <Button\n variant=\"ghost\"\n size=\"sm\"\n shape=\"square\"\n aria-label=\"More options\"\n >\n <DotsThree weight=\"bold\" size={16} />\n </Button>\n }\n />\n <DropdownMenu.Content>\n <DropdownMenu.Item icon={Eye}>View</DropdownMenu.Item>\n <DropdownMenu.Item icon={PencilSimple}>\n Edit\n </DropdownMenu.Item>\n <DropdownMenu.Separator />\n <DropdownMenu.Item icon={Trash} variant=\"danger\">\n Delete\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table>\n </LayerCard>"
|
|
4875
5460
|
],
|
|
4876
5461
|
"colors": [
|
|
4877
5462
|
"bg-kumo-base",
|
|
@@ -4879,6 +5464,7 @@
|
|
|
4879
5464
|
"bg-kumo-hairline",
|
|
4880
5465
|
"bg-kumo-tint",
|
|
4881
5466
|
"border-kumo-fill",
|
|
5467
|
+
"ring-kumo-brand",
|
|
4882
5468
|
"text-kumo-default",
|
|
4883
5469
|
"text-kumo-strong"
|
|
4884
5470
|
],
|
|
@@ -4962,14 +5548,14 @@
|
|
|
4962
5548
|
"<DemoWrapper>\n <TableOfContents>\n <TableOfContents.Title>On this page</TableOfContents.Title>\n <TableOfContents.List>\n {headings.map((heading) => (\n <TableOfContents.Item\n key={heading.text}\n active={heading.text === \"Usage\"}\n className=\"cursor-pointer\"\n >\n {heading.text}\n </TableOfContents.Item>\n ))}\n </TableOfContents.List>\n </TableOfContents>\n </DemoWrapper>",
|
|
4963
5549
|
"<DemoWrapper>\n <TableOfContents>\n <TableOfContents.Title>On this page</TableOfContents.Title>\n <TableOfContents.List>\n {headings.map((heading) => (\n <TableOfContents.Item\n key={heading.text}\n active={heading.text === active}\n onClick={() => setActive(heading.text)}\n className=\"cursor-pointer\"\n >\n {heading.text}\n </TableOfContents.Item>\n ))}\n </TableOfContents.List>\n </TableOfContents>\n </DemoWrapper>",
|
|
4964
5550
|
"<DemoWrapper>\n <TableOfContents>\n <TableOfContents.Title>On this page</TableOfContents.Title>\n <TableOfContents.List>\n {headings.map((heading) => (\n <TableOfContents.Item key={heading.text} className=\"cursor-pointer\">\n {heading.text}\n </TableOfContents.Item>\n ))}\n </TableOfContents.List>\n </TableOfContents>\n </DemoWrapper>",
|
|
4965
|
-
"<DemoWrapper>\n <TableOfContents>\n <TableOfContents.Title>On this page</TableOfContents.Title>\n <TableOfContents.List>\n <TableOfContents.Item active className=\"cursor-pointer\">\n Overview\n </TableOfContents.Item>\n <TableOfContents.Group label=\"Getting Started\">\n <TableOfContents.Item className=\"cursor-pointer\">\n Installation\n </TableOfContents.Item>\n <TableOfContents.Item className=\"cursor-pointer\">\n Configuration\n </TableOfContents.Item>\n </TableOfContents.Group>\n <TableOfContents.Group label=\"API\">\n <TableOfContents.Item className=\"cursor-pointer\">\n Props\n </TableOfContents.Item>\n <TableOfContents.Item className=\"cursor-pointer\">\n Events\n </TableOfContents.Item>\n </TableOfContents.Group>\n </TableOfContents.List>\n </TableOfContents>\n </DemoWrapper>",
|
|
5551
|
+
"<DemoWrapper>\n <TableOfContents>\n <TableOfContents.Title>On this page</TableOfContents.Title>\n <TableOfContents.List>\n <TableOfContents.Item active className=\"cursor-pointer\">\n Overview\n </TableOfContents.Item>\n <TableOfContents.Group label=\"Examples\" href=\"#examples-demo\">\n <TableOfContents.Item className=\"cursor-pointer\">\n Basic example\n </TableOfContents.Item>\n <TableOfContents.Item className=\"cursor-pointer\">\n Advanced example\n </TableOfContents.Item>\n </TableOfContents.Group>\n <TableOfContents.Group label=\"Getting Started\">\n <TableOfContents.Item className=\"cursor-pointer\">\n Installation\n </TableOfContents.Item>\n <TableOfContents.Item className=\"cursor-pointer\">\n Configuration\n </TableOfContents.Item>\n </TableOfContents.Group>\n <TableOfContents.Group label=\"API\" href=\"#api-demo\">\n <TableOfContents.Item className=\"cursor-pointer\">\n Props\n </TableOfContents.Item>\n <TableOfContents.Item className=\"cursor-pointer\">\n Events\n </TableOfContents.Item>\n </TableOfContents.Group>\n </TableOfContents.List>\n </TableOfContents>\n </DemoWrapper>",
|
|
4966
5552
|
"<DemoWrapper>\n <TableOfContents>\n <TableOfContents.List>\n {headings.slice(0, 3).map((heading) => (\n <TableOfContents.Item\n key={heading.text}\n active={heading.text === \"Introduction\"}\n className=\"cursor-pointer\"\n >\n {heading.text}\n </TableOfContents.Item>\n ))}\n </TableOfContents.List>\n </TableOfContents>\n </DemoWrapper>",
|
|
4967
5553
|
"<DemoWrapper>\n <div className=\"space-y-3\">\n <TableOfContents>\n <TableOfContents.List>\n {[\"Introduction\", \"Installation\", \"Usage\"].map((text) => (\n <TableOfContents.Item\n key={text}\n render={<button type=\"button\" />}\n onClick={() => setClicked(text)}\n active={text === \"Introduction\"}\n >\n {text}\n </TableOfContents.Item>\n ))}\n </TableOfContents.List>\n </TableOfContents>\n {clicked && (\n <p className=\"text-xs text-kumo-subtle\">Clicked: {clicked}</p>\n )}\n </div>\n </DemoWrapper>"
|
|
4968
5554
|
],
|
|
4969
5555
|
"colors": [
|
|
4970
|
-
"
|
|
4971
|
-
"
|
|
4972
|
-
"
|
|
5556
|
+
"border-kumo-brand",
|
|
5557
|
+
"border-kumo-hairline",
|
|
5558
|
+
"border-kumo-line",
|
|
4973
5559
|
"text-kumo-default",
|
|
4974
5560
|
"text-kumo-subtle"
|
|
4975
5561
|
],
|
|
@@ -4987,12 +5573,30 @@
|
|
|
4987
5573
|
"Item": {
|
|
4988
5574
|
"name": "Item",
|
|
4989
5575
|
"description": "Item sub-component",
|
|
4990
|
-
"props": {
|
|
5576
|
+
"props": {
|
|
5577
|
+
"active": {
|
|
5578
|
+
"type": "boolean",
|
|
5579
|
+
"optional": true
|
|
5580
|
+
}
|
|
5581
|
+
}
|
|
4991
5582
|
},
|
|
4992
5583
|
"Group": {
|
|
4993
5584
|
"name": "Group",
|
|
4994
5585
|
"description": "Group sub-component",
|
|
4995
|
-
"props": {
|
|
5586
|
+
"props": {
|
|
5587
|
+
"label": {
|
|
5588
|
+
"type": "string",
|
|
5589
|
+
"required": true
|
|
5590
|
+
},
|
|
5591
|
+
"href": {
|
|
5592
|
+
"type": "string",
|
|
5593
|
+
"optional": true
|
|
5594
|
+
},
|
|
5595
|
+
"active": {
|
|
5596
|
+
"type": "boolean",
|
|
5597
|
+
"optional": true
|
|
5598
|
+
}
|
|
5599
|
+
}
|
|
4996
5600
|
}
|
|
4997
5601
|
}
|
|
4998
5602
|
},
|
|
@@ -5067,10 +5671,11 @@
|
|
|
5067
5671
|
"bg-kumo-recessed",
|
|
5068
5672
|
"bg-kumo-tint",
|
|
5069
5673
|
"border-kumo-hairline",
|
|
5674
|
+
"ring-kumo-brand",
|
|
5675
|
+
"ring-kumo-focus",
|
|
5070
5676
|
"ring-kumo-hairline",
|
|
5071
5677
|
"ring-kumo-line",
|
|
5072
5678
|
"text-kumo-default",
|
|
5073
|
-
"text-kumo-strong",
|
|
5074
5679
|
"text-kumo-subtle"
|
|
5075
5680
|
],
|
|
5076
5681
|
"styling": {
|
|
@@ -5178,9 +5783,32 @@
|
|
|
5178
5783
|
"description": "Whether to truncate overflowing text with an ellipsis. Adds `truncate min-w-0` classes."
|
|
5179
5784
|
},
|
|
5180
5785
|
"as": {
|
|
5181
|
-
"type": "
|
|
5786
|
+
"type": "enum",
|
|
5182
5787
|
"optional": true,
|
|
5183
|
-
"description": "The HTML element
|
|
5788
|
+
"description": "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\"`.\n\n- **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.\n- **Optional** for body variants (defaults to `\"p\"`) and monospace variants (defaults to `\"span\"`).",
|
|
5789
|
+
"values": [
|
|
5790
|
+
"h1",
|
|
5791
|
+
"h2",
|
|
5792
|
+
"h3",
|
|
5793
|
+
"h4",
|
|
5794
|
+
"h5",
|
|
5795
|
+
"h6",
|
|
5796
|
+
"p",
|
|
5797
|
+
"span",
|
|
5798
|
+
"label",
|
|
5799
|
+
"dt",
|
|
5800
|
+
"dd",
|
|
5801
|
+
"li",
|
|
5802
|
+
"figcaption",
|
|
5803
|
+
"legend",
|
|
5804
|
+
"pre",
|
|
5805
|
+
"code",
|
|
5806
|
+
"em",
|
|
5807
|
+
"strong",
|
|
5808
|
+
"small",
|
|
5809
|
+
"abbr",
|
|
5810
|
+
"time"
|
|
5811
|
+
]
|
|
5184
5812
|
},
|
|
5185
5813
|
"children": {
|
|
5186
5814
|
"type": "ReactNode",
|
|
@@ -5189,7 +5817,7 @@
|
|
|
5189
5817
|
}
|
|
5190
5818
|
},
|
|
5191
5819
|
"examples": [
|
|
5192
|
-
"<div className=\"grid w-full grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3\">\n <div className=\"flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4\">\n <Text variant=\"heading1\"
|
|
5820
|
+
"<div className=\"grid w-full grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3\">\n <div className=\"flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4\">\n <Text variant=\"heading1\" as=\"h1\">\n Heading 1\n </Text>\n <Text variant=\"mono-secondary\">text-3xl (30px)</Text>\n </div>\n <div className=\"flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4\">\n <Text variant=\"heading2\" as=\"h2\">\n Heading 2\n </Text>\n <Text variant=\"mono-secondary\">text-2xl (24px)</Text>\n </div>\n <div className=\"flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4\">\n <Text variant=\"heading3\" as=\"h3\">\n Heading 3\n </Text>\n <Text variant=\"mono-secondary\">text-lg (16px)</Text>\n </div>\n <div className=\"flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4\">\n <Text>Body</Text>\n <Text variant=\"mono-secondary\">text-base (14px)</Text>\n </div>\n <div className=\"flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4\">\n <Text bold>Body bold</Text>\n <Text variant=\"mono-secondary\">text-base (14px)</Text>\n </div>\n <div className=\"flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4\">\n <Text size=\"lg\">Body lg</Text>\n <Text variant=\"mono-secondary\">text-lg (16px)</Text>\n </div>\n <div className=\"flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4\">\n <Text size=\"sm\">Body sm</Text>\n <Text variant=\"mono-secondary\">text-sm (13px)</Text>\n </div>\n <div className=\"flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4\">\n <Text size=\"xs\">Body xs</Text>\n <Text variant=\"mono-secondary\">text-xs (12px)</Text>\n </div>\n <div className=\"flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4\">\n <Text variant=\"secondary\">Body secondary</Text>\n <Text variant=\"mono-secondary\">text-base (14px)</Text>\n </div>\n <div className=\"flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4\">\n <Text variant=\"mono\">Monospace</Text>\n <Text variant=\"mono-secondary\">text-sm (13px)</Text>\n </div>\n <div className=\"flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4\">\n <Text variant=\"mono\" size=\"lg\">\n Monospace lg\n </Text>\n <Text variant=\"mono-secondary\">text-base (14px)</Text>\n </div>\n <div className=\"flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4\">\n <Text variant=\"mono-secondary\">Monospace secondary</Text>\n <Text variant=\"mono-secondary\">text-sm (13px)</Text>\n </div>\n <div className=\"flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4\">\n <Text variant=\"success\">Success</Text>\n <Text variant=\"mono-secondary\">text-base (14px)</Text>\n </div>\n <div className=\"flex flex-col justify-end gap-1 rounded-lg border border-kumo-hairline bg-kumo-base p-4\">\n <Text variant=\"error\">Error</Text>\n <Text variant=\"mono-secondary\">text-base (14px)</Text>\n </div>\n </div>",
|
|
5193
5821
|
"<div className=\"w-64 rounded-lg border border-kumo-hairline bg-kumo-base p-4\">\n <Text truncate>\n This is a long piece of text that will be truncated with an ellipsis\n when it overflows its container.\n </Text>\n </div>"
|
|
5194
5822
|
],
|
|
5195
5823
|
"colors": [
|
|
@@ -5289,7 +5917,6 @@
|
|
|
5289
5917
|
"text-kumo-danger",
|
|
5290
5918
|
"text-kumo-default",
|
|
5291
5919
|
"text-kumo-info",
|
|
5292
|
-
"text-kumo-strong",
|
|
5293
5920
|
"text-kumo-subtle",
|
|
5294
5921
|
"text-kumo-success",
|
|
5295
5922
|
"text-kumo-warning"
|
|
@@ -5613,7 +6240,7 @@
|
|
|
5613
6240
|
"examples": [],
|
|
5614
6241
|
"colors": [
|
|
5615
6242
|
"bg-kumo-overlay",
|
|
5616
|
-
"text-kumo-
|
|
6243
|
+
"text-kumo-subtle"
|
|
5617
6244
|
],
|
|
5618
6245
|
"files": [
|
|
5619
6246
|
"resource-list/resource-list.tsx",
|
|
@@ -5624,6 +6251,18 @@
|
|
|
5624
6251
|
},
|
|
5625
6252
|
"search": {
|
|
5626
6253
|
"byCategory": {
|
|
6254
|
+
"Other": [
|
|
6255
|
+
"Autocomplete",
|
|
6256
|
+
"CloudflareLogo",
|
|
6257
|
+
"DatePicker",
|
|
6258
|
+
"Label",
|
|
6259
|
+
"Link",
|
|
6260
|
+
"SensitiveInput",
|
|
6261
|
+
"Sidebar",
|
|
6262
|
+
"Table",
|
|
6263
|
+
"TableOfContents",
|
|
6264
|
+
"DeleteResource"
|
|
6265
|
+
],
|
|
5627
6266
|
"Display": [
|
|
5628
6267
|
"Badge",
|
|
5629
6268
|
"Breadcrumbs",
|
|
@@ -5649,21 +6288,11 @@
|
|
|
5649
6288
|
"DateRangePicker",
|
|
5650
6289
|
"Field",
|
|
5651
6290
|
"Input",
|
|
6291
|
+
"InputGroup",
|
|
5652
6292
|
"Radio",
|
|
5653
6293
|
"Select",
|
|
5654
6294
|
"Switch"
|
|
5655
6295
|
],
|
|
5656
|
-
"Other": [
|
|
5657
|
-
"CloudflareLogo",
|
|
5658
|
-
"DatePicker",
|
|
5659
|
-
"Label",
|
|
5660
|
-
"Link",
|
|
5661
|
-
"SensitiveInput",
|
|
5662
|
-
"Sidebar",
|
|
5663
|
-
"Table",
|
|
5664
|
-
"TableOfContents",
|
|
5665
|
-
"DeleteResource"
|
|
5666
|
-
],
|
|
5667
6296
|
"Navigation": [
|
|
5668
6297
|
"CommandPalette",
|
|
5669
6298
|
"MenuBar",
|
|
@@ -5684,6 +6313,7 @@
|
|
|
5684
6313
|
]
|
|
5685
6314
|
},
|
|
5686
6315
|
"byName": [
|
|
6316
|
+
"Autocomplete",
|
|
5687
6317
|
"Badge",
|
|
5688
6318
|
"Banner",
|
|
5689
6319
|
"Breadcrumbs",
|
|
@@ -5704,6 +6334,7 @@
|
|
|
5704
6334
|
"Field",
|
|
5705
6335
|
"Grid",
|
|
5706
6336
|
"Input",
|
|
6337
|
+
"InputGroup",
|
|
5707
6338
|
"Label",
|
|
5708
6339
|
"LayerCard",
|
|
5709
6340
|
"Link",
|
|
@@ -5729,6 +6360,7 @@
|
|
|
5729
6360
|
],
|
|
5730
6361
|
"byType": {
|
|
5731
6362
|
"component": [
|
|
6363
|
+
"Autocomplete",
|
|
5732
6364
|
"Badge",
|
|
5733
6365
|
"Banner",
|
|
5734
6366
|
"Breadcrumbs",
|
|
@@ -5748,6 +6380,7 @@
|
|
|
5748
6380
|
"Field",
|
|
5749
6381
|
"Grid",
|
|
5750
6382
|
"Input",
|
|
6383
|
+
"InputGroup",
|
|
5751
6384
|
"Label",
|
|
5752
6385
|
"LayerCard",
|
|
5753
6386
|
"Link",
|