@cloudflare/kumo 1.7.0 → 1.9.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.
Files changed (174) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/ai/component-registry.json +146 -70
  3. package/ai/component-registry.md +178 -46
  4. package/ai/schemas.ts +11 -8
  5. package/dist/.build-complete +1 -1
  6. package/dist/ai/schemas.d.ts +54 -44
  7. package/dist/ai/schemas.d.ts.map +1 -1
  8. package/dist/banner-BKDBfLHA.js +75 -0
  9. package/dist/banner-BKDBfLHA.js.map +1 -0
  10. package/dist/catalog.js +1 -1
  11. package/dist/{checkbox-Dt8iSNOg.js → checkbox-CfFoTNFI.js} +60 -60
  12. package/dist/checkbox-CfFoTNFI.js.map +1 -0
  13. package/dist/{clipboard-text-CeoyR28P.js → clipboard-text-1d0rHIhb.js} +24 -24
  14. package/dist/{clipboard-text-CeoyR28P.js.map → clipboard-text-1d0rHIhb.js.map} +1 -1
  15. package/dist/{combobox-BIC-YZ2L.js → combobox-vnvi22pn.js} +83 -61
  16. package/dist/combobox-vnvi22pn.js.map +1 -0
  17. package/dist/{command-palette-D3MNR7w9.js → command-palette-B80cqB7K.js} +2 -2
  18. package/dist/{command-palette-D3MNR7w9.js.map → command-palette-B80cqB7K.js.map} +1 -1
  19. package/dist/components/banner.js +1 -1
  20. package/dist/components/checkbox.js +1 -1
  21. package/dist/components/clipboard-text.js +1 -1
  22. package/dist/components/combobox.js +1 -1
  23. package/dist/components/command-palette.js +1 -1
  24. package/dist/components/dialog.js +1 -1
  25. package/dist/components/dropdown.js +1 -1
  26. package/dist/components/field.js +1 -1
  27. package/dist/components/flow.js +1472 -1412
  28. package/dist/components/flow.js.map +1 -1
  29. package/dist/components/input.js +3 -3
  30. package/dist/components/label.js +1 -1
  31. package/dist/components/link.js +1 -1
  32. package/dist/components/menubar.js +1 -1
  33. package/dist/components/meter.js +1 -1
  34. package/dist/components/pagination.js +1 -1
  35. package/dist/components/popover.js +1 -1
  36. package/dist/components/radio.js +1 -1
  37. package/dist/components/select.js +1 -1
  38. package/dist/components/sensitive-input.js +1 -1
  39. package/dist/components/switch.js +1 -1
  40. package/dist/components/table.js +1 -1
  41. package/dist/components/tabs.js +1 -1
  42. package/dist/components/toast.js +2 -2
  43. package/dist/components/tooltip.js +1 -1
  44. package/dist/{dialog-toS9krNF.js → dialog-C4BIM-74.js} +6 -6
  45. package/dist/{dialog-toS9krNF.js.map → dialog-C4BIM-74.js.map} +1 -1
  46. package/dist/dropdown-CfS4QcSR.js +295 -0
  47. package/dist/dropdown-CfS4QcSR.js.map +1 -0
  48. package/dist/{field-DCq04TgZ.js → field-B8xISAuX.js} +5 -5
  49. package/dist/{field-DCq04TgZ.js.map → field-B8xISAuX.js.map} +1 -1
  50. package/dist/index.js +29 -29
  51. package/dist/{input-CCR8NGG7.js → input-DCzpefuq.js} +3 -3
  52. package/dist/{input-CCR8NGG7.js.map → input-DCzpefuq.js.map} +1 -1
  53. package/dist/{input-area-DU2Yvp_t.js → input-area-DCaAN9nG.js} +3 -3
  54. package/dist/{input-area-DU2Yvp_t.js.map → input-area-DCaAN9nG.js.map} +1 -1
  55. package/dist/{input-group-C365-qBq.js → input-group-BbaVpJnA.js} +2 -2
  56. package/dist/{input-group-C365-qBq.js.map → input-group-BbaVpJnA.js.map} +1 -1
  57. package/dist/{label-zjtV7oXa.js → label-Cd6nCDWj.js} +2 -2
  58. package/dist/{label-zjtV7oXa.js.map → label-Cd6nCDWj.js.map} +1 -1
  59. package/dist/{link-C8pUZ4Q-.js → link-DJq9RWpK.js} +11 -11
  60. package/dist/{link-C8pUZ4Q-.js.map → link-DJq9RWpK.js.map} +1 -1
  61. package/dist/{menubar-D7WvAf6x.js → menubar-Chchzst0.js} +2 -2
  62. package/dist/{menubar-D7WvAf6x.js.map → menubar-Chchzst0.js.map} +1 -1
  63. package/dist/{meter-jQGKS1z4.js → meter-Wk7_EhaO.js} +4 -4
  64. package/dist/{meter-jQGKS1z4.js.map → meter-Wk7_EhaO.js.map} +1 -1
  65. package/dist/pagination-DFHoZwPJ.js +208 -0
  66. package/dist/pagination-DFHoZwPJ.js.map +1 -0
  67. package/dist/{popover-syU1104E.js → popover-D20xpmdk.js} +22 -20
  68. package/dist/{popover-syU1104E.js.map → popover-D20xpmdk.js.map} +1 -1
  69. package/dist/primitives/accordion.js +1 -1
  70. package/dist/primitives/alert-dialog.js +1 -1
  71. package/dist/primitives/autocomplete.js +1 -1
  72. package/dist/primitives/avatar.js +1 -1
  73. package/dist/primitives/button.js +1 -1
  74. package/dist/primitives/checkbox-group.js +1 -1
  75. package/dist/primitives/checkbox.js +1 -1
  76. package/dist/primitives/collapsible.js +1 -1
  77. package/dist/primitives/combobox.js +1 -1
  78. package/dist/primitives/context-menu.js +1 -1
  79. package/dist/primitives/csp-provider.js +6 -0
  80. package/dist/primitives/csp-provider.js.map +1 -0
  81. package/dist/primitives/dialog.js +1 -1
  82. package/dist/primitives/direction-provider.js +1 -1
  83. package/dist/primitives/drawer.js +6 -0
  84. package/dist/primitives/drawer.js.map +1 -0
  85. package/dist/primitives/field.js +1 -1
  86. package/dist/primitives/fieldset.js +2 -2
  87. package/dist/primitives/form.js +1 -1
  88. package/dist/primitives/input.js +1 -1
  89. package/dist/primitives/menu.js +1 -1
  90. package/dist/primitives/menubar.js +1 -1
  91. package/dist/primitives/meter.js +1 -1
  92. package/dist/primitives/navigation-menu.js +2 -2
  93. package/dist/primitives/number-field.js +1 -1
  94. package/dist/primitives/popover.js +1 -1
  95. package/dist/primitives/preview-card.js +2 -2
  96. package/dist/primitives/progress.js +2 -2
  97. package/dist/primitives/radio-group.js +1 -1
  98. package/dist/primitives/radio.js +2 -2
  99. package/dist/primitives/scroll-area.js +1 -1
  100. package/dist/primitives/select.js +1 -1
  101. package/dist/primitives/separator.js +1 -1
  102. package/dist/primitives/slider.js +1 -1
  103. package/dist/primitives/switch.js +1 -1
  104. package/dist/primitives/tabs.js +1 -1
  105. package/dist/primitives/toast.js +1 -1
  106. package/dist/primitives/toggle-group.js +1 -1
  107. package/dist/primitives/toggle.js +1 -1
  108. package/dist/primitives/toolbar.js +1 -1
  109. package/dist/primitives/tooltip.js +1 -1
  110. package/dist/primitives.js +31 -29
  111. package/dist/{radio-CWMtSx65.js → radio-ibVa4Y8a.js} +18 -18
  112. package/dist/{radio-CWMtSx65.js.map → radio-ibVa4Y8a.js.map} +1 -1
  113. package/dist/{schemas-DbIwo0ET.js → schemas-CdpAeJKO.js} +278 -275
  114. package/dist/{schemas-DbIwo0ET.js.map → schemas-CdpAeJKO.js.map} +1 -1
  115. package/dist/{select-G6JqBVkg.js → select-DtcT1zGm.js} +21 -21
  116. package/dist/{select-G6JqBVkg.js.map → select-DtcT1zGm.js.map} +1 -1
  117. package/dist/{sensitive-input-DNFpycoy.js → sensitive-input-DHDRZRC7.js} +4 -4
  118. package/dist/{sensitive-input-DNFpycoy.js.map → sensitive-input-DHDRZRC7.js.map} +1 -1
  119. package/dist/src/components/banner/banner.d.ts +28 -11
  120. package/dist/src/components/banner/banner.d.ts.map +1 -1
  121. package/dist/src/components/checkbox/checkbox.d.ts.map +1 -1
  122. package/dist/src/components/combobox/combobox.d.ts +4 -1
  123. package/dist/src/components/combobox/combobox.d.ts.map +1 -1
  124. package/dist/src/components/dropdown/dropdown.d.ts +26 -16
  125. package/dist/src/components/dropdown/dropdown.d.ts.map +1 -1
  126. package/dist/src/components/flow/connectors.d.ts +3 -1
  127. package/dist/src/components/flow/connectors.d.ts.map +1 -1
  128. package/dist/src/components/flow/diagram.d.ts +1 -0
  129. package/dist/src/components/flow/diagram.d.ts.map +1 -1
  130. package/dist/src/components/flow/node.d.ts +5 -1
  131. package/dist/src/components/flow/node.d.ts.map +1 -1
  132. package/dist/src/components/flow/parallel.d.ts +10 -2
  133. package/dist/src/components/flow/parallel.d.ts.map +1 -1
  134. package/dist/src/components/pagination/pagination.d.ts +134 -13
  135. package/dist/src/components/pagination/pagination.d.ts.map +1 -1
  136. package/dist/src/components/popover/popover.d.ts +7 -1
  137. package/dist/src/components/popover/popover.d.ts.map +1 -1
  138. package/dist/src/components/toast/toast.d.ts +4 -4
  139. package/dist/src/components/toast/toast.d.ts.map +1 -1
  140. package/dist/src/components/tooltip/tooltip.d.ts +1 -1
  141. package/dist/src/components/tooltip/tooltip.d.ts.map +1 -1
  142. package/dist/src/primitives/csp-provider.d.ts +13 -0
  143. package/dist/src/primitives/csp-provider.d.ts.map +1 -0
  144. package/dist/src/primitives/drawer.d.ts +13 -0
  145. package/dist/src/primitives/drawer.d.ts.map +1 -0
  146. package/dist/src/primitives/index.d.ts +2 -0
  147. package/dist/src/primitives/index.d.ts.map +1 -1
  148. package/dist/styles/kumo-standalone.css +1 -1
  149. package/dist/{switch-CmsZ4z-g.js → switch-DrbaX2iC.js} +15 -15
  150. package/dist/{switch-CmsZ4z-g.js.map → switch-DrbaX2iC.js.map} +1 -1
  151. package/dist/{table-Dc0AGcLV.js → table-CH9KC36S.js} +2 -2
  152. package/dist/{table-Dc0AGcLV.js.map → table-CH9KC36S.js.map} +1 -1
  153. package/dist/{tabs-BpD1iUiz.js → tabs-B-Fxc6Zo.js} +2 -2
  154. package/dist/{tabs-BpD1iUiz.js.map → tabs-B-Fxc6Zo.js.map} +1 -1
  155. package/dist/{toast-BrR0pjLE.js → toast-DUYp3EtH.js} +6 -6
  156. package/dist/{toast-BrR0pjLE.js.map → toast-DUYp3EtH.js.map} +1 -1
  157. package/dist/{tooltip-daVJYtXY.js → tooltip-D-KwZQDV.js} +2 -2
  158. package/dist/{tooltip-daVJYtXY.js.map → tooltip-D-KwZQDV.js.map} +1 -1
  159. package/dist/vendor-base-ui-Bsg5ebHI.js +22806 -0
  160. package/dist/vendor-base-ui-Bsg5ebHI.js.map +1 -0
  161. package/dist/{vendor-utils-DD8jNJwD.js → vendor-utils-DKXfkDYu.js} +100 -101
  162. package/dist/vendor-utils-DKXfkDYu.js.map +1 -0
  163. package/package.json +10 -2
  164. package/dist/banner-4fkH6Sbt.js +0 -51
  165. package/dist/banner-4fkH6Sbt.js.map +0 -1
  166. package/dist/checkbox-Dt8iSNOg.js.map +0 -1
  167. package/dist/combobox-BIC-YZ2L.js.map +0 -1
  168. package/dist/dropdown-BquiYKKC.js +0 -263
  169. package/dist/dropdown-BquiYKKC.js.map +0 -1
  170. package/dist/pagination-BN80iKY6.js +0 -100
  171. package/dist/pagination-BN80iKY6.js.map +0 -1
  172. package/dist/vendor-base-ui-9w7J6BvW.js +0 -20448
  173. package/dist/vendor-base-ui-9w7J6BvW.js.map +0 -1
  174. package/dist/vendor-utils-DD8jNJwD.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,70 @@
