@cloudflare/kumo 1.15.0 → 1.16.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 (158) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/ai/component-registry.json +317 -13
  3. package/ai/component-registry.md +507 -26
  4. package/ai/schemas.ts +18 -2
  5. package/dist/.build-complete +1 -1
  6. package/dist/ai/schemas.d.ts +57 -2
  7. package/dist/ai/schemas.d.ts.map +1 -1
  8. package/dist/ai/schemas.js +366 -341
  9. package/dist/ai/schemas.js.map +1 -1
  10. package/dist/chunks/{Legend-mkh1v83sz972e29d.js → Legend-bov5dqf08wemc2qj.js} +112 -100
  11. package/dist/chunks/Legend-bov5dqf08wemc2qj.js.map +1 -0
  12. package/dist/chunks/{checkbox-bvzuggmadtqawis4.js → checkbox-lawmt1894wr6rpgi.js} +3 -3
  13. package/dist/chunks/{checkbox-bvzuggmadtqawis4.js.map → checkbox-lawmt1894wr6rpgi.js.map} +1 -1
  14. package/dist/chunks/{clipboard-text-mwcknzn75qdvigrd.js → clipboard-text-ohx8kkpxisz382rj.js} +3 -3
  15. package/dist/chunks/{clipboard-text-mwcknzn75qdvigrd.js.map → clipboard-text-ohx8kkpxisz382rj.js.map} +1 -1
  16. package/dist/chunks/{combobox-ndbaroqh1c0u49ye.js → combobox-ft0u7rfaxawk0r0c.js} +4 -4
  17. package/dist/chunks/{combobox-ndbaroqh1c0u49ye.js.map → combobox-ft0u7rfaxawk0r0c.js.map} +1 -1
  18. package/dist/chunks/{command-palette-ejoszjfivybu9yi5.js → command-palette-b31nq4wk7o7gx4sa.js} +2 -2
  19. package/dist/chunks/{command-palette-ejoszjfivybu9yi5.js.map → command-palette-b31nq4wk7o7gx4sa.js.map} +1 -1
  20. package/dist/chunks/{dialog-gkmecnx48ge38jrr.js → dialog-l5tmwxrzp9g83jmw.js} +2 -2
  21. package/dist/chunks/{dialog-gkmecnx48ge38jrr.js.map → dialog-l5tmwxrzp9g83jmw.js.map} +1 -1
  22. package/dist/chunks/{dropdown-i8n7nv3cvkvb1x3e.js → dropdown-icy3xatdwhzr4une.js} +2 -2
  23. package/dist/chunks/{dropdown-i8n7nv3cvkvb1x3e.js.map → dropdown-icy3xatdwhzr4une.js.map} +1 -1
  24. package/dist/chunks/{field-lweivfadxgpqhuqi.js → field-csje72m7j9403fj5.js} +3 -3
  25. package/dist/chunks/{field-lweivfadxgpqhuqi.js.map → field-csje72m7j9403fj5.js.map} +1 -1
  26. package/dist/chunks/hcl-hcu7d6ja6t540ijn.js +8 -0
  27. package/dist/chunks/hcl-hcu7d6ja6t540ijn.js.map +1 -0
  28. package/dist/chunks/{input-area-obli4ufvu40bfpgp.js → input-area-jko15sbc6zeage3l.js} +4 -4
  29. package/dist/chunks/{input-area-obli4ufvu40bfpgp.js.map → input-area-jko15sbc6zeage3l.js.map} +1 -1
  30. package/dist/chunks/{input-ko2dne1givlxq7sz.js → input-c8jmidy7gdqfiky1.js} +3 -3
  31. package/dist/chunks/{input-ko2dne1givlxq7sz.js.map → input-c8jmidy7gdqfiky1.js.map} +1 -1
  32. package/dist/chunks/{input-group-dwtsd04lzf2bcsdo.js → input-group-cjsy8kh4vf9312xl.js} +2 -2
  33. package/dist/chunks/{input-group-dwtsd04lzf2bcsdo.js.map → input-group-cjsy8kh4vf9312xl.js.map} +1 -1
  34. package/dist/chunks/{label-kjahhybc191quieo.js → label-i46xnnzdh9bsxk6a.js} +2 -2
  35. package/dist/chunks/{label-kjahhybc191quieo.js.map → label-i46xnnzdh9bsxk6a.js.map} +1 -1
  36. package/dist/chunks/{link-lpzl5s47pmobk361.js → link-o7yfj4kwgl19fklp.js} +2 -2
  37. package/dist/chunks/{link-lpzl5s47pmobk361.js.map → link-o7yfj4kwgl19fklp.js.map} +1 -1
  38. package/dist/chunks/{menubar-ifxxdoa35zz79z1q.js → menubar-g1wqqjuyyfvsim83.js} +2 -2
  39. package/dist/chunks/{menubar-ifxxdoa35zz79z1q.js.map → menubar-g1wqqjuyyfvsim83.js.map} +1 -1
  40. package/dist/chunks/{meter-fbtqfg0okpwmaiju.js → meter-cqkrg5axjenbsuue.js} +2 -2
  41. package/dist/chunks/{meter-fbtqfg0okpwmaiju.js.map → meter-cqkrg5axjenbsuue.js.map} +1 -1
  42. package/dist/chunks/{pagination-eo0gzzm7v5w8niqe.js → pagination-e3dp8bd80s35f7sd.js} +3 -3
  43. package/dist/chunks/{pagination-eo0gzzm7v5w8niqe.js.map → pagination-e3dp8bd80s35f7sd.js.map} +1 -1
  44. package/dist/chunks/{popover-dd7hi5ajeoq9od1i.js → popover-jurf834u2uywluux.js} +2 -2
  45. package/dist/chunks/{popover-dd7hi5ajeoq9od1i.js.map → popover-jurf834u2uywluux.js.map} +1 -1
  46. package/dist/chunks/{radio-oi9iw7ls1t04j377.js → radio-l9dzm6sohcvvrsdc.js} +2 -2
  47. package/dist/chunks/{radio-oi9iw7ls1t04j377.js.map → radio-l9dzm6sohcvvrsdc.js.map} +1 -1
  48. package/dist/chunks/{select-0m0xklfwdlx8dwba.js → select-hnt87e3cfos48qql.js} +3 -3
  49. package/dist/chunks/{select-0m0xklfwdlx8dwba.js.map → select-hnt87e3cfos48qql.js.map} +1 -1
  50. package/dist/chunks/{sensitive-input-rjpykxn2llh0thx1.js → sensitive-input-lvtccf3iqc06lj7b.js} +4 -4
  51. package/dist/chunks/{sensitive-input-rjpykxn2llh0thx1.js.map → sensitive-input-lvtccf3iqc06lj7b.js.map} +1 -1
  52. package/dist/chunks/sidebar-l6rk9o5qf8k5vth1.js +875 -0
  53. package/dist/chunks/sidebar-l6rk9o5qf8k5vth1.js.map +1 -0
  54. package/dist/chunks/{switch-lv4mrrkfl5uc99xo.js → switch-fukrbip86khvqjn7.js} +3 -3
  55. package/dist/chunks/{switch-lv4mrrkfl5uc99xo.js.map → switch-fukrbip86khvqjn7.js.map} +1 -1
  56. package/dist/chunks/{table-fh7jmfip27vdapxm.js → table-orfgzwvxh8yr90dk.js} +2 -2
  57. package/dist/chunks/{table-fh7jmfip27vdapxm.js.map → table-orfgzwvxh8yr90dk.js.map} +1 -1
  58. package/dist/chunks/{tabs-hy6oa7xtf96d9mxt.js → tabs-n0t7iro7wr0pzgk2.js} +2 -2
  59. package/dist/chunks/{tabs-hy6oa7xtf96d9mxt.js.map → tabs-n0t7iro7wr0pzgk2.js.map} +1 -1
  60. package/dist/chunks/{toast-kswfqmjysxcrwij3.js → toast-r9ajsces7xp8l85w.js} +8 -8
  61. package/dist/chunks/{toast-kswfqmjysxcrwij3.js.map → toast-r9ajsces7xp8l85w.js.map} +1 -1
  62. package/dist/chunks/{tooltip-k68wcv9mrigb7rcb.js → tooltip-hnc71tg4gz2gpcvc.js} +2 -2
  63. package/dist/chunks/{tooltip-k68wcv9mrigb7rcb.js.map → tooltip-hnc71tg4gz2gpcvc.js.map} +1 -1
  64. package/dist/chunks/{vendor-base-ui-cpvkrhz4zgw9nw2b.js → vendor-base-ui-ccr5l0ynrievzzv3.js} +564 -563
  65. package/dist/chunks/{vendor-base-ui-cpvkrhz4zgw9nw2b.js.map → vendor-base-ui-ccr5l0ynrievzzv3.js.map} +1 -1
  66. package/dist/code/server.js +2 -1
  67. package/dist/code/server.js.map +1 -1
  68. package/dist/code.js +14 -13
  69. package/dist/code.js.map +1 -1
  70. package/dist/components/chart.js +1 -1
  71. package/dist/components/checkbox.js +1 -1
  72. package/dist/components/clipboard-text.js +1 -1
  73. package/dist/components/combobox.js +1 -1
  74. package/dist/components/command-palette.js +1 -1
  75. package/dist/components/dialog.js +1 -1
  76. package/dist/components/dropdown.js +1 -1
  77. package/dist/components/field.js +1 -1
  78. package/dist/components/flow.js +2138 -2087
  79. package/dist/components/flow.js.map +1 -1
  80. package/dist/components/input.js +3 -3
  81. package/dist/components/label.js +1 -1
  82. package/dist/components/link.js +1 -1
  83. package/dist/components/menubar.js +1 -1
  84. package/dist/components/meter.js +1 -1
  85. package/dist/components/pagination.js +1 -1
  86. package/dist/components/popover.js +1 -1
  87. package/dist/components/radio.js +1 -1
  88. package/dist/components/select.js +1 -1
  89. package/dist/components/sensitive-input.js +1 -1
  90. package/dist/components/sidebar.js +35 -0
  91. package/dist/components/sidebar.js.map +1 -0
  92. package/dist/components/switch.js +1 -1
  93. package/dist/components/table.js +1 -1
  94. package/dist/components/tabs.js +1 -1
  95. package/dist/components/toast.js +2 -2
  96. package/dist/components/tooltip.js +1 -1
  97. package/dist/index.js +194 -163
  98. package/dist/index.js.map +1 -1
  99. package/dist/primitives/accordion.js +1 -1
  100. package/dist/primitives/alert-dialog.js +1 -1
  101. package/dist/primitives/autocomplete.js +1 -1
  102. package/dist/primitives/avatar.js +1 -1
  103. package/dist/primitives/button.js +1 -1
  104. package/dist/primitives/checkbox-group.js +1 -1
  105. package/dist/primitives/checkbox.js +1 -1
  106. package/dist/primitives/collapsible.js +1 -1
  107. package/dist/primitives/combobox.js +1 -1
  108. package/dist/primitives/context-menu.js +1 -1
  109. package/dist/primitives/csp-provider.js +1 -1
  110. package/dist/primitives/dialog.js +1 -1
  111. package/dist/primitives/direction-provider.js +1 -1
  112. package/dist/primitives/drawer.js +1 -1
  113. package/dist/primitives/field.js +1 -1
  114. package/dist/primitives/fieldset.js +1 -1
  115. package/dist/primitives/form.js +1 -1
  116. package/dist/primitives/input.js +1 -1
  117. package/dist/primitives/menu.js +1 -1
  118. package/dist/primitives/menubar.js +1 -1
  119. package/dist/primitives/meter.js +1 -1
  120. package/dist/primitives/navigation-menu.js +1 -1
  121. package/dist/primitives/number-field.js +1 -1
  122. package/dist/primitives/popover.js +1 -1
  123. package/dist/primitives/preview-card.js +1 -1
  124. package/dist/primitives/progress.js +1 -1
  125. package/dist/primitives/radio-group.js +1 -1
  126. package/dist/primitives/radio.js +1 -1
  127. package/dist/primitives/scroll-area.js +1 -1
  128. package/dist/primitives/select.js +1 -1
  129. package/dist/primitives/separator.js +1 -1
  130. package/dist/primitives/slider.js +1 -1
  131. package/dist/primitives/switch.js +1 -1
  132. package/dist/primitives/tabs.js +1 -1
  133. package/dist/primitives/toast.js +1 -1
  134. package/dist/primitives/toggle-group.js +1 -1
  135. package/dist/primitives/toggle.js +1 -1
  136. package/dist/primitives/toolbar.js +1 -1
  137. package/dist/primitives/tooltip.js +1 -1
  138. package/dist/primitives.js +1 -1
  139. package/dist/src/code/provider.d.ts.map +1 -1
  140. package/dist/src/code/server.d.ts.map +1 -1
  141. package/dist/src/code/types.d.ts +1 -1
  142. package/dist/src/code/types.d.ts.map +1 -1
  143. package/dist/src/components/chart/EChart.d.ts.map +1 -1
  144. package/dist/src/components/chart/TimeseriesChart.d.ts +11 -1
  145. package/dist/src/components/chart/TimeseriesChart.d.ts.map +1 -1
  146. package/dist/src/components/flow/diagram.d.ts.map +1 -1
  147. package/dist/src/components/flow/node.d.ts.map +1 -1
  148. package/dist/src/components/flow/parallel.d.ts.map +1 -1
  149. package/dist/src/components/sidebar/index.d.ts +2 -0
  150. package/dist/src/components/sidebar/index.d.ts.map +1 -0
  151. package/dist/src/components/sidebar/sidebar.d.ts +556 -0
  152. package/dist/src/components/sidebar/sidebar.d.ts.map +1 -0
  153. package/dist/src/index.d.ts +1 -0
  154. package/dist/src/index.d.ts.map +1 -1
  155. package/dist/styles/kumo-standalone.css +1 -1
  156. package/package.json +6 -2
  157. package/scripts/component-registry/index.ts +12 -0
  158. package/dist/chunks/Legend-mkh1v83sz972e29d.js.map +0 -1
