@cloudflare/kumo 1.15.0 → 1.17.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 (266) hide show
  1. package/CHANGELOG.md +144 -0
  2. package/ai/USAGE.md +3 -1
  3. package/ai/component-registry.json +511 -66
  4. package/ai/component-registry.md +776 -59
  5. package/ai/schemas.ts +33 -7
  6. package/dist/.build-complete +1 -1
  7. package/dist/ai/schemas.d.ts +158 -39
  8. package/dist/ai/schemas.d.ts.map +1 -1
  9. package/dist/ai/schemas.js +456 -418
  10. package/dist/ai/schemas.js.map +1 -1
  11. package/dist/chunks/{Legend-mkh1v83sz972e29d.js → Legend-o0ntojbaplmszwk0.js} +115 -101
  12. package/dist/chunks/Legend-o0ntojbaplmszwk0.js.map +1 -0
  13. package/dist/chunks/badge-n80t3z8u9ttlxi20.js +120 -0
  14. package/dist/chunks/badge-n80t3z8u9ttlxi20.js.map +1 -0
  15. package/dist/chunks/banner-nz0eryqnz3qd86ln.js +79 -0
  16. package/dist/chunks/banner-nz0eryqnz3qd86ln.js.map +1 -0
  17. package/dist/chunks/{breadcrumbs-m79gm4gjwbfajpna.js → breadcrumbs-cjgn3w4drahvqnuj.js} +3 -3
  18. package/dist/chunks/{breadcrumbs-m79gm4gjwbfajpna.js.map → breadcrumbs-cjgn3w4drahvqnuj.js.map} +1 -1
  19. package/dist/chunks/{button-j0hi0afn33w9lxgi.js → button-odxi0hp4fvi5i2w3.js} +50 -48
  20. package/dist/chunks/button-odxi0hp4fvi5i2w3.js.map +1 -0
  21. package/dist/chunks/{checkbox-bvzuggmadtqawis4.js → checkbox-dx8x0rzv582yjv7n.js} +38 -47
  22. package/dist/chunks/{checkbox-bvzuggmadtqawis4.js.map → checkbox-dx8x0rzv582yjv7n.js.map} +1 -1
  23. package/dist/chunks/{clipboard-text-mwcknzn75qdvigrd.js → clipboard-text-kyk51d1ze7zvdn4q.js} +55 -54
  24. package/dist/chunks/clipboard-text-kyk51d1ze7zvdn4q.js.map +1 -0
  25. package/dist/chunks/{combobox-ndbaroqh1c0u49ye.js → combobox-9fhjzprab46csmon.js} +97 -82
  26. package/dist/chunks/combobox-9fhjzprab46csmon.js.map +1 -0
  27. package/dist/chunks/{command-palette-ejoszjfivybu9yi5.js → command-palette-kenx2bbdzd4kpx36.js} +158 -154
  28. package/dist/chunks/command-palette-kenx2bbdzd4kpx36.js.map +1 -0
  29. package/dist/chunks/{dialog-gkmecnx48ge38jrr.js → dialog-e05ysa8t2fklw065.js} +22 -20
  30. package/dist/chunks/dialog-e05ysa8t2fklw065.js.map +1 -0
  31. package/dist/chunks/{dropdown-i8n7nv3cvkvb1x3e.js → dropdown-g587px7zv3ssaxr4.js} +96 -90
  32. package/dist/chunks/dropdown-g587px7zv3ssaxr4.js.map +1 -0
  33. package/dist/chunks/{empty-hrwtammqp0b2nvtf.js → empty-fuz1un7r7mbz0kim.js} +2 -2
  34. package/dist/chunks/{empty-hrwtammqp0b2nvtf.js.map → empty-fuz1un7r7mbz0kim.js.map} +1 -1
  35. package/dist/chunks/{field-lweivfadxgpqhuqi.js → field-fq504lyu7ttsh5m9.js} +3 -3
  36. package/dist/chunks/{field-lweivfadxgpqhuqi.js.map → field-fq504lyu7ttsh5m9.js.map} +1 -1
  37. package/dist/chunks/hcl-hcu7d6ja6t540ijn.js +8 -0
  38. package/dist/chunks/hcl-hcu7d6ja6t540ijn.js.map +1 -0
  39. package/dist/chunks/{input-area-obli4ufvu40bfpgp.js → input-area-nq40szg9110on89c.js} +4 -4
  40. package/dist/chunks/{input-area-obli4ufvu40bfpgp.js.map → input-area-nq40szg9110on89c.js.map} +1 -1
  41. package/dist/chunks/{input-group-dwtsd04lzf2bcsdo.js → input-group-hbebbyh8fo6aqydn.js} +3 -3
  42. package/dist/chunks/{input-group-dwtsd04lzf2bcsdo.js.map → input-group-hbebbyh8fo6aqydn.js.map} +1 -1
  43. package/dist/chunks/{input-ko2dne1givlxq7sz.js → input-kvhyo3p4859bexvx.js} +4 -4
  44. package/dist/chunks/input-kvhyo3p4859bexvx.js.map +1 -0
  45. package/dist/chunks/{label-kjahhybc191quieo.js → label-j9owppbgnn35mebg.js} +3 -3
  46. package/dist/chunks/{label-kjahhybc191quieo.js.map → label-j9owppbgnn35mebg.js.map} +1 -1
  47. package/dist/chunks/{layer-card-mu2w82x6ko1nhhtr.js → layer-card-l5yjvrxry1dhte57.js} +8 -8
  48. package/dist/chunks/{layer-card-mu2w82x6ko1nhhtr.js.map → layer-card-l5yjvrxry1dhte57.js.map} +1 -1
  49. package/dist/chunks/{link-lpzl5s47pmobk361.js → link-hmmf3k1xn6rm72rt.js} +2 -2
  50. package/dist/chunks/{link-lpzl5s47pmobk361.js.map → link-hmmf3k1xn6rm72rt.js.map} +1 -1
  51. package/dist/chunks/{menubar-ifxxdoa35zz79z1q.js → menubar-abojnm0uwjuni8ok.js} +20 -20
  52. package/dist/chunks/menubar-abojnm0uwjuni8ok.js.map +1 -0
  53. package/dist/chunks/{meter-fbtqfg0okpwmaiju.js → meter-i84dte2f82qmvn7y.js} +2 -2
  54. package/dist/chunks/{meter-fbtqfg0okpwmaiju.js.map → meter-i84dte2f82qmvn7y.js.map} +1 -1
  55. package/dist/chunks/{pagination-eo0gzzm7v5w8niqe.js → pagination-pbd7qqik97ac0l7m.js} +3 -3
  56. package/dist/chunks/{pagination-eo0gzzm7v5w8niqe.js.map → pagination-pbd7qqik97ac0l7m.js.map} +1 -1
  57. package/dist/chunks/{popover-dd7hi5ajeoq9od1i.js → popover-i951xjcgezeqr4iv.js} +31 -28
  58. package/dist/chunks/popover-i951xjcgezeqr4iv.js.map +1 -0
  59. package/dist/chunks/portal-provider-hwmkdmkpvct0cb76.js +18 -0
  60. package/dist/chunks/portal-provider-hwmkdmkpvct0cb76.js.map +1 -0
  61. package/dist/chunks/{radio-oi9iw7ls1t04j377.js → radio-l2vkcue40d84fmo1.js} +13 -16
  62. package/dist/chunks/{radio-oi9iw7ls1t04j377.js.map → radio-l2vkcue40d84fmo1.js.map} +1 -1
  63. package/dist/chunks/{select-0m0xklfwdlx8dwba.js → select-paedwa3nlhpq82ua.js} +39 -37
  64. package/dist/chunks/select-paedwa3nlhpq82ua.js.map +1 -0
  65. package/dist/chunks/{sensitive-input-rjpykxn2llh0thx1.js → sensitive-input-kznmknpp5h1grc6k.js} +97 -91
  66. package/dist/chunks/sensitive-input-kznmknpp5h1grc6k.js.map +1 -0
  67. package/dist/chunks/sidebar-jepeq7gaf4issuw6.js +875 -0
  68. package/dist/chunks/sidebar-jepeq7gaf4issuw6.js.map +1 -0
  69. package/dist/chunks/skeleton-line-epxenksfesr2fkcv.js +33 -0
  70. package/dist/chunks/skeleton-line-epxenksfesr2fkcv.js.map +1 -0
  71. package/dist/chunks/surface-blo81kgy9g0sexgm.js +36 -0
  72. package/dist/chunks/surface-blo81kgy9g0sexgm.js.map +1 -0
  73. package/dist/chunks/{switch-lv4mrrkfl5uc99xo.js → switch-i0zwcp3wq6vsxm1c.js} +64 -64
  74. package/dist/chunks/{switch-lv4mrrkfl5uc99xo.js.map → switch-i0zwcp3wq6vsxm1c.js.map} +1 -1
  75. package/dist/chunks/table-nrcw19tlpduayukl.js +183 -0
  76. package/dist/chunks/table-nrcw19tlpduayukl.js.map +1 -0
  77. package/dist/chunks/tabs-bw92jb303zxw7w4f.js +92 -0
  78. package/dist/chunks/{tabs-hy6oa7xtf96d9mxt.js.map → tabs-bw92jb303zxw7w4f.js.map} +1 -1
  79. package/dist/chunks/{text-gzt92mlji1lug13d.js → text-nmyi1rkwdj37f30f.js} +24 -22
  80. package/dist/chunks/text-nmyi1rkwdj37f30f.js.map +1 -0
  81. package/dist/chunks/{toast-kswfqmjysxcrwij3.js → toast-lrnwby56drs7vtae.js} +61 -59
  82. package/dist/chunks/toast-lrnwby56drs7vtae.js.map +1 -0
  83. package/dist/chunks/toml-nczb2z9n0o23o3ci.js +8 -0
  84. package/dist/chunks/toml-nczb2z9n0o23o3ci.js.map +1 -0
  85. package/dist/chunks/{tooltip-k68wcv9mrigb7rcb.js → tooltip-cit9ltlxfuhwctuj.js} +24 -21
  86. package/dist/chunks/tooltip-cit9ltlxfuhwctuj.js.map +1 -0
  87. package/dist/chunks/{vendor-base-ui-cpvkrhz4zgw9nw2b.js → vendor-base-ui-n30qblevnpk9cc5c.js} +551 -549
  88. package/dist/chunks/{vendor-base-ui-cpvkrhz4zgw9nw2b.js.map → vendor-base-ui-n30qblevnpk9cc5c.js.map} +1 -1
  89. package/dist/code/server.js +11 -9
  90. package/dist/code/server.js.map +1 -1
  91. package/dist/code.js +16 -14
  92. package/dist/code.js.map +1 -1
  93. package/dist/components/badge.js +1 -1
  94. package/dist/components/banner.js +1 -1
  95. package/dist/components/breadcrumbs.js +1 -1
  96. package/dist/components/button.js +1 -1
  97. package/dist/components/chart.js +1 -1
  98. package/dist/components/checkbox.js +1 -1
  99. package/dist/components/clipboard-text.js +1 -1
  100. package/dist/components/combobox.js +1 -1
  101. package/dist/components/command-palette.js +1 -1
  102. package/dist/components/dialog.js +1 -1
  103. package/dist/components/dropdown.js +1 -1
  104. package/dist/components/empty.js +1 -1
  105. package/dist/components/field.js +1 -1
  106. package/dist/components/flow.js +2142 -2090
  107. package/dist/components/flow.js.map +1 -1
  108. package/dist/components/input.js +3 -3
  109. package/dist/components/label.js +1 -1
  110. package/dist/components/layer-card.js +1 -1
  111. package/dist/components/link.js +1 -1
  112. package/dist/components/loader.js +1 -1
  113. package/dist/components/menubar.js +1 -1
  114. package/dist/components/meter.js +1 -1
  115. package/dist/components/pagination.js +1 -1
  116. package/dist/components/popover.js +1 -1
  117. package/dist/components/radio.js +1 -1
  118. package/dist/components/select.js +1 -1
  119. package/dist/components/sensitive-input.js +1 -1
  120. package/dist/components/sidebar.js +35 -0
  121. package/dist/components/sidebar.js.map +1 -0
  122. package/dist/components/surface.js +1 -1
  123. package/dist/components/switch.js +1 -1
  124. package/dist/components/table.js +1 -1
  125. package/dist/components/tabs.js +1 -1
  126. package/dist/components/text.js +1 -1
  127. package/dist/components/toast.js +2 -2
  128. package/dist/components/tooltip.js +1 -1
  129. package/dist/index.js +192 -159
  130. package/dist/index.js.map +1 -1
  131. package/dist/primitives/accordion.js +1 -1
  132. package/dist/primitives/alert-dialog.js +1 -1
  133. package/dist/primitives/autocomplete.js +1 -1
  134. package/dist/primitives/avatar.js +1 -1
  135. package/dist/primitives/button.js +1 -1
  136. package/dist/primitives/checkbox-group.js +1 -1
  137. package/dist/primitives/checkbox.js +1 -1
  138. package/dist/primitives/collapsible.js +1 -1
  139. package/dist/primitives/combobox.js +1 -1
  140. package/dist/primitives/context-menu.js +1 -1
  141. package/dist/primitives/csp-provider.js +1 -1
  142. package/dist/primitives/dialog.js +1 -1
  143. package/dist/primitives/direction-provider.js +1 -1
  144. package/dist/primitives/drawer.js +1 -1
  145. package/dist/primitives/field.js +1 -1
  146. package/dist/primitives/fieldset.js +1 -1
  147. package/dist/primitives/form.js +1 -1
  148. package/dist/primitives/input.js +1 -1
  149. package/dist/primitives/menu.js +1 -1
  150. package/dist/primitives/menubar.js +1 -1
  151. package/dist/primitives/meter.js +1 -1
  152. package/dist/primitives/navigation-menu.js +1 -1
  153. package/dist/primitives/number-field.js +1 -1
  154. package/dist/primitives/popover.js +1 -1
  155. package/dist/primitives/preview-card.js +1 -1
  156. package/dist/primitives/progress.js +1 -1
  157. package/dist/primitives/radio-group.js +1 -1
  158. package/dist/primitives/radio.js +1 -1
  159. package/dist/primitives/scroll-area.js +1 -1
  160. package/dist/primitives/select.js +1 -1
  161. package/dist/primitives/separator.js +1 -1
  162. package/dist/primitives/slider.js +1 -1
  163. package/dist/primitives/switch.js +1 -1
  164. package/dist/primitives/tabs.js +1 -1
  165. package/dist/primitives/toast.js +1 -1
  166. package/dist/primitives/toggle-group.js +1 -1
  167. package/dist/primitives/toggle.js +1 -1
  168. package/dist/primitives/toolbar.js +1 -1
  169. package/dist/primitives/tooltip.js +1 -1
  170. package/dist/primitives.js +1 -1
  171. package/dist/scripts/theme-generator/config.d.ts.map +1 -1
  172. package/dist/scripts/theme-generator/config.js +288 -24
  173. package/dist/scripts/theme-generator/config.js.map +1 -1
  174. package/dist/src/code/provider.d.ts.map +1 -1
  175. package/dist/src/code/server.d.ts.map +1 -1
  176. package/dist/src/code/types.d.ts +1 -1
  177. package/dist/src/code/types.d.ts.map +1 -1
  178. package/dist/src/components/badge/badge.d.ts +95 -22
  179. package/dist/src/components/badge/badge.d.ts.map +1 -1
  180. package/dist/src/components/banner/banner.d.ts +2 -0
  181. package/dist/src/components/banner/banner.d.ts.map +1 -1
  182. package/dist/src/components/button/button.d.ts +2 -0
  183. package/dist/src/components/button/button.d.ts.map +1 -1
  184. package/dist/src/components/chart/EChart.d.ts.map +1 -1
  185. package/dist/src/components/chart/TimeseriesChart.d.ts +11 -1
  186. package/dist/src/components/chart/TimeseriesChart.d.ts.map +1 -1
  187. package/dist/src/components/checkbox/checkbox.d.ts.map +1 -1
  188. package/dist/src/components/clipboard-text/clipboard-text.d.ts +2 -0
  189. package/dist/src/components/clipboard-text/clipboard-text.d.ts.map +1 -1
  190. package/dist/src/components/combobox/combobox.d.ts +8 -1
  191. package/dist/src/components/combobox/combobox.d.ts.map +1 -1
  192. package/dist/src/components/command-palette/command-palette.d.ts +9 -2
  193. package/dist/src/components/command-palette/command-palette.d.ts.map +1 -1
  194. package/dist/src/components/command-palette/types.d.ts +7 -0
  195. package/dist/src/components/command-palette/types.d.ts.map +1 -1
  196. package/dist/src/components/dialog/dialog.d.ts +8 -1
  197. package/dist/src/components/dialog/dialog.d.ts.map +1 -1
  198. package/dist/src/components/dropdown/dropdown.d.ts +17 -2
  199. package/dist/src/components/dropdown/dropdown.d.ts.map +1 -1
  200. package/dist/src/components/flow/diagram.d.ts.map +1 -1
  201. package/dist/src/components/flow/node.d.ts.map +1 -1
  202. package/dist/src/components/flow/parallel.d.ts.map +1 -1
  203. package/dist/src/components/loader/skeleton-line.d.ts +2 -1
  204. package/dist/src/components/loader/skeleton-line.d.ts.map +1 -1
  205. package/dist/src/components/popover/popover.d.ts +8 -1
  206. package/dist/src/components/popover/popover.d.ts.map +1 -1
  207. package/dist/src/components/radio/radio.d.ts.map +1 -1
  208. package/dist/src/components/select/select.d.ts +8 -1
  209. package/dist/src/components/select/select.d.ts.map +1 -1
  210. package/dist/src/components/sensitive-input/sensitive-input.d.ts.map +1 -1
  211. package/dist/src/components/sidebar/index.d.ts +2 -0
  212. package/dist/src/components/sidebar/index.d.ts.map +1 -0
  213. package/dist/src/components/sidebar/sidebar.d.ts +556 -0
  214. package/dist/src/components/sidebar/sidebar.d.ts.map +1 -0
  215. package/dist/src/components/surface/surface.d.ts +23 -23
  216. package/dist/src/components/surface/surface.d.ts.map +1 -1
  217. package/dist/src/components/table/table.d.ts +34 -2
  218. package/dist/src/components/table/table.d.ts.map +1 -1
  219. package/dist/src/components/tabs/tabs.d.ts.map +1 -1
  220. package/dist/src/components/text/text.d.ts +5 -0
  221. package/dist/src/components/text/text.d.ts.map +1 -1
  222. package/dist/src/components/toast/toast.d.ts +16 -9
  223. package/dist/src/components/toast/toast.d.ts.map +1 -1
  224. package/dist/src/components/tooltip/tooltip.d.ts +11 -6
  225. package/dist/src/components/tooltip/tooltip.d.ts.map +1 -1
  226. package/dist/src/index.d.ts +2 -0
  227. package/dist/src/index.d.ts.map +1 -1
  228. package/dist/src/utils/index.d.ts +1 -0
  229. package/dist/src/utils/index.d.ts.map +1 -1
  230. package/dist/src/utils/portal-provider.d.ts +56 -0
  231. package/dist/src/utils/portal-provider.d.ts.map +1 -0
  232. package/dist/styles/kumo-binding.css +49 -46
  233. package/dist/styles/kumo-standalone.css +1 -1
  234. package/dist/styles/theme-fedramp.css +3 -3
  235. package/dist/styles/theme-kumo.css +202 -22
  236. package/dist/utils.js +8 -6
  237. package/dist/utils.js.map +1 -1
  238. package/package.json +7 -3
  239. package/scripts/component-registry/index.ts +12 -0
  240. package/scripts/theme-generator/config.ts +298 -24
  241. package/dist/chunks/Legend-mkh1v83sz972e29d.js.map +0 -1
  242. package/dist/chunks/badge-mrshucy2530o70cq.js +0 -56
  243. package/dist/chunks/badge-mrshucy2530o70cq.js.map +0 -1
  244. package/dist/chunks/banner-vzdjbqsb6em7tmdk.js +0 -75
  245. package/dist/chunks/banner-vzdjbqsb6em7tmdk.js.map +0 -1
  246. package/dist/chunks/button-j0hi0afn33w9lxgi.js.map +0 -1
  247. package/dist/chunks/clipboard-text-mwcknzn75qdvigrd.js.map +0 -1
  248. package/dist/chunks/combobox-ndbaroqh1c0u49ye.js.map +0 -1
  249. package/dist/chunks/command-palette-ejoszjfivybu9yi5.js.map +0 -1
  250. package/dist/chunks/dialog-gkmecnx48ge38jrr.js.map +0 -1
  251. package/dist/chunks/dropdown-i8n7nv3cvkvb1x3e.js.map +0 -1
  252. package/dist/chunks/input-ko2dne1givlxq7sz.js.map +0 -1
  253. package/dist/chunks/menubar-ifxxdoa35zz79z1q.js.map +0 -1
  254. package/dist/chunks/popover-dd7hi5ajeoq9od1i.js.map +0 -1
  255. package/dist/chunks/select-0m0xklfwdlx8dwba.js.map +0 -1
  256. package/dist/chunks/sensitive-input-rjpykxn2llh0thx1.js.map +0 -1
  257. package/dist/chunks/skeleton-line-1j5exu6vv07mmhfb.js +0 -28
  258. package/dist/chunks/skeleton-line-1j5exu6vv07mmhfb.js.map +0 -1
  259. package/dist/chunks/surface-dhshylwccuaz91d1.js +0 -21
  260. package/dist/chunks/surface-dhshylwccuaz91d1.js.map +0 -1
  261. package/dist/chunks/table-fh7jmfip27vdapxm.js +0 -155
  262. package/dist/chunks/table-fh7jmfip27vdapxm.js.map +0 -1
  263. package/dist/chunks/tabs-hy6oa7xtf96d9mxt.js +0 -86
  264. package/dist/chunks/text-gzt92mlji1lug13d.js.map +0 -1
  265. package/dist/chunks/toast-kswfqmjysxcrwij3.js.map +0 -1
  266. package/dist/chunks/tooltip-k68wcv9mrigb7rcb.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-cit9ltlxfuhwctuj.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-n30qblevnpk9cc5c.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-jepeq7gaf4issuw6.js.map