@hoardodile/ui 0.0.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 (356) hide show
  1. package/LICENSE +18 -0
  2. package/README.md +70 -0
  3. package/dist/components/alert.d.ts +13 -0
  4. package/dist/components/alert.js +97 -0
  5. package/dist/components/alert.js.map +1 -0
  6. package/dist/components/app-dialog.d.ts +62 -0
  7. package/dist/components/app-dialog.js +656 -0
  8. package/dist/components/app-dialog.js.map +1 -0
  9. package/dist/components/badge.d.ts +11 -0
  10. package/dist/components/badge.js +70 -0
  11. package/dist/components/badge.js.map +1 -0
  12. package/dist/components/breadcrumb.d.ts +12 -0
  13. package/dist/components/breadcrumb.js +617 -0
  14. package/dist/components/breadcrumb.js.map +1 -0
  15. package/dist/components/button.d.ts +17 -0
  16. package/dist/components/button.js +78 -0
  17. package/dist/components/button.js.map +1 -0
  18. package/dist/components/caption-bar.d.ts +44 -0
  19. package/dist/components/caption-bar.js +827 -0
  20. package/dist/components/caption-bar.js.map +1 -0
  21. package/dist/components/chart-card.d.ts +15 -0
  22. package/dist/components/chart-card.js +27 -0
  23. package/dist/components/chart-card.js.map +1 -0
  24. package/dist/components/checkbox.d.ts +6 -0
  25. package/dist/components/checkbox.js +76 -0
  26. package/dist/components/checkbox.js.map +1 -0
  27. package/dist/components/chip-button.d.ts +28 -0
  28. package/dist/components/chip-button.js +87 -0
  29. package/dist/components/chip-button.js.map +1 -0
  30. package/dist/components/close-confirm-dialog.d.ts +19 -0
  31. package/dist/components/close-confirm-dialog.js +743 -0
  32. package/dist/components/close-confirm-dialog.js.map +1 -0
  33. package/dist/components/color-picker.d.ts +32 -0
  34. package/dist/components/color-picker.js +667 -0
  35. package/dist/components/color-picker.js.map +1 -0
  36. package/dist/components/combobox.d.ts +32 -0
  37. package/dist/components/combobox.js +1211 -0
  38. package/dist/components/combobox.js.map +1 -0
  39. package/dist/components/confirm-by-typing-dialog.d.ts +48 -0
  40. package/dist/components/confirm-by-typing-dialog.js +759 -0
  41. package/dist/components/confirm-by-typing-dialog.js.map +1 -0
  42. package/dist/components/confirm-dialog.d.ts +34 -0
  43. package/dist/components/confirm-dialog.js +710 -0
  44. package/dist/components/confirm-dialog.js.map +1 -0
  45. package/dist/components/count-badge.d.ts +13 -0
  46. package/dist/components/count-badge.js +39 -0
  47. package/dist/components/count-badge.js.map +1 -0
  48. package/dist/components/dialog.d.ts +40 -0
  49. package/dist/components/dialog.js +571 -0
  50. package/dist/components/dialog.js.map +1 -0
  51. package/dist/components/dropdown-menu.d.ts +45 -0
  52. package/dist/components/dropdown-menu.js +1003 -0
  53. package/dist/components/dropdown-menu.js.map +1 -0
  54. package/dist/components/dropdown-select.d.ts +29 -0
  55. package/dist/components/dropdown-select.js +1036 -0
  56. package/dist/components/dropdown-select.js.map +1 -0
  57. package/dist/components/empty.d.ts +15 -0
  58. package/dist/components/empty.js +119 -0
  59. package/dist/components/empty.js.map +1 -0
  60. package/dist/components/filter-rail.d.ts +48 -0
  61. package/dist/components/filter-rail.js +231 -0
  62. package/dist/components/filter-rail.js.map +1 -0
  63. package/dist/components/fixed-action-bar.d.ts +24 -0
  64. package/dist/components/fixed-action-bar.js +48 -0
  65. package/dist/components/fixed-action-bar.js.map +1 -0
  66. package/dist/components/font-picker.d.ts +45 -0
  67. package/dist/components/font-picker.js +759 -0
  68. package/dist/components/font-picker.js.map +1 -0
  69. package/dist/components/form.d.ts +17 -0
  70. package/dist/components/form.js +150 -0
  71. package/dist/components/form.js.map +1 -0
  72. package/dist/components/group-label.d.ts +12 -0
  73. package/dist/components/group-label.js +10 -0
  74. package/dist/components/group-label.js.map +1 -0
  75. package/dist/components/icon-tile.d.ts +16 -0
  76. package/dist/components/icon-tile.js +67 -0
  77. package/dist/components/icon-tile.js.map +1 -0
  78. package/dist/components/icon-toggle.d.ts +24 -0
  79. package/dist/components/icon-toggle.js +81 -0
  80. package/dist/components/icon-toggle.js.map +1 -0
  81. package/dist/components/icon.d.ts +2 -0
  82. package/dist/components/icon.js +49 -0
  83. package/dist/components/icon.js.map +1 -0
  84. package/dist/components/image-crop-panel.d.ts +80 -0
  85. package/dist/components/image-crop-panel.js +1104 -0
  86. package/dist/components/image-crop-panel.js.map +1 -0
  87. package/dist/components/image-cropper.d.ts +63 -0
  88. package/dist/components/image-cropper.js +166 -0
  89. package/dist/components/image-cropper.js.map +1 -0
  90. package/dist/components/input-group.d.ts +22 -0
  91. package/dist/components/input-group.js +270 -0
  92. package/dist/components/input-group.js.map +1 -0
  93. package/dist/components/input.d.ts +16 -0
  94. package/dist/components/input.js +60 -0
  95. package/dist/components/input.js.map +1 -0
  96. package/dist/components/label.d.ts +5 -0
  97. package/dist/components/label.js +40 -0
  98. package/dist/components/label.js.map +1 -0
  99. package/dist/components/list-empty-row.d.ts +16 -0
  100. package/dist/components/list-empty-row.js +40 -0
  101. package/dist/components/list-empty-row.js.map +1 -0
  102. package/dist/components/management-empty.d.ts +14 -0
  103. package/dist/components/management-empty.js +40 -0
  104. package/dist/components/management-empty.js.map +1 -0
  105. package/dist/components/management-skeleton.d.ts +11 -0
  106. package/dist/components/management-skeleton.js +72 -0
  107. package/dist/components/management-skeleton.js.map +1 -0
  108. package/dist/components/meta-chip.d.ts +17 -0
  109. package/dist/components/meta-chip.js +49 -0
  110. package/dist/components/meta-chip.js.map +1 -0
  111. package/dist/components/mobile-drawer.d.ts +29 -0
  112. package/dist/components/mobile-drawer.js +331 -0
  113. package/dist/components/mobile-drawer.js.map +1 -0
  114. package/dist/components/page-header.d.ts +20 -0
  115. package/dist/components/page-header.js +44 -0
  116. package/dist/components/page-header.js.map +1 -0
  117. package/dist/components/page-scaffold.d.ts +34 -0
  118. package/dist/components/page-scaffold.js +157 -0
  119. package/dist/components/page-scaffold.js.map +1 -0
  120. package/dist/components/pagination-bar.d.ts +22 -0
  121. package/dist/components/pagination-bar.js +703 -0
  122. package/dist/components/pagination-bar.js.map +1 -0
  123. package/dist/components/pagination.d.ts +22 -0
  124. package/dist/components/pagination.js +680 -0
  125. package/dist/components/pagination.js.map +1 -0
  126. package/dist/components/panel-toolbar.d.ts +37 -0
  127. package/dist/components/panel-toolbar.js +781 -0
  128. package/dist/components/panel-toolbar.js.map +1 -0
  129. package/dist/components/pill-tabs.d.ts +33 -0
  130. package/dist/components/pill-tabs.js +66 -0
  131. package/dist/components/pill-tabs.js.map +1 -0
  132. package/dist/components/plugin-download-consent.d.ts +52 -0
  133. package/dist/components/plugin-download-consent.js +780 -0
  134. package/dist/components/plugin-download-consent.js.map +1 -0
  135. package/dist/components/popover.d.ts +26 -0
  136. package/dist/components/popover.js +343 -0
  137. package/dist/components/popover.js.map +1 -0
  138. package/dist/components/progress.d.ts +10 -0
  139. package/dist/components/progress.js +103 -0
  140. package/dist/components/progress.js.map +1 -0
  141. package/dist/components/query-state-view.d.ts +36 -0
  142. package/dist/components/query-state-view.js +17 -0
  143. package/dist/components/query-state-view.js.map +1 -0
  144. package/dist/components/radio-group.d.ts +8 -0
  145. package/dist/components/radio-group.js +60 -0
  146. package/dist/components/radio-group.js.map +1 -0
  147. package/dist/components/scroll-area.d.ts +7 -0
  148. package/dist/components/scroll-area.js +80 -0
  149. package/dist/components/scroll-area.js.map +1 -0
  150. package/dist/components/search-field.d.ts +49 -0
  151. package/dist/components/search-field.js +586 -0
  152. package/dist/components/search-field.js.map +1 -0
  153. package/dist/components/secondary-stat.d.ts +13 -0
  154. package/dist/components/secondary-stat.js +56 -0
  155. package/dist/components/secondary-stat.js.map +1 -0
  156. package/dist/components/section-header.d.ts +23 -0
  157. package/dist/components/section-header.js +76 -0
  158. package/dist/components/section-header.js.map +1 -0
  159. package/dist/components/section-label.d.ts +20 -0
  160. package/dist/components/section-label.js +46 -0
  161. package/dist/components/section-label.js.map +1 -0
  162. package/dist/components/section-tabs.d.ts +47 -0
  163. package/dist/components/section-tabs.js +145 -0
  164. package/dist/components/section-tabs.js.map +1 -0
  165. package/dist/components/separator.d.ts +14 -0
  166. package/dist/components/separator.js +49 -0
  167. package/dist/components/separator.js.map +1 -0
  168. package/dist/components/sheet.d.ts +22 -0
  169. package/dist/components/sheet.js +469 -0
  170. package/dist/components/sheet.js.map +1 -0
  171. package/dist/components/sidebar.d.ts +69 -0
  172. package/dist/components/sidebar.js +1645 -0
  173. package/dist/components/sidebar.js.map +1 -0
  174. package/dist/components/skeleton.d.ts +8 -0
  175. package/dist/components/skeleton.js +41 -0
  176. package/dist/components/skeleton.js.map +1 -0
  177. package/dist/components/slider.d.ts +6 -0
  178. package/dist/components/slider.js +75 -0
  179. package/dist/components/slider.js.map +1 -0
  180. package/dist/components/sortable-chip-list.d.ts +26 -0
  181. package/dist/components/sortable-chip-list.js +59 -0
  182. package/dist/components/sortable-chip-list.js.map +1 -0
  183. package/dist/components/spinner.d.ts +5 -0
  184. package/dist/components/spinner.js +65 -0
  185. package/dist/components/spinner.js.map +1 -0
  186. package/dist/components/surface.d.ts +13 -0
  187. package/dist/components/surface.js +51 -0
  188. package/dist/components/surface.js.map +1 -0
  189. package/dist/components/switch.d.ts +8 -0
  190. package/dist/components/switch.js +53 -0
  191. package/dist/components/switch.js.map +1 -0
  192. package/dist/components/table.d.ts +12 -0
  193. package/dist/components/table.js +129 -0
  194. package/dist/components/table.js.map +1 -0
  195. package/dist/components/textarea.d.ts +15 -0
  196. package/dist/components/textarea.js +58 -0
  197. package/dist/components/textarea.js.map +1 -0
  198. package/dist/components/toast.d.ts +19 -0
  199. package/dist/components/toast.js +805 -0
  200. package/dist/components/toast.js.map +1 -0
  201. package/dist/components/toggle.d.ts +12 -0
  202. package/dist/components/toggle.js +63 -0
  203. package/dist/components/toggle.js.map +1 -0
  204. package/dist/components/tooltip.d.ts +9 -0
  205. package/dist/components/tooltip.js +82 -0
  206. package/dist/components/tooltip.js.map +1 -0
  207. package/dist/hooks/use-dialog-footer-actions.d.ts +18 -0
  208. package/dist/hooks/use-dialog-footer-actions.js +11 -0
  209. package/dist/hooks/use-dialog-footer-actions.js.map +1 -0
  210. package/dist/hooks/use-form-field.d.ts +33 -0
  211. package/dist/hooks/use-form-field.js +36 -0
  212. package/dist/hooks/use-form-field.js.map +1 -0
  213. package/dist/hooks/use-mobile.d.ts +34 -0
  214. package/dist/hooks/use-mobile.js +29 -0
  215. package/dist/hooks/use-mobile.js.map +1 -0
  216. package/dist/hooks/use-pinch-pan.d.ts +56 -0
  217. package/dist/hooks/use-pinch-pan.js +223 -0
  218. package/dist/hooks/use-pinch-pan.js.map +1 -0
  219. package/dist/hooks/useMobileBackToClose.d.ts +61 -0
  220. package/dist/hooks/useMobileBackToClose.js +234 -0
  221. package/dist/hooks/useMobileBackToClose.js.map +1 -0
  222. package/dist/icon-BOgL5bpL.d.ts +85 -0
  223. package/dist/icons/actions.d.ts +4 -0
  224. package/dist/icons/actions.js +520 -0
  225. package/dist/icons/actions.js.map +1 -0
  226. package/dist/icons/icon-style.d.ts +2 -0
  227. package/dist/icons/icon-style.js +51 -0
  228. package/dist/icons/icon-style.js.map +1 -0
  229. package/dist/icons/marks.d.ts +15 -0
  230. package/dist/icons/marks.js +48 -0
  231. package/dist/icons/marks.js.map +1 -0
  232. package/dist/icons/registry.d.ts +177 -0
  233. package/dist/icons/registry.js +1180 -0
  234. package/dist/icons/registry.js.map +1 -0
  235. package/dist/index.d.ts +6 -0
  236. package/dist/index.js +653 -0
  237. package/dist/index.js.map +1 -0
  238. package/dist/lib/merge-config.d.ts +15 -0
  239. package/dist/lib/merge-config.js +20 -0
  240. package/dist/lib/merge-config.js.map +1 -0
  241. package/dist/lib/pagination.d.ts +19 -0
  242. package/dist/lib/pagination.js +26 -0
  243. package/dist/lib/pagination.js.map +1 -0
  244. package/dist/lib/utils.d.ts +5 -0
  245. package/dist/lib/utils.js +26 -0
  246. package/dist/lib/utils.js.map +1 -0
  247. package/dist/styles/theme.css +480 -0
  248. package/dist/styles/theme.css.map +1 -0
  249. package/dist/styles/theme.d.ts +2 -0
  250. package/dist/viewport.d.ts +64 -0
  251. package/dist/viewport.js +13 -0
  252. package/dist/viewport.js.map +1 -0
  253. package/package.json +122 -0
  254. package/src/components/alert.tsx +76 -0
  255. package/src/components/app-dialog.tsx +187 -0
  256. package/src/components/badge.tsx +52 -0
  257. package/src/components/breadcrumb.tsx +129 -0
  258. package/src/components/button.tsx +70 -0
  259. package/src/components/caption-bar.test.tsx +151 -0
  260. package/src/components/caption-bar.tsx +392 -0
  261. package/src/components/chart-card.tsx +31 -0
  262. package/src/components/checkbox.tsx +28 -0
  263. package/src/components/chip-button.tsx +69 -0
  264. package/src/components/close-confirm-dialog.tsx +99 -0
  265. package/src/components/color-picker.tsx +186 -0
  266. package/src/components/combobox.tsx +335 -0
  267. package/src/components/confirm-by-typing-dialog.tsx +130 -0
  268. package/src/components/confirm-dialog.test.tsx +39 -0
  269. package/src/components/confirm-dialog.tsx +98 -0
  270. package/src/components/count-badge.tsx +23 -0
  271. package/src/components/dialog.tsx +315 -0
  272. package/src/components/dropdown-menu.tsx +311 -0
  273. package/src/components/dropdown-select.tsx +211 -0
  274. package/src/components/empty.tsx +104 -0
  275. package/src/components/filter-rail.tsx +139 -0
  276. package/src/components/fixed-action-bar.tsx +46 -0
  277. package/src/components/font-picker.tsx +257 -0
  278. package/src/components/form.tsx +127 -0
  279. package/src/components/group-label.tsx +13 -0
  280. package/src/components/icon-tile.tsx +35 -0
  281. package/src/components/icon-toggle.tsx +57 -0
  282. package/src/components/icon.tsx +66 -0
  283. package/src/components/image-crop-panel.test.tsx +167 -0
  284. package/src/components/image-crop-panel.tsx +465 -0
  285. package/src/components/image-cropper.test.tsx +144 -0
  286. package/src/components/image-cropper.tsx +265 -0
  287. package/src/components/input-group.tsx +156 -0
  288. package/src/components/input.tsx +45 -0
  289. package/src/components/label.tsx +20 -0
  290. package/src/components/list-empty-row.tsx +27 -0
  291. package/src/components/management-empty.tsx +25 -0
  292. package/src/components/management-skeleton.tsx +23 -0
  293. package/src/components/meta-chip.tsx +40 -0
  294. package/src/components/mobile-drawer.test.tsx +52 -0
  295. package/src/components/mobile-drawer.tsx +98 -0
  296. package/src/components/page-header.tsx +47 -0
  297. package/src/components/page-scaffold.test.tsx +24 -0
  298. package/src/components/page-scaffold.tsx +131 -0
  299. package/src/components/pagination-bar.test.tsx +87 -0
  300. package/src/components/pagination-bar.tsx +139 -0
  301. package/src/components/pagination.tsx +139 -0
  302. package/src/components/panel-toolbar.tsx +99 -0
  303. package/src/components/pill-tabs.test.tsx +84 -0
  304. package/src/components/pill-tabs.tsx +77 -0
  305. package/src/components/plugin-download-consent.test.tsx +90 -0
  306. package/src/components/plugin-download-consent.tsx +183 -0
  307. package/src/components/popover.tsx +133 -0
  308. package/src/components/progress.tsx +88 -0
  309. package/src/components/query-state-view.tsx +47 -0
  310. package/src/components/radio-group.tsx +36 -0
  311. package/src/components/scroll-area.tsx +52 -0
  312. package/src/components/search-field.test.tsx +86 -0
  313. package/src/components/search-field.tsx +119 -0
  314. package/src/components/secondary-stat.tsx +24 -0
  315. package/src/components/section-header.tsx +54 -0
  316. package/src/components/section-label.tsx +40 -0
  317. package/src/components/section-tabs.test.tsx +154 -0
  318. package/src/components/section-tabs.tsx +190 -0
  319. package/src/components/separator.tsx +38 -0
  320. package/src/components/sheet.tsx +170 -0
  321. package/src/components/sidebar.tsx +725 -0
  322. package/src/components/skeleton.tsx +18 -0
  323. package/src/components/slider.tsx +52 -0
  324. package/src/components/sortable-chip-list.tsx +56 -0
  325. package/src/components/spinner.tsx +35 -0
  326. package/src/components/surface.tsx +37 -0
  327. package/src/components/switch.tsx +30 -0
  328. package/src/components/table.tsx +116 -0
  329. package/src/components/textarea.tsx +41 -0
  330. package/src/components/toast.tsx +239 -0
  331. package/src/components/toggle.tsx +45 -0
  332. package/src/components/tooltip.tsx +64 -0
  333. package/src/hooks/use-dialog-footer-actions.ts +23 -0
  334. package/src/hooks/use-form-field.ts +62 -0
  335. package/src/hooks/use-mobile.ts +54 -0
  336. package/src/hooks/use-pinch-pan.test.tsx +42 -0
  337. package/src/hooks/use-pinch-pan.ts +340 -0
  338. package/src/hooks/useMobileBackToClose.test.tsx +140 -0
  339. package/src/hooks/useMobileBackToClose.ts +508 -0
  340. package/src/icons/actions.ts +10 -0
  341. package/src/icons/icon-style.test.tsx +69 -0
  342. package/src/icons/icon-style.ts +104 -0
  343. package/src/icons/marks.tsx +72 -0
  344. package/src/icons/registry.test.ts +65 -0
  345. package/src/icons/registry.ts +1163 -0
  346. package/src/index.ts +22 -0
  347. package/src/lib/merge-config.test.ts +109 -0
  348. package/src/lib/merge-config.ts +22 -0
  349. package/src/lib/pagination.test.ts +55 -0
  350. package/src/lib/pagination.ts +42 -0
  351. package/src/lib/utils.ts +6 -0
  352. package/src/styles/scan-contract.test.ts +74 -0
  353. package/src/styles/theme.css +798 -0
  354. package/src/test/i18n.tsx +22 -0
  355. package/src/test/setup.ts +104 -0
  356. package/src/viewport.ts +69 -0