1
1
  # @cloudflare/kumo
2
2
 
3
+ ## 1.9.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 23865db: feat(dropdown): add LinkItem for navigation links and fix icon rendering
8
+
9
+ **New Features:**
10
+ - Add `DropdownMenu.LinkItem` for navigation links (semantic `<a>` element with proper menu item behavior)
11
+ - Upgrade `@base-ui/react` from 1.0.0 to 1.2.0
12
+ - Add new primitives: `csp-provider` and `drawer` from Base UI 1.2.0
13
+
14
+ **Bug Fixes:**
15
+ - Fix `icon` prop not rendering on `DropdownMenu.Item` when no `href` is provided
16
+
17
+ **Deprecations:**
18
+ - `href` prop on `DropdownMenu.Item` is deprecated. Use `DropdownMenu.LinkItem` instead.
19
+
20
+ **Migration:**
21
+
22
+ ```tsx
23
+ // Before (deprecated)
24
+ <DropdownMenu.Item href="https://example.com">Link</DropdownMenu.Item>
25
+
26
+ // After (recommended)
27
+ <DropdownMenu.LinkItem href="https://example.com" target="_blank">
28
+ Link
29
+ </DropdownMenu.LinkItem>
30
+ ```
31
+
32
+ `DropdownMenu.LinkItem` gives you full control over link attributes (`target`, `rel`, etc.) without the component making assumptions about your intent.
33
+
34
+ - 68c2f0d: Add `positionMethod` prop to `Popover.Content` to control CSS positioning strategy. Use `"fixed"` when the popover needs to escape stacking contexts (e.g., inside sticky headers). Defaults to `"absolute"`.
35
+
36
+ ### Patch Changes
37
+
38
+ - 89cb5ec: Improve Flow diagram components with disabled node support and better connector rendering:
39
+ - Add `disabled` prop to FlowNode for greying out connectors
40
+ - Add `align` prop to FlowParallelNode for start/end alignment
41
+ - Improve connector path rendering with smarter junction detection
42
+ - Fix panning behavior to not interfere with node interactions
43
+
44
+ ## 1.8.0
45
+
46
+ ### Minor Changes
47
+
48
+ - cf4ff38: Refactor Banner component with softer styling and i18n-friendly props
49
+ - Added `title` and `description` props for structured content with i18n support
50
+ - Softened visual appearance: reduced background opacity (20% -> 10%), muted border colors
51
+ - Text now uses `text-kumo-default` for readability, with colored icons for variant indication
52
+ - Added `iconClasses` to variant config for per-variant icon coloring
53
+ - Component now uses `forwardRef` and sets `displayName` per conventions
54
+ - Deprecated `children` and `text` props in favor of `title`/`description`
55
+ - Legacy `children` prop still works for backwards compatibility
56
+
57
+ ### Patch Changes
58
+
59
+ - 0ca3b05: Fix Checkbox ring color to use `ring-kumo-contrast` when checked or indeterminate
60
+ - f69df6d: Fix Combobox dropdown scrolling regression and improve scroll behavior.
61
+
62
+ **Bug fix:** The `overflow-hidden` class was accidentally re-introduced during a semantic color token migration, which overrode `overflow-y-auto` and caused dropdown content to be clipped instead of scrollable.
63
+
64
+ **Improvement:** Restructured Combobox.Content to use flexbox layout so that when using `Combobox.Input` inside the dropdown (searchable popup pattern), the input stays fixed at the top while only the list scrolls. Previously, the entire popup content would scroll together.
65
+
66
+ **Scrollbar fix:** Moved horizontal padding from the popup container to individual child components, so the scrollbar renders flush with the popup edge instead of being inset (which was clipping the checkmark indicators).
67
+
3
68
  ## 1.7.0
