@cloudflare/kumo 1.17.0 → 1.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +143 -0
- package/ai/USAGE.md +38 -32
- package/ai/component-registry.json +289 -178
- package/ai/component-registry.md +980 -507
- package/ai/schemas.ts +20 -4
- package/dist/.build-complete +1 -1
- package/dist/ai/schemas.d.ts +95 -56
- package/dist/ai/schemas.d.ts.map +1 -1
- package/dist/ai/schemas.js +165 -148
- package/dist/ai/schemas.js.map +1 -1
- package/dist/chunks/{Legend-o0ntojbaplmszwk0.js → Legend-ks7se6149vsa3tze.js} +127 -118
- package/dist/chunks/Legend-ks7se6149vsa3tze.js.map +1 -0
- package/dist/chunks/badge-dan90i0rzy4pwa1j.js +102 -0
- package/dist/chunks/badge-dan90i0rzy4pwa1j.js.map +1 -0
- package/dist/chunks/{banner-nz0eryqnz3qd86ln.js → banner-eiwcnk7ts21s3bnb.js} +4 -4
- package/dist/chunks/{banner-nz0eryqnz3qd86ln.js.map → banner-eiwcnk7ts21s3bnb.js.map} +1 -1
- package/dist/chunks/{breadcrumbs-cjgn3w4drahvqnuj.js → breadcrumbs-ge20hcb3o5spswrk.js} +2 -2
- package/dist/chunks/{breadcrumbs-cjgn3w4drahvqnuj.js.map → breadcrumbs-ge20hcb3o5spswrk.js.map} +1 -1
- package/dist/chunks/{button-odxi0hp4fvi5i2w3.js → button-oaqi7ykdisyskoos.js} +8 -8
- package/dist/chunks/button-oaqi7ykdisyskoos.js.map +1 -0
- package/dist/chunks/{checkbox-dx8x0rzv582yjv7n.js → checkbox-mwgmohffm22ut13s.js} +15 -15
- package/dist/chunks/checkbox-mwgmohffm22ut13s.js.map +1 -0
- package/dist/chunks/{clipboard-text-kyk51d1ze7zvdn4q.js → clipboard-text-dxczqon3d27xp6f0.js} +10 -10
- package/dist/chunks/{clipboard-text-kyk51d1ze7zvdn4q.js.map → clipboard-text-dxczqon3d27xp6f0.js.map} +1 -1
- package/dist/chunks/{cloudflare-logo-bgts2jgsdh7sslw4.js → cloudflare-logo-pbavoe1wu8nr5c4n.js} +9 -9
- package/dist/chunks/{cloudflare-logo-bgts2jgsdh7sslw4.js.map → cloudflare-logo-pbavoe1wu8nr5c4n.js.map} +1 -1
- package/dist/chunks/{code-liq1g6f5lhee305d.js → code-cz0w1y5z4h29a9eg.js} +18 -18
- package/dist/chunks/code-cz0w1y5z4h29a9eg.js.map +1 -0
- package/dist/chunks/{combobox-9fhjzprab46csmon.js → combobox-eaowwt1xr4d23gsn.js} +113 -101
- package/dist/chunks/combobox-eaowwt1xr4d23gsn.js.map +1 -0
- package/dist/chunks/{command-palette-kenx2bbdzd4kpx36.js → command-palette-maqtbmpfev9mysqd.js} +20 -20
- package/dist/chunks/command-palette-maqtbmpfev9mysqd.js.map +1 -0
- package/dist/chunks/{dialog-e05ysa8t2fklw065.js → dialog-e3m5bhs7fds26p9y.js} +25 -25
- package/dist/chunks/dialog-e3m5bhs7fds26p9y.js.map +1 -0
- package/dist/chunks/{dropdown-g587px7zv3ssaxr4.js → dropdown-ewte287db3vyt8t5.js} +94 -92
- package/dist/chunks/{dropdown-g587px7zv3ssaxr4.js.map → dropdown-ewte287db3vyt8t5.js.map} +1 -1
- package/dist/chunks/{empty-fuz1un7r7mbz0kim.js → empty-dr1eckm2z40euns6.js} +2 -2
- package/dist/chunks/{empty-fuz1un7r7mbz0kim.js.map → empty-dr1eckm2z40euns6.js.map} +1 -1
- package/dist/chunks/{field-fq504lyu7ttsh5m9.js → field-bo5gmna16odrrb1q.js} +3 -3
- package/dist/chunks/{field-fq504lyu7ttsh5m9.js.map → field-bo5gmna16odrrb1q.js.map} +1 -1
- package/dist/chunks/{grid-m9r71jxo2b8q1972.js → grid-hj1ylz16p7g5uelh.js} +2 -2
- package/dist/chunks/{grid-m9r71jxo2b8q1972.js.map → grid-hj1ylz16p7g5uelh.js.map} +1 -1
- package/dist/chunks/input-area-jkkkjej6luumrqpa.js +78 -0
- package/dist/chunks/input-area-jkkkjej6luumrqpa.js.map +1 -0
- package/dist/chunks/input-cw05pbqdburghkus.js +113 -0
- package/dist/chunks/input-cw05pbqdburghkus.js.map +1 -0
- package/dist/chunks/{input-group-hbebbyh8fo6aqydn.js → input-group-lfugneuz71g42n0w.js} +27 -27
- package/dist/chunks/input-group-lfugneuz71g42n0w.js.map +1 -0
- package/dist/chunks/label-cvyvbqmt4mt757ff.js +68 -0
- package/dist/chunks/{label-j9owppbgnn35mebg.js.map → label-cvyvbqmt4mt757ff.js.map} +1 -1
- package/dist/chunks/layer-card-ljqth3yxgnk04v2o.js +46 -0
- package/dist/chunks/layer-card-ljqth3yxgnk04v2o.js.map +1 -0
- package/dist/chunks/{link-hmmf3k1xn6rm72rt.js → link-fjnhtxvfe5ieamjf.js} +2 -2
- package/dist/chunks/{link-hmmf3k1xn6rm72rt.js.map → link-fjnhtxvfe5ieamjf.js.map} +1 -1
- package/dist/chunks/{loader-m5wfmqwgucrr4i5v.js → loader-hr2w7cpqeev3p3vl.js} +9 -6
- package/dist/chunks/loader-hr2w7cpqeev3p3vl.js.map +1 -0
- package/dist/chunks/menubar-e5e4zwfagr0wx023.js +96 -0
- package/dist/chunks/menubar-e5e4zwfagr0wx023.js.map +1 -0
- package/dist/chunks/{meter-i84dte2f82qmvn7y.js → meter-duj3micor1lqj3y2.js} +2 -2
- package/dist/chunks/{meter-i84dte2f82qmvn7y.js.map → meter-duj3micor1lqj3y2.js.map} +1 -1
- package/dist/chunks/pagination-olaypvwr8swsmn8m.js +266 -0
- package/dist/chunks/pagination-olaypvwr8swsmn8m.js.map +1 -0
- package/dist/chunks/{popover-i951xjcgezeqr4iv.js → popover-nv9cmzbo7mf6bky0.js} +68 -72
- package/dist/chunks/popover-nv9cmzbo7mf6bky0.js.map +1 -0
- package/dist/chunks/{radio-l2vkcue40d84fmo1.js → radio-ihxbe37us2jnqtzf.js} +38 -38
- package/dist/chunks/radio-ihxbe37us2jnqtzf.js.map +1 -0
- package/dist/chunks/select-nx6ded5swra74iar.js +213 -0
- package/dist/chunks/select-nx6ded5swra74iar.js.map +1 -0
- package/dist/chunks/{sensitive-input-kznmknpp5h1grc6k.js → sensitive-input-00fujb510rrn61v9.js} +34 -34
- package/dist/chunks/{sensitive-input-kznmknpp5h1grc6k.js.map → sensitive-input-00fujb510rrn61v9.js.map} +1 -1
- package/dist/chunks/{sidebar-jepeq7gaf4issuw6.js → sidebar-ltbfius1eolkl8tb.js} +24 -28
- package/dist/chunks/sidebar-ltbfius1eolkl8tb.js.map +1 -0
- package/dist/chunks/surface-dfgurg5eu3et4vw1.js +29 -0
- package/dist/chunks/surface-dfgurg5eu3et4vw1.js.map +1 -0
- package/dist/chunks/{switch-i0zwcp3wq6vsxm1c.js → switch-fbv3iawqo3o3jgap.js} +104 -102
- package/dist/chunks/switch-fbv3iawqo3o3jgap.js.map +1 -0
- package/dist/chunks/table-of-contents-f813ivi7ta23vqdm.js +88 -0
- package/dist/chunks/table-of-contents-f813ivi7ta23vqdm.js.map +1 -0
- package/dist/chunks/table-olwwulga2l3hdwlx.js +189 -0
- package/dist/chunks/table-olwwulga2l3hdwlx.js.map +1 -0
- package/dist/chunks/{tabs-bw92jb303zxw7w4f.js → tabs-lohcglgppp6gj0hp.js} +16 -16
- package/dist/chunks/{tabs-bw92jb303zxw7w4f.js.map → tabs-lohcglgppp6gj0hp.js.map} +1 -1
- package/dist/chunks/{toast-lrnwby56drs7vtae.js → toast-dg52x89yd231mxhe.js} +30 -30
- package/dist/chunks/{toast-lrnwby56drs7vtae.js.map → toast-dg52x89yd231mxhe.js.map} +1 -1
- package/dist/chunks/{tooltip-cit9ltlxfuhwctuj.js → tooltip-hikjvdbg3xghnq1x.js} +38 -33
- package/dist/chunks/tooltip-hikjvdbg3xghnq1x.js.map +1 -0
- package/dist/chunks/{vendor-base-ui-n30qblevnpk9cc5c.js → vendor-base-ui-m5pz3e8c4grg5qmj.js} +46 -43
- package/dist/chunks/{vendor-base-ui-n30qblevnpk9cc5c.js.map → vendor-base-ui-m5pz3e8c4grg5qmj.js.map} +1 -1
- package/dist/code.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/chart.js +1 -1
- package/dist/components/checkbox.js +1 -1
- package/dist/components/clipboard-text.js +1 -1
- package/dist/components/cloudflare-logo.js +1 -1
- package/dist/components/code.js +1 -1
- package/dist/components/combobox.js +1 -1
- package/dist/components/command-palette.js +1 -1
- package/dist/components/dialog.js +1 -1
- package/dist/components/dropdown.js +1 -1
- package/dist/components/empty.js +1 -1
- package/dist/components/field.js +1 -1
- package/dist/components/flow.js +2 -2
- package/dist/components/flow.js.map +1 -1
- package/dist/components/grid.js +1 -1
- package/dist/components/input.js +3 -3
- package/dist/components/label.js +1 -1
- package/dist/components/layer-card.js +1 -1
- package/dist/components/link.js +1 -1
- package/dist/components/loader.js +1 -1
- package/dist/components/menubar.js +1 -1
- package/dist/components/meter.js +1 -1
- package/dist/components/pagination.js +1 -1
- package/dist/components/popover.js +1 -1
- package/dist/components/radio.js +1 -1
- package/dist/components/select.js +1 -1
- package/dist/components/sensitive-input.js +1 -1
- package/dist/components/sidebar.js +1 -1
- package/dist/components/surface.js +1 -1
- package/dist/components/switch.js +1 -1
- package/dist/components/table-of-contents.js +8 -0
- package/dist/components/table-of-contents.js.map +1 -0
- package/dist/components/table.js +1 -1
- package/dist/components/tabs.js +1 -1
- package/dist/components/toast.js +2 -2
- package/dist/components/tooltip.js +1 -1
- package/dist/index.js +128 -124
- package/dist/index.js.map +1 -1
- package/dist/primitives/accordion.js +1 -1
- package/dist/primitives/alert-dialog.js +1 -1
- package/dist/primitives/autocomplete.js +1 -1
- package/dist/primitives/avatar.js +1 -1
- package/dist/primitives/button.js +1 -1
- package/dist/primitives/checkbox-group.js +1 -1
- package/dist/primitives/checkbox.js +1 -1
- package/dist/primitives/collapsible.js +1 -1
- package/dist/primitives/combobox.js +1 -1
- package/dist/primitives/context-menu.js +1 -1
- package/dist/primitives/csp-provider.js +1 -1
- package/dist/primitives/dialog.js +1 -1
- package/dist/primitives/direction-provider.js +1 -1
- package/dist/primitives/drawer.js +1 -1
- package/dist/primitives/field.js +1 -1
- package/dist/primitives/fieldset.js +1 -1
- package/dist/primitives/form.js +1 -1
- package/dist/primitives/input.js +1 -1
- package/dist/primitives/menu.js +1 -1
- package/dist/primitives/menubar.js +1 -1
- package/dist/primitives/meter.js +1 -1
- package/dist/primitives/navigation-menu.js +1 -1
- package/dist/primitives/number-field.js +1 -1
- package/dist/primitives/popover.js +1 -1
- package/dist/primitives/preview-card.js +1 -1
- package/dist/primitives/progress.js +1 -1
- package/dist/primitives/radio-group.js +1 -1
- package/dist/primitives/radio.js +1 -1
- package/dist/primitives/scroll-area.js +1 -1
- package/dist/primitives/select.js +1 -1
- package/dist/primitives/separator.js +1 -1
- package/dist/primitives/slider.js +1 -1
- package/dist/primitives/switch.js +1 -1
- package/dist/primitives/tabs.js +1 -1
- package/dist/primitives/toast.js +1 -1
- package/dist/primitives/toggle-group.js +1 -1
- package/dist/primitives/toggle.js +1 -1
- package/dist/primitives/toolbar.js +1 -1
- package/dist/primitives/tooltip.js +1 -1
- package/dist/primitives.js +1 -1
- package/dist/scripts/theme-generator/config.d.ts.map +1 -1
- package/dist/scripts/theme-generator/config.js +32 -113
- package/dist/scripts/theme-generator/config.js.map +1 -1
- package/dist/src/components/badge/badge.d.ts +61 -79
- package/dist/src/components/badge/badge.d.ts.map +1 -1
- package/dist/src/components/banner/banner.d.ts +3 -3
- 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/EChart.d.ts +18 -2
- package/dist/src/components/chart/EChart.d.ts.map +1 -1
- package/dist/src/components/chart/TimeseriesChart.d.ts.map +1 -1
- package/dist/src/components/chart/index.d.ts +1 -1
- package/dist/src/components/chart/index.d.ts.map +1 -1
- package/dist/src/components/checkbox/checkbox.d.ts +1 -1
- package/dist/src/components/code/code.d.ts.map +1 -1
- package/dist/src/components/combobox/combobox.d.ts +16 -2
- package/dist/src/components/combobox/combobox.d.ts.map +1 -1
- package/dist/src/components/dropdown/dropdown.d.ts.map +1 -1
- package/dist/src/components/input/input-area.d.ts.map +1 -1
- package/dist/src/components/input/input.d.ts +1 -2
- package/dist/src/components/input/input.d.ts.map +1 -1
- package/dist/src/components/label/label.d.ts.map +1 -1
- package/dist/src/components/layer-card/layer-card.d.ts +39 -5
- package/dist/src/components/layer-card/layer-card.d.ts.map +1 -1
- package/dist/src/components/loader/loader.d.ts +7 -1
- package/dist/src/components/loader/loader.d.ts.map +1 -1
- package/dist/src/components/menubar/menubar.d.ts.map +1 -1
- package/dist/src/components/pagination/pagination.d.ts +62 -2
- package/dist/src/components/pagination/pagination.d.ts.map +1 -1
- package/dist/src/components/popover/popover.d.ts +35 -8
- package/dist/src/components/popover/popover.d.ts.map +1 -1
- package/dist/src/components/radio/radio.d.ts +2 -2
- package/dist/src/components/select/select.d.ts +115 -7
- package/dist/src/components/select/select.d.ts.map +1 -1
- package/dist/src/components/sensitive-input/sensitive-input.d.ts +1 -1
- package/dist/src/components/sidebar/sidebar.d.ts +2 -2
- package/dist/src/components/sidebar/sidebar.d.ts.map +1 -1
- package/dist/src/components/surface/index.d.ts +3 -0
- package/dist/src/components/surface/index.d.ts.map +1 -1
- package/dist/src/components/surface/surface.d.ts +14 -10
- package/dist/src/components/surface/surface.d.ts.map +1 -1
- package/dist/src/components/switch/switch.d.ts.map +1 -1
- package/dist/src/components/table/table.d.ts.map +1 -1
- package/dist/src/components/table-of-contents/index.d.ts +2 -0
- package/dist/src/components/table-of-contents/index.d.ts.map +1 -0
- package/dist/src/components/table-of-contents/table-of-contents.d.ts +70 -0
- package/dist/src/components/table-of-contents/table-of-contents.d.ts.map +1 -0
- package/dist/src/components/toast/toast.d.ts +1 -1
- package/dist/src/components/tooltip/tooltip.d.ts +25 -6
- package/dist/src/components/tooltip/tooltip.d.ts.map +1 -1
- package/dist/src/index.d.ts +6 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/styles/kumo-binding.css +4 -0
- package/dist/styles/kumo-standalone.css +1 -1
- package/dist/styles/theme-fedramp.css +3 -3
- package/dist/styles/theme-kumo.css +66 -127
- package/package.json +5 -1
- package/scripts/component-registry/index.test.ts +4 -4
- package/scripts/component-registry/metadata.ts +3 -3
- package/scripts/theme-generator/config.ts +37 -116
- package/dist/chunks/Legend-o0ntojbaplmszwk0.js.map +0 -1
- package/dist/chunks/badge-n80t3z8u9ttlxi20.js +0 -120
- package/dist/chunks/badge-n80t3z8u9ttlxi20.js.map +0 -1
- package/dist/chunks/button-odxi0hp4fvi5i2w3.js.map +0 -1
- package/dist/chunks/checkbox-dx8x0rzv582yjv7n.js.map +0 -1
- package/dist/chunks/code-liq1g6f5lhee305d.js.map +0 -1
- package/dist/chunks/combobox-9fhjzprab46csmon.js.map +0 -1
- package/dist/chunks/command-palette-kenx2bbdzd4kpx36.js.map +0 -1
- package/dist/chunks/dialog-e05ysa8t2fklw065.js.map +0 -1
- package/dist/chunks/input-area-nq40szg9110on89c.js +0 -74
- package/dist/chunks/input-area-nq40szg9110on89c.js.map +0 -1
- package/dist/chunks/input-group-hbebbyh8fo6aqydn.js.map +0 -1
- package/dist/chunks/input-kvhyo3p4859bexvx.js +0 -109
- package/dist/chunks/input-kvhyo3p4859bexvx.js.map +0 -1
- package/dist/chunks/label-j9owppbgnn35mebg.js +0 -62
- package/dist/chunks/layer-card-l5yjvrxry1dhte57.js +0 -44
- package/dist/chunks/layer-card-l5yjvrxry1dhte57.js.map +0 -1
- package/dist/chunks/loader-m5wfmqwgucrr4i5v.js.map +0 -1
- package/dist/chunks/menubar-abojnm0uwjuni8ok.js +0 -92
- package/dist/chunks/menubar-abojnm0uwjuni8ok.js.map +0 -1
- package/dist/chunks/pagination-pbd7qqik97ac0l7m.js +0 -224
- package/dist/chunks/pagination-pbd7qqik97ac0l7m.js.map +0 -1
- package/dist/chunks/popover-i951xjcgezeqr4iv.js.map +0 -1
- package/dist/chunks/radio-l2vkcue40d84fmo1.js.map +0 -1
- package/dist/chunks/select-paedwa3nlhpq82ua.js +0 -132
- package/dist/chunks/select-paedwa3nlhpq82ua.js.map +0 -1
- package/dist/chunks/sidebar-jepeq7gaf4issuw6.js.map +0 -1
- package/dist/chunks/surface-blo81kgy9g0sexgm.js +0 -36
- package/dist/chunks/surface-blo81kgy9g0sexgm.js.map +0 -1
- package/dist/chunks/switch-i0zwcp3wq6vsxm1c.js.map +0 -1
- package/dist/chunks/table-nrcw19tlpduayukl.js +0 -183
- package/dist/chunks/table-nrcw19tlpduayukl.js.map +0 -1
- package/dist/chunks/tooltip-cit9ltlxfuhwctuj.js.map +0 -1
|
@@ -11,77 +11,65 @@
|
|
|
11
11
|
"variant": {
|
|
12
12
|
"type": "enum",
|
|
13
13
|
"optional": true,
|
|
14
|
-
"description": "Color variant of the badge
|
|
14
|
+
"description": "Color variant of the badge. Recommended semantic variants:\n- `\"primary\"` — Primary badge\n- `\"secondary\"` — Secondary badge\n- `\"error\"` — Error badge\n- `\"warning\"` — Warning badge\n- `\"success\"` — Success badge\n- `\"info\"` — Info badge\n\nAdditional token variants:\n- `\"red\"`, `\"orange\"`, `\"green\"`, `\"teal\"`, `\"blue\"`, `\"purple\"`, `\"neutral\"`\n- `\"teal-subtle\"`, `\"neutral-subtle\"`\n- `\"inverted\"`\n- `\"outline\"` — Bordered badge with transparent background\n- `\"beta\"` — Dashed-border badge for beta/experimental features",
|
|
15
15
|
"values": [
|
|
16
|
+
"primary",
|
|
17
|
+
"secondary",
|
|
18
|
+
"error",
|
|
19
|
+
"warning",
|
|
20
|
+
"success",
|
|
21
|
+
"destructive",
|
|
22
|
+
"info",
|
|
23
|
+
"beta",
|
|
24
|
+
"outline",
|
|
16
25
|
"red",
|
|
17
|
-
"red-subtle",
|
|
18
|
-
"orange",
|
|
19
|
-
"orange-subtle",
|
|
20
|
-
"yellow",
|
|
21
|
-
"yellow-subtle",
|
|
22
26
|
"green",
|
|
23
|
-
"
|
|
27
|
+
"neutral",
|
|
28
|
+
"orange",
|
|
29
|
+
"purple",
|
|
24
30
|
"teal",
|
|
25
31
|
"teal-subtle",
|
|
26
|
-
"blue"
|
|
27
|
-
"blue-subtle",
|
|
28
|
-
"neutral",
|
|
29
|
-
"neutral-subtle",
|
|
30
|
-
"inverted",
|
|
31
|
-
"outline",
|
|
32
|
-
"beta",
|
|
33
|
-
"primary",
|
|
34
|
-
"secondary",
|
|
35
|
-
"destructive",
|
|
36
|
-
"success"
|
|
32
|
+
"blue"
|
|
37
33
|
],
|
|
38
34
|
"descriptions": {
|
|
35
|
+
"primary": "Primary badge",
|
|
36
|
+
"secondary": "Secondary badge",
|
|
37
|
+
"error": "Error badge",
|
|
38
|
+
"warning": "Warning badge",
|
|
39
|
+
"success": "Success badge",
|
|
40
|
+
"destructive": "Deprecated. Use red instead.",
|
|
41
|
+
"info": "Info badge",
|
|
42
|
+
"beta": "Indicates beta or experimental features",
|
|
43
|
+
"outline": "Bordered badge with transparent background",
|
|
39
44
|
"red": "Red badge",
|
|
40
|
-
"red-subtle": "Subtle red badge",
|
|
41
|
-
"orange": "Orange badge",
|
|
42
|
-
"orange-subtle": "Subtle orange badge",
|
|
43
|
-
"yellow": "Yellow badge",
|
|
44
|
-
"yellow-subtle": "Subtle yellow badge",
|
|
45
45
|
"green": "Green badge",
|
|
46
|
-
"
|
|
46
|
+
"neutral": "Neutral badge",
|
|
47
|
+
"orange": "Orange badge",
|
|
48
|
+
"purple": "Purple badge",
|
|
47
49
|
"teal": "Teal badge",
|
|
48
50
|
"teal-subtle": "Subtle teal badge",
|
|
49
|
-
"blue": "Blue badge"
|
|
50
|
-
"blue-subtle": "Subtle blue badge",
|
|
51
|
-
"neutral": "Neutral badge",
|
|
52
|
-
"neutral-subtle": "Subtle neutral badge",
|
|
53
|
-
"inverted": "Inverted badge",
|
|
54
|
-
"outline": "Bordered badge with transparent background",
|
|
55
|
-
"beta": "Indicates beta or experimental features",
|
|
56
|
-
"primary": "Deprecated. Use inverted instead.",
|
|
57
|
-
"secondary": "Deprecated. Use neutral instead.",
|
|
58
|
-
"destructive": "Deprecated. Use red instead.",
|
|
59
|
-
"success": "Deprecated. Use green instead."
|
|
51
|
+
"blue": "Blue badge"
|
|
60
52
|
},
|
|
61
53
|
"classes": {
|
|
54
|
+
"primary": "bg-kumo-badge-inverted text-kumo-badge-inverted",
|
|
55
|
+
"secondary": "bg-kumo-fill text-kumo-badge-neutral-subtle",
|
|
56
|
+
"error": "bg-kumo-danger-tint/60 text-kumo-danger",
|
|
57
|
+
"warning": "bg-kumo-warning-tint/70 text-kumo-warning",
|
|
58
|
+
"success": "bg-kumo-success-tint/70 text-kumo-success",
|
|
59
|
+
"destructive": "bg-kumo-badge-red text-white",
|
|
60
|
+
"info": "bg-kumo-info-tint/70 text-kumo-info",
|
|
61
|
+
"beta": "border border-dashed border-kumo-brand bg-transparent text-kumo-link",
|
|
62
|
+
"outline": "border border-kumo-fill bg-transparent text-kumo-default",
|
|
62
63
|
"red": "bg-kumo-badge-red text-white",
|
|
63
|
-
"red-subtle": "bg-kumo-badge-red-subtle text-kumo-badge-red-subtle",
|
|
64
|
-
"orange": "bg-kumo-badge-orange text-white",
|
|
65
|
-
"orange-subtle": "bg-kumo-badge-orange-subtle text-kumo-badge-orange-subtle",
|
|
66
|
-
"yellow": "bg-kumo-badge-yellow text-white",
|
|
67
|
-
"yellow-subtle": "bg-kumo-badge-yellow-subtle text-kumo-badge-yellow-subtle",
|
|
68
64
|
"green": "bg-kumo-badge-green text-white",
|
|
69
|
-
"
|
|
65
|
+
"neutral": "bg-kumo-badge-neutral text-white",
|
|
66
|
+
"orange": "bg-kumo-badge-orange text-black",
|
|
67
|
+
"purple": "bg-kumo-badge-purple text-white",
|
|
70
68
|
"teal": "bg-kumo-badge-teal text-white",
|
|
71
69
|
"teal-subtle": "bg-kumo-badge-teal-subtle text-kumo-badge-teal-subtle",
|
|
72
|
-
"blue": "bg-kumo-badge-blue text-white"
|
|
73
|
-
"blue-subtle": "bg-kumo-badge-blue-subtle text-kumo-badge-blue-subtle",
|
|
74
|
-
"neutral": "bg-kumo-badge-neutral text-white",
|
|
75
|
-
"neutral-subtle": "bg-kumo-fill text-kumo-badge-neutral-subtle",
|
|
76
|
-
"inverted": "bg-kumo-badge-inverted text-kumo-badge-inverted",
|
|
77
|
-
"outline": "border border-kumo-fill bg-transparent text-kumo-default",
|
|
78
|
-
"beta": "border border-dashed border-kumo-brand bg-transparent text-kumo-link",
|
|
79
|
-
"primary": "bg-kumo-badge-inverted text-kumo-badge-inverted",
|
|
80
|
-
"secondary": "bg-kumo-badge-neutral text-white",
|
|
81
|
-
"destructive": "bg-kumo-badge-red text-white",
|
|
82
|
-
"success": "bg-kumo-badge-green text-white"
|
|
70
|
+
"blue": "bg-kumo-badge-blue text-white"
|
|
83
71
|
},
|
|
84
|
-
"default": "
|
|
72
|
+
"default": "primary"
|
|
85
73
|
},
|
|
86
74
|
"className": {
|
|
87
75
|
"type": "string",
|
|
@@ -95,54 +83,36 @@
|
|
|
95
83
|
}
|
|
96
84
|
},
|
|
97
85
|
"examples": [
|
|
98
|
-
"<div className=\"flex flex-wrap items-center gap-2\">\n <Badge variant=\"
|
|
99
|
-
"<Badge variant=\"red\">Red</Badge>",
|
|
100
|
-
"<Badge variant=\"
|
|
101
|
-
"<Badge variant=\"orange\">Orange</Badge>",
|
|
102
|
-
"<Badge variant=\"orange-subtle\">Orange subtle</Badge>",
|
|
103
|
-
"<Badge variant=\"yellow\">Yellow</Badge>",
|
|
104
|
-
"<Badge variant=\"yellow-subtle\">Yellow subtle</Badge>",
|
|
105
|
-
"<Badge variant=\"green\">Green</Badge>",
|
|
106
|
-
"<Badge variant=\"green-subtle\">Green subtle</Badge>",
|
|
107
|
-
"<Badge variant=\"teal\">Teal</Badge>",
|
|
108
|
-
"<Badge variant=\"teal-subtle\">Teal subtle</Badge>",
|
|
109
|
-
"<Badge variant=\"blue\">Blue</Badge>",
|
|
110
|
-
"<Badge variant=\"blue-subtle\">Blue subtle</Badge>",
|
|
111
|
-
"<Badge variant=\"neutral\">Neutral</Badge>",
|
|
112
|
-
"<Badge variant=\"neutral-subtle\">Neutral subtle</Badge>",
|
|
113
|
-
"<Badge variant=\"inverted\">Inverted</Badge>",
|
|
114
|
-
"<Badge variant=\"outline\">Outline</Badge>",
|
|
115
|
-
"<Badge variant=\"beta\">Beta</Badge>",
|
|
116
|
-
"<p className=\"flex items-center gap-2\">\n Workers\n <Badge variant=\"blue\">New</Badge>\n </p>"
|
|
86
|
+
"<div className=\"flex flex-wrap items-center gap-2\">\n <Badge variant=\"primary\">Primary</Badge>\n <Badge variant=\"secondary\">Secondary</Badge>\n <Badge variant=\"error\">Error</Badge>\n <Badge variant=\"success\">Success</Badge>\n <Badge variant=\"warning\">Warning</Badge>\n <Badge variant=\"info\">Info</Badge>\n <Badge variant=\"outline\">Outline</Badge>\n <Badge variant=\"beta\">Beta</Badge>\n </div>",
|
|
87
|
+
"<div className=\"flex flex-wrap items-center gap-2\">\n <Badge variant=\"neutral\">Neutral</Badge>\n <Badge variant=\"red\">Red</Badge>\n <Badge variant=\"orange\">Orange</Badge>\n <Badge variant=\"green\">Green</Badge>\n <Badge variant=\"teal\">Teal</Badge>\n <Badge variant=\"blue\">Blue</Badge>\n <Badge variant=\"purple\">Purple</Badge>\n </div>",
|
|
88
|
+
"<p className=\"flex items-center gap-2\">\n Workers\n <Badge variant=\"secondary\">New</Badge>\n </p>"
|
|
117
89
|
],
|
|
118
90
|
"colors": [
|
|
119
91
|
"bg-kumo-badge-blue",
|
|
120
|
-
"bg-kumo-badge-blue-subtle",
|
|
121
92
|
"bg-kumo-badge-green",
|
|
122
|
-
"bg-kumo-badge-green-subtle",
|
|
123
93
|
"bg-kumo-badge-inverted",
|
|
124
94
|
"bg-kumo-badge-neutral",
|
|
125
95
|
"bg-kumo-badge-orange",
|
|
126
|
-
"bg-kumo-badge-
|
|
96
|
+
"bg-kumo-badge-purple",
|
|
127
97
|
"bg-kumo-badge-red",
|
|
128
|
-
"bg-kumo-badge-red-subtle",
|
|
129
98
|
"bg-kumo-badge-teal",
|
|
130
99
|
"bg-kumo-badge-teal-subtle",
|
|
131
|
-
"bg-kumo-
|
|
132
|
-
"bg-kumo-badge-yellow-subtle",
|
|
100
|
+
"bg-kumo-danger-tint",
|
|
133
101
|
"bg-kumo-fill",
|
|
102
|
+
"bg-kumo-info-tint",
|
|
103
|
+
"bg-kumo-success-tint",
|
|
104
|
+
"bg-kumo-warning-tint",
|
|
134
105
|
"border-kumo-brand",
|
|
135
106
|
"border-kumo-fill",
|
|
136
|
-
"text-kumo-badge-blue-subtle",
|
|
137
|
-
"text-kumo-badge-green-subtle",
|
|
138
107
|
"text-kumo-badge-inverted",
|
|
139
108
|
"text-kumo-badge-neutral-subtle",
|
|
140
|
-
"text-kumo-badge-orange-subtle",
|
|
141
|
-
"text-kumo-badge-red-subtle",
|
|
142
109
|
"text-kumo-badge-teal-subtle",
|
|
143
|
-
"text-kumo-
|
|
110
|
+
"text-kumo-danger",
|
|
144
111
|
"text-kumo-default",
|
|
145
|
-
"text-kumo-
|
|
112
|
+
"text-kumo-info",
|
|
113
|
+
"text-kumo-link",
|
|
114
|
+
"text-kumo-success",
|
|
115
|
+
"text-kumo-warning"
|
|
146
116
|
],
|
|
147
117
|
"baseStyles": "inline-flex w-fit flex-none shrink-0 items-center justify-self-start rounded-full px-2 py-0.5 text-xs font-medium whitespace-nowrap"
|
|
148
118
|
},
|
|
@@ -196,9 +166,9 @@
|
|
|
196
166
|
"error": "Error banner for critical issues"
|
|
197
167
|
},
|
|
198
168
|
"classes": {
|
|
199
|
-
"default": "bg-kumo-info/
|
|
200
|
-
"alert": "bg-kumo-warning/
|
|
201
|
-
"error": "bg-kumo-danger/
|
|
169
|
+
"default": "bg-kumo-info-tint/30 border-kumo-info/50 text-kumo-info selection:bg-kumo-info",
|
|
170
|
+
"alert": "bg-kumo-warning-tint/15 border-kumo-warning/50 text-kumo-warning selection:bg-kumo-warning",
|
|
171
|
+
"error": "bg-kumo-danger-tint/15 border-kumo-danger/50 text-kumo-danger selection:bg-kumo-danger"
|
|
202
172
|
},
|
|
203
173
|
"default": "default"
|
|
204
174
|
},
|
|
@@ -399,11 +369,11 @@
|
|
|
399
369
|
},
|
|
400
370
|
"classes": {
|
|
401
371
|
"primary": "bg-kumo-brand !text-white hover:bg-kumo-brand-hover focus:bg-kumo-brand-hover disabled:bg-kumo-brand/50",
|
|
402
|
-
"secondary": "bg-kumo-base !text-kumo-default ring not-disabled:hover:border-secondary! not-disabled:hover:bg-kumo-tint disabled:bg-kumo-base/50 disabled:!text-kumo-default/70 ring-kumo-
|
|
372
|
+
"secondary": "bg-kumo-base !text-kumo-default ring not-disabled:hover:border-secondary! 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",
|
|
403
373
|
"ghost": "text-kumo-default hover:bg-kumo-tint shadow-none bg-inherit",
|
|
404
374
|
"destructive": "bg-kumo-danger !text-white hover:bg-kumo-danger/70",
|
|
405
|
-
"secondary-destructive": "bg-kumo-base !text-kumo-danger ring not-disabled:hover:border-secondary! not-disabled:hover:bg-kumo-base disabled:bg-kumo-base/50 disabled:!text-kumo-danger/70 ring-kumo-
|
|
406
|
-
"outline": "bg-transparent text-kumo-default ring ring-kumo-
|
|
375
|
+
"secondary-destructive": "bg-kumo-base !text-kumo-danger ring not-disabled:hover:border-secondary! 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
|
+
"outline": "bg-transparent text-kumo-default ring ring-kumo-hairline"
|
|
407
377
|
},
|
|
408
378
|
"stateClasses": {
|
|
409
379
|
"primary": {
|
|
@@ -504,8 +474,7 @@
|
|
|
504
474
|
"bg-kumo-brand-hover",
|
|
505
475
|
"bg-kumo-danger",
|
|
506
476
|
"bg-kumo-tint",
|
|
507
|
-
"ring-kumo-
|
|
508
|
-
"ring-kumo-ring",
|
|
477
|
+
"ring-kumo-hairline",
|
|
509
478
|
"text-kumo-danger",
|
|
510
479
|
"text-kumo-default",
|
|
511
480
|
"text-kumo-subtle"
|
|
@@ -531,13 +500,13 @@
|
|
|
531
500
|
"error": "Error state for validation failures"
|
|
532
501
|
},
|
|
533
502
|
"classes": {
|
|
534
|
-
"default": "[&:focus-within>span]:ring-kumo-
|
|
503
|
+
"default": "[&:focus-within>span]:ring-kumo-hairline [&:hover>span]:ring-kumo-hairline",
|
|
535
504
|
"error": "[&>span]:ring-kumo-danger"
|
|
536
505
|
},
|
|
537
506
|
"stateClasses": {
|
|
538
507
|
"default": {
|
|
539
|
-
"focus": "[&:focus-within>span]:ring-kumo-
|
|
540
|
-
"hover": "[&:hover>span]:ring-kumo-
|
|
508
|
+
"focus": "[&:focus-within>span]:ring-kumo-hairline",
|
|
509
|
+
"hover": "[&:hover>span]:ring-kumo-hairline"
|
|
541
510
|
}
|
|
542
511
|
},
|
|
543
512
|
"default": "default"
|
|
@@ -608,8 +577,7 @@
|
|
|
608
577
|
"bg-kumo-contrast",
|
|
609
578
|
"ring-kumo-contrast",
|
|
610
579
|
"ring-kumo-danger",
|
|
611
|
-
"ring-kumo-
|
|
612
|
-
"ring-kumo-ring",
|
|
580
|
+
"ring-kumo-hairline",
|
|
613
581
|
"text-kumo-danger",
|
|
614
582
|
"text-kumo-default",
|
|
615
583
|
"text-kumo-inverse",
|
|
@@ -684,10 +652,10 @@
|
|
|
684
652
|
"ring-kumo-danger"
|
|
685
653
|
],
|
|
686
654
|
"hover": [
|
|
687
|
-
"ring-kumo-
|
|
655
|
+
"ring-kumo-hairline"
|
|
688
656
|
],
|
|
689
657
|
"focus": [
|
|
690
|
-
"ring-kumo-
|
|
658
|
+
"ring-kumo-hairline"
|
|
691
659
|
],
|
|
692
660
|
"disabled": [
|
|
693
661
|
"opacity-50",
|
|
@@ -772,7 +740,7 @@
|
|
|
772
740
|
],
|
|
773
741
|
"colors": [
|
|
774
742
|
"bg-kumo-base",
|
|
775
|
-
"border-kumo-
|
|
743
|
+
"border-kumo-hairline",
|
|
776
744
|
"outline-kumo-fill",
|
|
777
745
|
"text-kumo-default"
|
|
778
746
|
],
|
|
@@ -1975,11 +1943,11 @@
|
|
|
1975
1943
|
"<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 onSelect={() =>\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 onSelect={() =>\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 onSelect={() =>\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 onSelect={() =>\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>",
|
|
1976
1944
|
"<PoweredByCloudflare />",
|
|
1977
1945
|
"<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>",
|
|
1978
|
-
"<footer className=\"flex w-full items-center justify-between rounded-lg border border-kumo-
|
|
1946
|
+
"<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>"
|
|
1979
1947
|
],
|
|
1980
1948
|
"colors": [
|
|
1981
1949
|
"bg-kumo-base",
|
|
1982
|
-
"ring-kumo-
|
|
1950
|
+
"ring-kumo-hairline",
|
|
1983
1951
|
"text-kumo-default"
|
|
1984
1952
|
]
|
|
1985
1953
|
},
|
|
@@ -2217,7 +2185,8 @@
|
|
|
2217
2185
|
"bg-kumo-fill-hover",
|
|
2218
2186
|
"bg-kumo-overlay",
|
|
2219
2187
|
"bg-kumo-tint",
|
|
2220
|
-
"border-kumo-
|
|
2188
|
+
"border-kumo-hairline",
|
|
2189
|
+
"ring-kumo-hairline",
|
|
2221
2190
|
"ring-kumo-line",
|
|
2222
2191
|
"text-kumo-default",
|
|
2223
2192
|
"text-kumo-strong",
|
|
@@ -2346,17 +2315,17 @@
|
|
|
2346
2315
|
}
|
|
2347
2316
|
},
|
|
2348
2317
|
"examples": [
|
|
2349
|
-
"<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-
|
|
2318
|
+
"<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>",
|
|
2350
2319
|
"<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>",
|
|
2351
2320
|
"<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>",
|
|
2352
|
-
"<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-
|
|
2321
|
+
"<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>"
|
|
2353
2322
|
],
|
|
2354
2323
|
"colors": [
|
|
2355
2324
|
"bg-kumo-base",
|
|
2356
2325
|
"bg-kumo-elevated",
|
|
2357
2326
|
"bg-kumo-overlay",
|
|
2358
2327
|
"bg-kumo-warning",
|
|
2359
|
-
"ring-kumo-
|
|
2328
|
+
"ring-kumo-hairline",
|
|
2360
2329
|
"text-kumo-default",
|
|
2361
2330
|
"text-kumo-strong",
|
|
2362
2331
|
"text-kumo-subtle"
|
|
@@ -2379,13 +2348,13 @@
|
|
|
2379
2348
|
}
|
|
2380
2349
|
},
|
|
2381
2350
|
"examples": [
|
|
2382
|
-
"<div className=\"flex flex-col gap-4\">\n <DatePicker
|
|
2351
|
+
"<div className=\"flex flex-col gap-4\">\n <DatePicker\n mode=\"single\"\n selected={date}\n onChange={(d) => {\n if (d) {\n setDate(d);\n }\n }}\n />\n <p className=\"text-sm text-kumo-subtle\">\n Selected: {date ? date.toLocaleDateString() : \"None\"}\n </p>\n </div>",
|
|
2383
2352
|
"<div className=\"flex flex-col gap-4\">\n <DatePicker\n mode=\"multiple\"\n selected={dates}\n onChange={setDates}\n max={5}\n />\n <p className=\"text-sm text-kumo-subtle\">\n Selected: {dates?.length ?? 0} date(s)\n </p>\n </div>",
|
|
2384
2353
|
"<div className=\"flex flex-col gap-4\">\n <DatePicker\n mode=\"range\"\n selected={range}\n onChange={setRange}\n numberOfMonths={2}\n />\n <p className=\"text-sm text-kumo-subtle\">\n Range:{\" \"}\n {range?.from\n ? `${range.from.toLocaleDateString()} - ${range.to?.toLocaleDateString() ?? \"...\"}`\n : \"None\"}\n </p>\n </div>",
|
|
2385
2354
|
"<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>",
|
|
2386
|
-
"<Popover>\n <Popover.Trigger
|
|
2387
|
-
"<Popover>\n <Popover.Trigger
|
|
2388
|
-
"<Popover>\n <Popover.Trigger
|
|
2355
|
+
"<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
|
+
"<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-strong 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>",
|
|
2389
2358
|
"<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 />"
|
|
2390
2359
|
],
|
|
2391
2360
|
"colors": [
|
|
@@ -2572,6 +2541,7 @@
|
|
|
2572
2541
|
"colors": [
|
|
2573
2542
|
"bg-kumo-base",
|
|
2574
2543
|
"bg-kumo-recessed",
|
|
2544
|
+
"ring-kumo-line",
|
|
2575
2545
|
"text-kumo-default"
|
|
2576
2546
|
],
|
|
2577
2547
|
"subComponents": {
|
|
@@ -2702,7 +2672,7 @@
|
|
|
2702
2672
|
"colors": [
|
|
2703
2673
|
"bg-kumo-control",
|
|
2704
2674
|
"bg-kumo-danger",
|
|
2705
|
-
"bg-kumo-
|
|
2675
|
+
"bg-kumo-hairline",
|
|
2706
2676
|
"bg-kumo-overlay",
|
|
2707
2677
|
"bg-kumo-tint",
|
|
2708
2678
|
"ring-kumo-line",
|
|
@@ -3034,7 +3004,7 @@
|
|
|
3034
3004
|
"<Grid variant=\"4up\" gap=\"base\" mobileDivider>\n <GridItem>\n <Surface className=\"rounded-lg p-4\">\n <Text bold>Item 1</Text>\n <div className=\"mt-1\">\n <Text variant=\"secondary\">Has divider on mobile</Text>\n </div>\n </Surface>\n </GridItem>\n <GridItem>\n <Surface className=\"rounded-lg p-4\">\n <Text bold>Item 2</Text>\n <div className=\"mt-1\">\n <Text variant=\"secondary\">Has divider on mobile</Text>\n </div>\n </Surface>\n </GridItem>\n <GridItem>\n <Surface className=\"rounded-lg p-4\">\n <Text bold>Item 3</Text>\n <div className=\"mt-1\">\n <Text variant=\"secondary\">Has divider on mobile</Text>\n </div>\n </Surface>\n </GridItem>\n <GridItem>\n <Surface className=\"rounded-lg p-4\">\n <Text bold>Item 4</Text>\n <div className=\"mt-1\">\n <Text variant=\"secondary\">Has divider on mobile</Text>\n </div>\n </Surface>\n </GridItem>\n </Grid>"
|
|
3035
3005
|
],
|
|
3036
3006
|
"colors": [
|
|
3037
|
-
"border-kumo-
|
|
3007
|
+
"border-kumo-hairline"
|
|
3038
3008
|
]
|
|
3039
3009
|
},
|
|
3040
3010
|
"Input": {
|
|
@@ -3101,12 +3071,12 @@
|
|
|
3101
3071
|
"error": "Error state for validation failures"
|
|
3102
3072
|
},
|
|
3103
3073
|
"classes": {
|
|
3104
|
-
"default": "focus:ring-kumo-
|
|
3074
|
+
"default": "focus:ring-kumo-hairline",
|
|
3105
3075
|
"error": "!ring-kumo-danger focus:ring-kumo-danger"
|
|
3106
3076
|
},
|
|
3107
3077
|
"stateClasses": {
|
|
3108
3078
|
"default": {
|
|
3109
|
-
"focus": "focus:ring-kumo-
|
|
3079
|
+
"focus": "focus:ring-kumo-hairline"
|
|
3110
3080
|
},
|
|
3111
3081
|
"error": {
|
|
3112
3082
|
"focus": "focus:ring-kumo-danger"
|
|
@@ -3118,21 +3088,22 @@
|
|
|
3118
3088
|
"examples": [
|
|
3119
3089
|
"<Input\n label=\"Email\"\n placeholder=\"you@example.com\"\n description=\"We'll never share your email\"\n />",
|
|
3120
3090
|
"<Input\n label=\"Username\"\n placeholder=\"Choose a username\"\n description=\"3-20 characters, alphanumeric only\"\n />",
|
|
3121
|
-
"<Input\n label=\"Email\"\n placeholder=\"you@example.com\"\n value=\"invalid-email\"\n
|
|
3122
|
-
"<Input\n label=\"Password\"\n type=\"password\"\n value=\"short\"\n
|
|
3091
|
+
"<Input\n label=\"Email\"\n placeholder=\"you@example.com\"\n value=\"invalid-email\"\n error=\"Please enter a valid email address\"\n />",
|
|
3092
|
+
"<Input\n label=\"Password\"\n type=\"password\"\n value=\"short\"\n error={{\n message: \"Password must be at least 8 characters\",\n match: \"tooShort\",\n }}\n minLength={8}\n />",
|
|
3123
3093
|
"<div className=\"flex flex-col gap-4\">\n <Input size=\"xs\" label=\"Extra Small\" placeholder=\"Extra small input\" />\n <Input size=\"sm\" label=\"Small\" placeholder=\"Small input\" />\n <Input label=\"Base\" placeholder=\"Base input (default)\" />\n <Input size=\"lg\" label=\"Large\" placeholder=\"Large input\" />\n </div>",
|
|
3124
3094
|
"<Input label=\"Disabled field\" placeholder=\"Cannot edit\" disabled />",
|
|
3125
3095
|
"<Input placeholder=\"Search...\" aria-label=\"Search products\" />",
|
|
3126
3096
|
"<div className=\"flex flex-col gap-4\">\n <Input type=\"email\" label=\"Email\" placeholder=\"you@example.com\" />\n <Input type=\"password\" label=\"Password\" placeholder=\"••••••••\" />\n <Input type=\"number\" label=\"Age\" placeholder=\"18\" />\n <Input type=\"tel\" label=\"Phone\" placeholder=\"+1 (555) 000-0000\" />\n </div>",
|
|
3127
3097
|
"<Input\n label=\"Phone Number\"\n required={false}\n placeholder=\"+1 (555) 000-0000\"\n />",
|
|
3128
3098
|
"<Input\n label=\"API Key\"\n labelTooltip=\"Find this in your dashboard under Settings > API Keys\"\n placeholder=\"sk_live_...\"\n />",
|
|
3129
|
-
"<Input\n label={\n <span>\n Email for <strong>billing</strong>\n </span>\n }\n required\n placeholder=\"billing@company.com\"\n type=\"email\"\n />"
|
|
3099
|
+
"<Input\n label={\n <span>\n Email for <strong>billing</strong>\n </span>\n }\n required\n placeholder=\"billing@company.com\"\n type=\"email\"\n />",
|
|
3100
|
+
"<Input\n label=\"With onChange\"\n placeholder=\"Type something...\"\n description={value ? `Value: ${value}` : \"Uses e.target.value\"}\n value={value}\n onChange={(e) => setValue(e.target.value)}\n />",
|
|
3101
|
+
"<Input\n label=\"With onValueChange\"\n placeholder=\"Type something...\"\n description={value ? `Value: ${value}` : \"Receives the value directly\"}\n value={value}\n onValueChange={(v) => setValue(v)}\n />"
|
|
3130
3102
|
],
|
|
3131
3103
|
"colors": [
|
|
3132
3104
|
"bg-kumo-control",
|
|
3133
3105
|
"ring-kumo-danger",
|
|
3134
|
-
"ring-kumo-
|
|
3135
|
-
"ring-kumo-ring",
|
|
3106
|
+
"ring-kumo-hairline",
|
|
3136
3107
|
"text-kumo-default",
|
|
3137
3108
|
"text-kumo-subtle"
|
|
3138
3109
|
],
|
|
@@ -3245,25 +3216,43 @@
|
|
|
3245
3216
|
"importPath": "@cloudflare/kumo",
|
|
3246
3217
|
"category": "Display",
|
|
3247
3218
|
"props": {
|
|
3219
|
+
"render": {
|
|
3220
|
+
"type": "ReactNode",
|
|
3221
|
+
"optional": true,
|
|
3222
|
+
"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
|
+
},
|
|
3248
3224
|
"children": {
|
|
3249
3225
|
"type": "ReactNode",
|
|
3250
3226
|
"optional": true
|
|
3251
3227
|
},
|
|
3252
3228
|
"className": {
|
|
3253
3229
|
"type": "string",
|
|
3254
|
-
"optional": true
|
|
3255
|
-
|
|
3230
|
+
"optional": true
|
|
3231
|
+
},
|
|
3232
|
+
"id": {
|
|
3233
|
+
"type": "string",
|
|
3234
|
+
"optional": true
|
|
3235
|
+
},
|
|
3236
|
+
"lang": {
|
|
3237
|
+
"type": "string",
|
|
3238
|
+
"optional": true
|
|
3239
|
+
},
|
|
3240
|
+
"title": {
|
|
3241
|
+
"type": "string",
|
|
3242
|
+
"optional": true
|
|
3256
3243
|
}
|
|
3257
3244
|
},
|
|
3258
3245
|
"examples": [
|
|
3259
3246
|
"<LayerCard>\n <LayerCard.Secondary className=\"flex items-center justify-between\">\n <div>Next Steps</div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n shape=\"square\"\n aria-label=\"Go to next steps\"\n >\n <ArrowRightIcon size={16} />\n </Button>\n </LayerCard.Secondary>\n\n <LayerCard.Primary>Get started with Kumo</LayerCard.Primary>\n </LayerCard>",
|
|
3260
3247
|
"<LayerCard className=\"w-[250px]\">\n <LayerCard.Secondary>Getting Started</LayerCard.Secondary>\n <LayerCard.Primary>\n <p className=\"text-sm text-kumo-subtle\">\n Quick start guide for new users\n </p>\n </LayerCard.Primary>\n </LayerCard>",
|
|
3248
|
+
"<LayerCard className=\"w-[250px] p-4\">\n <p className=\"text-sm text-kumo-subtle\">Quick start guide for new users</p>\n </LayerCard>",
|
|
3261
3249
|
"<div className=\"flex gap-4\">\n <LayerCard className=\"w-[200px]\">\n <LayerCard.Secondary>Components</LayerCard.Secondary>\n <LayerCard.Primary>\n <p className=\"text-sm\">Browse all components</p>\n </LayerCard.Primary>\n </LayerCard>\n <LayerCard className=\"w-[200px]\">\n <LayerCard.Secondary>Examples</LayerCard.Secondary>\n <LayerCard.Primary>\n <p className=\"text-sm\">View code examples</p>\n </LayerCard.Primary>\n </LayerCard>\n </div>"
|
|
3262
3250
|
],
|
|
3263
3251
|
"colors": [
|
|
3264
3252
|
"bg-kumo-base",
|
|
3265
3253
|
"bg-kumo-elevated",
|
|
3266
3254
|
"ring-kumo-fill",
|
|
3255
|
+
"ring-kumo-hairline",
|
|
3267
3256
|
"ring-kumo-line",
|
|
3268
3257
|
"text-kumo-strong"
|
|
3269
3258
|
],
|
|
@@ -3491,9 +3480,10 @@
|
|
|
3491
3480
|
],
|
|
3492
3481
|
"colors": [
|
|
3493
3482
|
"bg-kumo-base",
|
|
3483
|
+
"bg-kumo-elevated",
|
|
3494
3484
|
"bg-kumo-recessed",
|
|
3495
|
-
"border-kumo-
|
|
3496
|
-
"
|
|
3485
|
+
"border-kumo-recessed",
|
|
3486
|
+
"ring-kumo-line"
|
|
3497
3487
|
],
|
|
3498
3488
|
"styling": {
|
|
3499
3489
|
"container": {
|
|
@@ -3600,6 +3590,11 @@
|
|
|
3600
3590
|
"optional": true,
|
|
3601
3591
|
"description": "Additional CSS classes for the container"
|
|
3602
3592
|
},
|
|
3593
|
+
"labels": {
|
|
3594
|
+
"type": "PaginationLabels",
|
|
3595
|
+
"optional": true,
|
|
3596
|
+
"description": "Labels for internationalization of aria-labels. All labels have English defaults.\n\nFor visible text like \"Showing X of Y\", use render props on sub-components:\n- `Pagination.Info` children for the info text\n- `Pagination.PageSize` label prop for the \"Per page:\" text"
|
|
3597
|
+
},
|
|
3603
3598
|
"children": {
|
|
3604
3599
|
"type": "ReactNode",
|
|
3605
3600
|
"optional": true,
|
|
@@ -3633,10 +3628,13 @@
|
|
|
3633
3628
|
"<Pagination\n page={page}\n setPage={setPage}\n perPage={perPage}\n totalCount={500}\n >\n <Pagination.Info />\n <Pagination.Separator />\n <Pagination.PageSize\n value={perPage}\n onChange={(size) => {\n setPerPage(size);\n setPage(1);\n }}\n />\n <Pagination.Controls />\n </Pagination>",
|
|
3634
3629
|
"<Pagination\n page={page}\n setPage={setPage}\n perPage={perPage}\n totalCount={200}\n >\n <Pagination.Info />\n <Pagination.Separator />\n <Pagination.PageSize\n value={perPage}\n onChange={(size) => {\n setPerPage(size);\n setPage(1);\n }}\n options={[10, 20, 50]}\n />\n <Pagination.Controls />\n </Pagination>",
|
|
3635
3630
|
"<Pagination page={page} setPage={setPage} perPage={25} totalCount={100}>\n <Pagination.Info>\n {({ page, totalCount }) =>\n `Page ${page} of ${Math.ceil((totalCount ?? 1) / 25)}`\n }\n </Pagination.Info>\n <Pagination.Controls />\n </Pagination>",
|
|
3636
|
-
"<Pagination\n page={page}\n setPage={setPage}\n perPage={perPage}\n totalCount={500}\n >\n <Pagination.Info />\n <
|
|
3631
|
+
"<Pagination\n page={page}\n setPage={setPage}\n perPage={perPage}\n totalCount={500}\n >\n <Pagination.Info />\n <Pagination.Separator />\n <Pagination.PageSize\n value={perPage}\n onChange={(size) => {\n setPerPage(size);\n setPage(1);\n }}\n />\n <Pagination.Controls pageSelector=\"dropdown\" />\n </Pagination>",
|
|
3632
|
+
"<Pagination\n page={page}\n setPage={setPage}\n perPage={perPage}\n totalCount={500}\n >\n <Pagination.Info />\n <div className=\"flex items-center gap-2\">\n <Pagination.Controls />\n <Pagination.Separator />\n <Pagination.PageSize\n value={perPage}\n onChange={(size) => {\n setPerPage(size);\n setPage(1);\n }}\n />\n </div>\n </Pagination>",
|
|
3633
|
+
"<Pagination\n page={page}\n setPage={setPage}\n perPage={10}\n totalCount={100}\n labels={{\n firstPage: \"Première page\",\n previousPage: \"Page précédente\",\n nextPage: \"Page suivante\",\n lastPage: \"Dernière page\",\n pageNumber: \"Numéro de page\",\n pageSize: \"Taille de page\",\n }}\n >\n <Pagination.Info>\n {({ pageShowingRange, totalCount }) => (\n <>\n Affichage de{\" \"}\n <span className=\"tabular-nums\">{pageShowingRange}</span> sur{\" \"}\n <span className=\"tabular-nums\">{totalCount}</span>\n </>\n )}\n </Pagination.Info>\n <Pagination.Controls />\n </Pagination>"
|
|
3637
3634
|
],
|
|
3638
3635
|
"colors": [
|
|
3639
|
-
"border-kumo-
|
|
3636
|
+
"border-kumo-hairline",
|
|
3637
|
+
"ring-kumo-hairline",
|
|
3640
3638
|
"text-kumo-strong"
|
|
3641
3639
|
],
|
|
3642
3640
|
"subComponents": {
|
|
@@ -3678,6 +3676,10 @@
|
|
|
3678
3676
|
"type": "number[]",
|
|
3679
3677
|
"optional": true
|
|
3680
3678
|
},
|
|
3679
|
+
"page": {
|
|
3680
|
+
"type": "\"",
|
|
3681
|
+
"required": true
|
|
3682
|
+
},
|
|
3681
3683
|
"label": {
|
|
3682
3684
|
"type": "ReactNode",
|
|
3683
3685
|
"optional": true
|
|
@@ -3692,6 +3694,14 @@
|
|
|
3692
3694
|
"name": "Controls",
|
|
3693
3695
|
"description": "Controls sub-component",
|
|
3694
3696
|
"props": {
|
|
3697
|
+
"Note": {
|
|
3698
|
+
"type": "** `\"dropdown\"` renders an option for every page",
|
|
3699
|
+
"required": true
|
|
3700
|
+
},
|
|
3701
|
+
"pageSelector": {
|
|
3702
|
+
"type": "\"input\" | \"dropdown\"",
|
|
3703
|
+
"optional": true
|
|
3704
|
+
},
|
|
3695
3705
|
"className": {
|
|
3696
3706
|
"type": "string",
|
|
3697
3707
|
"optional": true
|
|
@@ -3747,12 +3757,13 @@
|
|
|
3747
3757
|
}
|
|
3748
3758
|
},
|
|
3749
3759
|
"examples": [
|
|
3750
|
-
"<Popover>\n <Popover.Trigger
|
|
3751
|
-
"<Popover>\n <Popover.Trigger
|
|
3752
|
-
"<Popover>\n <Popover.Trigger
|
|
3753
|
-
"<div className=\"flex flex-wrap gap-4\">\n <Popover>\n <Popover.Trigger
|
|
3754
|
-
"<Popover>\n <Popover.Trigger
|
|
3755
|
-
"<Popover>\n <Popover.Trigger
|
|
3760
|
+
"<Popover>\n <Popover.Trigger\n render={\n <Button shape=\"square\" icon={BellIcon} aria-label=\"Notifications\" />\n }\n />\n <Popover.Content>\n <Popover.Title>Notifications</Popover.Title>\n <Popover.Description>\n You are all caught up. Good job!\n </Popover.Description>\n </Popover.Content>\n </Popover>",
|
|
3761
|
+
"<Popover>\n <Popover.Trigger render={<Button />}>Open Popover</Popover.Trigger>\n <Popover.Content>\n <Popover.Title>Popover Title</Popover.Title>\n <Popover.Description>\n This is a basic popover with a title and description.\n </Popover.Description>\n </Popover.Content>\n </Popover>",
|
|
3762
|
+
"<Popover>\n <Popover.Trigger render={<Button />}>Open Settings</Popover.Trigger>\n <Popover.Content>\n <Popover.Title>Settings</Popover.Title>\n <Popover.Description>\n Configure your preferences below.\n </Popover.Description>\n <div className=\"mt-3\">\n <Popover.Close render={<Button variant=\"secondary\" size=\"sm\" />}>\n Close\n </Popover.Close>\n </div>\n </Popover.Content>\n </Popover>",
|
|
3763
|
+
"<div className=\"flex flex-wrap gap-4\">\n <Popover>\n <Popover.Trigger render={<Button variant=\"secondary\" />}>\n Bottom\n </Popover.Trigger>\n <Popover.Content side=\"bottom\">\n <Popover.Title>Bottom</Popover.Title>\n <Popover.Description>\n Popover on bottom (default).\n </Popover.Description>\n </Popover.Content>\n </Popover>\n\n <Popover>\n <Popover.Trigger render={<Button variant=\"secondary\" />}>\n Top\n </Popover.Trigger>\n <Popover.Content side=\"top\">\n <Popover.Title>Top</Popover.Title>\n <Popover.Description>Popover on top.</Popover.Description>\n </Popover.Content>\n </Popover>\n\n <Popover>\n <Popover.Trigger render={<Button variant=\"secondary\" />}>\n Left\n </Popover.Trigger>\n <Popover.Content side=\"left\">\n <Popover.Title>Left</Popover.Title>\n <Popover.Description>Popover on left.</Popover.Description>\n </Popover.Content>\n </Popover>\n\n <Popover>\n <Popover.Trigger render={<Button variant=\"secondary\" />}>\n Right\n </Popover.Trigger>\n <Popover.Content side=\"right\">\n <Popover.Title>Right</Popover.Title>\n <Popover.Description>Popover on right.</Popover.Description>\n </Popover.Content>\n </Popover>\n </div>",
|
|
3764
|
+
"<Popover>\n <Popover.Trigger render={<Button />}>User Profile</Popover.Trigger>\n <Popover.Content className=\"w-64\">\n <div className=\"flex items-center gap-3\">\n <div className=\"size-10 rounded-full bg-kumo-recessed\" />\n <div>\n <Popover.Title>Jane Doe</Popover.Title>\n <p className=\"text-sm text-kumo-subtle\">jane@example.com</p>\n </div>\n </div>\n <div className=\"mt-3 flex gap-2 border-t border-kumo-hairline pt-3\">\n <Button variant=\"secondary\" size=\"sm\" className=\"flex-1\">\n Profile\n </Button>\n <Popover.Close\n render={<Button variant=\"ghost\" size=\"sm\" className=\"flex-1\" />}\n >\n Sign Out\n </Popover.Close>\n </div>\n </Popover.Content>\n </Popover>",
|
|
3765
|
+
"<Popover>\n <Popover.Trigger\n openOnHover\n delay={200}\n render={<Button variant=\"secondary\" />}\n >\n Hover Me\n </Popover.Trigger>\n <Popover.Content>\n <Popover.Title>Hover Triggered</Popover.Title>\n <Popover.Description>\n This popover opens on hover with a 200ms delay. It can still contain\n interactive content like buttons and links.\n </Popover.Description>\n <div className=\"mt-3\">\n <Popover.Close render={<Button variant=\"secondary\" size=\"sm\" />}>\n Got it\n </Popover.Close>\n </div>\n </Popover.Content>\n </Popover>",
|
|
3766
|
+
"<div className=\"w-full\">\n <div className=\"overflow-hidden rounded-lg border border-kumo-hairline\">\n <table className=\"w-full text-sm\">\n <thead className=\"bg-kumo-elevated\">\n <tr>\n <th className=\"px-4 py-2 text-left font-medium\">Name</th>\n <th className=\"px-4 py-2 text-left font-medium\">Status</th>\n <th className=\"w-12 px-4 py-2\"></th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-kumo-hairline\">\n {rows.map((row) => (\n <tr\n key={row.id}\n ref={(el) => {\n if (el) rowRefs.current.set(row.id, el);\n }}\n className={\n selectedRow === row.id ? \"bg-kumo-recessed\" : \"bg-kumo-base\"\n }\n >\n <td className=\"px-4 py-2 font-mono\">{row.name}</td>\n <td className=\"px-4 py-2 text-kumo-subtle\">{row.status}</td>\n <td className=\"px-4 py-2\">\n <Button\n size=\"xs\"\n variant=\"ghost\"\n shape=\"square\"\n icon={DotsThree}\n aria-label={`Actions for ${row.name}`}\n onClick={() => handleEdit(row.id)}\n />\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n <Popover\n open={!!selectedRow}\n onOpenChange={(open) => !open && setSelectedRow(null)}\n >\n <Popover.Content\n side=\"left\"\n anchor={\n anchorRect ? { getBoundingClientRect: () => anchorRect } : undefined\n }\n >\n <Popover.Title>\n Edit {rows.find((r) => r.id === selectedRow)?.name}\n </Popover.Title>\n <Popover.Description>\n The popover anchors to the selected row, not the icon button.\n </Popover.Description>\n <div className=\"mt-3\">\n <Popover.Close render={<Button size=\"sm\" variant=\"secondary\" />}>\n Close\n </Popover.Close>\n </div>\n </Popover.Content>\n </Popover>\n </div>"
|
|
3756
3767
|
],
|
|
3757
3768
|
"colors": [
|
|
3758
3769
|
"bg-kumo-base",
|
|
@@ -3830,7 +3841,7 @@
|
|
|
3830
3841
|
"card": "Choice card appearance with border, padding, and highlighted selection state"
|
|
3831
3842
|
},
|
|
3832
3843
|
"classes": {
|
|
3833
|
-
"card": "rounded-lg border border-kumo-
|
|
3844
|
+
"card": "rounded-lg border border-kumo-hairline bg-kumo-base p-3 transition-colors hover:bg-kumo-tint has-[[data-checked]]:border-kumo-interact has-[[data-checked]]:bg-kumo-tint"
|
|
3834
3845
|
},
|
|
3835
3846
|
"stateClasses": {
|
|
3836
3847
|
"card": {
|
|
@@ -3895,11 +3906,10 @@
|
|
|
3895
3906
|
"bg-kumo-contrast",
|
|
3896
3907
|
"bg-kumo-tint",
|
|
3897
3908
|
"border-kumo-danger",
|
|
3909
|
+
"border-kumo-hairline",
|
|
3898
3910
|
"border-kumo-interact",
|
|
3899
|
-
"border-kumo-ring",
|
|
3900
3911
|
"ring-kumo-danger",
|
|
3901
|
-
"ring-kumo-
|
|
3902
|
-
"ring-kumo-ring",
|
|
3912
|
+
"ring-kumo-hairline",
|
|
3903
3913
|
"text-kumo-danger",
|
|
3904
3914
|
"text-kumo-default",
|
|
3905
3915
|
"text-kumo-subtle"
|
|
@@ -3982,6 +3992,18 @@
|
|
|
3982
3992
|
"optional": true,
|
|
3983
3993
|
"description": "Additional CSS classes merged via `cn()`."
|
|
3984
3994
|
},
|
|
3995
|
+
"size": {
|
|
3996
|
+
"type": "enum",
|
|
3997
|
+
"optional": true,
|
|
3998
|
+
"description": "Size of the select trigger. Matches Input component sizes.",
|
|
3999
|
+
"values": [
|
|
4000
|
+
"xs",
|
|
4001
|
+
"sm",
|
|
4002
|
+
"base",
|
|
4003
|
+
"lg"
|
|
4004
|
+
],
|
|
4005
|
+
"default": "base"
|
|
4006
|
+
},
|
|
3985
4007
|
"label": {
|
|
3986
4008
|
"type": "ReactNode",
|
|
3987
4009
|
"optional": true,
|
|
@@ -4047,6 +4069,7 @@
|
|
|
4047
4069
|
},
|
|
4048
4070
|
"examples": [
|
|
4049
4071
|
"<Select\n label=\"Favorite Fruit\"\n className=\"w-[200px]\"\n value={value}\n onValueChange={(v) => setValue(v ?? \"apple\")}\n items={{ apple: \"Apple\", banana: \"Banana\", cherry: \"Cherry\" }}\n />",
|
|
4072
|
+
"<div className=\"grid gap-4\">\n <div className=\"flex items-center gap-3\">\n <span className=\"w-10 text-sm text-kumo-subtle\">xs</span>\n <Select\n aria-label=\"Select size xs\"\n size=\"xs\"\n className=\"w-[200px]\"\n placeholder=\"Choose...\"\n items={{ a: \"Option A\", b: \"Option B\" }}\n />\n </div>\n <div className=\"flex items-center gap-3\">\n <span className=\"w-10 text-sm text-kumo-subtle\">sm</span>\n <Select\n aria-label=\"Select size sm\"\n size=\"sm\"\n className=\"w-[200px]\"\n placeholder=\"Choose...\"\n items={{ a: \"Option A\", b: \"Option B\" }}\n />\n </div>\n <div className=\"flex items-center gap-3\">\n <span className=\"w-10 text-sm text-kumo-subtle\">base</span>\n <Select\n aria-label=\"Select size base\"\n size=\"base\"\n className=\"w-[200px]\"\n placeholder=\"Choose...\"\n items={{ a: \"Option A\", b: \"Option B\" }}\n />\n </div>\n <div className=\"flex items-center gap-3\">\n <span className=\"w-10 text-sm text-kumo-subtle\">lg</span>\n <Select\n aria-label=\"Select size lg\"\n size=\"lg\"\n className=\"w-[200px]\"\n placeholder=\"Choose...\"\n items={{ a: \"Option A\", b: \"Option B\" }}\n />\n </div>\n </div>",
|
|
4050
4073
|
"<Select\n aria-label=\"Select a fruit\"\n className=\"w-[200px]\"\n value={value}\n onValueChange={(v) => setValue(v ?? \"apple\")}\n items={{ apple: \"Apple\", banana: \"Banana\", cherry: \"Cherry\" }}\n />",
|
|
4051
4074
|
"<Select\n label=\"Issue Type\"\n description=\"Choose the category that best describes your issue\"\n error={!value ? \"Please select an issue type\" : undefined}\n className=\"w-[280px]\"\n value={value}\n onValueChange={(v) => setValue(v as string | null)}\n items={{\n bug: \"Bug\",\n documentation: \"Documentation\",\n feature: \"Feature\",\n }}\n />",
|
|
4052
4075
|
"<Select\n label=\"Category\"\n placeholder=\"Choose a category...\"\n className=\"w-[200px]\"\n value={value}\n onValueChange={(v) => setValue(v as string | null)}\n items={{\n bug: \"Bug\",\n documentation: \"Documentation\",\n feature: \"Feature\",\n }}\n />",
|
|
@@ -4057,14 +4080,22 @@
|
|
|
4057
4080
|
"<Select\n label=\"Visible Columns\"\n className=\"w-[250px]\"\n multiple\n renderValue={(value) => {\n if (value.length > 3) {\n return (\n <span className=\"line-clamp-1\">\n {value.slice(0, 2).join(\", \") + ` and ${value.length - 2} more`}\n </span>\n );\n }\n return <span>{value.join(\", \")}</span>;\n }}\n value={value}\n onValueChange={(v) => setValue(v as string[])}\n >\n <Select.Option value=\"Name\">Name</Select.Option>\n <Select.Option value=\"Location\">Location</Select.Option>\n <Select.Option value=\"Size\">Size</Select.Option>\n <Select.Option value=\"Read\">Read</Select.Option>\n <Select.Option value=\"Write\">Write</Select.Option>\n <Select.Option value=\"CreatedAt\">Created At</Select.Option>\n </Select>",
|
|
4058
4081
|
"<Select\n label=\"Compliance Frameworks\"\n className=\"w-[280px]\"\n multiple\n value={value}\n onValueChange={(v) => setValue(v as string[])}\n >\n <Select.Option value=\"European Union Privacy Regulation\">\n European Union Privacy Regulation\n </Select.Option>\n <Select.Option value=\"California Consumer Protection Act\">\n California Consumer Protection Act\n </Select.Option>\n <Select.Option value=\"Health Insurance Portability Act\">\n Health Insurance Portability Act\n </Select.Option>\n <Select.Option value=\"Payment Card Industry Standard\">\n Payment Card Industry Standard\n </Select.Option>\n </Select>",
|
|
4059
4082
|
"<Select\n label=\"Issue Types\"\n className=\"w-[220px]\"\n multiple\n renderValue={(selected) => (\n <span className=\"flex items-center gap-2\">\n <span>Issue Types</span>\n {selected.length > 0 && (\n <Badge variant=\"neutral\">{selected.length}</Badge>\n )}\n </span>\n )}\n value={value}\n onValueChange={(v) => setValue(v as string[])}\n >\n {allOptions.map((option) => (\n <Select.Option key={option.value} value={option.value}>\n {option.label}\n </Select.Option>\n ))}\n </Select>",
|
|
4060
|
-
"<Select\n label=\"Author\"\n description=\"Select the primary author for this document\"\n className=\"w-[200px]\"\n onValueChange={(v) => setValue(v as (typeof authors)[0] | null)}\n value={value}\n isItemEqualToValue={(item, value) => item?.id === value?.id}\n renderValue={(author) =>
|
|
4083
|
+
"<Select\n label=\"Author\"\n description=\"Select the primary author for this document\"\n placeholder=\"Select an author\"\n className=\"w-[200px]\"\n onValueChange={(v) => setValue(v as (typeof authors)[0] | null)}\n value={value}\n isItemEqualToValue={(item, value) => item?.id === value?.id}\n renderValue={(author) => author.name}\n >\n {authors.map((author) => (\n <Select.Option key={author.id} value={author}>\n <div className=\"flex w-[300px] items-center justify-between gap-2\">\n <Text>{author.name}</Text>\n <Text variant=\"secondary\">{author.title}</Text>\n </div>\n </Select.Option>\n ))}\n </Select>",
|
|
4084
|
+
"<Select\n label=\"Deployment Region\"\n placeholder=\"Choose a region...\"\n className=\"w-[250px]\"\n value={value}\n onValueChange={(v) => setValue(v as Region | null)}\n isItemEqualToValue={(item, val) => item.value === val.value}\n >\n {regions.map((region) => (\n <Select.Option\n key={region.value}\n value={region}\n disabled={region.disabled}\n >\n {region.label}\n </Select.Option>\n ))}\n </Select>",
|
|
4085
|
+
"<Select\n label=\"Plan\"\n className=\"w-[200px]\"\n value={value}\n onValueChange={(v) => setValue(v as string | null)}\n items={{\n free: \"Free\",\n pro: \"Pro\",\n business: { label: \"Business\", disabled: true },\n enterprise: { label: \"Enterprise\", disabled: true },\n }}\n />",
|
|
4086
|
+
"<Select\n label=\"Food\"\n placeholder=\"Pick a food...\"\n className=\"w-[220px]\"\n value={value}\n onValueChange={(v) => setValue(v as Food | null)}\n isItemEqualToValue={(item, val) => item.value === val.value}\n >\n <Select.Group>\n <Select.GroupLabel>Fruits</Select.GroupLabel>\n {foods.fruits.map((food) => (\n <Select.Option key={food.value} value={food}>\n {food.label}\n </Select.Option>\n ))}\n </Select.Group>\n <Select.Separator />\n <Select.Group>\n <Select.GroupLabel>Vegetables</Select.GroupLabel>\n {foods.vegetables.map((food) => (\n <Select.Option key={food.value} value={food}>\n {food.label}\n </Select.Option>\n ))}\n </Select.Group>\n </Select>",
|
|
4087
|
+
"<Select\n label=\"Server Region\"\n placeholder=\"Select a region...\"\n className=\"w-[260px]\"\n value={value}\n onValueChange={(v) => setValue(v as ServerRegion | null)}\n isItemEqualToValue={(item, val) => item.value === val.value}\n >\n <Select.Group>\n <Select.GroupLabel>Available</Select.GroupLabel>\n {serverRegions.available.map((region) => (\n <Select.Option key={region.value} value={region}>\n {region.label}\n </Select.Option>\n ))}\n </Select.Group>\n <Select.Separator />\n <Select.Group>\n <Select.GroupLabel>Unavailable</Select.GroupLabel>\n {serverRegions.unavailable.map((region) => (\n <Select.Option key={region.value} value={region} disabled>\n {region.label}\n </Select.Option>\n ))}\n </Select.Group>\n </Select>",
|
|
4088
|
+
"<Select\n label=\"Long List Select\"\n description=\"Tests scrolling behavior with many options\"\n placeholder=\"Choose an option...\"\n className=\"w-[220px]\"\n value={value}\n onValueChange={(v) => setValue(v as LongListItem | null)}\n isItemEqualToValue={(item, val) => item.value === val.value}\n >\n {longListItems.map((item) => (\n <Select.Option key={item.value} value={item}>\n {item.label}\n </Select.Option>\n ))}\n </Select>"
|
|
4061
4089
|
],
|
|
4062
4090
|
"colors": [
|
|
4063
4091
|
"bg-kumo-base",
|
|
4092
|
+
"bg-kumo-hairline",
|
|
4064
4093
|
"bg-kumo-tint",
|
|
4065
|
-
"ring-kumo-
|
|
4094
|
+
"ring-kumo-hairline",
|
|
4095
|
+
"ring-kumo-line",
|
|
4066
4096
|
"text-kumo-danger",
|
|
4067
4097
|
"text-kumo-default",
|
|
4098
|
+
"text-kumo-placeholder",
|
|
4068
4099
|
"text-kumo-subtle"
|
|
4069
4100
|
],
|
|
4070
4101
|
"subComponents": {
|
|
@@ -4072,6 +4103,21 @@
|
|
|
4072
4103
|
"name": "Option",
|
|
4073
4104
|
"description": "Option sub-component",
|
|
4074
4105
|
"props": {}
|
|
4106
|
+
},
|
|
4107
|
+
"Group": {
|
|
4108
|
+
"name": "Group",
|
|
4109
|
+
"description": "Group sub-component",
|
|
4110
|
+
"props": {}
|
|
4111
|
+
},
|
|
4112
|
+
"GroupLabel": {
|
|
4113
|
+
"name": "GroupLabel",
|
|
4114
|
+
"description": "GroupLabel sub-component",
|
|
4115
|
+
"props": {}
|
|
4116
|
+
},
|
|
4117
|
+
"Separator": {
|
|
4118
|
+
"name": "Separator",
|
|
4119
|
+
"description": "Separator sub-component",
|
|
4120
|
+
"props": {}
|
|
4075
4121
|
}
|
|
4076
4122
|
},
|
|
4077
4123
|
"styling": {
|
|
@@ -4246,8 +4292,8 @@
|
|
|
4246
4292
|
"colors": [
|
|
4247
4293
|
"bg-kumo-brand",
|
|
4248
4294
|
"bg-kumo-control",
|
|
4249
|
-
"outline-kumo-
|
|
4250
|
-
"ring-kumo-
|
|
4295
|
+
"outline-kumo-hairline",
|
|
4296
|
+
"ring-kumo-hairline",
|
|
4251
4297
|
"text-kumo-default",
|
|
4252
4298
|
"text-kumo-subtle"
|
|
4253
4299
|
]
|
|
@@ -4356,13 +4402,12 @@
|
|
|
4356
4402
|
"colors": [
|
|
4357
4403
|
"bg-kumo-base",
|
|
4358
4404
|
"bg-kumo-brand",
|
|
4359
|
-
"bg-kumo-
|
|
4405
|
+
"bg-kumo-hairline",
|
|
4360
4406
|
"bg-kumo-overlay",
|
|
4361
4407
|
"bg-kumo-recessed",
|
|
4362
4408
|
"bg-kumo-tint",
|
|
4363
|
-
"border-kumo-
|
|
4364
|
-
"ring-kumo-
|
|
4365
|
-
"ring-kumo-ring",
|
|
4409
|
+
"border-kumo-hairline",
|
|
4410
|
+
"ring-kumo-hairline",
|
|
4366
4411
|
"text-kumo-default",
|
|
4367
4412
|
"text-kumo-strong",
|
|
4368
4413
|
"text-kumo-subtle"
|
|
@@ -4547,7 +4592,7 @@
|
|
|
4547
4592
|
"Surface": {
|
|
4548
4593
|
"name": "Surface",
|
|
4549
4594
|
"type": "component",
|
|
4550
|
-
"description": "
|
|
4595
|
+
"description": "Surface component",
|
|
4551
4596
|
"importPath": "@cloudflare/kumo",
|
|
4552
4597
|
"category": "Layout",
|
|
4553
4598
|
"props": {
|
|
@@ -4581,15 +4626,8 @@
|
|
|
4581
4626
|
"optional": true
|
|
4582
4627
|
}
|
|
4583
4628
|
},
|
|
4584
|
-
"examples": [
|
|
4585
|
-
|
|
4586
|
-
"<div className=\"flex flex-col gap-4\">\n <Surface render={<section />} className=\"rounded-lg p-4\">\n <Text bold>As section element</Text>\n </Surface>\n <Surface render={<article />} className=\"rounded-lg p-4\">\n <Text bold>As article element</Text>\n </Surface>\n <Surface render={<aside />} className=\"rounded-lg p-4\">\n <Text bold>As aside element</Text>\n </Surface>\n </div>",
|
|
4587
|
-
"<Surface className=\"rounded-lg p-6\">\n <Text bold>Outer Surface</Text>\n <Surface className=\"mt-4 rounded-md bg-kumo-elevated p-4\">\n <Text variant=\"secondary\">Nested Surface</Text>\n </Surface>\n </Surface>"
|
|
4588
|
-
],
|
|
4589
|
-
"colors": [
|
|
4590
|
-
"bg-kumo-base",
|
|
4591
|
-
"ring-kumo-line"
|
|
4592
|
-
]
|
|
4629
|
+
"examples": [],
|
|
4630
|
+
"colors": []
|
|
4593
4631
|
},
|
|
4594
4632
|
"Switch": {
|
|
4595
4633
|
"name": "Switch",
|
|
@@ -4710,13 +4748,14 @@
|
|
|
4710
4748
|
"<Switch label=\"Disabled\" checked={false} disabled />",
|
|
4711
4749
|
"<Switch\n label=\"Neutral switch\"\n variant=\"neutral\"\n checked={checked}\n onCheckedChange={setChecked}\n />",
|
|
4712
4750
|
"<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>",
|
|
4713
|
-
"<div className=\"grid grid-cols-2 gap-x-8 gap-y-4\">\n <Switch
|
|
4751
|
+
"<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
|
+
"<Switch\n id=\"my-custom-switch\"\n label=\"Custom ID\"\n checked={checked}\n onCheckedChange={setChecked}\n />",
|
|
4714
4753
|
"<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>"
|
|
4715
4754
|
],
|
|
4716
4755
|
"colors": [
|
|
4717
4756
|
"bg-kumo-base",
|
|
4718
|
-
"border-kumo-
|
|
4719
|
-
"ring-kumo-
|
|
4757
|
+
"border-kumo-hairline",
|
|
4758
|
+
"ring-kumo-hairline",
|
|
4720
4759
|
"text-kumo-danger",
|
|
4721
4760
|
"text-kumo-default",
|
|
4722
4761
|
"text-kumo-subtle"
|
|
@@ -4825,18 +4864,19 @@
|
|
|
4825
4864
|
}
|
|
4826
4865
|
},
|
|
4827
4866
|
"examples": [
|
|
4828
|
-
"<LayerCard
|
|
4829
|
-
"<LayerCard
|
|
4830
|
-
"<LayerCard
|
|
4831
|
-
"<LayerCard
|
|
4832
|
-
"<LayerCard
|
|
4833
|
-
"<LayerCard
|
|
4834
|
-
"<LayerCard
|
|
4867
|
+
"<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 onValueChange={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 onValueChange={() => 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
|
+
"<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 onValueChange={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 onValueChange={() => 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
|
+
"<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
|
+
"<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
|
+
"<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 onValueChange={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 onValueChange={() => 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>"
|
|
4835
4875
|
],
|
|
4836
4876
|
"colors": [
|
|
4837
4877
|
"bg-kumo-base",
|
|
4838
4878
|
"bg-kumo-elevated",
|
|
4839
|
-
"bg-kumo-
|
|
4879
|
+
"bg-kumo-hairline",
|
|
4840
4880
|
"bg-kumo-tint",
|
|
4841
4881
|
"border-kumo-fill",
|
|
4842
4882
|
"text-kumo-default",
|
|
@@ -4890,6 +4930,72 @@
|
|
|
4890
4930
|
}
|
|
4891
4931
|
}
|
|
4892
4932
|
},
|
|
4933
|
+
"TableOfContents": {
|
|
4934
|
+
"name": "TableOfContents",
|
|
4935
|
+
"type": "component",
|
|
4936
|
+
"description": "TableOfContents — presentational compound component for section navigation. Purely visual; all interaction logic (scroll tracking, active state management) is left to the consumer.",
|
|
4937
|
+
"importPath": "@cloudflare/kumo",
|
|
4938
|
+
"category": "Other",
|
|
4939
|
+
"props": {
|
|
4940
|
+
"children": {
|
|
4941
|
+
"type": "ReactNode",
|
|
4942
|
+
"optional": true
|
|
4943
|
+
},
|
|
4944
|
+
"className": {
|
|
4945
|
+
"type": "string",
|
|
4946
|
+
"optional": true
|
|
4947
|
+
},
|
|
4948
|
+
"id": {
|
|
4949
|
+
"type": "string",
|
|
4950
|
+
"optional": true
|
|
4951
|
+
},
|
|
4952
|
+
"lang": {
|
|
4953
|
+
"type": "string",
|
|
4954
|
+
"optional": true
|
|
4955
|
+
},
|
|
4956
|
+
"title": {
|
|
4957
|
+
"type": "string",
|
|
4958
|
+
"optional": true
|
|
4959
|
+
}
|
|
4960
|
+
},
|
|
4961
|
+
"examples": [
|
|
4962
|
+
"<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
|
+
"<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
|
+
"<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>",
|
|
4966
|
+
"<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
|
+
"<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
|
+
],
|
|
4969
|
+
"colors": [
|
|
4970
|
+
"bg-kumo-brand",
|
|
4971
|
+
"bg-kumo-line",
|
|
4972
|
+
"bg-kumo-tint",
|
|
4973
|
+
"text-kumo-default",
|
|
4974
|
+
"text-kumo-subtle"
|
|
4975
|
+
],
|
|
4976
|
+
"subComponents": {
|
|
4977
|
+
"Title": {
|
|
4978
|
+
"name": "Title",
|
|
4979
|
+
"description": "Title sub-component",
|
|
4980
|
+
"props": {}
|
|
4981
|
+
},
|
|
4982
|
+
"List": {
|
|
4983
|
+
"name": "List",
|
|
4984
|
+
"description": "List sub-component",
|
|
4985
|
+
"props": {}
|
|
4986
|
+
},
|
|
4987
|
+
"Item": {
|
|
4988
|
+
"name": "Item",
|
|
4989
|
+
"description": "Item sub-component",
|
|
4990
|
+
"props": {}
|
|
4991
|
+
},
|
|
4992
|
+
"Group": {
|
|
4993
|
+
"name": "Group",
|
|
4994
|
+
"description": "Group sub-component",
|
|
4995
|
+
"props": {}
|
|
4996
|
+
}
|
|
4997
|
+
}
|
|
4998
|
+
},
|
|
4893
4999
|
"Tabs": {
|
|
4894
5000
|
"name": "Tabs",
|
|
4895
5001
|
"type": "component",
|
|
@@ -4960,9 +5066,9 @@
|
|
|
4960
5066
|
"bg-kumo-brand",
|
|
4961
5067
|
"bg-kumo-recessed",
|
|
4962
5068
|
"bg-kumo-tint",
|
|
4963
|
-
"border-kumo-
|
|
5069
|
+
"border-kumo-hairline",
|
|
5070
|
+
"ring-kumo-hairline",
|
|
4964
5071
|
"ring-kumo-line",
|
|
4965
|
-
"ring-kumo-ring",
|
|
4966
5072
|
"text-kumo-default",
|
|
4967
5073
|
"text-kumo-strong",
|
|
4968
5074
|
"text-kumo-subtle"
|
|
@@ -5083,8 +5189,8 @@
|
|
|
5083
5189
|
}
|
|
5084
5190
|
},
|
|
5085
5191
|
"examples": [
|
|
5086
|
-
"<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-
|
|
5087
|
-
"<div className=\"w-64 rounded-lg border border-kumo-
|
|
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\">Heading 1</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\">Heading 2</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\">Heading 3</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
|
+
"<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>"
|
|
5088
5194
|
],
|
|
5089
5195
|
"colors": [
|
|
5090
5196
|
"text-kumo-danger",
|
|
@@ -5168,15 +5274,16 @@
|
|
|
5168
5274
|
"bg-kumo-base",
|
|
5169
5275
|
"bg-kumo-contrast",
|
|
5170
5276
|
"bg-kumo-control",
|
|
5171
|
-
"bg-kumo-danger
|
|
5277
|
+
"bg-kumo-danger",
|
|
5172
5278
|
"bg-kumo-fill-hover",
|
|
5173
|
-
"bg-kumo-info
|
|
5174
|
-
"bg-kumo-success
|
|
5175
|
-
"bg-kumo-warning
|
|
5279
|
+
"bg-kumo-info",
|
|
5280
|
+
"bg-kumo-success",
|
|
5281
|
+
"bg-kumo-warning",
|
|
5176
5282
|
"border-kumo-fill",
|
|
5177
5283
|
"ring-kumo-danger",
|
|
5284
|
+
"ring-kumo-hairline",
|
|
5178
5285
|
"ring-kumo-info",
|
|
5179
|
-
"ring-kumo-
|
|
5286
|
+
"ring-kumo-line",
|
|
5180
5287
|
"ring-kumo-success",
|
|
5181
5288
|
"ring-kumo-warning",
|
|
5182
5289
|
"text-kumo-danger",
|
|
@@ -5193,7 +5300,7 @@
|
|
|
5193
5300
|
"padding": 16,
|
|
5194
5301
|
"borderRadius": 8,
|
|
5195
5302
|
"background": "bg-kumo-base",
|
|
5196
|
-
"border": "ring-[0.3px] ring-kumo-
|
|
5303
|
+
"border": "ring-[0.3px] ring-kumo-hairline",
|
|
5197
5304
|
"shadow": "shadow-lg",
|
|
5198
5305
|
"gap": 4
|
|
5199
5306
|
},
|
|
@@ -5256,10 +5363,11 @@
|
|
|
5256
5363
|
}
|
|
5257
5364
|
},
|
|
5258
5365
|
"examples": [
|
|
5259
|
-
"<TooltipProvider>\n <Tooltip
|
|
5260
|
-
"<TooltipProvider>\n <Tooltip
|
|
5261
|
-
"<TooltipProvider>\n <div className=\"flex gap-2\">\n <Tooltip
|
|
5262
|
-
"<TooltipProvider>\n <Tooltip\n content=\"Click to learn more\"\n className=\"inline-flex items-center gap-1.5 rounded-full bg-kumo-brand px-3 py-1.5 text-sm font-medium text-white shadow-md transition-transform hover:scale-105 active:scale-95\"\n >\n <Info className=\"size-4\" />\n <span>Help</span>\n </Tooltip>\n </TooltipProvider>"
|
|
5366
|
+
"<TooltipProvider>\n <Tooltip\n content=\"Add new item\"\n render={\n <Button shape=\"square\" icon={PlusIcon} aria-label=\"Add new item\" />\n }\n />\n </TooltipProvider>",
|
|
5367
|
+
"<TooltipProvider>\n <Tooltip\n content=\"Add\"\n render={<Button shape=\"square\" icon={PlusIcon} aria-label=\"Add\" />}\n />\n </TooltipProvider>",
|
|
5368
|
+
"<TooltipProvider>\n <div className=\"flex gap-2\">\n <Tooltip\n content=\"Add\"\n render={<Button shape=\"square\" icon={PlusIcon} aria-label=\"Add\" />}\n />\n <Tooltip\n content=\"Change language\"\n render={\n <Button\n shape=\"square\"\n icon={TranslateIcon}\n aria-label=\"Change language\"\n />\n }\n />\n </div>\n </TooltipProvider>",
|
|
5369
|
+
"<TooltipProvider>\n <Tooltip\n content=\"Click to learn more\"\n className=\"inline-flex items-center gap-1.5 rounded-full bg-kumo-brand px-3 py-1.5 text-sm font-medium text-white shadow-md transition-transform hover:scale-105 active:scale-95\"\n >\n <Info className=\"size-4\" />\n <span>Help</span>\n </Tooltip>\n </TooltipProvider>",
|
|
5370
|
+
"<TooltipProvider>\n <div className=\"flex gap-4\">\n <Tooltip\n content=\"Opens after 1 second\"\n delay={1000}\n render={<Button variant=\"secondary\" />}\n >\n 1s open delay\n </Tooltip>\n <Tooltip\n content=\"Stays open 500ms after leaving\"\n closeDelay={500}\n render={<Button variant=\"secondary\" />}\n >\n 500ms close delay\n </Tooltip>\n <Tooltip\n content=\"Instant open, stays 1s\"\n delay={0}\n closeDelay={1000}\n render={<Button variant=\"secondary\" />}\n >\n Instant + 1s close\n </Tooltip>\n </div>\n </TooltipProvider>"
|
|
5263
5371
|
],
|
|
5264
5372
|
"colors": [
|
|
5265
5373
|
"bg-kumo-base",
|
|
@@ -5553,6 +5661,7 @@
|
|
|
5553
5661
|
"SensitiveInput",
|
|
5554
5662
|
"Sidebar",
|
|
5555
5663
|
"Table",
|
|
5664
|
+
"TableOfContents",
|
|
5556
5665
|
"DeleteResource"
|
|
5557
5666
|
],
|
|
5558
5667
|
"Navigation": [
|
|
@@ -5612,6 +5721,7 @@
|
|
|
5612
5721
|
"Surface",
|
|
5613
5722
|
"Switch",
|
|
5614
5723
|
"Table",
|
|
5724
|
+
"TableOfContents",
|
|
5615
5725
|
"Tabs",
|
|
5616
5726
|
"Text",
|
|
5617
5727
|
"Toasty",
|
|
@@ -5653,6 +5763,7 @@
|
|
|
5653
5763
|
"Surface",
|
|
5654
5764
|
"Switch",
|
|
5655
5765
|
"Table",
|
|
5766
|
+
"TableOfContents",
|
|
5656
5767
|
"Tabs",
|
|
5657
5768
|
"Text",
|
|
5658
5769
|
"Toasty",
|