@@ -0,0 +1,1645 @@
1
+ import * as React2 from 'react';
2
+ import { useRef, useEffect, useSyncExternalStore, createElement } from 'react';
3
+ import { mergeProps } from '@base-ui/react/merge-props';
4
+ import { useRender } from '@base-ui/react/use-render';
5
+ import { cva } from 'class-variance-authority';
6
+ import { useTranslation } from 'react-i18next';
7
+ import { useMedia } from 'react-use';
8
+ import { clsx } from 'clsx';
9
+ import { extendTailwindMerge } from 'tailwind-merge';
10
+ import { Button as Button$1 } from '@base-ui/react/button';
11
+ import { jsx, jsxs } from 'react/jsx-runtime';
12
+ import { Input as Input$1 } from '@base-ui/react/input';
13
+ import { Separator as Separator$1 } from '@base-ui/react/separator';
14
+ import { Dialog } from '@base-ui/react/dialog';
15
+ import { Tooltip as Tooltip$1 } from '@base-ui/react/tooltip';
16
+ import '@solar-icons/react/bold/add-circle';
17
+ import '@solar-icons/react/bold/align-left';
18
+ import '@solar-icons/react/bold/alt-arrow-down';
19
+ import '@solar-icons/react/bold/alt-arrow-left';
20
+ import '@solar-icons/react/bold/alt-arrow-right';
21
+ import '@solar-icons/react/bold/alt-arrow-up';
22
+ import '@solar-icons/react/bold/archive';
23
+ import '@solar-icons/react/bold/arrow-right';
24
+ import '@solar-icons/react/bold/arrow-to-top-left';
25
+ import '@solar-icons/react/bold/arrow-to-top-right';
26
+ import '@solar-icons/react/bold/bell';
27
+ import '@solar-icons/react/bold/bolt';
28
+ import '@solar-icons/react/bold/book';
29
+ import '@solar-icons/react/bold/book-2';
30
+ import '@solar-icons/react/bold/bookmark';
31
+ import '@solar-icons/react/bold/bookmark-circle';
32
+ import '@solar-icons/react/bold/box';
33
+ import '@solar-icons/react/bold/branching-paths-up';
34
+ import '@solar-icons/react/bold/bug';
35
+ import '@solar-icons/react/bold/calendar-date';
36
+ import '@solar-icons/react/bold/chat-round';
37
+ import '@solar-icons/react/bold/chat-round-dots';
38
+ import '@solar-icons/react/bold/chat-round-line';
39
+ import '@solar-icons/react/bold/chat-square';
40
+ import '@solar-icons/react/bold/check-circle';
41
+ import '@solar-icons/react/bold/checklist';
42
+ import '@solar-icons/react/bold/clipboard-list';
43
+ import '@solar-icons/react/bold/clock-circle';
44
+ import '@solar-icons/react/bold/compass';
45
+ import '@solar-icons/react/bold/copy';
46
+ import '@solar-icons/react/bold/crown';
47
+ import '@solar-icons/react/bold/danger-triangle';
48
+ import '@solar-icons/react/bold/database';
49
+ import '@solar-icons/react/bold/diskette';
50
+ import '@solar-icons/react/bold/dislike';
51
+ import '@solar-icons/react/bold/document-add';
52
+ import '@solar-icons/react/bold/document-text';
53
+ import '@solar-icons/react/bold/double-alt-arrow-down';
54
+ import '@solar-icons/react/bold/download';
55
+ import '@solar-icons/react/bold/eraser';
56
+ import '@solar-icons/react/bold/eye';
57
+ import '@solar-icons/react/bold/file';
58
+ import '@solar-icons/react/bold/file-remove';
59
+ import '@solar-icons/react/bold/file-text';
60
+ import '@solar-icons/react/bold/filter';
61
+ import '@solar-icons/react/bold/filters';
62
+ import '@solar-icons/react/bold/folder';
63
+ import '@solar-icons/react/bold/folder-open';
64
+ import '@solar-icons/react/bold/folder-path-connect';
65
+ import '@solar-icons/react/bold/forbidden-circle';
66
+ import '@solar-icons/react/bold/gallery';
67
+ import '@solar-icons/react/bold/gallery-add';
68
+ import '@solar-icons/react/bold/gallery-wide';
69
+ import '@solar-icons/react/bold/global';
70
+ import '@solar-icons/react/bold/graph-down';
71
+ import '@solar-icons/react/bold/graph-up';
72
+ import { HamburgerMenuIcon as HamburgerMenuIcon$2 } from '@solar-icons/react/bold/hamburger-menu';
73
+ import '@solar-icons/react/bold/hand-heart';
74
+ import '@solar-icons/react/bold/heart';
75
+ import '@solar-icons/react/bold/help';
76
+ import '@solar-icons/react/bold/history';
77
+ import '@solar-icons/react/bold/home-angle';
78
+ import '@solar-icons/react/bold/info-circle';
79
+ import '@solar-icons/react/bold/layers';
80
+ import '@solar-icons/react/bold/letter';
81
+ import '@solar-icons/react/bold/like';
82
+ import '@solar-icons/react/bold/link';
83
+ import '@solar-icons/react/bold/list';
84
+ import '@solar-icons/react/bold/list-vertical';
85
+ import '@solar-icons/react/bold/lock-password';
86
+ import '@solar-icons/react/bold/login-2';
87
+ import '@solar-icons/react/bold/logout';
88
+ import '@solar-icons/react/bold/magic-wand-2';
89
+ import '@solar-icons/react/bold/magnifier';
90
+ import '@solar-icons/react/bold/magnifier-zoom-in';
91
+ import '@solar-icons/react/bold/magnifier-zoom-out';
92
+ import '@solar-icons/react/bold/maximize';
93
+ import '@solar-icons/react/bold/menu-dots';
94
+ import '@solar-icons/react/bold/minimize';
95
+ import '@solar-icons/react/bold/minus-square';
96
+ import '@solar-icons/react/bold/monitor';
97
+ import '@solar-icons/react/bold/monitor-smartphone';
98
+ import '@solar-icons/react/bold/moon';
99
+ import '@solar-icons/react/bold/move-to-folder';
100
+ import '@solar-icons/react/bold/music-notes';
101
+ import '@solar-icons/react/bold/palette';
102
+ import '@solar-icons/react/bold/palette-round';
103
+ import '@solar-icons/react/bold/pause';
104
+ import '@solar-icons/react/bold/pen';
105
+ import '@solar-icons/react/bold/pen-new-round';
106
+ import '@solar-icons/react/bold/pie-chart';
107
+ import '@solar-icons/react/bold/pin';
108
+ import '@solar-icons/react/bold/play';
109
+ import '@solar-icons/react/bold/plug-circle';
110
+ import '@solar-icons/react/bold/plus-minus';
111
+ import '@solar-icons/react/bold/pulse';
112
+ import '@solar-icons/react/bold/refresh';
113
+ import '@solar-icons/react/bold/refresh-circle';
114
+ import '@solar-icons/react/bold/reorder';
115
+ import '@solar-icons/react/bold/repeat';
116
+ import '@solar-icons/react/bold/reply';
117
+ import '@solar-icons/react/bold/restart';
118
+ import '@solar-icons/react/bold/rocket';
119
+ import '@solar-icons/react/bold/route';
120
+ import '@solar-icons/react/bold/scale';
121
+ import '@solar-icons/react/bold/server';
122
+ import '@solar-icons/react/bold/settings';
123
+ import '@solar-icons/react/bold/share';
124
+ import '@solar-icons/react/bold/shield-check';
125
+ import '@solar-icons/react/bold/sidebar-minimalistic';
126
+ import '@solar-icons/react/bold/slider-horizontal';
127
+ import '@solar-icons/react/bold/smartphone';
128
+ import '@solar-icons/react/bold/sort';
129
+ import '@solar-icons/react/bold/sort-by-time';
130
+ import '@solar-icons/react/bold/sort-horizontal';
131
+ import '@solar-icons/react/bold/sort-vertical';
132
+ import '@solar-icons/react/bold/star';
133
+ import '@solar-icons/react/bold/structure';
134
+ import '@solar-icons/react/bold/sun';
135
+ import '@solar-icons/react/bold/tag';
136
+ import '@solar-icons/react/bold/telescope';
137
+ import '@solar-icons/react/bold/test-tube';
138
+ import '@solar-icons/react/bold/text-format';
139
+ import '@solar-icons/react/bold/transfer-horizontal';
140
+ import '@solar-icons/react/bold/translation';
141
+ import '@solar-icons/react/bold/trash-bin-minimalistic';
142
+ import '@solar-icons/react/bold/undo-left';
143
+ import '@solar-icons/react/bold/undo-left-round';
144
+ import '@solar-icons/react/bold/undo-right';
145
+ import '@solar-icons/react/bold/undo-right-round';
146
+ import '@solar-icons/react/bold/upload';
147
+ import '@solar-icons/react/bold/user';
148
+ import '@solar-icons/react/bold/user-id';
149
+ import '@solar-icons/react/bold/user-minus';
150
+ import '@solar-icons/react/bold/user-plus';
151
+ import '@solar-icons/react/bold/users-group-rounded';
152
+ import '@solar-icons/react/bold/users-group-two-rounded';
153
+ import '@solar-icons/react/bold/video-frame';
154
+ import '@solar-icons/react/bold/widget-2';
155
+ import '@solar-icons/react/bold/widget-5';
156
+ import '@solar-icons/react/bold/window-frame';
157
+ import '@solar-icons/react/bold-duotone/add-circle';
158
+ import '@solar-icons/react/bold-duotone/align-left';
159
+ import '@solar-icons/react/bold-duotone/alt-arrow-down';
160
+ import '@solar-icons/react/bold-duotone/alt-arrow-left';
161
+ import '@solar-icons/react/bold-duotone/alt-arrow-right';
162
+ import '@solar-icons/react/bold-duotone/alt-arrow-up';
163
+ import '@solar-icons/react/bold-duotone/archive';
164
+ import '@solar-icons/react/bold-duotone/arrow-right';
165
+ import '@solar-icons/react/bold-duotone/arrow-to-top-left';
166
+ import '@solar-icons/react/bold-duotone/arrow-to-top-right';
167
+ import '@solar-icons/react/bold-duotone/bell';
168
+ import '@solar-icons/react/bold-duotone/bolt';
169
+ import '@solar-icons/react/bold-duotone/book';
170
+ import '@solar-icons/react/bold-duotone/book-2';
171
+ import '@solar-icons/react/bold-duotone/bookmark';
172
+ import '@solar-icons/react/bold-duotone/bookmark-circle';
173
+ import '@solar-icons/react/bold-duotone/box';
174
+ import '@solar-icons/react/bold-duotone/branching-paths-up';
175
+ import '@solar-icons/react/bold-duotone/bug';
176
+ import '@solar-icons/react/bold-duotone/calendar-date';
177
+ import '@solar-icons/react/bold-duotone/chat-round';
178
+ import '@solar-icons/react/bold-duotone/chat-round-dots';
179
+ import '@solar-icons/react/bold-duotone/chat-round-line';
180
+ import '@solar-icons/react/bold-duotone/chat-square';
181
+ import '@solar-icons/react/bold-duotone/check-circle';
182
+ import '@solar-icons/react/bold-duotone/checklist';
183
+ import '@solar-icons/react/bold-duotone/clipboard-list';
184
+ import '@solar-icons/react/bold-duotone/clock-circle';
185
+ import '@solar-icons/react/bold-duotone/compass';
186
+ import '@solar-icons/react/bold-duotone/copy';
187
+ import '@solar-icons/react/bold-duotone/crown';
188
+ import '@solar-icons/react/bold-duotone/danger-triangle';
189
+ import '@solar-icons/react/bold-duotone/database';
190
+ import '@solar-icons/react/bold-duotone/diskette';
191
+ import '@solar-icons/react/bold-duotone/dislike';
192
+ import '@solar-icons/react/bold-duotone/document-add';
193
+ import '@solar-icons/react/bold-duotone/document-text';
194
+ import '@solar-icons/react/bold-duotone/double-alt-arrow-down';
195
+ import '@solar-icons/react/bold-duotone/download';
196
+ import '@solar-icons/react/bold-duotone/eraser';
197
+ import '@solar-icons/react/bold-duotone/eye';
198
+ import '@solar-icons/react/bold-duotone/file';
199
+ import '@solar-icons/react/bold-duotone/file-remove';
200
+ import '@solar-icons/react/bold-duotone/file-text';
201
+ import '@solar-icons/react/bold-duotone/filter';
202
+ import '@solar-icons/react/bold-duotone/filters';
203
+ import '@solar-icons/react/bold-duotone/folder';
204
+ import '@solar-icons/react/bold-duotone/folder-open';
205
+ import '@solar-icons/react/bold-duotone/folder-path-connect';
206
+ import '@solar-icons/react/bold-duotone/forbidden-circle';
207
+ import '@solar-icons/react/bold-duotone/gallery';
208
+ import '@solar-icons/react/bold-duotone/gallery-add';
209
+ import '@solar-icons/react/bold-duotone/gallery-wide';
210
+ import '@solar-icons/react/bold-duotone/global';
211
+ import '@solar-icons/react/bold-duotone/graph-down';
212
+ import '@solar-icons/react/bold-duotone/graph-up';
213
+ import { HamburgerMenuIcon as HamburgerMenuIcon$1 } from '@solar-icons/react/bold-duotone/hamburger-menu';
214
+ import '@solar-icons/react/bold-duotone/hand-heart';
215
+ import '@solar-icons/react/bold-duotone/heart';
216
+ import '@solar-icons/react/bold-duotone/help';
217
+ import '@solar-icons/react/bold-duotone/history';
218
+ import '@solar-icons/react/bold-duotone/home-angle';
219
+ import '@solar-icons/react/bold-duotone/info-circle';
220
+ import '@solar-icons/react/bold-duotone/layers';
221
+ import '@solar-icons/react/bold-duotone/letter';
222
+ import '@solar-icons/react/bold-duotone/like';
223
+ import '@solar-icons/react/bold-duotone/link';
224
+ import '@solar-icons/react/bold-duotone/list';
225
+ import '@solar-icons/react/bold-duotone/list-vertical';
226
+ import '@solar-icons/react/bold-duotone/lock-password';
227
+ import '@solar-icons/react/bold-duotone/login-2';
228
+ import '@solar-icons/react/bold-duotone/logout';
229
+ import '@solar-icons/react/bold-duotone/magic-wand-2';
230
+ import '@solar-icons/react/bold-duotone/magnifier';
231
+ import '@solar-icons/react/bold-duotone/magnifier-zoom-in';
232
+ import '@solar-icons/react/bold-duotone/magnifier-zoom-out';
233
+ import '@solar-icons/react/bold-duotone/maximize';
234
+ import '@solar-icons/react/bold-duotone/menu-dots';
235
+ import '@solar-icons/react/bold-duotone/minimize';
236
+ import '@solar-icons/react/bold-duotone/minus-square';
237
+ import '@solar-icons/react/bold-duotone/monitor';
238
+ import '@solar-icons/react/bold-duotone/monitor-smartphone';
239
+ import '@solar-icons/react/bold-duotone/moon';
240
+ import '@solar-icons/react/bold-duotone/move-to-folder';
241
+ import '@solar-icons/react/bold-duotone/music-notes';
242
+ import '@solar-icons/react/bold-duotone/palette';
243
+ import '@solar-icons/react/bold-duotone/palette-round';
244
+ import '@solar-icons/react/bold-duotone/pause';
245
+ import '@solar-icons/react/bold-duotone/pen';
246
+ import '@solar-icons/react/bold-duotone/pen-new-round';
247
+ import '@solar-icons/react/bold-duotone/pie-chart';
248
+ import '@solar-icons/react/bold-duotone/pin';
249
+ import '@solar-icons/react/bold-duotone/play';
250
+ import '@solar-icons/react/bold-duotone/plug-circle';
251
+ import '@solar-icons/react/bold-duotone/plus-minus';
252
+ import '@solar-icons/react/bold-duotone/pulse';
253
+ import '@solar-icons/react/bold-duotone/refresh';
254
+ import '@solar-icons/react/bold-duotone/refresh-circle';
255
+ import '@solar-icons/react/bold-duotone/reorder';
256
+ import '@solar-icons/react/bold-duotone/repeat';
257
+ import '@solar-icons/react/bold-duotone/reply';
258
+ import '@solar-icons/react/bold-duotone/restart';
259
+ import '@solar-icons/react/bold-duotone/rocket';
260
+ import '@solar-icons/react/bold-duotone/route';
261
+ import '@solar-icons/react/bold-duotone/scale';
262
+ import '@solar-icons/react/bold-duotone/server';
263
+ import '@solar-icons/react/bold-duotone/settings';
264
+ import '@solar-icons/react/bold-duotone/share';
265
+ import '@solar-icons/react/bold-duotone/shield-check';
266
+ import '@solar-icons/react/bold-duotone/sidebar-minimalistic';
267
+ import '@solar-icons/react/bold-duotone/slider-horizontal';
268
+ import '@solar-icons/react/bold-duotone/smartphone';
269
+ import '@solar-icons/react/bold-duotone/sort';
270
+ import '@solar-icons/react/bold-duotone/sort-by-time';
271
+ import '@solar-icons/react/bold-duotone/sort-horizontal';
272
+ import '@solar-icons/react/bold-duotone/sort-vertical';
273
+ import '@solar-icons/react/bold-duotone/star';
274
+ import '@solar-icons/react/bold-duotone/structure';
275
+ import '@solar-icons/react/bold-duotone/sun';
276
+ import '@solar-icons/react/bold-duotone/tag';
277
+ import '@solar-icons/react/bold-duotone/telescope';
278
+ import '@solar-icons/react/bold-duotone/test-tube';
279
+ import '@solar-icons/react/bold-duotone/text-format';
280
+ import '@solar-icons/react/bold-duotone/transfer-horizontal';
281
+ import '@solar-icons/react/bold-duotone/translation';
282
+ import '@solar-icons/react/bold-duotone/trash-bin-minimalistic';
283
+ import '@solar-icons/react/bold-duotone/undo-left';
284
+ import '@solar-icons/react/bold-duotone/undo-left-round';
285
+ import '@solar-icons/react/bold-duotone/undo-right';
286
+ import '@solar-icons/react/bold-duotone/undo-right-round';
287
+ import '@solar-icons/react/bold-duotone/upload';
288
+ import '@solar-icons/react/bold-duotone/user';
289
+ import '@solar-icons/react/bold-duotone/user-id';
290
+ import '@solar-icons/react/bold-duotone/user-minus';
291
+ import '@solar-icons/react/bold-duotone/user-plus';
292
+ import '@solar-icons/react/bold-duotone/users-group-rounded';
293
+ import '@solar-icons/react/bold-duotone/users-group-two-rounded';
294
+ import '@solar-icons/react/bold-duotone/video-frame';
295
+ import '@solar-icons/react/bold-duotone/widget-2';
296
+ import '@solar-icons/react/bold-duotone/widget-5';
297
+ import '@solar-icons/react/bold-duotone/window-frame';
298
+ import '@solar-icons/react/linear/add-circle';
299
+ import '@solar-icons/react/linear/align-left';
300
+ import '@solar-icons/react/linear/alt-arrow-down';
301
+ import '@solar-icons/react/linear/alt-arrow-left';
302
+ import '@solar-icons/react/linear/alt-arrow-right';
303
+ import '@solar-icons/react/linear/alt-arrow-up';
304
+ import '@solar-icons/react/linear/archive';
305
+ import '@solar-icons/react/linear/arrow-right';
306
+ import '@solar-icons/react/linear/arrow-to-top-left';
307
+ import '@solar-icons/react/linear/arrow-to-top-right';
308
+ import '@solar-icons/react/linear/bell';
309
+ import '@solar-icons/react/linear/bolt';
310
+ import '@solar-icons/react/linear/book';
311
+ import '@solar-icons/react/linear/book-2';
312
+ import '@solar-icons/react/linear/bookmark';
313
+ import '@solar-icons/react/linear/bookmark-circle';
314
+ import '@solar-icons/react/linear/box';
315
+ import '@solar-icons/react/linear/branching-paths-up';
316
+ import '@solar-icons/react/linear/bug';
317
+ import '@solar-icons/react/linear/calendar-date';
318
+ import '@solar-icons/react/linear/chat-round';
319
+ import '@solar-icons/react/linear/chat-round-dots';
320
+ import '@solar-icons/react/linear/chat-round-line';
321
+ import '@solar-icons/react/linear/chat-square';
322
+ import '@solar-icons/react/linear/check-circle';
323
+ import '@solar-icons/react/linear/checklist';
324
+ import '@solar-icons/react/linear/clipboard-list';
325
+ import '@solar-icons/react/linear/clock-circle';
326
+ import '@solar-icons/react/linear/compass';
327
+ import '@solar-icons/react/linear/copy';
328
+ import '@solar-icons/react/linear/crown';
329
+ import '@solar-icons/react/linear/danger-triangle';
330
+ import '@solar-icons/react/linear/database';
331
+ import '@solar-icons/react/linear/diskette';
332
+ import '@solar-icons/react/linear/dislike';
333
+ import '@solar-icons/react/linear/document-add';
334
+ import '@solar-icons/react/linear/document-text';
335
+ import '@solar-icons/react/linear/double-alt-arrow-down';
336
+ import '@solar-icons/react/linear/download';
337
+ import '@solar-icons/react/linear/eraser';
338
+ import '@solar-icons/react/linear/eye';
339
+ import '@solar-icons/react/linear/file';
340
+ import '@solar-icons/react/linear/file-remove';
341
+ import '@solar-icons/react/linear/file-text';
342
+ import '@solar-icons/react/linear/filter';
343
+ import '@solar-icons/react/linear/filters';
344
+ import '@solar-icons/react/linear/folder';
345
+ import '@solar-icons/react/linear/folder-open';
346
+ import '@solar-icons/react/linear/folder-path-connect';
347
+ import '@solar-icons/react/linear/forbidden-circle';
348
+ import '@solar-icons/react/linear/gallery';
349
+ import '@solar-icons/react/linear/gallery-add';
350
+ import '@solar-icons/react/linear/gallery-wide';
351
+ import '@solar-icons/react/linear/global';
352
+ import '@solar-icons/react/linear/graph-down';
353
+ import '@solar-icons/react/linear/graph-up';
354
+ import { HamburgerMenuIcon } from '@solar-icons/react/linear/hamburger-menu';
355
+ import '@solar-icons/react/linear/hand-heart';
356
+ import '@solar-icons/react/linear/heart';
357
+ import '@solar-icons/react/linear/help';
358
+ import '@solar-icons/react/linear/history';
359
+ import '@solar-icons/react/linear/home-angle';
360
+ import '@solar-icons/react/linear/info-circle';
361
+ import '@solar-icons/react/linear/layers';
362
+ import '@solar-icons/react/linear/letter';
363
+ import '@solar-icons/react/linear/like';
364
+ import '@solar-icons/react/linear/link';
365
+ import '@solar-icons/react/linear/list';
366
+ import '@solar-icons/react/linear/list-vertical';
367
+ import '@solar-icons/react/linear/lock-password';
368
+ import '@solar-icons/react/linear/login-2';
369
+ import '@solar-icons/react/linear/logout';
370
+ import '@solar-icons/react/linear/magic-wand-2';
371
+ import '@solar-icons/react/linear/magnifier';
372
+ import '@solar-icons/react/linear/magnifier-zoom-in';
373
+ import '@solar-icons/react/linear/magnifier-zoom-out';
374
+ import '@solar-icons/react/linear/maximize';
375
+ import '@solar-icons/react/linear/minimize';
376
+ import '@solar-icons/react/linear/minus-square';
377
+ import '@solar-icons/react/linear/monitor';
378
+ import '@solar-icons/react/linear/monitor-smartphone';
379
+ import '@solar-icons/react/linear/moon';
380
+ import '@solar-icons/react/linear/move-to-folder';
381
+ import '@solar-icons/react/linear/music-notes';
382
+ import '@solar-icons/react/linear/palette';
383
+ import '@solar-icons/react/linear/palette-round';
384
+ import '@solar-icons/react/linear/pause';
385
+ import '@solar-icons/react/linear/pen';
386
+ import '@solar-icons/react/linear/pen-new-round';
387
+ import '@solar-icons/react/linear/pie-chart';
388
+ import '@solar-icons/react/linear/pin';
389
+ import '@solar-icons/react/linear/play';
390
+ import '@solar-icons/react/linear/plug-circle';
391
+ import '@solar-icons/react/linear/plus-minus';
392
+ import '@solar-icons/react/linear/pulse';
393
+ import '@solar-icons/react/linear/refresh';
394
+ import '@solar-icons/react/linear/refresh-circle';
395
+ import '@solar-icons/react/linear/reorder';
396
+ import '@solar-icons/react/linear/repeat';
397
+ import '@solar-icons/react/linear/reply';
398
+ import '@solar-icons/react/linear/restart';
399
+ import '@solar-icons/react/linear/rocket';
400
+ import '@solar-icons/react/linear/route';
401
+ import '@solar-icons/react/linear/scale';
402
+ import '@solar-icons/react/linear/server';
403
+ import '@solar-icons/react/linear/settings';
404
+ import '@solar-icons/react/linear/share';
405
+ import '@solar-icons/react/linear/shield-check';
406
+ import '@solar-icons/react/linear/sidebar-minimalistic';
407
+ import '@solar-icons/react/linear/slider-horizontal';
408
+ import '@solar-icons/react/linear/smartphone';
409
+ import '@solar-icons/react/linear/sort';
410
+ import '@solar-icons/react/linear/sort-by-time';
411
+ import '@solar-icons/react/linear/sort-horizontal';
412
+ import '@solar-icons/react/linear/sort-vertical';
413
+ import '@solar-icons/react/linear/star';
414
+ import '@solar-icons/react/linear/structure';
415
+ import '@solar-icons/react/linear/sun';
416
+ import '@solar-icons/react/linear/tag';
417
+ import '@solar-icons/react/linear/telescope';
418
+ import '@solar-icons/react/linear/test-tube';
419
+ import '@solar-icons/react/linear/text-format';
420
+ import '@solar-icons/react/linear/transfer-horizontal';
421
+ import '@solar-icons/react/linear/translation';
422
+ import '@solar-icons/react/linear/trash-bin-minimalistic';
423
+ import '@solar-icons/react/linear/undo-left';
424
+ import '@solar-icons/react/linear/undo-left-round';
425
+ import '@solar-icons/react/linear/undo-right';
426
+ import '@solar-icons/react/linear/undo-right-round';
427
+ import '@solar-icons/react/linear/upload';
428
+ import '@solar-icons/react/linear/user';
429
+ import '@solar-icons/react/linear/user-id';
430
+ import '@solar-icons/react/linear/user-minus';
431
+ import '@solar-icons/react/linear/user-plus';
432
+ import '@solar-icons/react/linear/users-group-rounded';
433
+ import '@solar-icons/react/linear/users-group-two-rounded';
434
+ import '@solar-icons/react/linear/video-frame';
435
+ import '@solar-icons/react/linear/widget-2';
436
+ import '@solar-icons/react/linear/widget-5';
437
+ import '@solar-icons/react/linear/window-frame';
438
+
439
+ // src/components/sidebar.tsx
440
+
441
+ // src/viewport.ts
442
+ var MOBILE_BREAKPOINT_PX = 768;
443
+ var MOBILE_QUERY = `(max-width: ${MOBILE_BREAKPOINT_PX - 1}px)`;
444
+ function isBelowMd() {
445
+ if (typeof window === "undefined") return false;
446
+ return window.matchMedia(MOBILE_QUERY).matches;
447
+ }
448
+ function useBelowMd() {
449
+ return useMedia(MOBILE_QUERY, false);
450
+ }
451
+ function useIsMobile() {
452
+ return useBelowMd();
453
+ }
454
+ var mergeTheme = {
455
+ text: ["tiny", "ui", "doc", "doc-title", "doc-heading", "quote"],
456
+ spacing: ["chip", "control", "nav", "sidebar", "panel"],
457
+ tracking: ["label"],
458
+ shadow: ["card", "dialog"],
459
+ container: ["reading", "medium", "content"],
460
+ font: ["doc", "heading"],
461
+ ease: ["standard"],
462
+ animate: ["skel", "pop"]
463
+ };
464
+ var twMerge = extendTailwindMerge({
465
+ extend: { theme: mergeTheme }
466
+ });
467
+
468
+ // src/lib/utils.ts
469
+ function cn(...inputs) {
470
+ return twMerge(clsx(inputs));
471
+ }
472
+ var buttonVariants = cva(
473
+ "group/button inline-flex shrink-0 items-center justify-center rounded-lg text-ui font-medium whitespace-nowrap outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
474
+ {
475
+ variants: {
476
+ variant: {
477
+ default: "bg-primary px-4! text-primary-foreground hover:bg-primary/80",
478
+ outline: "border-border bg-background shadow-xs hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
479
+ secondary: "bg-secondary text-foreground hover:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)] aria-expanded:bg-secondary aria-expanded:text-foreground",
480
+ ghost: "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",
481
+ destructive: "bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",
482
+ danger: "bg-[color-mix(in_oklab,var(--destructive),black_12%)] text-white hover:bg-[color-mix(in_oklab,var(--destructive),black_4%)] focus-visible:border-destructive/40 focus-visible:ring-destructive/20 disabled:bg-destructive/10 disabled:text-muted-foreground dark:focus-visible:ring-destructive/40",
483
+ link: "text-primary underline-offset-4 hover:underline"
484
+ },
485
+ size: {
486
+ default: "h-control gap-2 px-3 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
487
+ xs: "h-6 gap-2 rounded-[min(var(--radius-md),8px)] px-2 text-xs in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
488
+ sm: "h-chip gap-2 rounded-[min(var(--radius-md),10px)] px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5",
489
+ lg: "h-10 gap-2 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
490
+ icon: "size-9",
491
+ "icon-xs": "size-6 rounded-[min(var(--radius-md),8px)] in-data-[slot=button-group]:rounded-md [&_svg:not([class*='size-'])]:size-3",
492
+ "icon-sm": "size-8 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-md",
493
+ "icon-lg": "size-10"
494
+ }
495
+ },
496
+ defaultVariants: {
497
+ variant: "default",
498
+ size: "default"
499
+ }
500
+ }
501
+ );
502
+ function Button({
503
+ active,
504
+ className,
505
+ variant = "default",
506
+ size = "default",
507
+ ...props
508
+ }) {
509
+ return /* @__PURE__ */ jsx(
510
+ Button$1,
511
+ {
512
+ "data-slot": "button",
513
+ className: cn(
514
+ buttonVariants({ variant, size, className }),
515
+ active && "bg-accent text-accent-foreground hover:bg-accent"
516
+ ),
517
+ ...props
518
+ }
519
+ );
520
+ }
521
+ var inputVariants = cva(
522
+ "w-full min-w-0 rounded-lg bg-muted text-ui text-foreground outline-none placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-[3px] aria-invalid:ring-destructive/20",
523
+ {
524
+ variants: {
525
+ size: {
526
+ sm: "h-chip px-2.5 text-xs",
527
+ md: "h-control px-3",
528
+ lg: "h-10 px-3.5"
529
+ }
530
+ },
531
+ defaultVariants: {
532
+ size: "md"
533
+ }
534
+ }
535
+ );
536
+ function Input({
537
+ className,
538
+ size,
539
+ type,
540
+ ...props
541
+ }) {
542
+ return /* @__PURE__ */ jsx(
543
+ Input$1,
544
+ {
545
+ type,
546
+ "data-slot": "input",
547
+ className: cn(inputVariants({ size }), className),
548
+ ...props
549
+ }
550
+ );
551
+ }
552
+ function Separator({
553
+ className,
554
+ orientation = "horizontal",
555
+ size = "hairline",
556
+ ...props
557
+ }) {
558
+ const thickness = size === "seam" ? "data-horizontal:h-0.5 data-vertical:w-0.5" : "data-horizontal:h-px data-vertical:w-px";
559
+ return /* @__PURE__ */ jsx(
560
+ Separator$1,
561
+ {
562
+ "data-slot": "separator",
563
+ orientation,
564
+ className: cn(
565
+ "shrink-0 bg-border data-horizontal:w-full data-vertical:self-stretch",
566
+ thickness,
567
+ className
568
+ ),
569
+ ...props
570
+ }
571
+ );
572
+ }
573
+ var HISTORY_KEY = "__appMobileOverlay";
574
+ var overlayStack = [];
575
+ var popListenerInstalled = false;
576
+ var historyPatched = false;
577
+ var nextOverlayId = 0;
578
+ var suppressPopCount = 0;
579
+ var seenSyntheticIds = /* @__PURE__ */ new Set();
580
+ function patchHistory() {
581
+ if (historyPatched) return;
582
+ if (typeof window === "undefined") return;
583
+ historyPatched = true;
584
+ const origPush = window.history.pushState.bind(window.history);
585
+ window.history.pushState = (data, unused, url) => {
586
+ const state = data;
587
+ if (state !== null && typeof state === "object" && HISTORY_KEY in state) {
588
+ origPush(data, unused, url);
589
+ return;
590
+ }
591
+ if (overlayStack.length > 0) {
592
+ closeAllOverlays();
593
+ }
594
+ origPush(data, unused, url);
595
+ };
596
+ }
597
+ function closeAllOverlays() {
598
+ while (overlayStack.length > 0) {
599
+ const entry = overlayStack.pop();
600
+ if (entry?.close !== void 0) {
601
+ const fn = entry.close;
602
+ entry.close = void 0;
603
+ fn();
604
+ }
605
+ }
606
+ }
607
+ function ensurePopListener() {
608
+ if (popListenerInstalled) return;
609
+ if (typeof window === "undefined") return;
610
+ popListenerInstalled = true;
611
+ window.addEventListener(
612
+ "popstate",
613
+ (e) => {
614
+ if (suppressPopCount > 0) return;
615
+ const state = e.state;
616
+ if (state !== null && typeof state === "object" && HISTORY_KEY in state) {
617
+ const id = state[HISTORY_KEY];
618
+ if (typeof id === "number" && overlayStack.some((entry) => entry.id === id)) {
619
+ closeTopOverlay();
620
+ e.stopImmediatePropagation();
621
+ return;
622
+ }
623
+ e.stopImmediatePropagation();
624
+ if (typeof id === "number" && seenSyntheticIds.has(id)) {
625
+ window.history.back();
626
+ }
627
+ }
628
+ },
629
+ true
630
+ // capture phase
631
+ );
632
+ window.addEventListener("popstate", handlePop);
633
+ patchHistory();
634
+ }
635
+ function closeTopOverlay() {
636
+ const top = overlayStack.pop();
637
+ if (top === void 0) return;
638
+ if (top.close === void 0) return;
639
+ const closeFn = top.close;
640
+ top.close = void 0;
641
+ closeFn();
642
+ }
643
+ function handlePop() {
644
+ if (suppressPopCount > 0) {
645
+ suppressPopCount--;
646
+ return;
647
+ }
648
+ closeTopOverlay();
649
+ }
650
+ function removeFromStack(id) {
651
+ const idx = overlayStack.findIndex((e) => e.id === id);
652
+ if (idx === -1) return { removed: false, parkedBelow: 0 };
653
+ const wasTop = idx === overlayStack.length - 1;
654
+ if (!wasTop) {
655
+ const entry = overlayStack[idx];
656
+ if (entry !== void 0) entry.close = void 0;
657
+ return { removed: true, parkedBelow: 0 };
658
+ }
659
+ overlayStack.pop();
660
+ const remaining = overlayStack.splice(0, overlayStack.length);
661
+ const active = remaining.filter((e) => e.close !== void 0);
662
+ const parkedBelow = remaining.length - active.length;
663
+ overlayStack.push(...active);
664
+ return { removed: true, parkedBelow };
665
+ }
666
+ function scheduleStateRestore(id, baseState, parkedBelow) {
667
+ function check() {
668
+ const currentState = window.history.state;
669
+ if (currentState === null || typeof currentState !== "object" || !(HISTORY_KEY in currentState) || currentState[HISTORY_KEY] !== id) {
670
+ sweepParkedEntries();
671
+ return;
672
+ }
673
+ const totalBacks = 1 + parkedBelow;
674
+ let done = false;
675
+ function restore() {
676
+ if (done) return;
677
+ done = true;
678
+ window.removeEventListener("popstate", onPop);
679
+ window.history.replaceState(baseState, "");
680
+ const sweptIds = sweepParkedEntries();
681
+ cleanupSeenIds(sweptIds);
682
+ }
683
+ function onPop() {
684
+ if (suppressPopCount > 0) {
685
+ suppressPopCount--;
686
+ return;
687
+ }
688
+ restore();
689
+ }
690
+ window.addEventListener("popstate", onPop);
691
+ suppressPopCount += totalBacks;
692
+ for (let i = 0; i < totalBacks; i++) {
693
+ window.history.back();
694
+ }
695
+ }
696
+ let disposed = false;
697
+ let rafId;
698
+ function run() {
699
+ if (disposed) return;
700
+ disposed = true;
701
+ if (rafId !== void 0) {
702
+ cancelAnimationFrame(rafId);
703
+ }
704
+ check();
705
+ }
706
+ rafId = requestAnimationFrame(run);
707
+ }
708
+ function sweepParkedEntries() {
709
+ const sweptIds = [];
710
+ for (let i = overlayStack.length - 1; i >= 0; i--) {
711
+ const entry = overlayStack[i];
712
+ if (entry !== void 0 && entry.close === void 0) {
713
+ sweptIds.push(entry.id);
714
+ overlayStack.splice(i, 1);
715
+ }
716
+ }
717
+ return sweptIds;
718
+ }
719
+ function cleanupSeenIds(sweptIds) {
720
+ const activeIds = new Set(overlayStack.map((e) => e.id));
721
+ for (const id of sweptIds) {
722
+ if (!activeIds.has(id)) {
723
+ seenSyntheticIds.delete(id);
724
+ }
725
+ }
726
+ }
727
+ function useMobileBackToClose(open, onOpenChange) {
728
+ const idRef = useRef(void 0);
729
+ const onChangeRef = useRef(onOpenChange);
730
+ onChangeRef.current = onOpenChange;
731
+ useEffect(() => {
732
+ if (typeof window === "undefined") return;
733
+ if (onChangeRef.current === void 0) return;
734
+ if (!isBelowMd()) return;
735
+ ensurePopListener();
736
+ if (open === true && idRef.current === void 0) {
737
+ const id = ++nextOverlayId;
738
+ idRef.current = id;
739
+ seenSyntheticIds.add(id);
740
+ const baseState = window.history.state ?? null;
741
+ window.history.pushState(
742
+ {
743
+ ...baseState ?? {},
744
+ [HISTORY_KEY]: id
745
+ },
746
+ ""
747
+ );
748
+ overlayStack.push({
749
+ id,
750
+ baseState,
751
+ close() {
752
+ idRef.current = void 0;
753
+ onChangeRef.current?.(false);
754
+ }
755
+ });
756
+ return;
757
+ }
758
+ if (open !== true && idRef.current !== void 0) {
759
+ const id = idRef.current;
760
+ idRef.current = void 0;
761
+ const entryIdx = overlayStack.findIndex((e) => e.id === id);
762
+ const entry = entryIdx !== -1 ? overlayStack[entryIdx] : void 0;
763
+ const { removed, parkedBelow } = removeFromStack(id);
764
+ if (removed && entry !== void 0) {
765
+ scheduleStateRestore(id, entry.baseState, parkedBelow);
766
+ }
767
+ }
768
+ }, [open]);
769
+ useEffect(() => {
770
+ return () => {
771
+ if (idRef.current !== void 0) {
772
+ const id = idRef.current;
773
+ idRef.current = void 0;
774
+ const entryIdx = overlayStack.findIndex((e) => e.id === id);
775
+ const entry = entryIdx !== -1 ? overlayStack[entryIdx] : void 0;
776
+ const { removed, parkedBelow } = removeFromStack(id);
777
+ if (removed && entry !== void 0) {
778
+ scheduleStateRestore(id, entry.baseState, parkedBelow);
779
+ }
780
+ }
781
+ };
782
+ }, []);
783
+ }
784
+ function Mark({
785
+ d,
786
+ filled,
787
+ className
788
+ }) {
789
+ return /* @__PURE__ */ jsx(
790
+ "svg",
791
+ {
792
+ xmlns: "http://www.w3.org/2000/svg",
793
+ viewBox: "0 0 24 24",
794
+ fill: "none",
795
+ className,
796
+ children: filled ? /* @__PURE__ */ jsx("path", { d, fill: "currentColor" }) : /* @__PURE__ */ jsx(
797
+ "path",
798
+ {
799
+ d,
800
+ stroke: "currentColor",
801
+ strokeWidth: "2",
802
+ strokeLinecap: "round",
803
+ strokeLinejoin: "round"
804
+ }
805
+ )
806
+ }
807
+ );
808
+ }
809
+ function Cross(props) {
810
+ return /* @__PURE__ */ jsx(Mark, { ...props, d: "M6 6l12 12M18 6L6 18" });
811
+ }
812
+ function Sheet({
813
+ open,
814
+ defaultOpen,
815
+ onOpenChange,
816
+ ...props
817
+ }) {
818
+ const [uncontrolledOpen, setUncontrolledOpen] = React2.useState(
819
+ defaultOpen ?? false
820
+ );
821
+ const isControlled = open !== void 0;
822
+ const currentOpen = isControlled ? open : uncontrolledOpen;
823
+ function handleOpenChange(next, eventDetails) {
824
+ if (!isControlled) setUncontrolledOpen(next);
825
+ onOpenChange?.(next, eventDetails);
826
+ }
827
+ useMobileBackToClose(currentOpen, handleOpenChange);
828
+ return /* @__PURE__ */ jsx(
829
+ Dialog.Root,
830
+ {
831
+ "data-slot": "sheet",
832
+ open: currentOpen,
833
+ onOpenChange: handleOpenChange,
834
+ ...props
835
+ }
836
+ );
837
+ }
838
+ function SheetPortal({ ...props }) {
839
+ return /* @__PURE__ */ jsx(Dialog.Portal, { "data-slot": "sheet-portal", ...props });
840
+ }
841
+ function SheetOverlay({ className, ...props }) {
842
+ return /* @__PURE__ */ jsx(
843
+ Dialog.Backdrop,
844
+ {
845
+ "data-slot": "sheet-overlay",
846
+ className: cn(
847
+ "fixed inset-0 z-50 bg-black/10 transition-opacity duration-150 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs",
848
+ className
849
+ ),
850
+ ...props
851
+ }
852
+ );
853
+ }
854
+ function SheetContent({
855
+ className,
856
+ children,
857
+ side = "right",
858
+ showCloseButton = true,
859
+ ...props
860
+ }) {
861
+ const { t } = useTranslation("ui", { useSuspense: false });
862
+ return /* @__PURE__ */ jsxs(SheetPortal, { children: [
863
+ /* @__PURE__ */ jsx(SheetOverlay, {}),
864
+ /* @__PURE__ */ jsxs(
865
+ Dialog.Popup,
866
+ {
867
+ "data-slot": "sheet-content",
868
+ "data-side": side,
869
+ className: cn(
870
+ "fixed z-50 flex flex-col gap-4 bg-popover bg-clip-padding text-sm text-popover-foreground shadow-lg transition duration-200 ease-in-out data-ending-style:opacity-0 data-starting-style:opacity-0 data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=bottom]:data-ending-style:translate-y-[2.5rem] data-[side=bottom]:data-starting-style:translate-y-[2.5rem] data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=left]:data-ending-style:translate-x-[-2.5rem] data-[side=left]:data-starting-style:translate-x-[-2.5rem] data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=right]:data-ending-style:translate-x-[2.5rem] data-[side=right]:data-starting-style:translate-x-[2.5rem] data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=top]:data-ending-style:translate-y-[-2.5rem] data-[side=top]:data-starting-style:translate-y-[-2.5rem] data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm",
871
+ className
872
+ ),
873
+ ...props,
874
+ children: [
875
+ children,
876
+ showCloseButton && /* @__PURE__ */ jsxs(
877
+ Dialog.Close,
878
+ {
879
+ "data-slot": "sheet-close",
880
+ render: /* @__PURE__ */ jsx(
881
+ Button,
882
+ {
883
+ variant: "ghost",
884
+ className: "absolute top-4 right-4",
885
+ size: "icon-sm"
886
+ }
887
+ ),
888
+ children: [
889
+ /* @__PURE__ */ jsx(
890
+ Cross,
891
+ {}
892
+ ),
893
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: t("aria.close") })
894
+ ]
895
+ }
896
+ )
897
+ ]
898
+ }
899
+ )
900
+ ] });
901
+ }
902
+ function SheetHeader({ className, ...props }) {
903
+ return /* @__PURE__ */ jsx(
904
+ "div",
905
+ {
906
+ "data-slot": "sheet-header",
907
+ className: cn("flex flex-col gap-1.5 p-4", className),
908
+ ...props
909
+ }
910
+ );
911
+ }
912
+ function SheetTitle({ className, ...props }) {
913
+ return /* @__PURE__ */ jsx(
914
+ Dialog.Title,
915
+ {
916
+ "data-slot": "sheet-title",
917
+ className: cn("font-heading font-medium text-foreground", className),
918
+ ...props
919
+ }
920
+ );
921
+ }
922
+ function SheetDescription({
923
+ className,
924
+ ...props
925
+ }) {
926
+ return /* @__PURE__ */ jsx(
927
+ Dialog.Description,
928
+ {
929
+ "data-slot": "sheet-description",
930
+ className: cn("text-sm text-muted-foreground", className),
931
+ ...props
932
+ }
933
+ );
934
+ }
935
+ function Skeleton({
936
+ className,
937
+ element: Element = "div",
938
+ ...props
939
+ }) {
940
+ return /* @__PURE__ */ jsx(
941
+ Element,
942
+ {
943
+ "data-slot": "skeleton",
944
+ className: cn("animate-pulse rounded-md bg-muted", className),
945
+ ...props
946
+ }
947
+ );
948
+ }
949
+ function Tooltip({ ...props }) {
950
+ return /* @__PURE__ */ jsx(Tooltip$1.Root, { "data-slot": "tooltip", ...props });
951
+ }
952
+ function TooltipTrigger({ ...props }) {
953
+ return /* @__PURE__ */ jsx(Tooltip$1.Trigger, { "data-slot": "tooltip-trigger", ...props });
954
+ }
955
+ function TooltipContent({
956
+ className,
957
+ side = "top",
958
+ sideOffset = 4,
959
+ align = "center",
960
+ alignOffset = 0,
961
+ children,
962
+ ...props
963
+ }) {
964
+ return /* @__PURE__ */ jsx(Tooltip$1.Portal, { children: /* @__PURE__ */ jsx(
965
+ Tooltip$1.Positioner,
966
+ {
967
+ align,
968
+ alignOffset,
969
+ side,
970
+ sideOffset,
971
+ className: "isolate z-50",
972
+ children: /* @__PURE__ */ jsxs(
973
+ Tooltip$1.Popup,
974
+ {
975
+ "data-slot": "tooltip-content",
976
+ className: cn(
977
+ "z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
978
+ className
979
+ ),
980
+ ...props,
981
+ children: [
982
+ children,
983
+ /* @__PURE__ */ jsx(Tooltip$1.Arrow, { className: "z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5" })
984
+ ]
985
+ }
986
+ )
987
+ }
988
+ ) });
989
+ }
990
+ function readIconMode() {
991
+ return document.documentElement.dataset.iconStyle === "linear" ? "linear" : "boldDuotone";
992
+ }
993
+ var currentMode = "boldDuotone";
994
+ var observer;
995
+ var listeners = /* @__PURE__ */ new Set();
996
+ function ensureObserver() {
997
+ if (observer !== void 0 || typeof document === "undefined") return;
998
+ observer = new MutationObserver(() => {
999
+ const next = readIconMode();
1000
+ if (next === currentMode) return;
1001
+ currentMode = next;
1002
+ for (const cb of listeners) cb();
1003
+ });
1004
+ observer.observe(document.documentElement, {
1005
+ attributes: true,
1006
+ attributeFilter: ["data-icon-style"]
1007
+ });
1008
+ }
1009
+ function subscribeIconStyle(callback) {
1010
+ ensureObserver();
1011
+ currentMode = readIconMode();
1012
+ listeners.add(callback);
1013
+ return () => {
1014
+ listeners.delete(callback);
1015
+ };
1016
+ }
1017
+ function getIconStyleSnapshot() {
1018
+ return currentMode;
1019
+ }
1020
+ function createIcon(variants) {
1021
+ function Icon(props) {
1022
+ const current = useSyncExternalStore(
1023
+ subscribeIconStyle,
1024
+ getIconStyleSnapshot,
1025
+ () => "boldDuotone"
1026
+ );
1027
+ const { mode, ...rest } = props;
1028
+ const Component = variants[mode ?? current];
1029
+ const className = typeof rest.className === "string" ? `hd-icon ${rest.className}` : "hd-icon";
1030
+ return createElement(Component, { ...rest, className });
1031
+ }
1032
+ return Icon;
1033
+ }
1034
+ var HamburgerMenu = createIcon({
1035
+ bold: HamburgerMenuIcon$2,
1036
+ boldDuotone: HamburgerMenuIcon$1,
1037
+ linear: HamburgerMenuIcon
1038
+ });
1039
+ var SIDEBAR_COOKIE_NAME = "sidebar_state";
1040
+ var SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
1041
+ var SIDEBAR_WIDTH = "16rem";
1042
+ var SIDEBAR_WIDTH_MOBILE = "18rem";
1043
+ var SIDEBAR_WIDTH_ICON = "3rem";
1044
+ var SIDEBAR_KEYBOARD_SHORTCUT = "b";
1045
+ var SidebarContext = React2.createContext(null);
1046
+ function useSidebar() {
1047
+ const context = React2.useContext(SidebarContext);
1048
+ if (!context) {
1049
+ throw new Error("useSidebar must be used within a SidebarProvider.");
1050
+ }
1051
+ return context;
1052
+ }
1053
+ function SidebarProvider({
1054
+ defaultOpen = true,
1055
+ open: openProp,
1056
+ onOpenChange: setOpenProp,
1057
+ className,
1058
+ style,
1059
+ children,
1060
+ ...props
1061
+ }) {
1062
+ const isMobile = useIsMobile();
1063
+ const [openMobile, setOpenMobile] = React2.useState(false);
1064
+ const [_open, _setOpen] = React2.useState(defaultOpen);
1065
+ const open = openProp ?? _open;
1066
+ const setOpen = React2.useCallback(
1067
+ (value) => {
1068
+ const openState = typeof value === "function" ? value(open) : value;
1069
+ if (setOpenProp) {
1070
+ setOpenProp(openState);
1071
+ } else {
1072
+ _setOpen(openState);
1073
+ }
1074
+ document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
1075
+ },
1076
+ [setOpenProp, open]
1077
+ );
1078
+ const toggleSidebar = React2.useCallback(() => {
1079
+ return isMobile ? setOpenMobile((open2) => !open2) : setOpen((open2) => !open2);
1080
+ }, [isMobile, setOpen, setOpenMobile]);
1081
+ React2.useEffect(() => {
1082
+ const handleKeyDown = (event) => {
1083
+ if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
1084
+ event.preventDefault();
1085
+ toggleSidebar();
1086
+ }
1087
+ };
1088
+ window.addEventListener("keydown", handleKeyDown);
1089
+ return () => window.removeEventListener("keydown", handleKeyDown);
1090
+ }, [toggleSidebar]);
1091
+ const state = open ? "expanded" : "collapsed";
1092
+ const contextValue = React2.useMemo(
1093
+ () => ({
1094
+ state,
1095
+ open,
1096
+ setOpen,
1097
+ isMobile,
1098
+ openMobile,
1099
+ setOpenMobile,
1100
+ toggleSidebar
1101
+ }),
1102
+ [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]
1103
+ );
1104
+ return /* @__PURE__ */ jsx(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(
1105
+ "div",
1106
+ {
1107
+ "data-slot": "sidebar-wrapper",
1108
+ style: {
1109
+ "--sidebar-width": SIDEBAR_WIDTH,
1110
+ "--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
1111
+ ...style
1112
+ },
1113
+ className: cn(
1114
+ "group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar",
1115
+ className
1116
+ ),
1117
+ ...props,
1118
+ children
1119
+ }
1120
+ ) });
1121
+ }
1122
+ function Sidebar({
1123
+ side = "left",
1124
+ variant = "sidebar",
1125
+ collapsible = "offcanvas",
1126
+ className,
1127
+ children,
1128
+ dir,
1129
+ ...props
1130
+ }) {
1131
+ const { isMobile, state, openMobile, setOpenMobile } = useSidebar();
1132
+ const { t } = useTranslation("ui", { useSuspense: false });
1133
+ if (collapsible === "none") {
1134
+ return /* @__PURE__ */ jsx(
1135
+ "div",
1136
+ {
1137
+ "data-slot": "sidebar",
1138
+ className: cn(
1139
+ "flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground",
1140
+ className
1141
+ ),
1142
+ ...props,
1143
+ children
1144
+ }
1145
+ );
1146
+ }
1147
+ if (isMobile) {
1148
+ return /* @__PURE__ */ jsx(Sheet, { open: openMobile, onOpenChange: setOpenMobile, ...props, children: /* @__PURE__ */ jsxs(
1149
+ SheetContent,
1150
+ {
1151
+ dir,
1152
+ "data-sidebar": "sidebar",
1153
+ "data-slot": "sidebar",
1154
+ "data-mobile": "true",
1155
+ className: "w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden",
1156
+ style: {
1157
+ "--sidebar-width": SIDEBAR_WIDTH_MOBILE
1158
+ },
1159
+ side,
1160
+ children: [
1161
+ /* @__PURE__ */ jsxs(SheetHeader, { className: "sr-only", children: [
1162
+ /* @__PURE__ */ jsx(SheetTitle, { children: t("aria.sidebar") }),
1163
+ /* @__PURE__ */ jsx(SheetDescription, { children: t("aria.mobileSidebarDescription") })
1164
+ ] }),
1165
+ /* @__PURE__ */ jsx("div", { className: "flex h-full w-full flex-col", children })
1166
+ ]
1167
+ }
1168
+ ) });
1169
+ }
1170
+ return /* @__PURE__ */ jsxs(
1171
+ "div",
1172
+ {
1173
+ className: "group peer hidden text-sidebar-foreground md:block",
1174
+ "data-state": state,
1175
+ "data-collapsible": state === "collapsed" ? collapsible : "",
1176
+ "data-variant": variant,
1177
+ "data-side": side,
1178
+ "data-slot": "sidebar",
1179
+ children: [
1180
+ /* @__PURE__ */ jsx(
1181
+ "div",
1182
+ {
1183
+ "data-slot": "sidebar-gap",
1184
+ className: cn(
1185
+ "relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear",
1186
+ "group-data-[collapsible=offcanvas]:w-0",
1187
+ "group-data-[side=right]:rotate-180",
1188
+ variant === "floating" || variant === "inset" ? "group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon)"
1189
+ )
1190
+ }
1191
+ ),
1192
+ /* @__PURE__ */ jsx(
1193
+ "div",
1194
+ {
1195
+ "data-slot": "sidebar-container",
1196
+ "data-side": side,
1197
+ className: cn(
1198
+ "fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear data-[side=left]:left-0 data-[side=left]:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)] data-[side=right]:right-0 data-[side=right]:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)] md:flex",
1199
+ // Adjust the padding for floating and inset variants.
1200
+ variant === "floating" || variant === "inset" ? "p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l",
1201
+ className
1202
+ ),
1203
+ ...props,
1204
+ children: /* @__PURE__ */ jsx(
1205
+ "div",
1206
+ {
1207
+ "data-sidebar": "sidebar",
1208
+ "data-slot": "sidebar-inner",
1209
+ className: "flex size-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1 group-data-[variant=floating]:ring-sidebar-border",
1210
+ children
1211
+ }
1212
+ )
1213
+ }
1214
+ )
1215
+ ]
1216
+ }
1217
+ );
1218
+ }
1219
+ function SidebarTrigger({
1220
+ className,
1221
+ onClick,
1222
+ ...props
1223
+ }) {
1224
+ const { toggleSidebar } = useSidebar();
1225
+ const { t } = useTranslation("ui", { useSuspense: false });
1226
+ return /* @__PURE__ */ jsxs(
1227
+ Button,
1228
+ {
1229
+ "data-sidebar": "trigger",
1230
+ "data-slot": "sidebar-trigger",
1231
+ variant: "ghost",
1232
+ size: "icon-sm",
1233
+ className: cn(className),
1234
+ onClick: (event) => {
1235
+ onClick?.(event);
1236
+ toggleSidebar();
1237
+ },
1238
+ ...props,
1239
+ children: [
1240
+ /* @__PURE__ */ jsx(HamburgerMenu, {}),
1241
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: t("aria.toggleSidebar") })
1242
+ ]
1243
+ }
1244
+ );
1245
+ }
1246
+ function SidebarRail({ className, ...props }) {
1247
+ const { toggleSidebar } = useSidebar();
1248
+ const { t } = useTranslation("ui", { useSuspense: false });
1249
+ return /* @__PURE__ */ jsx(
1250
+ "button",
1251
+ {
1252
+ "data-sidebar": "rail",
1253
+ "data-slot": "sidebar-rail",
1254
+ "aria-label": t("aria.toggleSidebar"),
1255
+ tabIndex: -1,
1256
+ onClick: toggleSidebar,
1257
+ title: t("aria.toggleSidebar"),
1258
+ className: cn(
1259
+ "absolute inset-y-0 z-20 hidden w-4 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:start-1/2 after:w-[2px] hover:after:bg-sidebar-border sm:flex ltr:-translate-x-1/2 rtl:-translate-x-1/2",
1260
+ "in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize",
1261
+ "[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize",
1262
+ "group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full hover:group-data-[collapsible=offcanvas]:bg-sidebar",
1263
+ "[[data-side=left][data-collapsible=offcanvas]_&]:-right-2",
1264
+ "[[data-side=right][data-collapsible=offcanvas]_&]:-left-2",
1265
+ className
1266
+ ),
1267
+ ...props
1268
+ }
1269
+ );
1270
+ }
1271
+ function SidebarInset({ className, ...props }) {
1272
+ return /* @__PURE__ */ jsx(
1273
+ "main",
1274
+ {
1275
+ "data-slot": "sidebar-inset",
1276
+ className: cn(
1277
+ "relative flex w-full flex-1 flex-col bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2",
1278
+ className
1279
+ ),
1280
+ ...props
1281
+ }
1282
+ );
1283
+ }
1284
+ function SidebarInput({
1285
+ className,
1286
+ ...props
1287
+ }) {
1288
+ return /* @__PURE__ */ jsx(
1289
+ Input,
1290
+ {
1291
+ "data-slot": "sidebar-input",
1292
+ "data-sidebar": "input",
1293
+ className: cn("h-8 w-full bg-background shadow-none", className),
1294
+ ...props
1295
+ }
1296
+ );
1297
+ }
1298
+ function SidebarHeader({ className, ...props }) {
1299
+ return /* @__PURE__ */ jsx(
1300
+ "div",
1301
+ {
1302
+ "data-slot": "sidebar-header",
1303
+ "data-sidebar": "header",
1304
+ className: cn("flex flex-col gap-2 p-2", className),
1305
+ ...props
1306
+ }
1307
+ );
1308
+ }
1309
+ function SidebarFooter({ className, ...props }) {
1310
+ return /* @__PURE__ */ jsx(
1311
+ "div",
1312
+ {
1313
+ "data-slot": "sidebar-footer",
1314
+ "data-sidebar": "footer",
1315
+ className: cn("flex flex-col gap-2 p-2", className),
1316
+ ...props
1317
+ }
1318
+ );
1319
+ }
1320
+ function SidebarSeparator({
1321
+ className,
1322
+ ...props
1323
+ }) {
1324
+ return /* @__PURE__ */ jsx(
1325
+ Separator,
1326
+ {
1327
+ "data-slot": "sidebar-separator",
1328
+ "data-sidebar": "separator",
1329
+ className: cn("mx-2 w-auto bg-sidebar-border", className),
1330
+ ...props
1331
+ }
1332
+ );
1333
+ }
1334
+ function SidebarContent({ className, ...props }) {
1335
+ return /* @__PURE__ */ jsx(
1336
+ "div",
1337
+ {
1338
+ "data-slot": "sidebar-content",
1339
+ "data-sidebar": "content",
1340
+ className: cn(
1341
+ "no-scrollbar flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden",
1342
+ className
1343
+ ),
1344
+ ...props
1345
+ }
1346
+ );
1347
+ }
1348
+ function SidebarGroup({ className, ...props }) {
1349
+ return /* @__PURE__ */ jsx(
1350
+ "div",
1351
+ {
1352
+ "data-slot": "sidebar-group",
1353
+ "data-sidebar": "group",
1354
+ className: cn("relative flex w-full min-w-0 flex-col p-2", className),
1355
+ ...props
1356
+ }
1357
+ );
1358
+ }
1359
+ function SidebarGroupLabel({
1360
+ className,
1361
+ render,
1362
+ ...props
1363
+ }) {
1364
+ return useRender({
1365
+ defaultTagName: "div",
1366
+ props: mergeProps(
1367
+ {
1368
+ className: cn(
1369
+ "flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 ring-sidebar-ring outline-hidden transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",
1370
+ className
1371
+ )
1372
+ },
1373
+ props
1374
+ ),
1375
+ render,
1376
+ state: {
1377
+ slot: "sidebar-group-label",
1378
+ sidebar: "group-label"
1379
+ }
1380
+ });
1381
+ }
1382
+ function SidebarGroupAction({
1383
+ className,
1384
+ render,
1385
+ ...props
1386
+ }) {
1387
+ return useRender({
1388
+ defaultTagName: "button",
1389
+ props: mergeProps(
1390
+ {
1391
+ className: cn(
1392
+ "absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform group-data-[collapsible=icon]:hidden after:absolute after:-inset-2 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 md:after:hidden [&>svg]:size-4 [&>svg]:shrink-0",
1393
+ className
1394
+ )
1395
+ },
1396
+ props
1397
+ ),
1398
+ render,
1399
+ state: {
1400
+ slot: "sidebar-group-action",
1401
+ sidebar: "group-action"
1402
+ }
1403
+ });
1404
+ }
1405
+ function SidebarGroupContent({
1406
+ className,
1407
+ ...props
1408
+ }) {
1409
+ return /* @__PURE__ */ jsx(
1410
+ "div",
1411
+ {
1412
+ "data-slot": "sidebar-group-content",
1413
+ "data-sidebar": "group-content",
1414
+ className: cn("w-full text-sm", className),
1415
+ ...props
1416
+ }
1417
+ );
1418
+ }
1419
+ function SidebarMenu({ className, ...props }) {
1420
+ return /* @__PURE__ */ jsx(
1421
+ "ul",
1422
+ {
1423
+ "data-slot": "sidebar-menu",
1424
+ "data-sidebar": "menu",
1425
+ className: cn("flex w-full min-w-0 flex-col gap-1", className),
1426
+ ...props
1427
+ }
1428
+ );
1429
+ }
1430
+ function SidebarMenuItem({ className, ...props }) {
1431
+ return /* @__PURE__ */ jsx(
1432
+ "li",
1433
+ {
1434
+ "data-slot": "sidebar-menu-item",
1435
+ "data-sidebar": "menu-item",
1436
+ className: cn("group/menu-item relative", className),
1437
+ ...props
1438
+ }
1439
+ );
1440
+ }
1441
+ var sidebarMenuButtonVariants = cva(
1442
+ "peer/menu-button group/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:font-medium data-active:text-sidebar-accent-foreground [&_svg]:size-4 [&_svg]:shrink-0 [&>span:last-child]:truncate",
1443
+ {
1444
+ variants: {
1445
+ variant: {
1446
+ default: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
1447
+ outline: "bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]"
1448
+ },
1449
+ size: {
1450
+ default: "h-8 text-sm",
1451
+ sm: "h-7 text-xs",
1452
+ lg: "h-12 text-sm group-data-[collapsible=icon]:p-0!"
1453
+ }
1454
+ },
1455
+ defaultVariants: {
1456
+ variant: "default",
1457
+ size: "default"
1458
+ }
1459
+ }
1460
+ );
1461
+ function SidebarMenuButton({
1462
+ render,
1463
+ isActive = false,
1464
+ variant = "default",
1465
+ size = "default",
1466
+ tooltip,
1467
+ className,
1468
+ ...props
1469
+ }) {
1470
+ const { isMobile, state } = useSidebar();
1471
+ const comp = useRender({
1472
+ defaultTagName: "button",
1473
+ props: mergeProps(
1474
+ {
1475
+ className: cn(sidebarMenuButtonVariants({ variant, size }), className)
1476
+ },
1477
+ props
1478
+ ),
1479
+ render: !tooltip ? render : /* @__PURE__ */ jsx(TooltipTrigger, { render }),
1480
+ state: {
1481
+ slot: "sidebar-menu-button",
1482
+ sidebar: "menu-button",
1483
+ size,
1484
+ active: isActive
1485
+ }
1486
+ });
1487
+ if (!tooltip) {
1488
+ return comp;
1489
+ }
1490
+ if (typeof tooltip === "string") {
1491
+ tooltip = {
1492
+ children: tooltip
1493
+ };
1494
+ }
1495
+ return /* @__PURE__ */ jsxs(Tooltip, { children: [
1496
+ comp,
1497
+ /* @__PURE__ */ jsx(
1498
+ TooltipContent,
1499
+ {
1500
+ side: "right",
1501
+ align: "center",
1502
+ hidden: state !== "collapsed" || isMobile,
1503
+ ...tooltip
1504
+ }
1505
+ )
1506
+ ] });
1507
+ }
1508
+ function SidebarMenuAction({
1509
+ className,
1510
+ render,
1511
+ showOnHover = false,
1512
+ ...props
1513
+ }) {
1514
+ return useRender({
1515
+ defaultTagName: "button",
1516
+ props: mergeProps(
1517
+ {
1518
+ className: cn(
1519
+ "absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform group-data-[collapsible=icon]:hidden peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 after:absolute after:-inset-2 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 md:after:hidden [&>svg]:size-4 [&>svg]:shrink-0",
1520
+ showOnHover && "group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 peer-data-active/menu-button:text-sidebar-accent-foreground aria-expanded:opacity-100 md:opacity-0",
1521
+ className
1522
+ )
1523
+ },
1524
+ props
1525
+ ),
1526
+ render,
1527
+ state: {
1528
+ slot: "sidebar-menu-action",
1529
+ sidebar: "menu-action"
1530
+ }
1531
+ });
1532
+ }
1533
+ function SidebarMenuBadge({
1534
+ className,
1535
+ ...props
1536
+ }) {
1537
+ return /* @__PURE__ */ jsx(
1538
+ "div",
1539
+ {
1540
+ "data-slot": "sidebar-menu-badge",
1541
+ "data-sidebar": "menu-badge",
1542
+ className: cn(
1543
+ "pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium text-sidebar-foreground tabular-nums select-none group-data-[collapsible=icon]:hidden peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 peer-data-active/menu-button:text-sidebar-accent-foreground",
1544
+ className
1545
+ ),
1546
+ ...props
1547
+ }
1548
+ );
1549
+ }
1550
+ function SidebarMenuSkeleton({
1551
+ className,
1552
+ showIcon = false,
1553
+ ...props
1554
+ }) {
1555
+ const [width] = React2.useState(() => {
1556
+ return `${Math.floor(Math.random() * 40) + 50}%`;
1557
+ });
1558
+ return /* @__PURE__ */ jsxs(
1559
+ "div",
1560
+ {
1561
+ "data-slot": "sidebar-menu-skeleton",
1562
+ "data-sidebar": "menu-skeleton",
1563
+ className: cn("flex h-8 items-center gap-2 rounded-md px-2", className),
1564
+ ...props,
1565
+ children: [
1566
+ showIcon && /* @__PURE__ */ jsx(
1567
+ Skeleton,
1568
+ {
1569
+ className: "size-4 rounded-md",
1570
+ "data-sidebar": "menu-skeleton-icon"
1571
+ }
1572
+ ),
1573
+ /* @__PURE__ */ jsx(
1574
+ Skeleton,
1575
+ {
1576
+ className: "h-4 max-w-(--skeleton-width) flex-1",
1577
+ "data-sidebar": "menu-skeleton-text",
1578
+ style: {
1579
+ "--skeleton-width": width
1580
+ }
1581
+ }
1582
+ )
1583
+ ]
1584
+ }
1585
+ );
1586
+ }
1587
+ function SidebarMenuSub({ className, ...props }) {
1588
+ return /* @__PURE__ */ jsx(
1589
+ "ul",
1590
+ {
1591
+ "data-slot": "sidebar-menu-sub",
1592
+ "data-sidebar": "menu-sub",
1593
+ className: cn(
1594
+ "mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5 group-data-[collapsible=icon]:hidden",
1595
+ className
1596
+ ),
1597
+ ...props
1598
+ }
1599
+ );
1600
+ }
1601
+ function SidebarMenuSubItem({
1602
+ className,
1603
+ ...props
1604
+ }) {
1605
+ return /* @__PURE__ */ jsx(
1606
+ "li",
1607
+ {
1608
+ "data-slot": "sidebar-menu-sub-item",
1609
+ "data-sidebar": "menu-sub-item",
1610
+ className: cn("group/menu-sub-item relative", className),
1611
+ ...props
1612
+ }
1613
+ );
1614
+ }
1615
+ function SidebarMenuSubButton({
1616
+ render,
1617
+ size = "md",
1618
+ isActive = false,
1619
+ className,
1620
+ ...props
1621
+ }) {
1622
+ return useRender({
1623
+ defaultTagName: "a",
1624
+ props: mergeProps(
1625
+ {
1626
+ className: cn(
1627
+ "flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground ring-sidebar-ring outline-hidden group-data-[collapsible=icon]:hidden hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[size=md]:text-sm data-[size=sm]:text-xs data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground",
1628
+ className
1629
+ )
1630
+ },
1631
+ props
1632
+ ),
1633
+ render,
1634
+ state: {
1635
+ slot: "sidebar-menu-sub-button",
1636
+ sidebar: "menu-sub-button",
1637
+ size,
1638
+ active: isActive
1639
+ }
1640
+ });
1641
+ }
1642
+
1643
+ export { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, useSidebar };
1644
+ //# sourceMappingURL=sidebar.js.map
1645
+ //# sourceMappingURL=sidebar.js.map