4
69
 
5
70
  ### Minor Changes
@@ -70,14 +70,24 @@
70
70
  "Banner": {
71
71
  "name": "Banner",
72
72
  "type": "component",
73
- "description": "Full-width message bar for informational, warning, or error notices.",
73
+ "description": "Full-width message bar for informational, warning, or error notices. Supports structured title/description for i18n, or simple children for basic usage.",
74
74
  "importPath": "@cloudflare/kumo",
75
75
  "category": "Feedback",
76
76
  "props": {
77
77
  "icon": {
78
78
  "type": "ReactNode",
79
79
  "optional": true,
80
- "description": "Icon element rendered before the banner text (e.g. from `@phosphor-icons/react`)."
80
+ "description": "Icon element rendered before the banner content (e.g. from `@phosphor-icons/react`)."
81
+ },
82
+ "title": {
83
+ "type": "string",
84
+ "optional": true,
85
+ "description": "Primary heading text for the banner. Use for i18n string injection."
86
+ },
87
+ "description": {
88
+ "type": "ReactNode",
89
+ "optional": true,
90
+ "description": "Secondary description text displayed below the title. Use for i18n string injection."
81
91
  },
82
92
  "text": {
83
93
  "type": "string",
@@ -85,8 +95,7 @@
85
95
  },
86
96
  "children": {
87
97
  "type": "ReactNode",
88
- "optional": true,
89
- "description": "Banner message content. Accepts strings or custom React elements."
98
+ "optional": true
90
99
  },
91
100
  "variant": {
92
101
  "type": "enum",
@@ -103,9 +112,9 @@
103
112
  "error": "Error banner for critical issues"
104
113
  },
105
114
  "classes": {
106
- "default": "bg-kumo-info/20 border-kumo-info text-kumo-link selection:bg-kumo-info-tint",
107
- "alert": "bg-kumo-warning/20 border-kumo-warning text-kumo-warning selection:bg-kumo-warning-tint",
108
- "error": "bg-kumo-danger/20 border-kumo-danger text-kumo-danger selection:bg-kumo-danger-tint"
115
+ "default": "bg-kumo-info/10 border-kumo-info/30 text-kumo-info selection:bg-kumo-info-tint",
116
+ "alert": "bg-kumo-warning/10 border-kumo-warning/30 text-kumo-warning selection:bg-kumo-warning-tint",
117
+ "error": "bg-kumo-danger/10 border-kumo-danger/30 text-kumo-danger selection:bg-kumo-danger-tint"
109
118
  },
110
119
  "default": "default"
111
120
  },
@@ -116,12 +125,14 @@
116
125
  }
