@cloudflare/kumo 2.0.1 → 2.0.3
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 +27 -0
- package/ai/component-registry.json +227 -16
- package/ai/component-registry.md +324 -8
- package/ai/schemas.ts +5 -2
- package/dist/.build-complete +1 -1
- package/dist/ai/schemas.d.ts +10 -4
- package/dist/ai/schemas.d.ts.map +1 -1
- package/dist/ai/schemas.js +510 -504
- package/dist/ai/schemas.js.map +1 -1
- package/dist/chunks/{autocomplete-48aq0d244bs2e8zv.js → autocomplete-ln55iimq2n2s5uex.js} +27 -26
- package/dist/chunks/autocomplete-ln55iimq2n2s5uex.js.map +1 -0
- package/dist/chunks/{badge-dan90i0rzy4pwa1j.js → badge-kqox9toi0sygfbno.js} +16 -16
- package/dist/chunks/badge-kqox9toi0sygfbno.js.map +1 -0
- package/dist/chunks/{banner-eiwcnk7ts21s3bnb.js → banner-eux4y8xaogjg64af.js} +32 -31
- package/dist/chunks/banner-eux4y8xaogjg64af.js.map +1 -0
- package/dist/chunks/{breadcrumbs-cxcwf2l1ki3ffg5d.js → breadcrumbs-do6uyvm4msqus0sz.js} +33 -32
- package/dist/chunks/breadcrumbs-do6uyvm4msqus0sz.js.map +1 -0
- package/dist/chunks/{button-6by9ntsa3nj553mq.js → button-dh366jtvswxj0fw3.js} +63 -62
- package/dist/chunks/button-dh366jtvswxj0fw3.js.map +1 -0
- package/dist/chunks/{checkbox-hvxfvhtx1qjo2mww.js → checkbox-cf2pwdupyjweg184.js} +2 -2
- package/dist/chunks/checkbox-cf2pwdupyjweg184.js.map +1 -0
- package/dist/chunks/{clipboard-text-hswydzx3iql369sd.js → clipboard-text-hn2uwdj4ozenezd5.js} +57 -56
- package/dist/chunks/clipboard-text-hn2uwdj4ozenezd5.js.map +1 -0
- package/dist/chunks/{code-f9v1ikwhekqw274q.js → code-bbnjm8vk9hxl129r.js} +20 -19
- package/dist/chunks/code-bbnjm8vk9hxl129r.js.map +1 -0
- package/dist/chunks/{collapsible-k8urhi16pg90jvxa.js → collapsible-nlp2jvcyuzxmq28o.js} +12 -11
- package/dist/chunks/{collapsible-k8urhi16pg90jvxa.js.map → collapsible-nlp2jvcyuzxmq28o.js.map} +1 -1
- package/dist/chunks/{combobox-fq36ye0hstote16x.js → combobox-fivcg1oorkmmmk78.js} +11 -10
- package/dist/chunks/combobox-fivcg1oorkmmmk78.js.map +1 -0
- package/dist/chunks/{command-palette-md65owxt5hv4rt9r.js → command-palette-kgiso245exdons4r.js} +2 -2
- package/dist/chunks/{command-palette-md65owxt5hv4rt9r.js.map → command-palette-kgiso245exdons4r.js.map} +1 -1
- package/dist/chunks/{dialog-k3f1fbam6nt96k8x.js → dialog-mqpvaidy0vnjwrfp.js} +16 -15
- package/dist/chunks/dialog-mqpvaidy0vnjwrfp.js.map +1 -0
- package/dist/chunks/{dropdown-zbax0zowy6m9zhmt.js → dropdown-gp5iptj1niq14lpv.js} +76 -75
- package/dist/chunks/dropdown-gp5iptj1niq14lpv.js.map +1 -0
- package/dist/chunks/{empty-b82oer7npkhtkx7k.js → empty-fr78te81o3qaj3in.js} +27 -26
- package/dist/chunks/empty-fr78te81o3qaj3in.js.map +1 -0
- package/dist/chunks/{field-c0wf94plit2gci59.js → field-dgf36p7cmz1crlnu.js} +2 -2
- package/dist/chunks/{field-c0wf94plit2gci59.js.map → field-dgf36p7cmz1crlnu.js.map} +1 -1
- package/dist/chunks/{grid-hj1ylz16p7g5uelh.js → grid-do93dv1rjggqxx7p.js} +30 -29
- package/dist/chunks/grid-do93dv1rjggqxx7p.js.map +1 -0
- package/dist/chunks/{input-ncfowphv81yq7fyy.js → input-2y9vg81trmamkb6k.js} +51 -50
- package/dist/chunks/input-2y9vg81trmamkb6k.js.map +1 -0
- package/dist/chunks/{input-area-bkyzu6f7gsck479h.js → input-area-i5wulip5pau3u6ss.js} +3 -3
- package/dist/chunks/{input-area-bkyzu6f7gsck479h.js.map → input-area-i5wulip5pau3u6ss.js.map} +1 -1
- package/dist/chunks/{input-group-bidweffa0zyg8gt0.js → input-group-bm9wxzovpvzn1c25.js} +4 -4
- package/dist/chunks/{input-group-bidweffa0zyg8gt0.js.map → input-group-bm9wxzovpvzn1c25.js.map} +1 -1
- package/dist/chunks/{label-c3h9i3y4wiccelt7.js → label-efa0uvb8zqyjwpc8.js} +2 -2
- package/dist/chunks/{label-c3h9i3y4wiccelt7.js.map → label-efa0uvb8zqyjwpc8.js.map} +1 -1
- package/dist/chunks/{link-kt74pxkud4olmcer.js → link-m9hlspftl34nseme.js} +28 -27
- package/dist/chunks/link-m9hlspftl34nseme.js.map +1 -0
- package/dist/chunks/{loader-hr2w7cpqeev3p3vl.js → loader-g8a6j76ue5nq0lr8.js} +15 -14
- package/dist/chunks/loader-g8a6j76ue5nq0lr8.js.map +1 -0
- package/dist/chunks/{pagination-jb3mncivbwsoi1se.js → pagination-fdmcwreb27eej9l3.js} +3 -3
- package/dist/chunks/pagination-fdmcwreb27eej9l3.js.map +1 -0
- package/dist/chunks/{radio-datzh3pilz8ojak1.js → radio-f95mt237ru8fyc03.js} +44 -43
- package/dist/chunks/radio-f95mt237ru8fyc03.js.map +1 -0
- package/dist/chunks/resolve-variant-gw6eh7fa4st8ej7m.js +11 -0
- package/dist/chunks/resolve-variant-gw6eh7fa4st8ej7m.js.map +1 -0
- package/dist/chunks/{select-g261chvosodu22i8.js → select-j8evv2iblgs5fa9s.js} +4 -4
- package/dist/chunks/{select-g261chvosodu22i8.js.map → select-j8evv2iblgs5fa9s.js.map} +1 -1
- package/dist/chunks/{sensitive-input-cijagk551mesdtk4.js → sensitive-input-cmb9jt42bv8jftei.js} +3 -3
- package/dist/chunks/{sensitive-input-cijagk551mesdtk4.js.map → sensitive-input-cmb9jt42bv8jftei.js.map} +1 -1
- package/dist/chunks/surface-k0e8mq1x00b7i8r6.js.map +1 -1
- package/dist/chunks/{switch-jdfsr3j3oa1qxegw.js → switch-c4qjga6x3axmoi20.js} +2 -2
- package/dist/chunks/switch-c4qjga6x3axmoi20.js.map +1 -0
- package/dist/chunks/{table-iudje0lva0z68jto.js → table-jvqy3tu48xa75n2t.js} +56 -55
- package/dist/chunks/table-jvqy3tu48xa75n2t.js.map +1 -0
- package/dist/chunks/{text-f7t467waymhb30sx.js → text-be7ehenoyldhyjma.js} +32 -28
- package/dist/chunks/text-be7ehenoyldhyjma.js.map +1 -0
- package/dist/chunks/{toast-h573o0tc7tefivk2.js → toast-c7kqwuj7qj9dx6gs.js} +75 -74
- package/dist/chunks/toast-c7kqwuj7qj9dx6gs.js.map +1 -0
- package/dist/chunks/tooltip-odudhkxe282wxinq.js.map +1 -1
- package/dist/code.js +1 -1
- package/dist/components/autocomplete.js +1 -1
- package/dist/components/badge.js +1 -1
- package/dist/components/banner.js +1 -1
- package/dist/components/breadcrumbs.js +1 -1
- package/dist/components/button.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/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/grid.js +1 -1
- package/dist/components/input-group.js +1 -1
- package/dist/components/input.js +3 -3
- package/dist/components/label.js +1 -1
- package/dist/components/link.js +1 -1
- package/dist/components/loader.js +1 -1
- package/dist/components/pagination.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/switch.js +1 -1
- package/dist/components/table.js +1 -1
- package/dist/components/text.js +1 -1
- package/dist/components/toast.js +1 -1
- package/dist/index.js +34 -34
- package/dist/src/components/autocomplete/autocomplete.d.ts.map +1 -1
- package/dist/src/components/badge/badge.d.ts.map +1 -1
- package/dist/src/components/banner/banner.d.ts.map +1 -1
- package/dist/src/components/breadcrumbs/breadcrumbs.d.ts.map +1 -1
- package/dist/src/components/button/button.d.ts.map +1 -1
- package/dist/src/components/checkbox/checkbox.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.map +1 -1
- package/dist/src/components/collapsible/collapsible.d.ts +1 -1
- package/dist/src/components/collapsible/collapsible.d.ts.map +1 -1
- package/dist/src/components/combobox/combobox.d.ts.map +1 -1
- package/dist/src/components/dialog/dialog.d.ts.map +1 -1
- package/dist/src/components/dropdown/dropdown.d.ts.map +1 -1
- package/dist/src/components/empty/empty.d.ts.map +1 -1
- package/dist/src/components/grid/grid.d.ts.map +1 -1
- package/dist/src/components/input/input.d.ts.map +1 -1
- package/dist/src/components/link/link.d.ts.map +1 -1
- package/dist/src/components/loader/loader.d.ts.map +1 -1
- package/dist/src/components/pagination/pagination.d.ts.map +1 -1
- package/dist/src/components/radio/radio.d.ts.map +1 -1
- package/dist/src/components/surface/surface.d.ts.map +1 -1
- package/dist/src/components/switch/switch.d.ts.map +1 -1
- package/dist/src/components/table/table.d.ts.map +1 -1
- package/dist/src/components/text/text.d.ts.map +1 -1
- package/dist/src/components/toast/toast.d.ts.map +1 -1
- package/dist/src/components/tooltip/tooltip.d.ts.map +1 -1
- package/dist/src/utils/resolve-variant.d.ts +27 -0
- package/dist/src/utils/resolve-variant.d.ts.map +1 -0
- package/package.json +1 -1
- package/scripts/component-registry/index.test.ts +42 -0
- package/scripts/component-registry/index.ts +18 -4
- package/scripts/component-registry/metadata.ts +239 -4
- package/dist/chunks/autocomplete-48aq0d244bs2e8zv.js.map +0 -1
- package/dist/chunks/badge-dan90i0rzy4pwa1j.js.map +0 -1
- package/dist/chunks/banner-eiwcnk7ts21s3bnb.js.map +0 -1
- package/dist/chunks/breadcrumbs-cxcwf2l1ki3ffg5d.js.map +0 -1
- package/dist/chunks/button-6by9ntsa3nj553mq.js.map +0 -1
- package/dist/chunks/checkbox-hvxfvhtx1qjo2mww.js.map +0 -1
- package/dist/chunks/clipboard-text-hswydzx3iql369sd.js.map +0 -1
- package/dist/chunks/code-f9v1ikwhekqw274q.js.map +0 -1
- package/dist/chunks/combobox-fq36ye0hstote16x.js.map +0 -1
- package/dist/chunks/dialog-k3f1fbam6nt96k8x.js.map +0 -1
- package/dist/chunks/dropdown-zbax0zowy6m9zhmt.js.map +0 -1
- package/dist/chunks/empty-b82oer7npkhtkx7k.js.map +0 -1
- package/dist/chunks/grid-hj1ylz16p7g5uelh.js.map +0 -1
- package/dist/chunks/input-ncfowphv81yq7fyy.js.map +0 -1
- package/dist/chunks/link-kt74pxkud4olmcer.js.map +0 -1
- package/dist/chunks/loader-hr2w7cpqeev3p3vl.js.map +0 -1
- package/dist/chunks/pagination-jb3mncivbwsoi1se.js.map +0 -1
- package/dist/chunks/radio-datzh3pilz8ojak1.js.map +0 -1
- package/dist/chunks/switch-jdfsr3j3oa1qxegw.js.map +0 -1
- package/dist/chunks/table-iudje0lva0z68jto.js.map +0 -1
- package/dist/chunks/text-f7t467waymhb30sx.js.map +0 -1
- package/dist/chunks/toast-h573o0tc7tefivk2.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,32 @@
|
|
|
1
1
|
# @cloudflare/kumo
|
|
2
2
|
|
|
3
|
+
## 2.0.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 3b36e21: fix(combobox): forward all props from TriggerValue to ComboboxBase.Value, enabling placeholder support and styled placeholder text via data-[placeholder]:text-kumo-placeholder
|
|
8
|
+
- 5d5d810: fix(registry): correct Select component metadata for AI-generated code
|
|
9
|
+
|
|
10
|
+
The component registry metadata was incorrectly typing Select's `value`, `defaultValue`, and `onValueChange` props as `string`, causing AI agents to produce broken code when implementing Select with object values (e.g., rendering `object.value` in the trigger instead of the label).
|
|
11
|
+
|
|
12
|
+
Changes:
|
|
13
|
+
- `value` type: `string` → `T` (generic, matches actual component interface)
|
|
14
|
+
- `defaultValue` type: `string` → `T`
|
|
15
|
+
- `onValueChange` type: `(value: string) => void` → `(value: T) => void`
|
|
16
|
+
- Added missing `renderValue` prop: `(value: T) => ReactNode` — required for object values
|
|
17
|
+
- Added missing `items` prop: supports both `Record<string, string>` and `Array<{ label, value }>` forms
|
|
18
|
+
- Added missing `isItemEqualToValue` prop: required for object equality comparison
|
|
19
|
+
|
|
20
|
+
- 62e093c: Gracefully fall back to default variant instead of crashing when an invalid variant prop is passed at runtime. Previously 22 of 25 components would throw `TypeError` on unknown variant values; all 25 now use a shared `resolveVariant()` utility that returns the default config and logs a dev warning.
|
|
21
|
+
|
|
22
|
+
## 2.0.2
|
|
23
|
+
|
|
24
|
+
### Patch Changes
|
|
25
|
+
|
|
26
|
+
- fbf3eef: Forward all Base UI Panel props (including `keepMounted` and `hiddenUntilFound`) through `Collapsible.DefaultPanel`. Previously these were silently dropped because `DefaultPanel` used a standalone props interface instead of extending `BasePanelProps`.
|
|
27
|
+
- 40491c2: Fix registry codegen to match demo examples when component export name differs from directory name (e.g. DropdownMenu vs dropdown). This restores missing examples for DropdownMenu and other affected components.
|
|
28
|
+
- 3427221: TooltipProvider props (`delay`, `closeDelay`, `timeout`) are now shown in the Tooltip component's API Reference on the docs site.
|
|
29
|
+
|
|
3
30
|
## 2.0.1
|
|
4
31
|
|
|
5
32
|
### Patch Changes
|
|
@@ -2123,7 +2123,7 @@
|
|
|
2123
2123
|
"<div className=\"flex flex-wrap items-center gap-8\">\n <CloudflareLogo className=\"w-28\" color=\"color\" />\n <div className=\"rounded-lg bg-white p-4\">\n <CloudflareLogo className=\"w-28\" color=\"black\" />\n </div>\n <div className=\"rounded-lg bg-black p-4\">\n <CloudflareLogo className=\"w-28\" color=\"white\" />\n </div>\n </div>",
|
|
2124
2124
|
"<div className=\"flex flex-wrap items-center gap-8\">\n <CloudflareLogo variant=\"glyph\" className=\"w-12\" color=\"color\" />\n <div className=\"rounded-lg bg-white p-4\">\n <CloudflareLogo variant=\"glyph\" className=\"w-12\" color=\"black\" />\n </div>\n <div className=\"rounded-lg bg-black p-4\">\n <CloudflareLogo variant=\"glyph\" className=\"w-12\" color=\"white\" />\n </div>\n </div>",
|
|
2125
2125
|
"<div className=\"flex flex-wrap items-end gap-6\">\n <CloudflareLogo className=\"w-20\" />\n <CloudflareLogo className=\"w-28\" />\n <CloudflareLogo className=\"w-44\" />\n </div>",
|
|
2126
|
-
"<div className=\"flex items-center gap-4\">\n <DropdownMenu>\n <DropdownMenu.Trigger>\n <button\n type=\"button\"\n className=\"flex items-center gap-2 rounded-lg bg-black px-4 py-3 text-white transition-opacity hover:opacity-80\"\n >\n <CloudflareLogo variant=\"glyph\" color=\"white\" className=\"w-8\" />\n <span className=\"font-medium\">Logo</span>\n </button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content>\n <DropdownMenu.Item\n icon={CloudIcon}\n
|
|
2126
|
+
"<div className=\"flex items-center gap-4\">\n <DropdownMenu>\n <DropdownMenu.Trigger>\n <button\n type=\"button\"\n className=\"flex items-center gap-2 rounded-lg bg-black px-4 py-3 text-white transition-opacity hover:opacity-80\"\n >\n <CloudflareLogo variant=\"glyph\" color=\"white\" className=\"w-8\" />\n <span className=\"font-medium\">Logo</span>\n </button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content>\n <DropdownMenu.Item\n icon={CloudIcon}\n onClick={() =>\n copyToClipboard(\n generateCloudflareLogoSvg({ variant: \"glyph\" }),\n \"glyph\",\n )\n }\n >\n {copied === \"glyph\" ? \"Copied!\" : \"Copy logo as SVG\"}\n </DropdownMenu.Item>\n <DropdownMenu.Item\n icon={CodeIcon}\n onClick={() =>\n copyToClipboard(\n generateCloudflareLogoSvg({ variant: \"full\" }),\n \"full\",\n )\n }\n >\n {copied === \"full\" ? \"Copied!\" : \"Copy full logo as SVG\"}\n </DropdownMenu.Item>\n <DropdownMenu.Item\n icon={DownloadSimpleIcon}\n onClick={() =>\n window.open(\n \"https://www.cloudflare.com/press-kit/\",\n \"_blank\",\n \"noopener\",\n )\n }\n >\n Download brand assets\n </DropdownMenu.Item>\n <DropdownMenu.Separator />\n <DropdownMenu.Item\n icon={ArrowSquareOutIcon}\n onClick={() =>\n window.open(\n \"https://www.cloudflare.com/brand-assets/\",\n \"_blank\",\n \"noopener\",\n )\n }\n >\n Visit brand guidelines\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>\n\n <span className=\"text-sm text-kumo-subtle\">\n Click to open the brand assets menu\n </span>\n </div>",
|
|
2127
2127
|
"<PoweredByCloudflare />",
|
|
2128
2128
|
"<div className=\"flex flex-wrap items-center gap-4\">\n <PoweredByCloudflare />\n <PoweredByCloudflare color=\"black\" />\n <div className=\"rounded-lg bg-black p-3\">\n <PoweredByCloudflare color=\"white\" />\n </div>\n </div>",
|
|
2129
2129
|
"<footer className=\"flex w-full items-center justify-between rounded-lg border border-kumo-hairline bg-kumo-elevated px-6 py-4\">\n <span className=\"text-sm text-kumo-subtle\">\n © 2026 Your Company. All rights reserved.\n </span>\n <PoweredByCloudflare />\n </footer>"
|
|
@@ -2242,6 +2242,7 @@
|
|
|
2242
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
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
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-4\">\n <Collapsible.Root open={isOpen} onOpenChange={setIsOpen}>\n <Collapsible.DefaultTrigger>Edit details</Collapsible.DefaultTrigger>\n <Collapsible.DefaultPanel keepMounted>\n <Text>\n Type something below, then collapse and re-open — your input is\n preserved because the panel stays mounted.\n </Text>\n <Input label=\"Name\" placeholder=\"Type here…\" />\n </Collapsible.DefaultPanel>\n </Collapsible.Root>\n </div>",
|
|
2245
2246
|
"<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>"
|
|
2246
2247
|
],
|
|
2247
2248
|
"colors": [
|
|
@@ -2403,6 +2404,7 @@
|
|
|
2403
2404
|
"examples": [
|
|
2404
2405
|
"<Combobox\n value={value}\n onValueChange={(v) => setValue(v as string | null)}\n items={fruits}\n >\n <Combobox.TriggerInput placeholder=\"Please select\" />\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>",
|
|
2405
2406
|
"<Combobox\n value={value}\n onValueChange={(v) => setValue(v as Language)}\n items={languages}\n >\n <Combobox.TriggerValue className=\"w-[200px]\" />\n <Combobox.Content>\n <Combobox.Input placeholder=\"Search languages\" />\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>",
|
|
2407
|
+
"<Combobox\n value={value}\n onValueChange={(v) => setValue(v as Language | null)}\n items={languages}\n >\n <Combobox.TriggerValue\n className=\"w-[200px]\"\n placeholder=\"Select a language\"\n />\n <Combobox.Content>\n <Combobox.Input placeholder=\"Search languages\" />\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>",
|
|
2406
2408
|
"<Combobox\n value={value}\n onValueChange={(v) => setValue(v as ServerLocation | null)}\n items={servers}\n >\n <Combobox.TriggerInput\n className=\"w-[200px]\"\n placeholder=\"Select server\"\n />\n <Combobox.Content>\n <Combobox.Empty />\n <Combobox.List>\n {(group: ServerLocationGroup) => (\n <Combobox.Group key={group.value} items={group.items}>\n <Combobox.GroupLabel>{group.value}</Combobox.GroupLabel>\n <Combobox.Collection>\n {(item: ServerLocation) => (\n <Combobox.Item key={item.value} value={item}>\n {item.label}\n </Combobox.Item>\n )}\n </Combobox.Collection>\n </Combobox.Group>\n )}\n </Combobox.List>\n </Combobox.Content>\n </Combobox>",
|
|
2407
2409
|
"<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>",
|
|
2408
2410
|
"<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>",
|
|
@@ -2421,6 +2423,7 @@
|
|
|
2421
2423
|
"ring-kumo-hairline",
|
|
2422
2424
|
"ring-kumo-line",
|
|
2423
2425
|
"text-kumo-default",
|
|
2426
|
+
"text-kumo-placeholder",
|
|
2424
2427
|
"text-kumo-subtle"
|
|
2425
2428
|
],
|
|
2426
2429
|
"subComponents": {
|
|
@@ -2900,7 +2903,15 @@
|
|
|
2900
2903
|
"default": "default"
|
|
2901
2904
|
}
|
|
2902
2905
|
},
|
|
2903
|
-
"examples": [
|
|
2906
|
+
"examples": [
|
|
2907
|
+
"<DropdownMenu>\n <DropdownMenu.Trigger render={<Button icon={PlusIcon}>Add</Button>} />\n <DropdownMenu.Content>\n <DropdownMenu.Item>Worker</DropdownMenu.Item>\n <DropdownMenu.Item>Pages</DropdownMenu.Item>\n <DropdownMenu.Item>KV Namespace</DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>",
|
|
2908
|
+
"<DropdownMenu>\n <DropdownMenu.Trigger render={<Button>View Options</Button>} />\n <DropdownMenu.Content>\n <DropdownMenu.Group>\n <DropdownMenu.Label>Display</DropdownMenu.Label>\n <DropdownMenu.CheckboxItem\n checked={showSidebar}\n onCheckedChange={setShowSidebar}\n >\n Show sidebar\n </DropdownMenu.CheckboxItem>\n <DropdownMenu.CheckboxItem\n checked={showLineNumbers}\n onCheckedChange={setShowLineNumbers}\n >\n Show line numbers\n </DropdownMenu.CheckboxItem>\n <DropdownMenu.CheckboxItem\n checked={wordWrap}\n onCheckedChange={setWordWrap}\n >\n Word wrap\n </DropdownMenu.CheckboxItem>\n </DropdownMenu.Group>\n </DropdownMenu.Content>\n </DropdownMenu>",
|
|
2909
|
+
"<DropdownMenu>\n <DropdownMenu.Trigger render={<Button icon={UserIcon}>Account</Button>} />\n <DropdownMenu.Content>\n <DropdownMenu.Item icon={UserIcon}>Profile</DropdownMenu.Item>\n <DropdownMenu.Item icon={CreditCardIcon}>Billing</DropdownMenu.Item>\n <DropdownMenu.Item icon={MoonIcon}>Dark mode</DropdownMenu.Item>\n\n {/* Language submenu with RadioGroup */}\n <DropdownMenu.Sub>\n <DropdownMenu.SubTrigger>Language</DropdownMenu.SubTrigger>\n <DropdownMenu.SubContent>\n <DropdownMenu.Group>\n <DropdownMenu.RadioGroup\n value={language}\n onValueChange={setLanguage}\n >\n {languages.map((lang) => (\n <DropdownMenu.RadioItem key={lang.code} value={lang.code}>\n {lang.label}\n <DropdownMenu.RadioItemIndicator />\n </DropdownMenu.RadioItem>\n ))}\n </DropdownMenu.RadioGroup>\n </DropdownMenu.Group>\n </DropdownMenu.SubContent>\n </DropdownMenu.Sub>\n\n {/* Timezone submenu with RadioGroup */}\n <DropdownMenu.Sub>\n <DropdownMenu.SubTrigger>Set Timezone</DropdownMenu.SubTrigger>\n <DropdownMenu.SubContent>\n <DropdownMenu.Group>\n <DropdownMenu.RadioGroup\n value={timezone}\n onValueChange={setTimezone}\n >\n {timezones.map((tz) => (\n <DropdownMenu.RadioItem key={tz.value} value={tz.value}>\n {tz.label}\n <DropdownMenu.RadioItemIndicator />\n </DropdownMenu.RadioItem>\n ))}\n </DropdownMenu.RadioGroup>\n </DropdownMenu.Group>\n </DropdownMenu.SubContent>\n </DropdownMenu.Sub>\n\n <DropdownMenu.Separator />\n <DropdownMenu.Item icon={SignOutIcon} variant=\"danger\">\n Log out\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>",
|
|
2910
|
+
"<DropdownMenu>\n <DropdownMenu.Trigger render={<Button>Edit</Button>} />\n <DropdownMenu.Content>\n <DropdownMenu.Item icon={PencilSimpleIcon}>Rename</DropdownMenu.Item>\n <DropdownMenu.Item icon={CopyIcon}>Duplicate</DropdownMenu.Item>\n <DropdownMenu.Separator />\n <DropdownMenu.Item inset>Move to folder</DropdownMenu.Item>\n <DropdownMenu.Item inset>Add to favorites</DropdownMenu.Item>\n <DropdownMenu.Separator />\n <DropdownMenu.Item icon={TrashIcon} variant=\"danger\">\n Delete\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>",
|
|
2911
|
+
"<div className=\"flex flex-col items-start gap-2\">\n <DropdownMenu>\n <DropdownMenu.Trigger render={<Button>Actions</Button>} />\n <DropdownMenu.Content>\n <DropdownMenu.Item\n icon={CopyIcon}\n onClick={() => setLastAction(\"Duplicated\")}\n >\n Duplicate\n </DropdownMenu.Item>\n <DropdownMenu.Item\n icon={PencilSimpleIcon}\n onClick={() => setLastAction(\"Renamed\")}\n >\n Rename\n </DropdownMenu.Item>\n <DropdownMenu.Separator />\n <DropdownMenu.Item\n icon={TrashIcon}\n variant=\"danger\"\n onClick={() => setLastAction(\"Deleted\")}\n >\n Delete\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>\n {lastAction && (\n <p className=\"text-sm text-kumo-subtle\">\n Last action: <span className=\"text-kumo-default\">{lastAction}</span>\n </p>\n )}\n </div>",
|
|
2912
|
+
"<DropdownMenu>\n <DropdownMenu.Trigger\n render={<button type=\"button\" className=\"rounded-full\" />}\n >\n <span className=\"flex h-8 w-8 items-center justify-center rounded-full bg-kumo-brand text-sm font-medium text-white\">\n MR\n </span>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content>\n <DropdownMenu.Item icon={UserIcon}>Profile</DropdownMenu.Item>\n <DropdownMenu.Item icon={GearIcon}>Settings</DropdownMenu.Item>\n <DropdownMenu.Separator />\n <DropdownMenu.Item icon={SignOutIcon} variant=\"danger\">\n Log out\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>",
|
|
2913
|
+
"<DropdownMenu>\n <DropdownMenu.Trigger render={<Button>Resources</Button>} />\n <DropdownMenu.Content>\n <DropdownMenu.LinkItem href=\"/settings\" icon={GearIcon}>\n Settings\n </DropdownMenu.LinkItem>\n <DropdownMenu.LinkItem href=\"/docs\" icon={BookOpenIcon}>\n Documentation\n </DropdownMenu.LinkItem>\n <DropdownMenu.Separator />\n <DropdownMenu.LinkItem\n href=\"https://developers.cloudflare.com\"\n target=\"_blank\"\n icon={ArrowSquareOutIcon}\n >\n Developer Docs\n </DropdownMenu.LinkItem>\n </DropdownMenu.Content>\n </DropdownMenu>"
|
|
2914
|
+
],
|
|
2904
2915
|
"colors": [
|
|
2905
2916
|
"bg-kumo-control",
|
|
2906
2917
|
"bg-kumo-danger",
|
|
@@ -2936,7 +2947,16 @@
|
|
|
2936
2947
|
"SubTrigger": {
|
|
2937
2948
|
"name": "SubTrigger",
|
|
2938
2949
|
"description": "SubTrigger sub-component",
|
|
2939
|
-
"props": {
|
|
2950
|
+
"props": {
|
|
2951
|
+
"icon": {
|
|
2952
|
+
"type": "Icon",
|
|
2953
|
+
"description": "Icon displayed before the label."
|
|
2954
|
+
},
|
|
2955
|
+
"inset": {
|
|
2956
|
+
"type": "boolean",
|
|
2957
|
+
"description": "Adds left padding to align with items that have icons."
|
|
2958
|
+
}
|
|
2959
|
+
}
|
|
2940
2960
|
},
|
|
2941
2961
|
"SubContent": {
|
|
2942
2962
|
"name": "SubContent",
|
|
@@ -2946,34 +2966,164 @@
|
|
|
2946
2966
|
"Content": {
|
|
2947
2967
|
"name": "Content",
|
|
2948
2968
|
"description": "Content sub-component",
|
|
2949
|
-
"props": {
|
|
2969
|
+
"props": {
|
|
2970
|
+
"sideOffset": {
|
|
2971
|
+
"type": "number",
|
|
2972
|
+
"description": "Distance in pixels from the trigger.",
|
|
2973
|
+
"default": "8"
|
|
2974
|
+
},
|
|
2975
|
+
"container": {
|
|
2976
|
+
"type": "PortalContainer",
|
|
2977
|
+
"description": "Container element for the portal. Use this to render inside a Shadow DOM or custom container."
|
|
2978
|
+
}
|
|
2979
|
+
}
|
|
2950
2980
|
},
|
|
2951
2981
|
"Item": {
|
|
2952
2982
|
"name": "Item",
|
|
2953
2983
|
"description": "Item sub-component",
|
|
2954
|
-
"props": {
|
|
2984
|
+
"props": {
|
|
2985
|
+
"icon": {
|
|
2986
|
+
"type": "Icon | ReactNode",
|
|
2987
|
+
"description": "Icon displayed before the label."
|
|
2988
|
+
},
|
|
2989
|
+
"variant": {
|
|
2990
|
+
"type": "\"default\" | \"danger\"",
|
|
2991
|
+
"description": "Visual style of the item.",
|
|
2992
|
+
"default": "\"default\""
|
|
2993
|
+
},
|
|
2994
|
+
"selected": {
|
|
2995
|
+
"type": "boolean",
|
|
2996
|
+
"description": "Shows a check mark indicator when true."
|
|
2997
|
+
},
|
|
2998
|
+
"inset": {
|
|
2999
|
+
"type": "boolean",
|
|
3000
|
+
"description": "Adds left padding to align with items that have icons."
|
|
3001
|
+
},
|
|
3002
|
+
"onClick": {
|
|
3003
|
+
"type": "(event: React.MouseEvent) => void",
|
|
3004
|
+
"description": "Callback when the item is clicked."
|
|
3005
|
+
},
|
|
3006
|
+
"closeOnClick": {
|
|
3007
|
+
"type": "boolean",
|
|
3008
|
+
"description": "Whether the menu closes after clicking this item.",
|
|
3009
|
+
"default": "true"
|
|
3010
|
+
},
|
|
3011
|
+
"disabled": {
|
|
3012
|
+
"type": "boolean",
|
|
3013
|
+
"description": "When true, the item cannot be interacted with."
|
|
3014
|
+
}
|
|
3015
|
+
}
|
|
2955
3016
|
},
|
|
2956
3017
|
"LinkItem": {
|
|
2957
3018
|
"name": "LinkItem",
|
|
2958
3019
|
"description": "LinkItem sub-component",
|
|
2959
|
-
"props": {
|
|
3020
|
+
"props": {
|
|
3021
|
+
"href": {
|
|
3022
|
+
"type": "string",
|
|
3023
|
+
"description": "URL to navigate to when clicked."
|
|
3024
|
+
},
|
|
3025
|
+
"icon": {
|
|
3026
|
+
"type": "Icon | ReactNode",
|
|
3027
|
+
"description": "Icon displayed before the label."
|
|
3028
|
+
},
|
|
3029
|
+
"variant": {
|
|
3030
|
+
"type": "\"default\" | \"danger\"",
|
|
3031
|
+
"description": "Visual style of the item.",
|
|
3032
|
+
"default": "\"default\""
|
|
3033
|
+
},
|
|
3034
|
+
"inset": {
|
|
3035
|
+
"type": "boolean",
|
|
3036
|
+
"description": "Adds left padding to align with items that have icons."
|
|
3037
|
+
},
|
|
3038
|
+
"target": {
|
|
3039
|
+
"type": "string",
|
|
3040
|
+
"description": "Link target attribute (e.g. \"_blank\" for new tab)."
|
|
3041
|
+
},
|
|
3042
|
+
"render": {
|
|
3043
|
+
"type": "ReactElement | ((props, state) => ReactElement)",
|
|
3044
|
+
"description": "Custom element to render as the link. Use to integrate with framework routers (e.g. Next.js Link)."
|
|
3045
|
+
}
|
|
3046
|
+
}
|
|
2960
3047
|
},
|
|
2961
3048
|
"CheckboxItem": {
|
|
2962
3049
|
"name": "CheckboxItem",
|
|
2963
3050
|
"description": "CheckboxItem sub-component",
|
|
2964
|
-
"props": {
|
|
3051
|
+
"props": {
|
|
3052
|
+
"checked": {
|
|
3053
|
+
"type": "boolean",
|
|
3054
|
+
"description": "Whether the item is checked."
|
|
3055
|
+
},
|
|
3056
|
+
"defaultChecked": {
|
|
3057
|
+
"type": "boolean",
|
|
3058
|
+
"description": "Whether the item is initially checked (uncontrolled).",
|
|
3059
|
+
"default": "false"
|
|
3060
|
+
},
|
|
3061
|
+
"onCheckedChange": {
|
|
3062
|
+
"type": "(checked: boolean, event: ChangeEventDetails) => void",
|
|
3063
|
+
"description": "Callback when the checked state changes."
|
|
3064
|
+
},
|
|
3065
|
+
"closeOnClick": {
|
|
3066
|
+
"type": "boolean",
|
|
3067
|
+
"description": "Whether the menu closes after clicking this item.",
|
|
3068
|
+
"default": "false"
|
|
3069
|
+
},
|
|
3070
|
+
"disabled": {
|
|
3071
|
+
"type": "boolean",
|
|
3072
|
+
"description": "When true, the item cannot be interacted with."
|
|
3073
|
+
}
|
|
3074
|
+
}
|
|
2965
3075
|
},
|
|
2966
3076
|
"RadioGroup": {
|
|
2967
3077
|
"name": "RadioGroup",
|
|
2968
3078
|
"description": "RadioGroup sub-component (wraps DropdownMenuPrimitive)",
|
|
2969
|
-
"props": {
|
|
3079
|
+
"props": {
|
|
3080
|
+
"value": {
|
|
3081
|
+
"type": "any",
|
|
3082
|
+
"description": "The controlled value of the currently selected radio item."
|
|
3083
|
+
},
|
|
3084
|
+
"defaultValue": {
|
|
3085
|
+
"type": "any",
|
|
3086
|
+
"description": "The initially selected value (uncontrolled)."
|
|
3087
|
+
},
|
|
3088
|
+
"onValueChange": {
|
|
3089
|
+
"type": "(value: any, event: ChangeEventDetails) => void",
|
|
3090
|
+
"description": "Callback when the selected value changes."
|
|
3091
|
+
},
|
|
3092
|
+
"disabled": {
|
|
3093
|
+
"type": "boolean",
|
|
3094
|
+
"description": "When true, all radio items in the group are disabled."
|
|
3095
|
+
}
|
|
3096
|
+
},
|
|
2970
3097
|
"isPassThrough": true,
|
|
2971
3098
|
"baseComponent": "DropdownMenuPrimitive.RadioGroup"
|
|
2972
3099
|
},
|
|
2973
3100
|
"RadioItem": {
|
|
2974
3101
|
"name": "RadioItem",
|
|
2975
3102
|
"description": "RadioItem sub-component",
|
|
2976
|
-
"props": {
|
|
3103
|
+
"props": {
|
|
3104
|
+
"value": {
|
|
3105
|
+
"type": "any",
|
|
3106
|
+
"required": true,
|
|
3107
|
+
"description": "The value of this radio item."
|
|
3108
|
+
},
|
|
3109
|
+
"icon": {
|
|
3110
|
+
"type": "Icon | ReactNode",
|
|
3111
|
+
"description": "Icon displayed before the label."
|
|
3112
|
+
},
|
|
3113
|
+
"inset": {
|
|
3114
|
+
"type": "boolean",
|
|
3115
|
+
"description": "Adds left padding to align with items that have icons."
|
|
3116
|
+
},
|
|
3117
|
+
"closeOnClick": {
|
|
3118
|
+
"type": "boolean",
|
|
3119
|
+
"description": "Whether the menu closes after clicking this item.",
|
|
3120
|
+
"default": "false"
|
|
3121
|
+
},
|
|
3122
|
+
"disabled": {
|
|
3123
|
+
"type": "boolean",
|
|
3124
|
+
"description": "When true, the item cannot be interacted with."
|
|
3125
|
+
}
|
|
3126
|
+
}
|
|
2977
3127
|
},
|
|
2978
3128
|
"RadioItemIndicator": {
|
|
2979
3129
|
"name": "RadioItemIndicator",
|
|
@@ -2983,7 +3133,12 @@
|
|
|
2983
3133
|
"Label": {
|
|
2984
3134
|
"name": "Label",
|
|
2985
3135
|
"description": "Label sub-component",
|
|
2986
|
-
"props": {
|
|
3136
|
+
"props": {
|
|
3137
|
+
"inset": {
|
|
3138
|
+
"type": "boolean",
|
|
3139
|
+
"description": "Adds left padding to align with items that have icons."
|
|
3140
|
+
}
|
|
3141
|
+
}
|
|
2987
3142
|
},
|
|
2988
3143
|
"Separator": {
|
|
2989
3144
|
"name": "Separator",
|
|
@@ -4457,7 +4612,7 @@
|
|
|
4457
4612
|
"description": "Tooltip content displayed next to the label via an info icon."
|
|
4458
4613
|
},
|
|
4459
4614
|
"value": {
|
|
4460
|
-
"type": "
|
|
4615
|
+
"type": "T",
|
|
4461
4616
|
"optional": true,
|
|
4462
4617
|
"description": "Currently selected value (controlled mode)."
|
|
4463
4618
|
},
|
|
@@ -4477,12 +4632,24 @@
|
|
|
4477
4632
|
"description": "Error message string or validation error object with `match` key."
|
|
4478
4633
|
},
|
|
4479
4634
|
"onValueChange": {
|
|
4480
|
-
"type": "(value:
|
|
4635
|
+
"type": "(value: T) => void",
|
|
4481
4636
|
"description": "Callback when selection changes"
|
|
4482
4637
|
},
|
|
4483
4638
|
"defaultValue": {
|
|
4484
|
-
"type": "
|
|
4639
|
+
"type": "T",
|
|
4485
4640
|
"description": "Initial value for uncontrolled mode"
|
|
4641
|
+
},
|
|
4642
|
+
"renderValue": {
|
|
4643
|
+
"type": "(value: T) => ReactNode",
|
|
4644
|
+
"description": "A function that returns a ReactNode to format the selected value in the trigger. Required when using object values. Use `placeholder` for the empty state."
|
|
4645
|
+
},
|
|
4646
|
+
"items": {
|
|
4647
|
+
"type": "Record<string, string> | Array<{ label: ReactNode; value: T }>",
|
|
4648
|
+
"description": "Data structure of items rendered in the popup. Accepts a plain object map (`{ key: \"Label\" }`) or an array of `{ label, value }` for object/complex values."
|
|
4649
|
+
},
|
|
4650
|
+
"isItemEqualToValue": {
|
|
4651
|
+
"type": "(item: T, value: T) => boolean",
|
|
4652
|
+
"description": "Custom equality function for comparing items. Required when value is an object, since object identity (`===`) won't match across renders."
|
|
4486
4653
|
}
|
|
4487
4654
|
},
|
|
4488
4655
|
"examples": [
|
|
@@ -5897,7 +6064,19 @@
|
|
|
5897
6064
|
"description": "Child elements"
|
|
5898
6065
|
}
|
|
5899
6066
|
},
|
|
5900
|
-
"examples": [
|
|
6067
|
+
"examples": [
|
|
6068
|
+
"<Toasty>\n <ToastTriggerButton />\n </Toasty>",
|
|
6069
|
+
"<Toasty>\n <ToastTitleOnlyButton />\n </Toasty>",
|
|
6070
|
+
"<Toasty>\n <ToastDescriptionOnlyButton />\n </Toasty>",
|
|
6071
|
+
"<Toasty>\n <ToastSuccessButton />\n </Toasty>",
|
|
6072
|
+
"<Toasty>\n <ToastMultipleButton />\n </Toasty>",
|
|
6073
|
+
"<Toasty>\n <ToastErrorButton />\n </Toasty>",
|
|
6074
|
+
"<Toasty>\n <ToastWarningButton />\n </Toasty>",
|
|
6075
|
+
"<Toasty>\n <ToastInfoButton />\n </Toasty>",
|
|
6076
|
+
"<Toasty>\n <ToastCustomContentButton />\n </Toasty>",
|
|
6077
|
+
"<Toasty>\n <ToastActionsButton />\n </Toasty>",
|
|
6078
|
+
"<Toasty>\n <ToastPromiseButton />\n </Toasty>"
|
|
6079
|
+
],
|
|
5901
6080
|
"colors": [
|
|
5902
6081
|
"bg-kumo-base",
|
|
5903
6082
|
"bg-kumo-contrast",
|
|
@@ -6003,7 +6182,35 @@
|
|
|
6003
6182
|
"fill-kumo-tip-stroke",
|
|
6004
6183
|
"outline-kumo-fill",
|
|
6005
6184
|
"text-kumo-default"
|
|
6006
|
-
]
|
|
6185
|
+
],
|
|
6186
|
+
"subComponents": {
|
|
6187
|
+
"Provider": {
|
|
6188
|
+
"name": "Provider",
|
|
6189
|
+
"description": "Groups multiple tooltips so that after the first tooltip is shown, switching to another skips the open delay. Place once at your app root or layout.",
|
|
6190
|
+
"props": {
|
|
6191
|
+
"delay": {
|
|
6192
|
+
"type": "number",
|
|
6193
|
+
"description": "How long to wait (ms) before opening a tooltip once the pointer enters the trigger.",
|
|
6194
|
+
"default": "600"
|
|
6195
|
+
},
|
|
6196
|
+
"closeDelay": {
|
|
6197
|
+
"type": "number",
|
|
6198
|
+
"description": "How long to wait (ms) before closing a tooltip.",
|
|
6199
|
+
"default": "0"
|
|
6200
|
+
},
|
|
6201
|
+
"timeout": {
|
|
6202
|
+
"type": "number",
|
|
6203
|
+
"description": "Grace period (ms) during which a just-closed tooltip's delay is skipped when another tooltip opens.",
|
|
6204
|
+
"default": "400"
|
|
6205
|
+
}
|
|
6206
|
+
},
|
|
6207
|
+
"isPassThrough": true,
|
|
6208
|
+
"baseComponent": "TooltipBase.Provider",
|
|
6209
|
+
"usageExamples": [
|
|
6210
|
+
"<TooltipProvider>\n <App />\n</TooltipProvider>"
|
|
6211
|
+
]
|
|
6212
|
+
}
|
|
6213
|
+
}
|
|
6007
6214
|
},
|
|
6008
6215
|
"InputArea": {
|
|
6009
6216
|
"name": "InputArea",
|
|
@@ -6237,7 +6444,11 @@
|
|
|
6237
6444
|
"optional": true
|
|
6238
6445
|
}
|
|
6239
6446
|
},
|
|
6240
|
-
"examples": [
|
|
6447
|
+
"examples": [
|
|
6448
|
+
"<ResourceListPage\n title=\"Databases\"\n description=\"Manage your database instances and configurations\"\n icon={<DatabaseIcon size={32} className=\"text-kumo-subtle\" />}\n >\n <Surface className=\"p-6\">\n <p>Main content area - your resource list would go here</p>\n </Surface>\n </ResourceListPage>",
|
|
6449
|
+
"<ResourceListPage\n title=\"API Keys\"\n description=\"Create and manage API keys for your applications\"\n usage={\n <Surface className=\"p-4\">\n <h3 className=\"mb-2 font-semibold\">Quick Start</h3>\n <p className=\"mb-3 text-sm text-kumo-subtle\">\n Generate an API key to authenticate your requests\n </p>\n <Code\n lang=\"bash\"\n code='curl -H \"Authorization: Bearer YOUR_API_KEY\" https://api.example.com'\n />\n </Surface>\n }\n >\n <Surface className=\"p-6\">\n <p>API keys list would appear here</p>\n </Surface>\n </ResourceListPage>",
|
|
6450
|
+
"<ResourceListPage\n title=\"KV Namespaces\"\n description=\"Store key-value data globally with low-latency access\"\n icon={<DatabaseIcon size={32} className=\"text-kumo-subtle\" />}\n usage={\n <Surface className=\"p-4\">\n <h3 className=\"mb-2 font-semibold\">Usage Example</h3>\n <Code\n lang=\"ts\"\n code={`// Read from KV\nconst value = await KV.get('key');\n\n// Write to KV\nawait KV.put('key', 'value');`}\n />\n </Surface>\n }\n additionalContent={\n <Surface className=\"p-4\">\n <h3 className=\"mb-2 font-semibold\">Learn More</h3>\n <p className=\"text-sm text-kumo-subtle\">\n Check out our documentation to learn more about KV storage.\n </p>\n </Surface>\n }\n >\n <div className=\"space-y-4\">\n <Surface className=\"p-6\">\n <h4 className=\"mb-2 font-semibold\">production-kv</h4>\n <p className=\"text-sm text-kumo-subtle\">Created 2 days ago</p>\n </Surface>\n <Surface className=\"p-6\">\n <h4 className=\"mb-2 font-semibold\">staging-kv</h4>\n <p className=\"text-sm text-kumo-subtle\">Created 1 week ago</p>\n </Surface>\n </div>\n </ResourceListPage>"
|
|
6451
|
+
],
|
|
6241
6452
|
"colors": [
|
|
6242
6453
|
"bg-kumo-overlay",
|
|
6243
6454
|
"text-kumo-subtle"
|