@@ -0,0 +1,875 @@
1
+ "use client";
2
+ import { jsx as s, jsxs as E, Fragment as ye } from "react/jsx-runtime";
3
+ import ke, { forwardRef as u, useState as k, useCallback as D, useMemo as W, createContext as L, useContext as R, useRef as P, useEffect as Ne } from "react";
4
+ import { CaretRightIcon as F, MagnifyingGlassIcon as Ce, SidebarSimpleIcon as Me } from "@phosphor-icons/react";
5
+ import { c as i } from "./cn-ct4n7r74mh8y0f48.js";
6
+ import { u as X } from "./link-provider-mn2voeohon7cj9o4.js";
7
+ import { a as Ie, T as Re } from "./tooltip-hnc71tg4gz2gpcvc.js";
8
+ import { bn as U, bo as V, ap as Te, au as ze, av as _e, aw as Be, bp as De } from "./vendor-base-ui-ccr5l0ynrievzzv3.js";
9
+ const $e = {
10
+ variant: {
11
+ sidebar: {
12
+ classes: "",
13
+ description: "Standard sidebar with border separator"
14
+ },
15
+ floating: {
16
+ classes: "",
17
+ description: "Floating sidebar with shadow and rounded corners"
18
+ },
19
+ inset: {
20
+ classes: "",
21
+ description: "Inset sidebar within the content area"
22
+ }
23
+ },
24
+ collapsible: {
25
+ icon: {
26
+ classes: "",
27
+ description: "Collapses to show icons only"
28
+ },
29
+ offcanvas: {
30
+ classes: "",
31
+ description: "Slides off screen when collapsed"
32
+ },
33
+ none: {
34
+ classes: "",
35
+ description: "Cannot be collapsed"
36
+ }
37
+ },
38
+ side: {
39
+ left: {
40
+ classes: "",
41
+ description: "Left-aligned sidebar"
42
+ },
43
+ right: {
44
+ classes: "",
45
+ description: "Right-aligned sidebar"
46
+ }
47
+ }
48
+ }, G = {
49
+ variant: "sidebar",
50
+ collapsible: "icon",
51
+ side: "left"
52
+ }, Ye = {
53
+ width: {
54
+ expanded: "16rem",
55
+ icon: "3rem"
56
+ },
57
+ mobile: {
58
+ breakpoint: 768
59
+ }
60
+ }, j = "16rem", Ae = "3rem", Ee = 768;
61
+ function Le() {
62
+ const [t, a] = k(!1);
63
+ return Ne(() => {
64
+ const e = window.matchMedia(`(max-width: ${Ee - 1}px)`), n = () => a(e.matches);
65
+ return e.addEventListener("change", n), a(e.matches), () => e.removeEventListener("change", n);
66
+ }, []), t;
67
+ }
68
+ const K = L(null);
69
+ function T() {
70
+ const t = R(K);
71
+ if (!t)
72
+ throw new Error("useSidebar must be used within a Sidebar.Provider");
73
+ return t;
74
+ }
75
+ const Oe = 256, Pe = 200, Ge = 480;
76
+ function q({
77
+ defaultOpen: t = !0,
78
+ open: a,
79
+ onOpenChange: e,
80
+ variant: n = G.variant,
81
+ side: r = G.side,
82
+ collapsible: o = G.collapsible,
83
+ resizable: b = !1,
84
+ defaultWidth: m = Oe,
85
+ minWidth: d = Pe,
86
+ maxWidth: l = Ge,
87
+ onWidthChange: c,
88
+ children: x,
89
+ className: g,
90
+ style: h
91
+ }) {
92
+ const p = Le(), [f, S] = k(!1), [N, z] = k(m), [w, C] = k(!1), _ = D(
93
+ (v) => {
94
+ const I = Math.min(l, Math.max(d, v));
95
+ z(I), c?.(I);
96
+ },
97
+ [d, l, c]
98
+ ), [y, ve] = k(t), M = a ?? y, B = D(
99
+ (v) => {
100
+ const I = typeof v == "function" ? v(M) : v;
101
+ e?.(I), ve(I);
102
+ },
103
+ [e, M]
104
+ ), H = D(() => {
105
+ p ? S((v) => !v) : B((v) => !v);
106
+ }, [p, B]), O = M ? "expanded" : "collapsed", Se = b ? `${N}px` : j, we = W(
107
+ () => ({
108
+ state: O,
109
+ open: M,
110
+ setOpen: B,
111
+ openMobile: f,
112
+ setOpenMobile: S,
113
+ isMobile: p,
114
+ toggleSidebar: H,
115
+ variant: n,
116
+ side: r,
117
+ collapsible: o,
118
+ width: N,
119
+ resizable: b,
120
+ minWidth: d,
121
+ maxWidth: l,
122
+ isResizing: w,
123
+ setIsResizing: C,
124
+ setWidth: _
125
+ }),
126
+ [
127
+ O,
128
+ M,
129
+ B,
130
+ f,
131
+ S,
132
+ p,
133
+ H,
134
+ n,
135
+ r,
136
+ o,
137
+ N,
138
+ b,
139
+ d,
140
+ l,
141
+ w,
142
+ C,
143
+ _
144
+ ]
145
+ );
146
+ return /* @__PURE__ */ s(K.Provider, { value: we, children: /* @__PURE__ */ s(
147
+ "div",
148
+ {
149
+ "data-sidebar-wrapper": "",
150
+ "data-state": O,
151
+ "data-side": r,
152
+ style: {
153
+ "--sidebar-width": Se,
154
+ "--sidebar-width-icon": Ae,
155
+ ...h
156
+ },
157
+ className: i(
158
+ "group/sidebar-wrapper flex min-h-svh w-full",
159
+ "has-data-[variant=inset]:bg-kumo-recessed",
160
+ w && "select-none",
161
+ g
162
+ ),
163
+ children: x
164
+ }
165
+ ) });
166
+ }
167
+ q.displayName = "Sidebar.Provider";
168
+ const $ = u(
169
+ ({ className: t, children: a, ...e }, n) => {
170
+ const {
171
+ state: r,
172
+ isMobile: o,
173
+ openMobile: b,
174
+ setOpenMobile: m,
175
+ side: d,
176
+ variant: l,
177
+ collapsible: c,
178
+ isResizing: x,
179
+ resizable: g,
180
+ width: h
181
+ } = T();
182
+ if (c === "none")
183
+ return /* @__PURE__ */ s(
184
+ "aside",
185
+ {
186
+ ref: n,
187
+ "data-state": "expanded",
188
+ "data-side": d,
189
+ "data-variant": l,
190
+ "data-sidebar": "sidebar",
191
+ style: {
192
+ width: "var(--sidebar-width)",
193
+ minWidth: "var(--sidebar-width)",
194
+ maxWidth: "var(--sidebar-width)"
195
+ },
196
+ className: i(
197
+ "relative flex h-full shrink-0 grow-0 flex-col overflow-hidden bg-kumo-base text-kumo-default",
198
+ l === "sidebar" && (d === "left" ? "border-r border-kumo-line" : "border-l border-kumo-line"),
199
+ l === "floating" && "m-2 rounded-lg border border-kumo-line shadow-lg",
200
+ t
201
+ ),
202
+ ...e,
203
+ children: a
204
+ }
205
+ );
206
+ if (o)
207
+ return /* @__PURE__ */ s(Te, { open: b, onOpenChange: m, children: /* @__PURE__ */ E(ze, { children: [
208
+ /* @__PURE__ */ s(_e, { className: "fixed inset-0 z-50 bg-black/50 transition-opacity duration-200 data-[ending-style]:opacity-0 data-[starting-style]:opacity-0" }),
209
+ /* @__PURE__ */ s(
210
+ Be,
211
+ {
212
+ className: i(
213
+ "fixed inset-y-0 z-50 flex w-[--sidebar-width] flex-col bg-kumo-base p-0",
214
+ "duration-200 data-[ending-style]:opacity-0 data-[starting-style]:opacity-0",
215
+ d === "left" && "left-0 data-[ending-style]:-translate-x-full data-[starting-style]:-translate-x-full",
216
+ d === "right" && "right-0 data-[ending-style]:translate-x-full data-[starting-style]:translate-x-full"
217
+ ),
218
+ style: {
219
+ "--sidebar-width": j,
220
+ transitionProperty: "transform, opacity",
221
+ transitionTimingFunction: "var(--default-transition-timing-function)"
222
+ },
223
+ children: /* @__PURE__ */ s(
224
+ "div",
225
+ {
226
+ "data-sidebar": "sidebar",
227
+ "data-mobile": "true",
228
+ className: i(
229
+ "flex h-full w-full flex-col bg-kumo-base text-kumo-default",
230
+ t
231
+ ),
232
+ children: a
233
+ }
234
+ )
235
+ }
236
+ )
237
+ ] }) });
238
+ const p = c === "icon" ? "var(--sidebar-width-icon)" : "0px", f = g ? `${h}px` : "var(--sidebar-width)";
239
+ return /* @__PURE__ */ s(
240
+ "aside",
241
+ {
242
+ ref: n,
243
+ "data-state": r,
244
+ "data-side": d,
245
+ "data-variant": l,
246
+ "data-collapsible": c,
247
+ "data-sidebar": "sidebar",
248
+ style: { width: r === "expanded" ? f : p },
249
+ className: i(
250
+ "group/sidebar relative flex h-full shrink-0 grow-0 flex-col",
251
+ // overflow-hidden makes flex min-width resolve to 0 (per spec),
252
+ // preventing children from pushing the sidebar wider than its width
253
+ "min-w-0 overflow-hidden whitespace-nowrap",
254
+ "bg-kumo-base text-kumo-default",
255
+ // Transition width — matches production SidebarNav curve exactly
256
+ "transition-[width] duration-250 ease-[cubic-bezier(0.77,0,0.175,1)] will-change-[width]",
257
+ "motion-reduce:transition-none",
258
+ // Disable transition during resize drag
259
+ x && "transition-none!",
260
+ l === "sidebar" && (d === "left" ? "border-r border-kumo-line" : "border-l border-kumo-line"),
261
+ l === "floating" && "m-2 rounded-lg border border-kumo-line shadow-lg",
262
+ t
263
+ ),
264
+ ...e,
265
+ children: /* @__PURE__ */ s(Ie, { children: a })
266
+ }
267
+ );
268
+ }
269
+ );
270
+ $.displayName = "Sidebar";
271
+ const Y = u(({ className: t, ...a }, e) => /* @__PURE__ */ s(
272
+ "div",
273
+ {
274
+ ref: e,
275
+ "data-sidebar": "header",
276
+ className: i(
277
+ "flex items-center gap-2 border-b border-kumo-line px-2 py-3",
278
+ "overflow-hidden",
279
+ // Collapsed: just remove border, keep same height
280
+ "group-data-[state=collapsed]/sidebar:border-b-0",
281
+ t
282
+ ),
283
+ ...a
284
+ }
285
+ ));
286
+ Y.displayName = "Sidebar.Header";
287
+ const J = u(({ className: t, ...a }, e) => /* @__PURE__ */ s(
288
+ "div",
289
+ {
290
+ ref: e,
291
+ "data-sidebar": "content",
292
+ className: i(
293
+ "flex min-w-0 flex-1 flex-col gap-2 overflow-y-auto overflow-x-hidden px-2 py-2",
294
+ // Collapsed: flatten spacing so icons are evenly spaced
295
+ "group-data-[state=collapsed]/sidebar:gap-0 group-data-[state=collapsed]/sidebar:py-0",
296
+ "group-data-[state=collapsed]/sidebar:overflow-x-hidden",
297
+ t
298
+ ),
299
+ ...a
300
+ }
301
+ ));
302
+ J.displayName = "Sidebar.Content";
303
+ const Q = u(({ className: t, ...a }, e) => /* @__PURE__ */ s(
304
+ "div",
305
+ {
306
+ ref: e,
307
+ "data-sidebar": "footer",
308
+ className: i(
309
+ "flex min-w-0 flex-col gap-2 border-t border-kumo-line px-2 py-2",
310
+ // Collapsed: remove border, tighten padding
311
+ "group-data-[state=collapsed]/sidebar:border-t-0 group-data-[state=collapsed]/sidebar:py-1",
312
+ t
313
+ ),
314
+ ...a
315
+ }
316
+ ));
317
+ Q.displayName = "Sidebar.Footer";
318
+ const A = L({
319
+ isCollapsible: !1,
320
+ isOpen: !0
321
+ }), Z = u(
322
+ ({
323
+ className: t,
324
+ collapsible: a = !1,
325
+ defaultOpen: e = !0,
326
+ open: n,
327
+ onOpenChange: r,
328
+ children: o,
329
+ ...b
330
+ }, m) => {
331
+ const [d, l] = k(e), c = n ?? d, x = D(
332
+ (p) => {
333
+ l(p), r?.(p);
334
+ },
335
+ [r]
336
+ ), g = W(
337
+ () => ({ isCollapsible: a, isOpen: c }),
338
+ [a, c]
339
+ ), h = /* @__PURE__ */ s(
340
+ "div",
341
+ {
342
+ ref: m,
343
+ "data-sidebar": "group",
344
+ className: i(
345
+ "flex min-w-0 flex-col gap-0.5",
346
+ // Collapsed: remove internal gap so icons stack uniformly
347
+ "group-data-[state=collapsed]/sidebar:gap-0",
348
+ t
349
+ ),
350
+ ...b,
351
+ children: o
352
+ }
353
+ );
354
+ return a ? /* @__PURE__ */ s(A.Provider, { value: g, children: /* @__PURE__ */ s(
355
+ U,
356
+ {
357
+ defaultOpen: e,
358
+ open: n,
359
+ onOpenChange: x,
360
+ className: "min-w-0",
361
+ children: h
362
+ }
363
+ ) }) : /* @__PURE__ */ s(A.Provider, { value: g, children: h });
364
+ }
365
+ );
366
+ Z.displayName = "Sidebar.Group";
367
+ const ee = u(({ className: t, children: a, ...e }, n) => {
368
+ const { isCollapsible: r } = R(A);
369
+ return r ? /* @__PURE__ */ E(
370
+ V,
371
+ {
372
+ ref: n,
373
+ "data-sidebar": "group-label",
374
+ className: i(
375
+ "group/group-label flex w-full cursor-pointer items-center px-3 py-1 text-xs font-medium text-kumo-subtle",
376
+ "group-data-[state=collapsed]/sidebar:hidden",
377
+ t
378
+ ),
379
+ ...e,
380
+ children: [
381
+ /* @__PURE__ */ s("span", { className: "flex-1 truncate text-left", children: a }),
382
+ /* @__PURE__ */ s(
383
+ F,
384
+ {
385
+ className: i(
386
+ "ml-auto size-3 shrink-0 text-kumo-subtle transition-transform duration-200",
387
+ "group-data-[panel-open]/group-label:rotate-90"
388
+ )
389
+ }
390
+ )
391
+ ]
392
+ }
393
+ ) : /* @__PURE__ */ s(
394
+ "div",
395
+ {
396
+ ref: n,
397
+ "data-sidebar": "group-label",
398
+ className: i(
399
+ "truncate px-3 py-1 text-xs font-medium text-kumo-subtle",
400
+ "group-data-[state=collapsed]/sidebar:hidden",
401
+ t
402
+ ),
403
+ ...e,
404
+ children: a
405
+ }
406
+ );
407
+ });
408
+ ee.displayName = "Sidebar.GroupLabel";
409
+ const ae = u(({ className: t, children: a, ...e }, n) => {
410
+ const { isCollapsible: r, isOpen: o } = R(A);
411
+ return r ? /* @__PURE__ */ s(
412
+ "div",
413
+ {
414
+ ref: n,
415
+ "data-sidebar": "group-content",
416
+ className: i(
417
+ "grid",
418
+ // Animate height via grid-rows — matches production NavGroup pattern
419
+ "transition-[grid-template-rows] duration-250 ease-[cubic-bezier(0.77,0,0.175,1)]",
420
+ "motion-reduce:transition-none",
421
+ // Default: collapsed
422
+ "grid-rows-[0fr]",
423
+ // When sidebar is expanded, respect group open/close state
424
+ o ? "group-data-[state=expanded]/sidebar:grid-rows-[1fr]" : "group-data-[state=expanded]/sidebar:grid-rows-[0fr]",
425
+ t
426
+ ),
427
+ ...e,
428
+ children: /* @__PURE__ */ s("div", { className: "overflow-hidden", children: a })
429
+ }
430
+ ) : /* @__PURE__ */ s(
431
+ "div",
432
+ {
433
+ ref: n,
434
+ "data-sidebar": "group-content",
435
+ className: i("flex flex-col", t),
436
+ ...e,
437
+ children: a
438
+ }
439
+ );
440
+ });
441
+ ae.displayName = "Sidebar.GroupContent";
442
+ const te = L(!1), se = L(!1), ne = u(({ className: t, ...a }, e) => /* @__PURE__ */ s(
443
+ "ul",
444
+ {
445
+ ref: e,
446
+ "data-sidebar": "menu",
447
+ className: i(
448
+ "m-0 flex min-w-0 list-none flex-col gap-0.5 p-0",
449
+ "group-data-[state=collapsed]/sidebar:gap-0",
450
+ t
451
+ ),
452
+ ...a
453
+ }
454
+ ));
455
+ ne.displayName = "Sidebar.Menu";
456
+ const ie = u(({ className: t, children: a, ...e }, n) => /* @__PURE__ */ s(te.Provider, { value: !0, children: /* @__PURE__ */ s(
457
+ "li",
458
+ {
459
+ ref: n,
460
+ "data-sidebar": "menu-item",
461
+ className: i("relative", t),
462
+ ...e,
463
+ children: a
464
+ }
465
+ ) }));
466
+ ie.displayName = "Sidebar.MenuItem";
467
+ const re = u(
468
+ ({
469
+ className: t,
470
+ icon: a,
471
+ active: e = !1,
472
+ size: n = "base",
473
+ href: r,
474
+ tooltip: o,
475
+ children: b,
476
+ ...m
477
+ }, d) => {
478
+ const { state: l } = T(), c = X(), x = R(te), g = a ? ke.isValidElement(a) ? a : /* @__PURE__ */ s(
479
+ a,
480
+ {
481
+ className: i("shrink-0", n === "base" ? "size-4" : "size-3.5")
482
+ }
483
+ ) : null, h = /* @__PURE__ */ E(ye, { children: [
484
+ g,
485
+ /* @__PURE__ */ s(
486
+ "span",
487
+ {
488
+ className: i(
489
+ "flex flex-1 items-center min-w-0 text-left overflow-hidden",
490
+ "group-data-[state=collapsed]/sidebar:hidden"
491
+ ),
492
+ children: b
493
+ }
494
+ )
495
+ ] }), p = i(
496
+ // Layout
497
+ "group/menu-button flex w-full min-w-0 items-center gap-2 rounded-lg outline-none cursor-pointer",
498
+ // Sizing
499
+ n === "base" && "min-h-[34px] px-3 py-1.5 text-sm font-medium",
500
+ n === "sm" && "min-h-[28px] px-2 py-1 text-sm",
501
+ // Default state — transition includes padding so collapsed centering animates smoothly
502
+ "text-kumo-default",
503
+ "transition-[color,background-color,padding] duration-0 ease-[cubic-bezier(0.77,0,0.175,1)]",
504
+ // Icon color
505
+ "[&>svg]:text-kumo-subtle",
506
+ !e && "hover:bg-kumo-tint",
507
+ // Active state
508
+ e && "bg-kumo-tint",
509
+ // When a child sub-button is active, don't show active styling on the parent trigger
510
+ "has-[[data-active]]:bg-transparent has-[[data-active]]:hover:bg-kumo-tint",
511
+ // Focus
512
+ "focus-visible:ring-1 focus-visible:ring-kumo-ring",
513
+ // Collapsed: px-2 centers the icon (48px sidebar − 16px content padding = 32px;
514
+ // 32px − 2×8px padding = 16px = icon size). Padding transition keeps it smooth.
515
+ "group-data-[state=collapsed]/sidebar:px-2",
516
+ t
517
+ );
518
+ let f;
519
+ return r ? f = /* @__PURE__ */ s(
520
+ c,
521
+ {
522
+ ref: d,
523
+ className: i(p, "no-underline!"),
524
+ href: r,
525
+ to: r,
526
+ "data-active": e || void 0,
527
+ "data-sidebar": "menu-button",
528
+ "data-size": n,
529
+ onClick: m.onClick,
530
+ children: h
531
+ }
532
+ ) : f = /* @__PURE__ */ s(
533
+ "button",
534
+ {
535
+ ref: d,
536
+ type: "button",
537
+ className: p,
538
+ "data-active": e || void 0,
539
+ "data-sidebar": "menu-button",
540
+ "data-size": n,
541
+ ...m,
542
+ children: h
543
+ }
544
+ ), l === "collapsed" && o && (f = /* @__PURE__ */ s(Re, { content: o, side: "right", asChild: !0, children: f })), x ? f : /* @__PURE__ */ s("li", { "data-sidebar": "menu-item", className: "relative", children: f });
545
+ }
546
+ );
547
+ re.displayName = "Sidebar.MenuButton";
548
+ const oe = u(({ className: t, ...a }, e) => /* @__PURE__ */ s(
549
+ "button",
550
+ {
551
+ ref: e,
552
+ type: "button",
553
+ "data-sidebar": "menu-action",
554
+ className: i(
555
+ "absolute right-1.5 top-1/2 flex -translate-y-1/2 items-center justify-center rounded-md p-1",
556
+ "text-kumo-strong hover:bg-kumo-overlay",
557
+ "transition-colors duration-150",
558
+ "group-data-[state=collapsed]/sidebar:hidden",
559
+ t
560
+ ),
561
+ ...a
562
+ }
563
+ ));
564
+ oe.displayName = "Sidebar.MenuAction";
565
+ const de = u(({ className: t, ...a }, e) => /* @__PURE__ */ s(
566
+ "span",
567
+ {
568
+ ref: e,
569
+ "data-sidebar": "menu-badge",
570
+ className: i(
571
+ "inline-flex shrink-0 items-center rounded-full border border-dashed border-kumo-line",
572
+ "select-none px-1.5 py-0.5 text-[11px]/none font-medium text-kumo-strong",
573
+ // Hidden when collapsed
574
+ "group-data-[state=collapsed]/sidebar:hidden",
575
+ t
576
+ ),
577
+ ...a
578
+ }
579
+ ));
580
+ de.displayName = "Sidebar.MenuBadge";
581
+ const le = u(({ className: t, ...a }, e) => /* @__PURE__ */ s(
582
+ "ul",
583
+ {
584
+ ref: e,
585
+ "data-sidebar": "menu-sub",
586
+ className: i(
587
+ "m-0 ml-3.5 flex min-w-0 list-none flex-col gap-0.5 border-l border-kumo-line p-0 pl-2.5",
588
+ // Hidden when collapsed
589
+ "group-data-[state=collapsed]/sidebar:hidden",
590
+ t
591
+ ),
592
+ ...a
593
+ }
594
+ ));
595
+ le.displayName = "Sidebar.MenuSub";
596
+ const ue = u(({ className: t, children: a, ...e }, n) => /* @__PURE__ */ s(se.Provider, { value: !0, children: /* @__PURE__ */ s(
597
+ "li",
598
+ {
599
+ ref: n,
600
+ "data-sidebar": "menu-sub-item",
601
+ className: i("relative", t),
602
+ ...e,
603
+ children: a
604
+ }
605
+ ) }));
606
+ ue.displayName = "Sidebar.MenuSubItem";
607
+ const ce = u(({ className: t, active: a = !1, href: e, children: n, ...r }, o) => {
608
+ const b = X(), m = R(se), d = i(
609
+ "flex w-full min-w-0 items-center gap-2 rounded-lg min-h-[34px] px-3 py-1 text-sm font-medium outline-none",
610
+ "text-kumo-default transition-colors duration-150",
611
+ !a && "hover:bg-kumo-tint",
612
+ a && "bg-kumo-tint",
613
+ "focus-visible:ring-1 focus-visible:ring-kumo-ring",
614
+ t
615
+ ), l = /* @__PURE__ */ s("span", { className: "flex-1 truncate text-left", children: n });
616
+ let c;
617
+ return e ? c = /* @__PURE__ */ s(
618
+ b,
619
+ {
620
+ ref: o,
621
+ className: i(d, "no-underline!"),
622
+ href: e,
623
+ to: e,
624
+ "data-active": a || void 0,
625
+ "data-sidebar": "menu-sub-button",
626
+ onClick: r.onClick,
627
+ children: l
628
+ }
629
+ ) : c = /* @__PURE__ */ s(
630
+ "button",
631
+ {
632
+ ref: o,
633
+ type: "button",
634
+ className: d,
635
+ "data-active": a || void 0,
636
+ "data-sidebar": "menu-sub-button",
637
+ ...r,
638
+ children: l
639
+ }
640
+ ), m ? c : /* @__PURE__ */ s("li", { "data-sidebar": "menu-sub-item", className: "relative", children: c });
641
+ });
642
+ ce.displayName = "Sidebar.MenuSubButton";
643
+ const be = u(({ className: t, ...a }, e) => /* @__PURE__ */ s(
644
+ "hr",
645
+ {
646
+ ref: e,
647
+ "data-sidebar": "separator",
648
+ className: i("mx-2 min-h-px h-px border-0 bg-kumo-line", t),
649
+ ...a
650
+ }
651
+ ));
652
+ be.displayName = "Sidebar.Separator";
653
+ const pe = u(
654
+ ({ className: t, placeholder: a = "Search...", shortcut: e, children: n, ...r }, o) => /* @__PURE__ */ E(
655
+ "button",
656
+ {
657
+ ref: o,
658
+ type: "button",
659
+ "data-sidebar": "input",
660
+ className: i(
661
+ "flex w-full items-center gap-2 rounded-lg px-3 py-2 text-sm",
662
+ "bg-kumo-base text-kumo-subtle ring ring-kumo-line",
663
+ "transition-[color,background-color,padding,box-shadow] duration-250 ease-[cubic-bezier(0.77,0,0.175,1)]",
664
+ "hover:bg-kumo-overlay",
665
+ // Collapsed: icon-only, padding centers icon, ring fades via box-shadow transition
666
+ "group-data-[state=collapsed]/sidebar:px-2 group-data-[state=collapsed]/sidebar:ring-0",
667
+ t
668
+ ),
669
+ ...r,
670
+ children: [
671
+ /* @__PURE__ */ s(Ce, { className: "size-4 shrink-0 text-kumo-subtle" }),
672
+ /* @__PURE__ */ s("span", { className: "flex-1 truncate text-left group-data-[state=collapsed]/sidebar:hidden", children: n ?? a }),
673
+ e && /* @__PURE__ */ s("kbd", { className: "ml-auto font-sans text-xs text-kumo-subtle group-data-[state=collapsed]/sidebar:hidden", children: e })
674
+ ]
675
+ }
676
+ )
677
+ );
678
+ pe.displayName = "Sidebar.Input";
679
+ const me = u(({ className: t, children: a, onClick: e, ...n }, r) => {
680
+ const { toggleSidebar: o } = T();
681
+ return /* @__PURE__ */ s(
682
+ "button",
683
+ {
684
+ ref: r,
685
+ type: "button",
686
+ "data-sidebar": "trigger",
687
+ "aria-label": "Toggle sidebar",
688
+ className: i(
689
+ "flex items-center rounded-md p-1.5",
690
+ "text-kumo-subtle hover:text-kumo-strong hover:bg-kumo-overlay",
691
+ "transition-colors duration-150",
692
+ t
693
+ ),
694
+ onClick: (b) => {
695
+ e?.(b), o();
696
+ },
697
+ ...n,
698
+ children: a ?? /* @__PURE__ */ s(Me, { className: "size-5" })
699
+ }
700
+ );
701
+ });
702
+ me.displayName = "Sidebar.Trigger";
703
+ const ge = u(({ className: t, ...a }, e) => {
704
+ const { toggleSidebar: n } = T();
705
+ return /* @__PURE__ */ s(
706
+ "button",
707
+ {
708
+ ref: e,
709
+ type: "button",
710
+ "data-sidebar": "rail",
711
+ "aria-label": "Toggle sidebar",
712
+ tabIndex: -1,
713
+ className: i(
714
+ "absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 cursor-pointer transition-all",
715
+ "after:absolute after:inset-y-0 after:left-1/2 after:w-0.5",
716
+ "hover:after:bg-kumo-brand/20",
717
+ "group-data-[side=left]/sidebar-wrapper:right-0",
718
+ "group-data-[side=right]/sidebar-wrapper:left-0",
719
+ "sm:flex",
720
+ t
721
+ ),
722
+ onClick: n,
723
+ ...a
724
+ }
725
+ );
726
+ });
727
+ ge.displayName = "Sidebar.Rail";
728
+ const fe = u(({ className: t, ...a }, e) => {
729
+ const {
730
+ side: n,
731
+ resizable: r,
732
+ setIsResizing: o,
733
+ setWidth: b,
734
+ setOpen: m,
735
+ open: d,
736
+ minWidth: l
737
+ } = T(), c = P(0), x = P(0), g = P(!1);
738
+ if (!r) return null;
739
+ const h = (p) => {
740
+ p.preventDefault(), o(!0), c.current = p.clientX, g.current = !d;
741
+ const S = p.currentTarget.closest(
742
+ "[data-sidebar-wrapper]"
743
+ )?.querySelector("[data-sidebar='sidebar']");
744
+ x.current = S?.getBoundingClientRect().width ?? 0;
745
+ const N = () => {
746
+ o(!1), document.removeEventListener("pointermove", z), document.removeEventListener("pointerup", w);
747
+ }, z = (C) => {
748
+ const _ = n === "left" ? C.clientX - c.current : c.current - C.clientX, y = x.current + _;
749
+ if (g.current) {
750
+ y >= l && (g.current = !1, m(!0), b(y));
751
+ return;
752
+ }
753
+ if (y < l) {
754
+ m(!1), g.current = !0;
755
+ return;
756
+ }
757
+ b(y);
758
+ }, w = () => {
759
+ N();
760
+ };
761
+ document.addEventListener("pointermove", z), document.addEventListener("pointerup", w);
762
+ };
763
+ return /* @__PURE__ */ s(
764
+ "div",
765
+ {
766
+ ref: e,
767
+ "data-sidebar": "resize-handle",
768
+ className: i(
769
+ "absolute inset-y-0 z-20 hidden w-1 cursor-col-resize transition-colors sm:block",
770
+ "hover:bg-kumo-brand/30 active:bg-kumo-brand/50",
771
+ n === "left" && "right-0",
772
+ n === "right" && "left-0",
773
+ t
774
+ ),
775
+ onPointerDown: h,
776
+ ...a
777
+ }
778
+ );
779
+ });
780
+ fe.displayName = "Sidebar.ResizeHandle";
781
+ function he({ className: t }) {
782
+ return /* @__PURE__ */ s(
783
+ F,
784
+ {
785
+ className: i(
786
+ "ml-auto size-4 shrink-0 text-kumo-subtle transition-transform duration-200",
787
+ // Auto-rotate when inside an open Collapsible trigger
788
+ "group-data-[panel-open]/menu-button:rotate-90",
789
+ // Hidden when collapsed
790
+ "group-data-[state=collapsed]/sidebar:hidden",
791
+ t
792
+ )
793
+ }
794
+ );
795
+ }
796
+ he.displayName = "Sidebar.MenuChevron";
797
+ const He = U, We = V, xe = u(({ className: t, keepMounted: a = !0, ...e }, n) => /* @__PURE__ */ s(
798
+ De,
799
+ {
800
+ ref: n,
801
+ keepMounted: a,
802
+ className: i(
803
+ "overflow-hidden",
804
+ // Default: show at measured height (when data-open, no override matches)
805
+ "h-[var(--collapsible-panel-height)]",
806
+ // Transition height — matches production NavGroup easing
807
+ "transition-[height] duration-250 ease-[cubic-bezier(0.77,0,0.175,1)]",
808
+ "motion-reduce:transition-none",
809
+ // Closed / animating in / animating out: height 0
810
+ "data-[closed]:h-0 data-[starting-style]:h-0 data-[ending-style]:h-0",
811
+ t
812
+ ),
813
+ ...e
814
+ }
815
+ ));
816
+ xe.displayName = "Sidebar.CollapsibleContent";
817
+ const Je = Object.assign($, {
818
+ Provider: q,
819
+ Header: Y,
820
+ Content: J,
821
+ Footer: Q,
822
+ Group: Z,
823
+ GroupLabel: ee,
824
+ GroupContent: ae,
825
+ Menu: ne,
826
+ MenuItem: ie,
827
+ MenuButton: re,
828
+ MenuAction: oe,
829
+ MenuBadge: de,
830
+ MenuSub: le,
831
+ MenuSubItem: ue,
832
+ MenuSubButton: ce,
833
+ Separator: be,
834
+ Input: pe,
835
+ Trigger: me,
836
+ Rail: ge,
837
+ ResizeHandle: fe,
838
+ MenuChevron: he,
839
+ Collapsible: He,
840
+ CollapsibleTrigger: We,
841
+ CollapsibleContent: xe
842
+ });
843
+ export {
844
+ G as A,
845
+ Ye as B,
846
+ $e as K,
847
+ Je as S,
848
+ q as a,
849
+ $ as b,
850
+ Y as c,
851
+ J as d,
852
+ Q as e,
853
+ Z as f,
854
+ ee as g,
855
+ ae as h,
856
+ ne as i,
857
+ ie as j,
858
+ re as k,
859
+ oe as l,
860
+ de as m,
861
+ le as n,
862
+ ue as o,
863
+ ce as p,
864
+ be as q,
865
+ pe as r,
866
+ me as s,
867
+ ge as t,
868
+ fe as u,
869
+ he as v,
870
+ He as w,
871
+ We as x,
872
+ xe as y,
873
+ T as z
874
+ };
875
+ //# sourceMappingURL=sidebar-l6rk9o5qf8k5vth1.js.map