117
126
  },
118
127
  "examples": [
119
- "<div className=\"space-y-3\">\n <Banner>This is an informational banner.</Banner>\n <Banner variant=\"alert\">This is an alert banner.</Banner>\n <Banner variant=\"error\">This is an error banner.</Banner>\n </div>",
120
- "<Banner>This is an informational banner.</Banner>",
121
- "<Banner variant=\"alert\">Your session will expire soon.</Banner>",
122
- "<Banner variant=\"error\">We couldn't save your changes.</Banner>",
123
- "<Banner icon={<WarningCircle />} variant=\"alert\">\n Review your billing information.\n </Banner>",
124
- "<Banner icon={<Info />}>\n <Text DANGEROUS_className=\"text-inherit\">\n This banner supports <strong>custom content</strong> with Text.\n </Text>\n </Banner>"
128
+ "<div className=\"space-y-3\">\n <Banner\n icon={<Info weight=\"fill\" />}\n title=\"Update available\"\n description=\"A new version is ready to install.\"\n />\n <Banner\n icon={<Warning weight=\"fill\" />}\n variant=\"alert\"\n title=\"Session expiring\"\n description=\"Your session will expire in 5 minutes.\"\n />\n <Banner\n icon={<WarningCircle weight=\"fill\" />}\n variant=\"error\"\n title=\"Save failed\"\n description=\"We couldn't save your changes. Please try again.\"\n />\n </div>",
129
+ "<Banner\n icon={<Info weight=\"fill\" />}\n title=\"Update available\"\n description=\"A new version is ready to install.\"\n />",
130
+ "<Banner\n icon={<Warning weight=\"fill\" />}\n variant=\"alert\"\n title=\"Session expiring\"\n description=\"Your session will expire in 5 minutes.\"\n />",
131
+ "<Banner\n icon={<WarningCircle weight=\"fill\" />}\n variant=\"error\"\n title=\"Save failed\"\n description=\"We couldn't save your changes. Please try again.\"\n />",
132
+ "<Banner\n icon={<Info weight=\"fill\" />}\n title=\"Your changes have been saved.\"\n />",
133
+ "<Banner\n icon={<Warning weight=\"fill\" />}\n variant=\"alert\"\n title=\"Review required\"\n description=\"Please review your billing information before proceeding.\"\n />",
134
+ "<Banner\n icon={<Info weight=\"fill\" />}\n title=\"Custom content supported\"\n description={\n <Text DANGEROUS_className=\"text-inherit\">\n This banner supports <strong>custom content</strong> with Text.\n </Text>\n }\n />",
135
+ "<Banner icon={<Info />}>This is a simple banner using children.</Banner>"
125
136
  ],
126
137
  "colors": [
127
138
  "bg-kumo-danger",
@@ -134,10 +145,10 @@
134
145
  "border-kumo-info",
135
146
  "border-kumo-warning",
136
147
  "text-kumo-danger",
137
- "text-kumo-link",
148
+ "text-kumo-info",
138
149
  "text-kumo-warning"
139
150
  ],
140
- "baseStyles": "flex w-full items-center gap-2 rounded-lg border px-4 py-1.5 text-base"
151
+ "baseStyles": "flex w-full items-start gap-3 rounded-lg border px-4 py-3 text-base"
141
152
  },
142
153
  "Breadcrumbs": {
143
154
  "name": "Breadcrumbs",
@@ -509,6 +520,7 @@
509
520
  "bg-kumo-base",
510
521
  "bg-kumo-contrast",
511
522
  "border-kumo-line",
523
+ "ring-kumo-contrast",
512
524
  "ring-kumo-danger",
513
525
  "ring-kumo-line",
514
526
  "ring-kumo-ring",
@@ -2182,19 +2194,8 @@
2182
2194
  },
2183
2195
  "List": {
2184
2196
  "name": "List",
2185
- "description": "A container for combobox items. Supports render prop for custom item rendering.",
2186
- "props": {
2187
- "children": {
2188
- "type": "ReactNode | ((item: T, index: number) => ReactNode)",
2189
- "description": "Items to render, or a function that receives each item and returns a node"
2190
- }
2191
- },
2192
- "isPassThrough": true,
2193
- "baseComponent": "ComboboxBase.List",
2194
- "usageExamples": [
2195
- "<Combobox.List>\n {(item) => <Combobox.Item value={item}>{item.label}</Combobox.Item>}\n</Combobox.List>"
2196
- ],
2197
- "renderElement": "<div>"
2197
+ "description": "List sub-component",
2198
+ "props": {}
2198
2199
  },
2199
2200
  "Collection": {
2200
2201
  "name": "Collection",
@@ -2557,7 +2558,7 @@
2557
2558
  "DropdownMenu": {
2558
2559
  "name": "DropdownMenu",
2559
2560
  "type": "component",
2560
- "description": "DropdownMenu — accessible dropdown menu anchored to a trigger. Compound component: `DropdownMenu` (Root), `.Trigger`, `.Content`, `.Item`, `.CheckboxItem`, `.RadioGroup`, `.RadioItem`, `.RadioItemIndicator`, `.Sub`, `.SubTrigger`, `.SubContent`, `.Label`, `.Separator`, `.Shortcut`, `.Group`. Built on `@base-ui/react/menu`.",
2561
+ "description": "DropdownMenu — accessible dropdown menu anchored to a trigger. Compound component: `DropdownMenu` (Root), `.Trigger`, `.Content`, `.Item`, `.LinkItem`, `.CheckboxItem`, `.RadioGroup`, `.RadioItem`, `.RadioItemIndicator`, `.Sub`, `.SubTrigger`, `.SubContent`, `.Label`, `.Separator`, `.Shortcut`, `.Group`. Built on `@base-ui/react/menu`.",
2561
2562
  "importPath": "@cloudflare/kumo",
2562
2563
  "category": "Overlay",
2563
2564
  "props": {
@@ -2630,6 +2631,11 @@
2630
2631
  "description": "Item sub-component",
2631
2632
  "props": {}
2632
2633
  },
2634
+ "LinkItem": {
2635
+ "name": "LinkItem",
2636
+ "description": "LinkItem sub-component",
2637
+ "props": {}
2638
+ },
2633
2639
  "CheckboxItem": {
2634
2640
  "name": "CheckboxItem",
2635
2641
  "description": "CheckboxItem sub-component",
@@ -3450,23 +3456,10 @@
3450
3456
  "Pagination": {
3451
3457
  "name": "Pagination",
3452
3458
  "type": "component",
3453
- "description": "Page navigation controls with page count display.",
3459
+ "description": "Pagination component",
3454
3460
  "importPath": "@cloudflare/kumo",
3455
3461
  "category": "Navigation",
3456
3462
  "props": {
3457
- "controls": {
3458
- "type": "enum",
3459
- "optional": true,
3460
- "values": [
3461
- "full",
3462
- "simple"
3463
- ],
3464
- "descriptions": {
3465
- "full": "Full pagination controls with first, previous, page input, next, and last buttons",
3466
- "simple": "Simple pagination controls with only previous and next buttons"
3467
- },
3468
- "default": "full"
3469
- },
3470
3463
  "setPage": {
3471
3464
  "type": "(page: number) => void",
3472
3465
  "required": true,
@@ -3487,10 +3480,32 @@
3487
3480
  "optional": true,
3488
3481
  "description": "Total number of items across all pages."
3489
3482
  },
3483
+ "className": {
3484
+ "type": "string",
3485
+ "optional": true,
3486
+ "description": "Additional CSS classes for the container"
3487
+ },
3488
+ "children": {
3489
+ "type": "ReactNode",
3490
+ "optional": true,
3491
+ "description": "Compound component children for custom layouts. Use Pagination.Info, Pagination.PageSize, Pagination.Controls, and Pagination.Separator."
3492
+ },
3493
+ "controls": {
3494
+ "type": "enum",
3495
+ "optional": true,
3496
+ "values": [
3497
+ "full",
3498
+ "simple"
3499
+ ],
3500
+ "descriptions": {
3501
+ "full": "Full pagination controls with first, previous, page input, next, and last buttons",
3502
+ "simple": "Simple pagination controls with only previous and next buttons"
3503
+ },
3504
+ "default": "full"
3505
+ },
3490
3506
  "text": {
3491
3507
  "type": "object",
3492
- "optional": true,
3493
- "description": "Method to provide custom pagination text"
3508
+ "optional": true
3494
3509
  }
3495
3510
  },
3496
3511
  "examples": [
@@ -3499,11 +3514,86 @@
3499
3514
  "<Pagination\n page={page}\n setPage={setPage}\n perPage={10}\n totalCount={100}\n controls=\"full\"\n />",
3500
3515
  "<Pagination page={page} setPage={setPage} perPage={10} totalCount={100} />",
3501
3516
  "<Pagination page={page} setPage={setPage} perPage={25} totalCount={1250} />",
3502
- "<Pagination\n text={({ perPage }) => `Page ${page} - showing ${perPage} per page`}\n page={page}\n setPage={setPage}\n perPage={25}\n totalCount={100}\n />"
3517
+ "<Pagination\n text={({ perPage }: { perPage?: number }) =>\n `Page ${page} - showing ${perPage} per page`\n }\n page={page}\n setPage={setPage}\n perPage={25}\n totalCount={100}\n />",
3518
+ "<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>",
3519
+ "<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>",
3520
+ "<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>",
3521
+ "<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>"
3503
3522
  ],
3504
3523
  "colors": [
3524
+ "border-kumo-line",
3505
3525
  "text-kumo-strong"
3506
3526
  ],
3527
+ "subComponents": {
3528
+ "Info": {
3529
+ "name": "Info",
3530
+ "description": "Info sub-component",
3531
+ "props": {
3532
+ "children": {
3533
+ "type": "(props: {",
3534
+ "optional": true
3535
+ },
3536
+ "page": {
3537
+ "type": "number",
3538
+ "required": true
3539
+ },
3540
+ "perPage": {
3541
+ "type": "number",
3542
+ "optional": true
3543
+ },
3544
+ "totalCount": {
3545
+ "type": "number",
3546
+ "optional": true
3547
+ },
3548
+ "pageShowingRange": {
3549
+ "type": "string",
3550
+ "required": true
3551
+ }
3552
+ }
3553
+ },
3554
+ "PageSize": {
3555
+ "name": "PageSize",
3556
+ "description": "PageSize sub-component",
3557
+ "props": {
3558
+ "value": {
3559
+ "type": "number",
3560
+ "required": true
3561
+ },
3562
+ "options": {
3563
+ "type": "number[]",
3564
+ "optional": true
3565
+ },
3566
+ "label": {
3567
+ "type": "ReactNode",
3568
+ "optional": true
3569
+ },
3570
+ "className": {
3571
+ "type": "string",
3572
+ "optional": true
3573
+ }
3574
+ }
3575
+ },
3576
+ "Controls": {
3577
+ "name": "Controls",
3578
+ "description": "Controls sub-component",
3579
+ "props": {
3580
+ "className": {
3581
+ "type": "string",
3582
+ "optional": true
3583
+ }
3584
+ }
3585
+ },
3586
+ "Separator": {
3587
+ "name": "Separator",
3588
+ "description": "Separator sub-component",
3589
+ "props": {
3590
+ "className": {
3591
+ "type": "string",
3592
+ "optional": true
3593
+ }
3594
+ }
3595
+ }
3596
+ },
3507
3597
  "styling": {
3508
3598
  "layout": {
3509
3599
  "height": 36,
@@ -4564,43 +4654,29 @@
4564
4654
  "importPath": "@cloudflare/kumo",
4565
4655
  "category": "Overlay",
4566
4656
  "props": {
4567
- "align": {
4568
- "type": "enum",
4569
- "optional": true,
4570
- "description": "Alignment on the axis perpendicular to `side`.\n- `\"start\"` — Align to the start edge\n- `\"center\"` — Center-aligned\n- `\"end\"` — Align to the end edge",
4571
- "values": [
4572
- "start",
4573
- "center",
4574
- "end"
4575
- ]
4576
- },
4577
- "asChild": {
4578
- "type": "boolean",
4579
- "optional": true,
4580
- "description": "When `true`, the trigger wraps the child element instead of adding a wrapper."
4581
- },
4582
- "className": {
4583
- "type": "string",
4584
- "optional": true,
4585
- "description": "Additional CSS classes merged via `cn()`."
4586
- },
4587
4657
  "side": {
4588
4658
  "type": "enum",
4589
- "optional": true,
4590
- "description": "Preferred side of the trigger to render the tooltip.\n- `\"top\"` — Tooltip appears above the trigger\n- `\"bottom\"` — Tooltip appears below the trigger\n- `\"left\"` — Tooltip appears to the left of the trigger\n- `\"right\"` — Tooltip appears to the right of the trigger",
4591
4659
  "values": [
4592
4660
  "top",
4593
4661
  "bottom",
4594
4662
  "left",
4595
4663
  "right"
4596
4664
  ],
4665
+ "default": "top",
4597
4666
  "descriptions": {
4598
4667
  "top": "Tooltip appears above the trigger",
4599
4668
  "bottom": "Tooltip appears below the trigger",
4600
4669
  "left": "Tooltip appears to the left of the trigger",
4601
4670
  "right": "Tooltip appears to the right of the trigger"
4602
- },
4603
- "default": "top"
4671
+ }
4672
+ },
4673
+ "className": {
4674
+ "type": "string",
4675
+ "description": "Additional CSS classes"
4676
+ },
4677
+ "children": {
4678
+ "type": "ReactNode",
4679
+ "description": "Child elements"
4604
4680
  },
4605
4681
  "content": {
4606
4682
  "type": "ReactNode",