gladvn 0.2.14

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 (500) hide show
  1. package/README.md +112 -0
  2. package/bin/cli.js +326 -0
  3. package/dist/components/macro/accordion-preset.d.ts +14 -0
  4. package/dist/components/macro/accordion-preset.d.ts.map +1 -0
  5. package/dist/components/macro/alert-dialog-preset.d.ts +26 -0
  6. package/dist/components/macro/alert-dialog-preset.d.ts.map +1 -0
  7. package/dist/components/macro/alert-preset.d.ts +14 -0
  8. package/dist/components/macro/alert-preset.d.ts.map +1 -0
  9. package/dist/components/macro/avatar-preset.d.ts +11 -0
  10. package/dist/components/macro/avatar-preset.d.ts.map +1 -0
  11. package/dist/components/macro/breadcrumb-preset.d.ts +12 -0
  12. package/dist/components/macro/breadcrumb-preset.d.ts.map +1 -0
  13. package/dist/components/macro/card-preset.d.ts +10 -0
  14. package/dist/components/macro/card-preset.d.ts.map +1 -0
  15. package/dist/components/macro/carousel-preset.d.ts +18 -0
  16. package/dist/components/macro/carousel-preset.d.ts.map +1 -0
  17. package/dist/components/macro/checkbox-preset.d.ts +14 -0
  18. package/dist/components/macro/checkbox-preset.d.ts.map +1 -0
  19. package/dist/components/macro/combobox-preset.d.ts +27 -0
  20. package/dist/components/macro/combobox-preset.d.ts.map +1 -0
  21. package/dist/components/macro/command-preset.d.ts +16 -0
  22. package/dist/components/macro/command-preset.d.ts.map +1 -0
  23. package/dist/components/macro/date-picker.d.ts +62 -0
  24. package/dist/components/macro/date-picker.d.ts.map +1 -0
  25. package/dist/components/macro/dialog-preset.d.ts +24 -0
  26. package/dist/components/macro/dialog-preset.d.ts.map +1 -0
  27. package/dist/components/macro/empty-preset.d.ts +15 -0
  28. package/dist/components/macro/empty-preset.d.ts.map +1 -0
  29. package/dist/components/macro/field-preset.d.ts +15 -0
  30. package/dist/components/macro/field-preset.d.ts.map +1 -0
  31. package/dist/components/macro/index.d.ts +22 -0
  32. package/dist/components/macro/index.d.ts.map +1 -0
  33. package/dist/components/macro/input-otp-preset.d.ts +13 -0
  34. package/dist/components/macro/input-otp-preset.d.ts.map +1 -0
  35. package/dist/components/macro/input-preset.d.ts +21 -0
  36. package/dist/components/macro/input-preset.d.ts.map +1 -0
  37. package/dist/components/macro/pagination-preset.d.ts +13 -0
  38. package/dist/components/macro/pagination-preset.d.ts.map +1 -0
  39. package/dist/components/macro/progress-preset.d.ts +10 -0
  40. package/dist/components/macro/progress-preset.d.ts.map +1 -0
  41. package/dist/components/macro/radio-group-preset.d.ts +22 -0
  42. package/dist/components/macro/radio-group-preset.d.ts.map +1 -0
  43. package/dist/components/macro/select-preset.d.ts +42 -0
  44. package/dist/components/macro/select-preset.d.ts.map +1 -0
  45. package/dist/components/macro/slider-preset.d.ts +12 -0
  46. package/dist/components/macro/slider-preset.d.ts.map +1 -0
  47. package/dist/components/macro/switch-preset.d.ts +12 -0
  48. package/dist/components/macro/switch-preset.d.ts.map +1 -0
  49. package/dist/components/macro/tabs-preset.d.ts +17 -0
  50. package/dist/components/macro/tabs-preset.d.ts.map +1 -0
  51. package/dist/components/macro/textarea-preset.d.ts +17 -0
  52. package/dist/components/macro/textarea-preset.d.ts.map +1 -0
  53. package/dist/components/micro/accordion.d.ts +8 -0
  54. package/dist/components/micro/accordion.d.ts.map +1 -0
  55. package/dist/components/micro/alert-dialog.d.ts +33 -0
  56. package/dist/components/micro/alert-dialog.d.ts.map +1 -0
  57. package/dist/components/micro/alert.d.ts +28 -0
  58. package/dist/components/micro/alert.d.ts.map +1 -0
  59. package/dist/components/micro/aspect-ratio.d.ts +13 -0
  60. package/dist/components/micro/aspect-ratio.d.ts.map +1 -0
  61. package/dist/components/micro/avatar.d.ts +23 -0
  62. package/dist/components/micro/avatar.d.ts.map +1 -0
  63. package/dist/components/micro/badge.d.ts +16 -0
  64. package/dist/components/micro/badge.d.ts.map +1 -0
  65. package/dist/components/micro/breadcrumb.d.ts +24 -0
  66. package/dist/components/micro/breadcrumb.d.ts.map +1 -0
  67. package/dist/components/micro/button.d.ts +39 -0
  68. package/dist/components/micro/button.d.ts.map +1 -0
  69. package/dist/components/micro/calendar.d.ts +28 -0
  70. package/dist/components/micro/calendar.d.ts.map +1 -0
  71. package/dist/components/micro/card.d.ts +28 -0
  72. package/dist/components/micro/card.d.ts.map +1 -0
  73. package/dist/components/micro/carousel.d.ts +29 -0
  74. package/dist/components/micro/carousel.d.ts.map +1 -0
  75. package/dist/components/micro/chart.d.ts +49 -0
  76. package/dist/components/micro/chart.d.ts.map +1 -0
  77. package/dist/components/micro/checkbox.d.ts +17 -0
  78. package/dist/components/micro/checkbox.d.ts.map +1 -0
  79. package/dist/components/micro/collapsible.d.ts +15 -0
  80. package/dist/components/micro/collapsible.d.ts.map +1 -0
  81. package/dist/components/micro/combobox.d.ts +33 -0
  82. package/dist/components/micro/combobox.d.ts.map +1 -0
  83. package/dist/components/micro/command.d.ts +79 -0
  84. package/dist/components/micro/command.d.ts.map +1 -0
  85. package/dist/components/micro/context-menu.d.ts +60 -0
  86. package/dist/components/micro/context-menu.d.ts.map +1 -0
  87. package/dist/components/micro/dialog.d.ts +14 -0
  88. package/dist/components/micro/dialog.d.ts.map +1 -0
  89. package/dist/components/micro/direction.d.ts +2 -0
  90. package/dist/components/micro/direction.d.ts.map +1 -0
  91. package/dist/components/micro/drawer.d.ts +17 -0
  92. package/dist/components/micro/drawer.d.ts.map +1 -0
  93. package/dist/components/micro/dropdown-menu.d.ts +37 -0
  94. package/dist/components/micro/dropdown-menu.d.ts.map +1 -0
  95. package/dist/components/micro/empty.d.ts +23 -0
  96. package/dist/components/micro/empty.d.ts.map +1 -0
  97. package/dist/components/micro/field.d.ts +29 -0
  98. package/dist/components/micro/field.d.ts.map +1 -0
  99. package/dist/components/micro/hover-card.d.ts +17 -0
  100. package/dist/components/micro/hover-card.d.ts.map +1 -0
  101. package/dist/components/micro/input-group.d.ts +17 -0
  102. package/dist/components/micro/input-group.d.ts.map +1 -0
  103. package/dist/components/micro/input-otp.d.ts +44 -0
  104. package/dist/components/micro/input-otp.d.ts.map +1 -0
  105. package/dist/components/micro/input.d.ts +22 -0
  106. package/dist/components/micro/input.d.ts.map +1 -0
  107. package/dist/components/micro/item.d.ts +31 -0
  108. package/dist/components/micro/item.d.ts.map +1 -0
  109. package/dist/components/micro/kbd.d.ts +9 -0
  110. package/dist/components/micro/kbd.d.ts.map +1 -0
  111. package/dist/components/micro/label.d.ts +15 -0
  112. package/dist/components/micro/label.d.ts.map +1 -0
  113. package/dist/components/micro/menubar.d.ts +41 -0
  114. package/dist/components/micro/menubar.d.ts.map +1 -0
  115. package/dist/components/micro/navigation-menu.d.ts +18 -0
  116. package/dist/components/micro/navigation-menu.d.ts.map +1 -0
  117. package/dist/components/micro/pagination.d.ts +33 -0
  118. package/dist/components/micro/pagination.d.ts.map +1 -0
  119. package/dist/components/micro/popover.d.ts +23 -0
  120. package/dist/components/micro/popover.d.ts.map +1 -0
  121. package/dist/components/micro/progress.d.ts +19 -0
  122. package/dist/components/micro/progress.d.ts.map +1 -0
  123. package/dist/components/micro/radio-group.d.ts +13 -0
  124. package/dist/components/micro/radio-group.d.ts.map +1 -0
  125. package/dist/components/micro/resizable.d.ts +12 -0
  126. package/dist/components/micro/resizable.d.ts.map +1 -0
  127. package/dist/components/micro/scroll-area.d.ts +12 -0
  128. package/dist/components/micro/scroll-area.d.ts.map +1 -0
  129. package/dist/components/micro/select.d.ts +21 -0
  130. package/dist/components/micro/select.d.ts.map +1 -0
  131. package/dist/components/micro/separator.d.ts +9 -0
  132. package/dist/components/micro/separator.d.ts.map +1 -0
  133. package/dist/components/micro/sheet.d.ts +17 -0
  134. package/dist/components/micro/sheet.d.ts.map +1 -0
  135. package/dist/components/micro/sidebar.d.ts +28 -0
  136. package/dist/components/micro/sidebar.d.ts.map +1 -0
  137. package/dist/components/micro/skeleton.d.ts +9 -0
  138. package/dist/components/micro/skeleton.d.ts.map +1 -0
  139. package/dist/components/micro/slider.d.ts +14 -0
  140. package/dist/components/micro/slider.d.ts.map +1 -0
  141. package/dist/components/micro/sonner.d.ts +5 -0
  142. package/dist/components/micro/sonner.d.ts.map +1 -0
  143. package/dist/components/micro/spinner.d.ts +21 -0
  144. package/dist/components/micro/spinner.d.ts.map +1 -0
  145. package/dist/components/micro/switch.d.ts +13 -0
  146. package/dist/components/micro/switch.d.ts.map +1 -0
  147. package/dist/components/micro/table.d.ts +17 -0
  148. package/dist/components/micro/table.d.ts.map +1 -0
  149. package/dist/components/micro/tabs.d.ts +13 -0
  150. package/dist/components/micro/tabs.d.ts.map +1 -0
  151. package/dist/components/micro/textarea.d.ts +17 -0
  152. package/dist/components/micro/textarea.d.ts.map +1 -0
  153. package/dist/components/micro/theme-provider.d.ts +76 -0
  154. package/dist/components/micro/theme-provider.d.ts.map +1 -0
  155. package/dist/components/micro/toggle-group.d.ts +22 -0
  156. package/dist/components/micro/toggle-group.d.ts.map +1 -0
  157. package/dist/components/micro/toggle.d.ts +16 -0
  158. package/dist/components/micro/toggle.d.ts.map +1 -0
  159. package/dist/components/micro/tooltip.d.ts +20 -0
  160. package/dist/components/micro/tooltip.d.ts.map +1 -0
  161. package/dist/dev/App.d.ts +3 -0
  162. package/dist/dev/App.d.ts.map +1 -0
  163. package/dist/dev/components/GladcnLogo.d.ts +10 -0
  164. package/dist/dev/components/GladcnLogo.d.ts.map +1 -0
  165. package/dist/dev/components/code-highlighter.d.ts +5 -0
  166. package/dist/dev/components/code-highlighter.d.ts.map +1 -0
  167. package/dist/dev/components/dev-context.d.ts +12 -0
  168. package/dist/dev/components/dev-context.d.ts.map +1 -0
  169. package/dist/dev/components/showcase.d.ts +72 -0
  170. package/dist/dev/components/showcase.d.ts.map +1 -0
  171. package/dist/dev/data.d.ts +68 -0
  172. package/dist/dev/data.d.ts.map +1 -0
  173. package/dist/dev/main.d.ts +1 -0
  174. package/dist/dev/main.d.ts.map +1 -0
  175. package/dist/dev/sections/buttons.d.ts +2 -0
  176. package/dist/dev/sections/buttons.d.ts.map +1 -0
  177. package/dist/dev/sections/display.d.ts +2 -0
  178. package/dist/dev/sections/display.d.ts.map +1 -0
  179. package/dist/dev/sections/feedback.d.ts +2 -0
  180. package/dist/dev/sections/feedback.d.ts.map +1 -0
  181. package/dist/dev/sections/forms.d.ts +2 -0
  182. package/dist/dev/sections/forms.d.ts.map +1 -0
  183. package/dist/dev/sections/interactive.d.ts +2 -0
  184. package/dist/dev/sections/interactive.d.ts.map +1 -0
  185. package/dist/dev/sections/overview.d.ts +2 -0
  186. package/dist/dev/sections/overview.d.ts.map +1 -0
  187. package/dist/dev/showcase/accordion.d.ts +2 -0
  188. package/dist/dev/showcase/accordion.d.ts.map +1 -0
  189. package/dist/dev/showcase/alert-dialog.d.ts +2 -0
  190. package/dist/dev/showcase/alert-dialog.d.ts.map +1 -0
  191. package/dist/dev/showcase/alert.d.ts +2 -0
  192. package/dist/dev/showcase/alert.d.ts.map +1 -0
  193. package/dist/dev/showcase/aspect-ratio.d.ts +2 -0
  194. package/dist/dev/showcase/aspect-ratio.d.ts.map +1 -0
  195. package/dist/dev/showcase/avatar.d.ts +2 -0
  196. package/dist/dev/showcase/avatar.d.ts.map +1 -0
  197. package/dist/dev/showcase/badge.d.ts +2 -0
  198. package/dist/dev/showcase/badge.d.ts.map +1 -0
  199. package/dist/dev/showcase/breadcrumb.d.ts +2 -0
  200. package/dist/dev/showcase/breadcrumb.d.ts.map +1 -0
  201. package/dist/dev/showcase/button.d.ts +2 -0
  202. package/dist/dev/showcase/button.d.ts.map +1 -0
  203. package/dist/dev/showcase/calendar.d.ts +2 -0
  204. package/dist/dev/showcase/calendar.d.ts.map +1 -0
  205. package/dist/dev/showcase/card.d.ts +2 -0
  206. package/dist/dev/showcase/card.d.ts.map +1 -0
  207. package/dist/dev/showcase/carousel.d.ts +2 -0
  208. package/dist/dev/showcase/carousel.d.ts.map +1 -0
  209. package/dist/dev/showcase/chart.d.ts +2 -0
  210. package/dist/dev/showcase/chart.d.ts.map +1 -0
  211. package/dist/dev/showcase/checkbox.d.ts +2 -0
  212. package/dist/dev/showcase/checkbox.d.ts.map +1 -0
  213. package/dist/dev/showcase/collapsible.d.ts +3 -0
  214. package/dist/dev/showcase/collapsible.d.ts.map +1 -0
  215. package/dist/dev/showcase/combobox.d.ts +2 -0
  216. package/dist/dev/showcase/combobox.d.ts.map +1 -0
  217. package/dist/dev/showcase/command.d.ts +2 -0
  218. package/dist/dev/showcase/command.d.ts.map +1 -0
  219. package/dist/dev/showcase/context-menu.d.ts +2 -0
  220. package/dist/dev/showcase/context-menu.d.ts.map +1 -0
  221. package/dist/dev/showcase/dialog.d.ts +2 -0
  222. package/dist/dev/showcase/dialog.d.ts.map +1 -0
  223. package/dist/dev/showcase/drawer.d.ts +2 -0
  224. package/dist/dev/showcase/drawer.d.ts.map +1 -0
  225. package/dist/dev/showcase/dropdown-menu.d.ts +2 -0
  226. package/dist/dev/showcase/dropdown-menu.d.ts.map +1 -0
  227. package/dist/dev/showcase/empty.d.ts +2 -0
  228. package/dist/dev/showcase/empty.d.ts.map +1 -0
  229. package/dist/dev/showcase/hover-card.d.ts +2 -0
  230. package/dist/dev/showcase/hover-card.d.ts.map +1 -0
  231. package/dist/dev/showcase/input-group.d.ts +2 -0
  232. package/dist/dev/showcase/input-group.d.ts.map +1 -0
  233. package/dist/dev/showcase/input-otp.d.ts +2 -0
  234. package/dist/dev/showcase/input-otp.d.ts.map +1 -0
  235. package/dist/dev/showcase/input.d.ts +2 -0
  236. package/dist/dev/showcase/input.d.ts.map +1 -0
  237. package/dist/dev/showcase/item.d.ts +2 -0
  238. package/dist/dev/showcase/item.d.ts.map +1 -0
  239. package/dist/dev/showcase/kbd.d.ts +2 -0
  240. package/dist/dev/showcase/kbd.d.ts.map +1 -0
  241. package/dist/dev/showcase/label.d.ts +2 -0
  242. package/dist/dev/showcase/label.d.ts.map +1 -0
  243. package/dist/dev/showcase/menubar.d.ts +2 -0
  244. package/dist/dev/showcase/menubar.d.ts.map +1 -0
  245. package/dist/dev/showcase/navigation-menu.d.ts +3 -0
  246. package/dist/dev/showcase/navigation-menu.d.ts.map +1 -0
  247. package/dist/dev/showcase/overview.d.ts +2 -0
  248. package/dist/dev/showcase/overview.d.ts.map +1 -0
  249. package/dist/dev/showcase/pagination.d.ts +2 -0
  250. package/dist/dev/showcase/pagination.d.ts.map +1 -0
  251. package/dist/dev/showcase/popover.d.ts +2 -0
  252. package/dist/dev/showcase/popover.d.ts.map +1 -0
  253. package/dist/dev/showcase/progress.d.ts +2 -0
  254. package/dist/dev/showcase/progress.d.ts.map +1 -0
  255. package/dist/dev/showcase/radio-group.d.ts +2 -0
  256. package/dist/dev/showcase/radio-group.d.ts.map +1 -0
  257. package/dist/dev/showcase/resizable.d.ts +2 -0
  258. package/dist/dev/showcase/resizable.d.ts.map +1 -0
  259. package/dist/dev/showcase/scroll-area.d.ts +2 -0
  260. package/dist/dev/showcase/scroll-area.d.ts.map +1 -0
  261. package/dist/dev/showcase/select.d.ts +2 -0
  262. package/dist/dev/showcase/select.d.ts.map +1 -0
  263. package/dist/dev/showcase/separator.d.ts +2 -0
  264. package/dist/dev/showcase/separator.d.ts.map +1 -0
  265. package/dist/dev/showcase/sheet.d.ts +2 -0
  266. package/dist/dev/showcase/sheet.d.ts.map +1 -0
  267. package/dist/dev/showcase/sidebar.d.ts +2 -0
  268. package/dist/dev/showcase/sidebar.d.ts.map +1 -0
  269. package/dist/dev/showcase/skeleton.d.ts +2 -0
  270. package/dist/dev/showcase/skeleton.d.ts.map +1 -0
  271. package/dist/dev/showcase/slider.d.ts +2 -0
  272. package/dist/dev/showcase/slider.d.ts.map +1 -0
  273. package/dist/dev/showcase/sonner.d.ts +2 -0
  274. package/dist/dev/showcase/sonner.d.ts.map +1 -0
  275. package/dist/dev/showcase/spinner.d.ts +2 -0
  276. package/dist/dev/showcase/spinner.d.ts.map +1 -0
  277. package/dist/dev/showcase/switch.d.ts +2 -0
  278. package/dist/dev/showcase/switch.d.ts.map +1 -0
  279. package/dist/dev/showcase/table.d.ts +2 -0
  280. package/dist/dev/showcase/table.d.ts.map +1 -0
  281. package/dist/dev/showcase/tabs.d.ts +2 -0
  282. package/dist/dev/showcase/tabs.d.ts.map +1 -0
  283. package/dist/dev/showcase/textarea.d.ts +2 -0
  284. package/dist/dev/showcase/textarea.d.ts.map +1 -0
  285. package/dist/dev/showcase/theme-provider.d.ts +2 -0
  286. package/dist/dev/showcase/theme-provider.d.ts.map +1 -0
  287. package/dist/dev/showcase/toast.d.ts +2 -0
  288. package/dist/dev/showcase/toast.d.ts.map +1 -0
  289. package/dist/dev/showcase/toggle-group.d.ts +2 -0
  290. package/dist/dev/showcase/toggle-group.d.ts.map +1 -0
  291. package/dist/dev/showcase/toggle.d.ts +2 -0
  292. package/dist/dev/showcase/toggle.d.ts.map +1 -0
  293. package/dist/dev/showcase/tooltip.d.ts +2 -0
  294. package/dist/dev/showcase/tooltip.d.ts.map +1 -0
  295. package/dist/hooks/use-controllable-state.d.ts +14 -0
  296. package/dist/hooks/use-controllable-state.d.ts.map +1 -0
  297. package/dist/hooks/use-mobile.d.ts +2 -0
  298. package/dist/hooks/use-mobile.d.ts.map +1 -0
  299. package/dist/index.cjs +5099 -0
  300. package/dist/index.cjs.map +1 -0
  301. package/dist/index.d.ts +58 -0
  302. package/dist/index.d.ts.map +1 -0
  303. package/dist/index.js +4740 -0
  304. package/dist/index.js.map +1 -0
  305. package/dist/lib/types.d.ts +4 -0
  306. package/dist/lib/types.d.ts.map +1 -0
  307. package/dist/lib/utils.d.ts +3 -0
  308. package/dist/lib/utils.d.ts.map +1 -0
  309. package/dist/preset.d.ts +18 -0
  310. package/dist/preset.d.ts.map +1 -0
  311. package/dist/test/setup.d.ts +1 -0
  312. package/dist/test/setup.d.ts.map +1 -0
  313. package/llms.txt +74 -0
  314. package/package.json +117 -0
  315. package/scripts/add-icononly-prop.ts +84 -0
  316. package/scripts/audit-best-practices.ts +114 -0
  317. package/scripts/audit-showcase.ts +262 -0
  318. package/scripts/audit-showcases.ts +83 -0
  319. package/scripts/clean-imports.ts +21 -0
  320. package/scripts/count_missing.ts +24 -0
  321. package/scripts/find-css-vars.ts +62 -0
  322. package/scripts/fix-portals.ts +90 -0
  323. package/scripts/full-audit.ts +89 -0
  324. package/scripts/merge-components.cjs +65 -0
  325. package/scripts/merge-components.js +64 -0
  326. package/scripts/optimize-barrel.ts +116 -0
  327. package/scripts/postinstall.cjs +228 -0
  328. package/scripts/refactor_divs.ts +39 -0
  329. package/scripts/remove_div_wrappers.ts +17 -0
  330. package/scripts/update-gaps.ts +83 -0
  331. package/scripts/update_showcase_codestrings.ts +87 -0
  332. package/src/components/macro/accordion-preset.test.tsx +37 -0
  333. package/src/components/macro/accordion-preset.tsx +41 -0
  334. package/src/components/macro/alert-dialog-preset.tsx +116 -0
  335. package/src/components/macro/alert-preset.tsx +94 -0
  336. package/src/components/macro/avatar-preset.tsx +54 -0
  337. package/src/components/macro/breadcrumb-preset.tsx +50 -0
  338. package/src/components/macro/card-preset.tsx +44 -0
  339. package/src/components/macro/carousel-preset.tsx +150 -0
  340. package/src/components/macro/checkbox-preset.test.tsx +49 -0
  341. package/src/components/macro/checkbox-preset.tsx +84 -0
  342. package/src/components/macro/combobox-preset.tsx +171 -0
  343. package/src/components/macro/command-preset.tsx +74 -0
  344. package/src/components/macro/date-picker.tsx +289 -0
  345. package/src/components/macro/dialog-preset.tsx +105 -0
  346. package/src/components/macro/empty-preset.tsx +46 -0
  347. package/src/components/macro/field-preset.test.tsx +69 -0
  348. package/src/components/macro/field-preset.tsx +65 -0
  349. package/src/components/macro/index.ts +21 -0
  350. package/src/components/macro/input-otp-preset.tsx +98 -0
  351. package/src/components/macro/input-preset.test.tsx +52 -0
  352. package/src/components/macro/input-preset.tsx +139 -0
  353. package/src/components/macro/pagination-preset.tsx +153 -0
  354. package/src/components/macro/progress-preset.test.tsx +65 -0
  355. package/src/components/macro/progress-preset.tsx +45 -0
  356. package/src/components/macro/radio-group-preset.tsx +115 -0
  357. package/src/components/macro/select-preset.tsx +168 -0
  358. package/src/components/macro/slider-preset.test.tsx +43 -0
  359. package/src/components/macro/slider-preset.tsx +86 -0
  360. package/src/components/macro/switch-preset.test.tsx +53 -0
  361. package/src/components/macro/switch-preset.tsx +70 -0
  362. package/src/components/macro/tabs-preset.test.tsx +31 -0
  363. package/src/components/macro/tabs-preset.tsx +51 -0
  364. package/src/components/macro/textarea-preset.test.tsx +39 -0
  365. package/src/components/macro/textarea-preset.tsx +55 -0
  366. package/src/components/micro/accordion.tsx +76 -0
  367. package/src/components/micro/alert-dialog.tsx +213 -0
  368. package/src/components/micro/alert.tsx +146 -0
  369. package/src/components/micro/aspect-ratio.tsx +38 -0
  370. package/src/components/micro/avatar.tsx +143 -0
  371. package/src/components/micro/badge.tsx +207 -0
  372. package/src/components/micro/breadcrumb.tsx +162 -0
  373. package/src/components/micro/button.test.tsx +25 -0
  374. package/src/components/micro/button.tsx +361 -0
  375. package/src/components/micro/calendar.tsx +383 -0
  376. package/src/components/micro/card.tsx +112 -0
  377. package/src/components/micro/carousel.tsx +341 -0
  378. package/src/components/micro/chart.tsx +392 -0
  379. package/src/components/micro/checkbox.tsx +74 -0
  380. package/src/components/micro/collapsible.tsx +65 -0
  381. package/src/components/micro/combobox.tsx +349 -0
  382. package/src/components/micro/command.tsx +238 -0
  383. package/src/components/micro/context-menu.tsx +285 -0
  384. package/src/components/micro/dialog.tsx +143 -0
  385. package/src/components/micro/direction.tsx +13 -0
  386. package/src/components/micro/drawer.tsx +149 -0
  387. package/src/components/micro/dropdown-menu.tsx +305 -0
  388. package/src/components/micro/empty.tsx +144 -0
  389. package/src/components/micro/field.tsx +311 -0
  390. package/src/components/micro/hover-card.tsx +86 -0
  391. package/src/components/micro/input-group.tsx +269 -0
  392. package/src/components/micro/input-otp.tsx +130 -0
  393. package/src/components/micro/input.tsx +56 -0
  394. package/src/components/micro/item.tsx +206 -0
  395. package/src/components/micro/kbd.tsx +38 -0
  396. package/src/components/micro/label.tsx +48 -0
  397. package/src/components/micro/menubar.tsx +302 -0
  398. package/src/components/micro/navigation-menu.tsx +197 -0
  399. package/src/components/micro/pagination.tsx +162 -0
  400. package/src/components/micro/popover.tsx +131 -0
  401. package/src/components/micro/progress.tsx +144 -0
  402. package/src/components/micro/radio-group.tsx +73 -0
  403. package/src/components/micro/resizable.tsx +64 -0
  404. package/src/components/micro/scroll-area.tsx +68 -0
  405. package/src/components/micro/select.tsx +234 -0
  406. package/src/components/micro/separator.tsx +37 -0
  407. package/src/components/micro/sheet.tsx +144 -0
  408. package/src/components/micro/sidebar.tsx +238 -0
  409. package/src/components/micro/skeleton.tsx +29 -0
  410. package/src/components/micro/slider.tsx +135 -0
  411. package/src/components/micro/sonner.tsx +85 -0
  412. package/src/components/micro/spinner.tsx +44 -0
  413. package/src/components/micro/switch.tsx +70 -0
  414. package/src/components/micro/table.tsx +210 -0
  415. package/src/components/micro/tabs.tsx +100 -0
  416. package/src/components/micro/textarea.tsx +53 -0
  417. package/src/components/micro/theme-provider.tsx +163 -0
  418. package/src/components/micro/toggle-group.tsx +121 -0
  419. package/src/components/micro/toggle.tsx +55 -0
  420. package/src/components/micro/tooltip.tsx +105 -0
  421. package/src/dev/App.tsx +322 -0
  422. package/src/dev/_debug_select.html +29 -0
  423. package/src/dev/components/GladcnLogo.tsx +80 -0
  424. package/src/dev/components/code-highlighter.tsx +67 -0
  425. package/src/dev/components/dev-context.tsx +31 -0
  426. package/src/dev/components/showcase.tsx +413 -0
  427. package/src/dev/data.ts +341 -0
  428. package/src/dev/index.css +55 -0
  429. package/src/dev/main.tsx +30 -0
  430. package/src/dev/sections/buttons.tsx +303 -0
  431. package/src/dev/sections/display.tsx +270 -0
  432. package/src/dev/sections/feedback.tsx +371 -0
  433. package/src/dev/sections/forms.tsx +652 -0
  434. package/src/dev/sections/interactive.tsx +51 -0
  435. package/src/dev/sections/overview.tsx +396 -0
  436. package/src/dev/showcase/accordion.tsx +947 -0
  437. package/src/dev/showcase/alert-dialog.tsx +1056 -0
  438. package/src/dev/showcase/alert.tsx +756 -0
  439. package/src/dev/showcase/aspect-ratio.tsx +339 -0
  440. package/src/dev/showcase/avatar.tsx +470 -0
  441. package/src/dev/showcase/badge.tsx +227 -0
  442. package/src/dev/showcase/breadcrumb.tsx +269 -0
  443. package/src/dev/showcase/button.tsx +309 -0
  444. package/src/dev/showcase/calendar.tsx +380 -0
  445. package/src/dev/showcase/card.tsx +448 -0
  446. package/src/dev/showcase/carousel.tsx +562 -0
  447. package/src/dev/showcase/chart.tsx +130 -0
  448. package/src/dev/showcase/checkbox.tsx +611 -0
  449. package/src/dev/showcase/collapsible.tsx +298 -0
  450. package/src/dev/showcase/combobox.tsx +777 -0
  451. package/src/dev/showcase/command.tsx +245 -0
  452. package/src/dev/showcase/context-menu.tsx +239 -0
  453. package/src/dev/showcase/dialog.tsx +1141 -0
  454. package/src/dev/showcase/drawer.tsx +392 -0
  455. package/src/dev/showcase/dropdown-menu.tsx +420 -0
  456. package/src/dev/showcase/empty.tsx +493 -0
  457. package/src/dev/showcase/hover-card.tsx +336 -0
  458. package/src/dev/showcase/input-group.tsx +511 -0
  459. package/src/dev/showcase/input-otp.tsx +404 -0
  460. package/src/dev/showcase/input.tsx +530 -0
  461. package/src/dev/showcase/item.tsx +295 -0
  462. package/src/dev/showcase/kbd.tsx +276 -0
  463. package/src/dev/showcase/label.tsx +121 -0
  464. package/src/dev/showcase/menubar.tsx +392 -0
  465. package/src/dev/showcase/navigation-menu.tsx +304 -0
  466. package/src/dev/showcase/overview.tsx +1106 -0
  467. package/src/dev/showcase/pagination.tsx +312 -0
  468. package/src/dev/showcase/popover.tsx +374 -0
  469. package/src/dev/showcase/progress.tsx +299 -0
  470. package/src/dev/showcase/radio-group.tsx +612 -0
  471. package/src/dev/showcase/resizable.tsx +237 -0
  472. package/src/dev/showcase/scroll-area.tsx +157 -0
  473. package/src/dev/showcase/select.tsx +628 -0
  474. package/src/dev/showcase/separator.tsx +126 -0
  475. package/src/dev/showcase/sheet.tsx +566 -0
  476. package/src/dev/showcase/sidebar.tsx +120 -0
  477. package/src/dev/showcase/skeleton.tsx +213 -0
  478. package/src/dev/showcase/slider.tsx +506 -0
  479. package/src/dev/showcase/sonner.tsx +376 -0
  480. package/src/dev/showcase/spinner.tsx +124 -0
  481. package/src/dev/showcase/switch.tsx +602 -0
  482. package/src/dev/showcase/table.tsx +196 -0
  483. package/src/dev/showcase/tabs.tsx +662 -0
  484. package/src/dev/showcase/textarea.tsx +498 -0
  485. package/src/dev/showcase/theme-provider.tsx +894 -0
  486. package/src/dev/showcase/toast.tsx +119 -0
  487. package/src/dev/showcase/toggle-group.tsx +223 -0
  488. package/src/dev/showcase/toggle.tsx +171 -0
  489. package/src/dev/showcase/tooltip.tsx +372 -0
  490. package/src/hooks/use-controllable-state.ts +87 -0
  491. package/src/hooks/use-mobile.ts +21 -0
  492. package/src/index.ts +62 -0
  493. package/src/lib/types.ts +14 -0
  494. package/src/lib/utils.test.ts +14 -0
  495. package/src/lib/utils.ts +6 -0
  496. package/src/preset.ts +17 -0
  497. package/src/styles/gladcn.css +116 -0
  498. package/src/styles/tokens.css +213 -0
  499. package/src/test/setup.ts +8 -0
  500. package/src/vite-env.d.ts +1 -0
package/dist/index.js ADDED
@@ -0,0 +1,4740 @@
1
+ import { clsx } from "clsx";
2
+ import { twMerge } from "tailwind-merge";
3
+ import * as React from "react";
4
+ import { Accordion as Accordion$1 } from "@base-ui/react/accordion";
5
+ import { AlertCircleIcon, CheckIcon, ChevronDown, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUp, ChevronUpIcon, CircleCheckIcon, CircleIcon, InfoIcon, Loader2Icon, MoreHorizontalIcon, OctagonXIcon, SearchIcon, TriangleAlertIcon, XIcon } from "lucide-react";
6
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
7
+ import { mergeProps } from "@base-ui/react/merge-props";
8
+ import { useRender } from "@base-ui/react/use-render";
9
+ import { cva } from "class-variance-authority";
10
+ import { AlertDialog as AlertDialog$1 } from "@base-ui/react/alert-dialog";
11
+ import { Button as Button$1 } from "@base-ui/react/button";
12
+ import { Avatar as Avatar$1 } from "@base-ui/react/avatar";
13
+ import { DayPicker, getDefaultClassNames } from "react-day-picker";
14
+ import { Select as Select$1 } from "@base-ui/react/select";
15
+ import useEmblaCarousel from "embla-carousel-react";
16
+ import * as RechartsPrimitive from "recharts";
17
+ import { Checkbox as Checkbox$1 } from "@base-ui/react/checkbox";
18
+ import { Collapsible as Collapsible$1 } from "@base-ui/react/collapsible";
19
+ import { Combobox as Combobox$1 } from "@base-ui/react";
20
+ import { Command as Command$1 } from "cmdk";
21
+ import { ContextMenu as ContextMenu$1 } from "@base-ui/react/context-menu";
22
+ import { Dialog as Dialog$1 } from "@base-ui/react/dialog";
23
+ import { DirectionProvider, useDirection } from "@base-ui/react/direction-provider";
24
+ import { Drawer as Drawer$1 } from "vaul";
25
+ import { Menu } from "@base-ui/react/menu";
26
+ import { Separator as Separator$1 } from "@base-ui/react/separator";
27
+ import { PreviewCard } from "@base-ui/react/preview-card";
28
+ import { Input as Input$1 } from "@base-ui/react/input";
29
+ import { OTPInput, OTPInputContext } from "input-otp";
30
+ import { Menubar as Menubar$1 } from "@base-ui/react/menubar";
31
+ import { NavigationMenu as NavigationMenu$1 } from "@base-ui/react/navigation-menu";
32
+ import { Popover as Popover$1 } from "@base-ui/react/popover";
33
+ import { Progress as Progress$1 } from "@base-ui/react/progress";
34
+ import { Radio } from "@base-ui/react/radio";
35
+ import { RadioGroup as RadioGroup$1 } from "@base-ui/react/radio-group";
36
+ import * as ResizablePrimitive from "react-resizable-panels";
37
+ import { ScrollArea as ScrollArea$1 } from "@base-ui/react/scroll-area";
38
+ import { Slider as Slider$1 } from "@base-ui/react/slider";
39
+ import { Toaster as Toaster$1 } from "sonner";
40
+ import { Switch as Switch$1 } from "@base-ui/react/switch";
41
+ import { Tabs as Tabs$1 } from "@base-ui/react/tabs";
42
+ import { Toggle as Toggle$1 } from "@base-ui/react/toggle";
43
+ import { ToggleGroup as ToggleGroup$1 } from "@base-ui/react/toggle-group";
44
+ import { Tooltip as Tooltip$1 } from "@base-ui/react/tooltip";
45
+ //#region src/lib/utils.ts
46
+ function cn(...inputs) {
47
+ return twMerge(clsx(inputs));
48
+ }
49
+ //#endregion
50
+ //#region src/hooks/use-mobile.ts
51
+ var MOBILE_BREAKPOINT = 768;
52
+ function useIsMobile() {
53
+ const [isMobile, setIsMobile] = React.useState(void 0);
54
+ React.useEffect(() => {
55
+ const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
56
+ const onChange = () => {
57
+ setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
58
+ };
59
+ mql.addEventListener("change", onChange);
60
+ setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
61
+ return () => mql.removeEventListener("change", onChange);
62
+ }, []);
63
+ return !!isMobile;
64
+ }
65
+ //#endregion
66
+ //#region src/components/micro/accordion.tsx
67
+ /**
68
+ * ✅ AUDITED & REFACTORED
69
+ * - Design System Compliant (20 Commandments)
70
+ * - WCAG AAA/AA
71
+ * - Form Control Parity
72
+ * - CSS Delegated Logic
73
+ */
74
+ var Accordion = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(Accordion$1.Root, {
75
+ ref,
76
+ "data-slot": "accordion",
77
+ className: cn("flex flex-col", className),
78
+ ...props
79
+ }));
80
+ Accordion.displayName = "Accordion";
81
+ var AccordionItem = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(Accordion$1.Item, {
82
+ ref,
83
+ "data-slot": "accordion-item",
84
+ className: cn("not-last:border-b not-last:border-border", className),
85
+ ...props
86
+ }));
87
+ AccordionItem.displayName = "AccordionItem";
88
+ var AccordionTrigger = React.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(Accordion$1.Header, {
89
+ className: cn("flex", className),
90
+ children: /* @__PURE__ */ jsxs(Accordion$1.Trigger, {
91
+ ref,
92
+ "data-slot": "accordion-trigger",
93
+ className: "group/accordion-trigger relative flex flex-1 items-start justify-between gap-4 rounded-lg border border-transparent py-2.5 text-left text-sm font-medium transition-colors outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:ring-offset-1 focus-visible:ring-offset-background focus-visible:after:border-ring aria-disabled:pointer-events-none aria-disabled:opacity-50",
94
+ ...props,
95
+ children: [children, /* @__PURE__ */ jsx(ChevronDownIcon, {
96
+ "data-slot": "accordion-trigger-icon",
97
+ className: "size-4 text-muted-foreground pointer-events-none shrink-0 transition-[rotate] duration-200 group-data-panel-open/accordion-trigger:rotate-180"
98
+ })]
99
+ })
100
+ }));
101
+ AccordionTrigger.displayName = "AccordionTrigger";
102
+ var AccordionContent = React.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(Accordion$1.Panel, {
103
+ ref,
104
+ "data-slot": "accordion-content",
105
+ className: "overflow-hidden text-sm h-(--accordion-panel-height) transition-[height] duration-200 ease-out data-starting-style:h-0 data-ending-style:h-0",
106
+ ...props,
107
+ children: /* @__PURE__ */ jsx("div", {
108
+ className: cn("pb-4 pt-0", className),
109
+ children
110
+ })
111
+ }));
112
+ AccordionContent.displayName = "AccordionContent";
113
+ //#endregion
114
+ //#region src/components/micro/alert.tsx
115
+ /**
116
+ * ✅ AUDITED & REFACTORED
117
+ * - Design System Compliant (22 Commandments)
118
+ * - WCAG AAA/AA
119
+ * - Form Control Parity
120
+ * - CSS Delegated Logic
121
+ */
122
+ var alertVariants = cva("group/alert relative rounded-lg border border-border text-left bg-card text-card-foreground", { variants: {
123
+ color: {
124
+ info: "border-info/15 bg-info/5 text-info",
125
+ destructive: "border-destructive/15 bg-destructive/5 text-destructive",
126
+ success: "border-success/15 bg-success/5 text-success",
127
+ warning: "border-warning/15 bg-warning/5 text-warning"
128
+ },
129
+ size: {
130
+ sm: "px-2 py-1.5 text-xs gap-x-1.5",
131
+ md: "px-2.5 py-2 text-sm gap-x-2",
132
+ lg: "px-3 py-2.5 text-base gap-x-2.5"
133
+ }
134
+ } });
135
+ var Alert = React.forwardRef(function Alert({ className, color = "info", size = "md", ...props }, ref) {
136
+ return /* @__PURE__ */ jsx("div", {
137
+ ref,
138
+ "data-slot": "alert",
139
+ "data-size": size,
140
+ "data-color": color,
141
+ role: "alert",
142
+ className: cn(alertVariants({
143
+ color,
144
+ size
145
+ }), className),
146
+ ...props
147
+ });
148
+ });
149
+ Alert.displayName = "Alert";
150
+ var AlertTitle = React.forwardRef(function AlertTitle({ className, ...props }, ref) {
151
+ return /* @__PURE__ */ jsx("div", {
152
+ ref,
153
+ "data-slot": "alert-title",
154
+ className: cn("font-medium", className),
155
+ ...props
156
+ });
157
+ });
158
+ AlertTitle.displayName = "AlertTitle";
159
+ var AlertDescription = React.forwardRef(function AlertDescription({ className, ...props }, ref) {
160
+ return /* @__PURE__ */ jsx("div", {
161
+ ref,
162
+ "data-slot": "alert-description",
163
+ className: cn("text-balance text-muted-foreground md:text-pretty leading-relaxed", "group-data-[color=info]/alert:text-info/90", "group-data-[color=destructive]/alert:text-destructive/90", "group-data-[color=success]/alert:text-success/90", "group-data-[color=warning]/alert:text-warning/90", className),
164
+ ...props
165
+ });
166
+ });
167
+ AlertDescription.displayName = "AlertDescription";
168
+ var AlertAction = React.forwardRef(function AlertAction({ className, ...props }, ref) {
169
+ return /* @__PURE__ */ jsx("div", {
170
+ ref,
171
+ "data-slot": "alert-action",
172
+ className: cn(className),
173
+ ...props
174
+ });
175
+ });
176
+ AlertAction.displayName = "AlertAction";
177
+ var AlertIcon = React.forwardRef(function AlertIcon({ className, render, ...props }, ref) {
178
+ return useRender({
179
+ render,
180
+ defaultTagName: "div",
181
+ props: mergeProps({
182
+ ref,
183
+ className: cn("text-current", "size-4 group-data-[size=sm]/alert:size-3.5 group-data-[size=lg]/alert:size-5", className),
184
+ "data-slot": "alert-icon"
185
+ }, props)
186
+ });
187
+ });
188
+ AlertIcon.displayName = "AlertIcon";
189
+ //#endregion
190
+ //#region src/components/micro/button.tsx
191
+ /**
192
+ * ✅ AUDITED & REFACTORED
193
+ * - Design System Compliant (20 Commandments)
194
+ * - WCAG AAA/AA
195
+ * - Form Control Parity
196
+ * - CSS Delegated Logic
197
+ */
198
+ /**
199
+ * variant = visual style (HOW it looks)
200
+ * solid → filled background (opaque)
201
+ * outline → border only, transparent bg
202
+ * ghost → no border, transparent bg
203
+ * soft → low-opacity tinted background
204
+ * link → looks like a hyperlink
205
+ *
206
+ * color = semantic color token (WHAT it means)
207
+ * primary → primary action
208
+ * secondary → alternative / neutral
209
+ * destructive → danger / delete
210
+ * warning → caution
211
+ * success → confirm / done
212
+ * info → information
213
+ * tertiary → extra / beta
214
+ */
215
+ var buttonVariants = cva("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-border text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:ring-3 focus-visible:ring-offset-1 focus-visible:ring-offset-background active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:focus-visible:ring-3 aria-invalid:focus-visible:ring-destructive/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:focus-visible:ring-destructive/50 data-[icon=true]:aspect-square data-[icon=true]:px-0", {
216
+ variants: {
217
+ variant: {
218
+ solid: "border-transparent",
219
+ outline: "bg-transparent",
220
+ ghost: "border-transparent bg-transparent",
221
+ soft: "border-transparent",
222
+ link: "border-transparent bg-transparent underline-offset-4 hover:underline"
223
+ },
224
+ color: {
225
+ primary: "",
226
+ secondary: "",
227
+ destructive: "",
228
+ warning: "",
229
+ success: "",
230
+ info: "",
231
+ tertiary: "",
232
+ muted: "",
233
+ accent: ""
234
+ },
235
+ size: {
236
+ sm: "h-7 gap-1 px-3 text-xs",
237
+ md: "h-8 gap-1.5 px-3.5",
238
+ lg: "h-9 gap-2 px-4"
239
+ }
240
+ },
241
+ compoundVariants: [
242
+ {
243
+ variant: "solid",
244
+ color: "primary",
245
+ className: "bg-primary text-primary-foreground hover:bg-primary/85"
246
+ },
247
+ {
248
+ variant: "solid",
249
+ color: "secondary",
250
+ className: "bg-secondary text-secondary-foreground hover:bg-secondary/85"
251
+ },
252
+ {
253
+ variant: "solid",
254
+ color: "destructive",
255
+ className: "bg-destructive text-destructive-foreground hover:bg-destructive/85"
256
+ },
257
+ {
258
+ variant: "solid",
259
+ color: "warning",
260
+ className: "bg-warning text-warning-foreground hover:bg-warning/85"
261
+ },
262
+ {
263
+ variant: "solid",
264
+ color: "success",
265
+ className: "bg-success text-success-foreground hover:bg-success/85"
266
+ },
267
+ {
268
+ variant: "solid",
269
+ color: "info",
270
+ className: "bg-info text-info-foreground hover:bg-info/85"
271
+ },
272
+ {
273
+ variant: "solid",
274
+ color: "tertiary",
275
+ className: "bg-tertiary text-tertiary-foreground hover:bg-tertiary/85"
276
+ },
277
+ {
278
+ variant: "solid",
279
+ color: "muted",
280
+ className: "bg-muted text-muted-foreground hover:bg-muted/85"
281
+ },
282
+ {
283
+ variant: "solid",
284
+ color: "accent",
285
+ className: "bg-accent text-accent-foreground hover:bg-accent/85"
286
+ },
287
+ {
288
+ variant: "outline",
289
+ color: "primary",
290
+ className: "border-primary text-primary hover:bg-primary/10"
291
+ },
292
+ {
293
+ variant: "outline",
294
+ color: "secondary",
295
+ className: "border-secondary text-secondary hover:bg-secondary/10"
296
+ },
297
+ {
298
+ variant: "outline",
299
+ color: "destructive",
300
+ className: "border-destructive text-destructive hover:bg-destructive/10"
301
+ },
302
+ {
303
+ variant: "outline",
304
+ color: "warning",
305
+ className: "border-warning text-warning hover:bg-warning/10"
306
+ },
307
+ {
308
+ variant: "outline",
309
+ color: "success",
310
+ className: "border-success text-success hover:bg-success/10"
311
+ },
312
+ {
313
+ variant: "outline",
314
+ color: "info",
315
+ className: "border-info text-info hover:bg-info/10"
316
+ },
317
+ {
318
+ variant: "outline",
319
+ color: "tertiary",
320
+ className: "border-tertiary text-tertiary hover:bg-tertiary/10"
321
+ },
322
+ {
323
+ variant: "outline",
324
+ color: "muted",
325
+ className: "border-muted text-muted-foreground hover:bg-muted/10"
326
+ },
327
+ {
328
+ variant: "outline",
329
+ color: "accent",
330
+ className: "border-accent text-accent-foreground hover:bg-accent/10"
331
+ },
332
+ {
333
+ variant: "soft",
334
+ color: "primary",
335
+ className: "bg-primary/15 text-primary hover:bg-primary/25"
336
+ },
337
+ {
338
+ variant: "soft",
339
+ color: "secondary",
340
+ className: "bg-secondary/15 text-secondary hover:bg-secondary/25"
341
+ },
342
+ {
343
+ variant: "soft",
344
+ color: "destructive",
345
+ className: "bg-destructive/15 text-destructive hover:bg-destructive/25"
346
+ },
347
+ {
348
+ variant: "soft",
349
+ color: "warning",
350
+ className: "bg-warning/15 text-warning hover:bg-warning/25"
351
+ },
352
+ {
353
+ variant: "soft",
354
+ color: "success",
355
+ className: "bg-success/15 text-success hover:bg-success/25"
356
+ },
357
+ {
358
+ variant: "soft",
359
+ color: "info",
360
+ className: "bg-info/15 text-info hover:bg-info/25"
361
+ },
362
+ {
363
+ variant: "soft",
364
+ color: "tertiary",
365
+ className: "bg-tertiary/15 text-tertiary hover:bg-tertiary/25"
366
+ },
367
+ {
368
+ variant: "soft",
369
+ color: "muted",
370
+ className: "bg-muted/50 text-muted-foreground hover:bg-muted/80"
371
+ },
372
+ {
373
+ variant: "soft",
374
+ color: "accent",
375
+ className: "bg-accent/50 text-accent-foreground hover:bg-accent/80"
376
+ },
377
+ {
378
+ variant: "ghost",
379
+ color: "primary",
380
+ className: "text-primary hover:bg-primary/10"
381
+ },
382
+ {
383
+ variant: "ghost",
384
+ color: "secondary",
385
+ className: "text-secondary hover:bg-secondary/10"
386
+ },
387
+ {
388
+ variant: "ghost",
389
+ color: "destructive",
390
+ className: "text-destructive hover:bg-destructive/10"
391
+ },
392
+ {
393
+ variant: "ghost",
394
+ color: "warning",
395
+ className: "text-warning hover:bg-warning/10"
396
+ },
397
+ {
398
+ variant: "ghost",
399
+ color: "success",
400
+ className: "text-success hover:bg-success/10"
401
+ },
402
+ {
403
+ variant: "ghost",
404
+ color: "info",
405
+ className: "text-info hover:bg-info/10"
406
+ },
407
+ {
408
+ variant: "ghost",
409
+ color: "tertiary",
410
+ className: "text-tertiary hover:bg-tertiary/10"
411
+ },
412
+ {
413
+ variant: "ghost",
414
+ color: "muted",
415
+ className: "text-muted-foreground hover:bg-muted/10"
416
+ },
417
+ {
418
+ variant: "ghost",
419
+ color: "accent",
420
+ className: "text-accent-foreground hover:bg-accent/10"
421
+ },
422
+ {
423
+ variant: "link",
424
+ color: "primary",
425
+ className: "text-primary"
426
+ },
427
+ {
428
+ variant: "link",
429
+ color: "secondary",
430
+ className: "text-secondary"
431
+ },
432
+ {
433
+ variant: "link",
434
+ color: "destructive",
435
+ className: "text-destructive"
436
+ },
437
+ {
438
+ variant: "link",
439
+ color: "warning",
440
+ className: "text-warning"
441
+ },
442
+ {
443
+ variant: "link",
444
+ color: "success",
445
+ className: "text-success"
446
+ },
447
+ {
448
+ variant: "link",
449
+ color: "info",
450
+ className: "text-info"
451
+ },
452
+ {
453
+ variant: "link",
454
+ color: "tertiary",
455
+ className: "text-tertiary"
456
+ },
457
+ {
458
+ variant: "link",
459
+ color: "muted",
460
+ className: "text-muted-foreground"
461
+ },
462
+ {
463
+ variant: "link",
464
+ color: "accent",
465
+ className: "text-accent-foreground"
466
+ },
467
+ {
468
+ color: "primary",
469
+ className: "focus-visible:ring-primary/50"
470
+ },
471
+ {
472
+ color: "secondary",
473
+ className: "focus-visible:ring-secondary/50"
474
+ },
475
+ {
476
+ color: "destructive",
477
+ className: "focus-visible:ring-destructive/50"
478
+ },
479
+ {
480
+ color: "warning",
481
+ className: "focus-visible:ring-warning/50"
482
+ },
483
+ {
484
+ color: "success",
485
+ className: "focus-visible:ring-success/50"
486
+ },
487
+ {
488
+ color: "info",
489
+ className: "focus-visible:ring-info/50"
490
+ },
491
+ {
492
+ color: "tertiary",
493
+ className: "focus-visible:ring-tertiary/50"
494
+ },
495
+ {
496
+ color: "muted",
497
+ className: "focus-visible:ring-muted/50"
498
+ },
499
+ {
500
+ color: "accent",
501
+ className: "focus-visible:ring-accent/50"
502
+ }
503
+ ]
504
+ });
505
+ var Button = React.forwardRef(({ className, variant = "solid", color = "primary", size = "md", iconOnly, children, ...props }, ref) => {
506
+ return /* @__PURE__ */ jsx(Button$1, {
507
+ ref,
508
+ "data-slot": "button",
509
+ "data-color": color,
510
+ "data-variant": variant,
511
+ ...iconOnly && { "data-icon": "true" },
512
+ className: cn(buttonVariants({
513
+ variant,
514
+ color,
515
+ size,
516
+ className
517
+ })),
518
+ ...props,
519
+ children
520
+ });
521
+ });
522
+ Button.displayName = "Button";
523
+ var ButtonIcon = React.forwardRef(function ButtonIcon({ className, render, ...props }, ref) {
524
+ return useRender({
525
+ render,
526
+ defaultTagName: "span",
527
+ props: mergeProps({
528
+ ref,
529
+ className: cn("inline-flex items-center justify-center shrink-0 transition-transform", "size-4 group-data-[size=sm]/button:size-3.5 group-data-[size=lg]/button:size-5", "[&>svg]:size-full [&>svg]:pointer-events-none", className),
530
+ "data-slot": "button-icon"
531
+ }, props)
532
+ });
533
+ });
534
+ ButtonIcon.displayName = "ButtonIcon";
535
+ //#endregion
536
+ //#region src/components/micro/alert-dialog.tsx
537
+ /**
538
+ * @description A modal dialog that interrupts the user with important content and expects a response.
539
+ * @requires AlertDialogTrigger, AlertDialogContent, AlertDialogHeader, AlertDialogFooter
540
+ * @example
541
+ * <AlertDialog>
542
+ * <AlertDialogTrigger>Open</AlertDialogTrigger>
543
+ * <AlertDialogContent>
544
+ * <AlertDialogHeader><AlertDialogTitle>Are you sure?</AlertDialogTitle></AlertDialogHeader>
545
+ * <AlertDialogFooter><AlertDialogCancel>Cancel</AlertDialogCancel><AlertDialogAction>Continue</AlertDialogAction></AlertDialogFooter>
546
+ * </AlertDialogContent>
547
+ * </AlertDialog>
548
+ */
549
+ function AlertDialog({ ...props }) {
550
+ return /* @__PURE__ */ jsx(AlertDialog$1.Root, {
551
+ "data-slot": "alert-dialog",
552
+ ...props
553
+ });
554
+ }
555
+ function AlertDialogTrigger({ ...props }) {
556
+ return /* @__PURE__ */ jsx(AlertDialog$1.Trigger, {
557
+ "data-slot": "alert-dialog-trigger",
558
+ ...props
559
+ });
560
+ }
561
+ function AlertDialogClose({ ...props }) {
562
+ return /* @__PURE__ */ jsx(AlertDialog$1.Close, {
563
+ "data-slot": "alert-dialog-close",
564
+ ...props
565
+ });
566
+ }
567
+ var AlertDialogPortal = AlertDialog$1.Portal;
568
+ function AlertDialogOverlay({ className, ...props }) {
569
+ return /* @__PURE__ */ jsx(AlertDialog$1.Backdrop, {
570
+ "data-slot": "alert-dialog-overlay",
571
+ className: cn("fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0", className),
572
+ ...props
573
+ });
574
+ }
575
+ function AlertDialogContent({ className, size = "md", ...props }) {
576
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(AlertDialogOverlay, {}), /* @__PURE__ */ jsx(AlertDialog$1.Popup, {
577
+ "data-slot": "alert-dialog-content",
578
+ "data-size": size,
579
+ className: cn("group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none", "data-[size=sm]:max-w-xs", "data-[size=md]:max-w-xs data-[size=md]:sm:max-w-sm", "data-[size=lg]:max-w-sm data-[size=lg]:sm:max-w-md", "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", className),
580
+ ...props
581
+ })] });
582
+ }
583
+ function AlertDialogHeader({ className, ...props }) {
584
+ return /* @__PURE__ */ jsx("div", {
585
+ "data-slot": "alert-dialog-header",
586
+ className: cn("flex flex-col gap-2 text-center sm:text-left", className),
587
+ ...props
588
+ });
589
+ }
590
+ function AlertDialogFooter({ className, ...props }) {
591
+ return /* @__PURE__ */ jsx("div", {
592
+ "data-slot": "alert-dialog-footer",
593
+ className: cn("-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t border-t-border bg-muted/50 p-4 sm:flex-row sm:justify-end", className),
594
+ ...props
595
+ });
596
+ }
597
+ function AlertDialogMedia({ className, ...props }) {
598
+ return /* @__PURE__ */ jsx("div", {
599
+ "data-slot": "alert-dialog-media",
600
+ className: cn("inline-flex size-10 items-center justify-center [&>svg:not([class*='size-'])]:size-6", "group-data-[size=lg]/alert-dialog-content:size-12", className),
601
+ ...props
602
+ });
603
+ }
604
+ function AlertDialogTitle({ className, ...props }) {
605
+ return /* @__PURE__ */ jsx(AlertDialog$1.Title, {
606
+ "data-slot": "alert-dialog-title",
607
+ className: cn("font-heading text-base font-medium", "group-data-[size=lg]/alert-dialog-content:text-lg", className),
608
+ ...props
609
+ });
610
+ }
611
+ function AlertDialogDescription({ className, ...props }) {
612
+ return /* @__PURE__ */ jsx(AlertDialog$1.Description, {
613
+ "data-slot": "alert-dialog-description",
614
+ className: cn("text-sm text-balance text-muted-foreground md:text-pretty [&_p]:leading-relaxed", "group-data-[size=lg]/alert-dialog-content:text-base", className),
615
+ ...props
616
+ });
617
+ }
618
+ function AlertDialogAction({ className, variant, color, size = "md", ...props }) {
619
+ return /* @__PURE__ */ jsx(AlertDialog$1.Close, {
620
+ "data-slot": "alert-dialog-action",
621
+ className: cn(className),
622
+ render: /* @__PURE__ */ jsx(Button, {
623
+ variant,
624
+ color,
625
+ size
626
+ }),
627
+ ...props
628
+ });
629
+ }
630
+ function AlertDialogCancel({ className, variant = "outline", color, size = "md", ...props }) {
631
+ return /* @__PURE__ */ jsx(AlertDialog$1.Close, {
632
+ "data-slot": "alert-dialog-cancel",
633
+ className: cn(className),
634
+ render: /* @__PURE__ */ jsx(Button, {
635
+ variant,
636
+ color,
637
+ size
638
+ }),
639
+ ...props
640
+ });
641
+ }
642
+ //#endregion
643
+ //#region src/components/micro/aspect-ratio.tsx
644
+ /**
645
+ * ✅ AUDITED & REFACTORED
646
+ * - Design System Compliant (22 Commandments)
647
+ * - WCAG AAA/AA
648
+ * - Form Control Parity
649
+ * - CSS Delegated Logic
650
+ */
651
+ /**
652
+ * @description Displays content within a desired ratio.
653
+ * @example
654
+ * <AspectRatio ratio={16 / 9}>
655
+ * <img src="..." alt="..." />
656
+ * </AspectRatio>
657
+ */
658
+ var AspectRatio = React.forwardRef(({ ratio, className, ...props }, ref) => {
659
+ return /* @__PURE__ */ jsx("div", {
660
+ ref,
661
+ "data-slot": "aspect-ratio",
662
+ style: { "--ratio": ratio },
663
+ className: cn("relative aspect-(--ratio)", className),
664
+ ...props
665
+ });
666
+ });
667
+ AspectRatio.displayName = "AspectRatio";
668
+ //#endregion
669
+ //#region src/components/micro/avatar.tsx
670
+ /**
671
+ * ✅ AUDITED & REFACTORED
672
+ * - Design System Compliant (20 Commandments)
673
+ * - WCAG AAA/AA
674
+ * - Form Control Parity
675
+ * - CSS Delegated Logic
676
+ */
677
+ /**
678
+ * @description An image element with a fallback for representing the user.
679
+ * @requires AvatarImage, AvatarFallback
680
+ * @example
681
+ * <Avatar>
682
+ * <AvatarImage src="https://github.com/shadcn.png" />
683
+ * <AvatarFallback>CN</AvatarFallback>
684
+ * </Avatar>
685
+ */
686
+ var Avatar = React.forwardRef(({ className, size = "md", ...props }, ref) => {
687
+ return /* @__PURE__ */ jsx(Avatar$1.Root, {
688
+ ref,
689
+ "data-slot": "avatar",
690
+ "data-size": size,
691
+ className: cn("group/avatar relative flex size-8 shrink-0 rounded-full select-none after:absolute after:inset-0 after:rounded-full after:border after:border-border after:mix-blend-darken data-[size=lg]:size-10 data-[size=sm]:size-6 dark:after:mix-blend-lighten", "group-data-[slot=avatar-group]/avatar-group:ring-2 group-data-[slot=avatar-group]/avatar-group:ring-background", className),
692
+ ...props
693
+ });
694
+ });
695
+ Avatar.displayName = "Avatar";
696
+ var AvatarImage = React.forwardRef(({ className, ...props }, ref) => {
697
+ return /* @__PURE__ */ jsx(Avatar$1.Image, {
698
+ ref,
699
+ "data-slot": "avatar-image",
700
+ className: cn("aspect-square size-full rounded-full object-cover", className),
701
+ ...props
702
+ });
703
+ });
704
+ AvatarImage.displayName = "AvatarImage";
705
+ var AvatarFallback = React.forwardRef(({ className, ...props }, ref) => {
706
+ return /* @__PURE__ */ jsx(Avatar$1.Fallback, {
707
+ ref,
708
+ "data-slot": "avatar-fallback",
709
+ className: cn("flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs group-data-[size=lg]/avatar:text-base", className),
710
+ ...props
711
+ });
712
+ });
713
+ AvatarFallback.displayName = "AvatarFallback";
714
+ var AvatarBadge = React.forwardRef(({ className, ...props }, ref) => {
715
+ return /* @__PURE__ */ jsx("span", {
716
+ ref,
717
+ "data-slot": "avatar-badge",
718
+ className: cn("rounded-full bg-primary ring-2 ring-background", "group-data-[size=sm]/avatar:size-2", "group-data-[size=md]/avatar:size-2.5", "group-data-[size=lg]/avatar:size-3", className),
719
+ ...props
720
+ });
721
+ });
722
+ AvatarBadge.displayName = "AvatarBadge";
723
+ var AvatarGroup = React.forwardRef(({ className, ...props }, ref) => {
724
+ return /* @__PURE__ */ jsx("div", {
725
+ ref,
726
+ "data-slot": "avatar-group",
727
+ className: cn("group/avatar-group flex -space-x-2", className),
728
+ ...props
729
+ });
730
+ });
731
+ AvatarGroup.displayName = "AvatarGroup";
732
+ var AvatarGroupCount = React.forwardRef(({ className, size = "md", ...props }, ref) => {
733
+ return /* @__PURE__ */ jsx("div", {
734
+ ref,
735
+ "data-slot": "avatar-group-count",
736
+ "data-size": size,
737
+ className: cn("relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background data-[size=lg]:size-10 data-[size=sm]:size-6", className),
738
+ ...props
739
+ });
740
+ });
741
+ AvatarGroupCount.displayName = "AvatarGroupCount";
742
+ //#endregion
743
+ //#region src/components/micro/badge.tsx
744
+ /**
745
+ * ✅ AUDITED & REFACTORED
746
+ * - Design System Compliant (20 Commandments)
747
+ * - WCAG AAA/AA
748
+ * - Form Control Parity
749
+ * - CSS Delegated Logic
750
+ */
751
+ var badgeVariants = cva("group/badge inline-flex h-6 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2.5 py-0.5 text-xs font-medium whitespace-nowrap transition-colors focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:ring-offset-1 focus-visible:ring-offset-background", {
752
+ variants: {
753
+ variant: {
754
+ solid: "border-transparent",
755
+ outline: "bg-transparent",
756
+ soft: "border-transparent"
757
+ },
758
+ color: {
759
+ primary: "",
760
+ secondary: "",
761
+ destructive: "",
762
+ warning: "",
763
+ success: "",
764
+ info: "",
765
+ tertiary: "",
766
+ muted: "",
767
+ accent: ""
768
+ }
769
+ },
770
+ compoundVariants: [
771
+ {
772
+ variant: "solid",
773
+ color: "primary",
774
+ className: "bg-primary text-primary-foreground"
775
+ },
776
+ {
777
+ variant: "solid",
778
+ color: "secondary",
779
+ className: "bg-secondary text-secondary-foreground"
780
+ },
781
+ {
782
+ variant: "solid",
783
+ color: "destructive",
784
+ className: "bg-destructive text-destructive-foreground"
785
+ },
786
+ {
787
+ variant: "solid",
788
+ color: "warning",
789
+ className: "bg-warning text-warning-foreground"
790
+ },
791
+ {
792
+ variant: "solid",
793
+ color: "success",
794
+ className: "bg-success text-success-foreground"
795
+ },
796
+ {
797
+ variant: "solid",
798
+ color: "info",
799
+ className: "bg-info text-info-foreground"
800
+ },
801
+ {
802
+ variant: "solid",
803
+ color: "tertiary",
804
+ className: "bg-tertiary text-tertiary-foreground"
805
+ },
806
+ {
807
+ variant: "solid",
808
+ color: "muted",
809
+ className: "bg-muted text-muted-foreground"
810
+ },
811
+ {
812
+ variant: "solid",
813
+ color: "accent",
814
+ className: "bg-accent text-accent-foreground"
815
+ },
816
+ {
817
+ variant: "outline",
818
+ color: "primary",
819
+ className: "border-primary text-primary"
820
+ },
821
+ {
822
+ variant: "outline",
823
+ color: "secondary",
824
+ className: "border-secondary text-secondary"
825
+ },
826
+ {
827
+ variant: "outline",
828
+ color: "destructive",
829
+ className: "border-destructive text-destructive"
830
+ },
831
+ {
832
+ variant: "outline",
833
+ color: "warning",
834
+ className: "border-warning text-warning"
835
+ },
836
+ {
837
+ variant: "outline",
838
+ color: "success",
839
+ className: "border-success text-success"
840
+ },
841
+ {
842
+ variant: "outline",
843
+ color: "info",
844
+ className: "border-info text-info"
845
+ },
846
+ {
847
+ variant: "outline",
848
+ color: "tertiary",
849
+ className: "border-tertiary text-tertiary"
850
+ },
851
+ {
852
+ variant: "outline",
853
+ color: "muted",
854
+ className: "border-muted text-muted-foreground"
855
+ },
856
+ {
857
+ variant: "outline",
858
+ color: "accent",
859
+ className: "border-accent text-accent-foreground"
860
+ },
861
+ {
862
+ variant: "soft",
863
+ color: "primary",
864
+ className: "bg-primary/15 text-primary"
865
+ },
866
+ {
867
+ variant: "soft",
868
+ color: "secondary",
869
+ className: "bg-secondary/15 text-secondary"
870
+ },
871
+ {
872
+ variant: "soft",
873
+ color: "destructive",
874
+ className: "bg-destructive/15 text-destructive"
875
+ },
876
+ {
877
+ variant: "soft",
878
+ color: "warning",
879
+ className: "bg-warning/15 text-warning"
880
+ },
881
+ {
882
+ variant: "soft",
883
+ color: "success",
884
+ className: "bg-success/15 text-success"
885
+ },
886
+ {
887
+ variant: "soft",
888
+ color: "info",
889
+ className: "bg-info/15 text-info"
890
+ },
891
+ {
892
+ variant: "soft",
893
+ color: "tertiary",
894
+ className: "bg-tertiary/15 text-tertiary"
895
+ },
896
+ {
897
+ variant: "soft",
898
+ color: "muted",
899
+ className: "bg-muted/50 text-muted-foreground"
900
+ },
901
+ {
902
+ variant: "soft",
903
+ color: "accent",
904
+ className: "bg-accent/50 text-accent-foreground"
905
+ }
906
+ ]
907
+ });
908
+ var Badge = React.forwardRef(({ className, variant = "solid", color = "primary", render, ...props }, ref) => {
909
+ return useRender({
910
+ defaultTagName: "span",
911
+ props: mergeProps({
912
+ ref,
913
+ className: cn(badgeVariants({
914
+ variant,
915
+ color
916
+ }), className)
917
+ }, props),
918
+ render,
919
+ state: {
920
+ slot: "badge",
921
+ variant,
922
+ color
923
+ }
924
+ });
925
+ });
926
+ Badge.displayName = "Badge";
927
+ //#endregion
928
+ //#region src/components/micro/breadcrumb.tsx
929
+ /**
930
+ * ✅ AUDITED & REFACTORED
931
+ * - Design System Compliant (22 Commandments)
932
+ * - WCAG AAA/AA
933
+ * - Form Control Parity
934
+ * - CSS Delegated Logic
935
+ */
936
+ /**
937
+ * @description Displays the path to the current resource using a hierarchy of links.
938
+ * @requires BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbSeparator, BreadcrumbPage
939
+ * @example
940
+ * <Breadcrumb>
941
+ * <BreadcrumbList>
942
+ * <BreadcrumbItem><BreadcrumbLink href="/">Home</BreadcrumbLink></BreadcrumbItem>
943
+ * <BreadcrumbSeparator />
944
+ * <BreadcrumbItem><BreadcrumbPage>Current</BreadcrumbPage></BreadcrumbItem>
945
+ * </BreadcrumbList>
946
+ * </Breadcrumb>
947
+ */
948
+ var Breadcrumb = React.forwardRef(({ className, ...props }, ref) => {
949
+ return /* @__PURE__ */ jsx("nav", {
950
+ ref,
951
+ "aria-label": "breadcrumb",
952
+ "data-slot": "breadcrumb",
953
+ className: cn(className),
954
+ ...props
955
+ });
956
+ });
957
+ Breadcrumb.displayName = "Breadcrumb";
958
+ var BreadcrumbList = React.forwardRef(({ className, ...props }, ref) => {
959
+ return /* @__PURE__ */ jsx("ol", {
960
+ ref,
961
+ "data-slot": "breadcrumb-list",
962
+ className: cn("flex flex-wrap items-center gap-1.5 text-sm wrap-break-word text-muted-foreground", className),
963
+ ...props
964
+ });
965
+ });
966
+ BreadcrumbList.displayName = "BreadcrumbList";
967
+ var BreadcrumbItem = React.forwardRef(({ className, ...props }, ref) => {
968
+ return /* @__PURE__ */ jsx("li", {
969
+ ref,
970
+ "data-slot": "breadcrumb-item",
971
+ className: cn("inline-flex items-center gap-1", className),
972
+ ...props
973
+ });
974
+ });
975
+ BreadcrumbItem.displayName = "BreadcrumbItem";
976
+ var BreadcrumbLink = React.forwardRef(({ className, render, ...props }, ref) => {
977
+ return useRender({
978
+ defaultTagName: "a",
979
+ props: mergeProps({
980
+ ref,
981
+ className: cn("transition-colors hover:text-foreground", className)
982
+ }, props),
983
+ render,
984
+ state: { slot: "breadcrumb-link" }
985
+ });
986
+ });
987
+ BreadcrumbLink.displayName = "BreadcrumbLink";
988
+ var BreadcrumbPage = React.forwardRef(({ className, ...props }, ref) => {
989
+ return /* @__PURE__ */ jsx("span", {
990
+ ref,
991
+ "data-slot": "breadcrumb-page",
992
+ role: "link",
993
+ "aria-disabled": "true",
994
+ "aria-current": "page",
995
+ className: cn("font-normal text-foreground", className),
996
+ ...props
997
+ });
998
+ });
999
+ BreadcrumbPage.displayName = "BreadcrumbPage";
1000
+ var BreadcrumbSeparator = React.forwardRef(({ children, className, ...props }, ref) => {
1001
+ return /* @__PURE__ */ jsx("li", {
1002
+ ref,
1003
+ "data-slot": "breadcrumb-separator",
1004
+ role: "presentation",
1005
+ "aria-hidden": "true",
1006
+ className: cn(className),
1007
+ ...props,
1008
+ children: children ?? /* @__PURE__ */ jsx(ChevronRightIcon, { className: "size-3.5" })
1009
+ });
1010
+ });
1011
+ BreadcrumbSeparator.displayName = "BreadcrumbSeparator";
1012
+ var BreadcrumbEllipsis = React.forwardRef(({ className, ...props }, ref) => {
1013
+ return /* @__PURE__ */ jsxs("span", {
1014
+ ref,
1015
+ "data-slot": "breadcrumb-ellipsis",
1016
+ role: "presentation",
1017
+ "aria-hidden": "true",
1018
+ className: cn("flex size-5 items-center justify-center", className),
1019
+ ...props,
1020
+ children: [/* @__PURE__ */ jsx(MoreHorizontalIcon, { className: "size-4" }), /* @__PURE__ */ jsx("span", {
1021
+ className: "sr-only",
1022
+ children: "More"
1023
+ })]
1024
+ });
1025
+ });
1026
+ BreadcrumbEllipsis.displayName = "BreadcrumbEllipsis";
1027
+ //#endregion
1028
+ //#region src/components/micro/select.tsx
1029
+ /**
1030
+ * ✅ AUDITED & REFACTORED
1031
+ * - Design System Compliant (22 Commandments)
1032
+ * - WCAG AAA/AA
1033
+ * - Form Control Parity
1034
+ * - CSS Delegated Logic
1035
+ */
1036
+ var Select = Select$1.Root;
1037
+ var SelectGroup = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(Select$1.Group, {
1038
+ ref,
1039
+ "data-slot": "select-group",
1040
+ className: cn("scroll-my-1", className),
1041
+ ...props
1042
+ }));
1043
+ SelectGroup.displayName = "SelectGroup";
1044
+ var SelectValue = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(Select$1.Value, {
1045
+ ref,
1046
+ "data-slot": "select-value",
1047
+ className: cn("flex flex-1 text-left", className),
1048
+ ...props
1049
+ }));
1050
+ SelectValue.displayName = "SelectValue";
1051
+ var SelectPortal = Select$1.Portal;
1052
+ var selectTriggerVariants = cva("inline-flex items-center justify-between rounded-lg border border-input bg-transparent text-foreground text-sm whitespace-nowrap transition-colors outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:focus-visible:ring-3 aria-invalid:focus-visible:ring-destructive/50 data-placeholder:text-muted-foreground [&_[data-slot=select-value]]:line-clamp-1 [&_[data-slot=select-value]]:flex [&_[data-slot=select-value]]:items-center [&>svg]:pointer-events-none [&>svg]:shrink-0 [&>svg:not([class*='size-'])]:size-4 dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:focus-visible:ring-destructive/50", { variants: { size: {
1053
+ sm: "h-7 gap-1 px-2 py-0.5 text-xs [&_[data-slot=select-value]]:gap-1",
1054
+ md: "h-8 gap-1.5 px-2.5 py-1 text-sm [&_[data-slot=select-value]]:gap-1.5",
1055
+ lg: "h-9 gap-2 px-3 py-1.5 [&_[data-slot=select-value]]:gap-2"
1056
+ } } });
1057
+ var SelectTrigger = React.forwardRef(({ className, size = "md", children, ...props }, ref) => /* @__PURE__ */ jsxs(Select$1.Trigger, {
1058
+ ref,
1059
+ "data-slot": "select-trigger",
1060
+ className: cn(selectTriggerVariants({
1061
+ size,
1062
+ className
1063
+ })),
1064
+ ...props,
1065
+ children: [children, /* @__PURE__ */ jsx(Select$1.Icon, { render: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "pointer-events-none size-4 text-muted-foreground" }) })]
1066
+ }));
1067
+ SelectTrigger.displayName = "SelectTrigger";
1068
+ var SelectContent = React.forwardRef(({ className, children, side = "bottom", sideOffset = 4, align = "center", alignOffset = 0, alignItemWithTrigger = false, ...props }, ref) => /* @__PURE__ */ jsx(Select$1.Positioner, {
1069
+ side,
1070
+ sideOffset,
1071
+ align,
1072
+ alignOffset,
1073
+ alignItemWithTrigger,
1074
+ className: "isolate z-50",
1075
+ children: /* @__PURE__ */ jsxs(Select$1.Popup, {
1076
+ ref,
1077
+ "data-slot": "select-content",
1078
+ "data-align-trigger": alignItemWithTrigger,
1079
+ className: cn("relative isolate z-50 max-h-(--available-height) w-[calc(var(--anchor-width)+8px)] overflow-x-hidden overflow-y-auto rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 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-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", alignItemWithTrigger ? "origin-(--transform-origin) data-[align-trigger=true]:animate-none" : "", className),
1080
+ ...props,
1081
+ children: [
1082
+ /* @__PURE__ */ jsx(SelectScrollUpButton, {}),
1083
+ /* @__PURE__ */ jsx(Select$1.List, { children }),
1084
+ /* @__PURE__ */ jsx(SelectScrollDownButton, {})
1085
+ ]
1086
+ })
1087
+ }));
1088
+ SelectContent.displayName = "SelectContent";
1089
+ var SelectLabel = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(Select$1.GroupLabel, {
1090
+ ref,
1091
+ "data-slot": "select-label",
1092
+ className: cn("px-1.5 py-1 text-xs text-muted-foreground", className),
1093
+ ...props
1094
+ }));
1095
+ SelectLabel.displayName = "SelectLabel";
1096
+ var SelectItem = React.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(Select$1.Item, {
1097
+ ref,
1098
+ "data-slot": "select-item",
1099
+ className: cn("relative flex w-full cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&>svg]:pointer-events-none [&>svg]:shrink-0 [&>svg:not([class*='size-'])]:size-4 [&>[data-slot=select-item-indicator]]:flex [&>[data-slot=select-item-indicator]]:items-center [&>[data-slot=select-item-indicator]]:gap-2", className),
1100
+ ...props,
1101
+ children: [/* @__PURE__ */ jsx(Select$1.ItemText, {
1102
+ className: "flex flex-1 shrink-0 gap-2 whitespace-nowrap",
1103
+ children
1104
+ }), /* @__PURE__ */ jsx(Select$1.ItemIndicator, {
1105
+ render: /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center" }),
1106
+ children: /* @__PURE__ */ jsx(CheckIcon, { className: "pointer-events-none" })
1107
+ })]
1108
+ }));
1109
+ SelectItem.displayName = "SelectItem";
1110
+ var SelectSeparator = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(Select$1.Separator, {
1111
+ ref,
1112
+ "data-slot": "select-separator",
1113
+ className: cn("pointer-events-none -mx-1 my-1 h-px bg-border", className),
1114
+ ...props
1115
+ }));
1116
+ SelectSeparator.displayName = "SelectSeparator";
1117
+ var SelectScrollUpButton = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(Select$1.ScrollUpArrow, {
1118
+ ref,
1119
+ "data-slot": "select-scroll-up-button",
1120
+ className: cn("top-0 z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4", className),
1121
+ ...props,
1122
+ children: /* @__PURE__ */ jsx(ChevronUpIcon, {})
1123
+ }));
1124
+ SelectScrollUpButton.displayName = "SelectScrollUpButton";
1125
+ var SelectScrollDownButton = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(Select$1.ScrollDownArrow, {
1126
+ ref,
1127
+ "data-slot": "select-scroll-down-button",
1128
+ className: cn("bottom-0 z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4", className),
1129
+ ...props,
1130
+ children: /* @__PURE__ */ jsx(ChevronDownIcon, {})
1131
+ }));
1132
+ SelectScrollDownButton.displayName = "SelectScrollDownButton";
1133
+ //#endregion
1134
+ //#region src/components/micro/calendar.tsx
1135
+ /**
1136
+ * ✅ AUDITED
1137
+ * - Design System Compliant (22 Commandments)
1138
+ * - WCAG AAA/AA
1139
+ * - Form Control Parity
1140
+ * - CSS Delegated Logic
1141
+ */
1142
+ function getDropdownLabel(options, value, locale) {
1143
+ const valueStr = Array.isArray(value) ? value[0] : value?.toString();
1144
+ const selected = options?.find((o) => o.value.toString() === valueStr);
1145
+ if (!selected) return "";
1146
+ if (options?.length === 12 && selected.value !== void 0) return new Date(2e3, Number(selected.value), 1).toLocaleString(locale?.code ?? "en-US", { month: "short" });
1147
+ return selected.label;
1148
+ }
1149
+ var calendarVariants = cva("group/calendar bg-background p-2 in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent", { variants: { size: {
1150
+ sm: "calendar-sm",
1151
+ md: "calendar-md",
1152
+ lg: "calendar-lg"
1153
+ } } });
1154
+ /**
1155
+ * @description A date field component that allows users to enter and edit date.
1156
+ * @example
1157
+ * <Calendar mode="single" selected={date} onSelect={setDate} />
1158
+ */
1159
+ function Calendar({ className, classNames, showOutsideDays = true, captionLayout = "label", buttonVariant = "ghost", locale, formatters, components, size = "md", ...props }) {
1160
+ const defaultClassNames = getDefaultClassNames();
1161
+ return /* @__PURE__ */ jsx(DayPicker, {
1162
+ showOutsideDays,
1163
+ className: cn(calendarVariants({ size }), className),
1164
+ captionLayout,
1165
+ locale,
1166
+ formatters: {
1167
+ formatMonthDropdown: (month) => month.toLocaleString(locale?.code ?? "en-US", { month: "long" }),
1168
+ ...formatters
1169
+ },
1170
+ classNames: {
1171
+ root: cn("w-fit", defaultClassNames.root),
1172
+ months: cn("relative flex flex-col gap-4 md:flex-row", defaultClassNames.months),
1173
+ month: cn("flex w-full flex-col gap-4", defaultClassNames.month),
1174
+ nav: cn("absolute inset-x-0 top-0 flex items-center justify-between pointer-events-none", "h-8 group-[.calendar-sm]/calendar:h-7 group-[.calendar-lg]/calendar:h-9", defaultClassNames.nav),
1175
+ button_previous: cn(buttonVariants({
1176
+ variant: buttonVariant,
1177
+ color: "secondary",
1178
+ size
1179
+ }), "p-0 aspect-square select-none pointer-events-auto aria-disabled:opacity-50", defaultClassNames.button_previous),
1180
+ button_next: cn(buttonVariants({
1181
+ variant: buttonVariant,
1182
+ color: "secondary",
1183
+ size
1184
+ }), "p-0 aspect-square select-none pointer-events-auto aria-disabled:opacity-50", defaultClassNames.button_next),
1185
+ month_caption: cn("flex w-full items-center justify-center", "h-8 px-8 group-[.calendar-sm]/calendar:h-7 group-[.calendar-sm]/calendar:px-7 group-[.calendar-lg]/calendar:h-9 group-[.calendar-lg]/calendar:px-9", defaultClassNames.month_caption),
1186
+ dropdowns: cn("flex h-7 group-[.calendar-sm]/calendar:h-6 group-[.calendar-lg]/calendar:h-8 items-center justify-center gap-0", defaultClassNames.dropdowns),
1187
+ dropdown_root: cn("relative flex items-center justify-center", defaultClassNames.dropdown_root),
1188
+ dropdown: cn(defaultClassNames.dropdown),
1189
+ caption_label: cn("px-2 font-bold select-none", {
1190
+ "text-sm group-[.calendar-sm]/calendar:text-xs group-[.calendar-lg]/calendar:text-base": captionLayout === "label",
1191
+ "flex items-center gap-1 rounded-md text-sm group-[.calendar-sm]/calendar:text-xs group-[.calendar-lg]/calendar:text-base [&>svg]:size-3.5 [&>svg]:text-muted-foreground": captionLayout !== "label"
1192
+ }, defaultClassNames.caption_label),
1193
+ month_grid: cn("w-full border-collapse", defaultClassNames.month_grid),
1194
+ weekdays: cn("flex gap-1", defaultClassNames.weekdays),
1195
+ weekday: cn("flex-1 rounded-md text-xs font-medium text-muted-foreground select-none group-[.calendar-sm]/calendar:text-[10px] group-[.calendar-lg]/calendar:text-sm", defaultClassNames.weekday),
1196
+ week: cn("mt-2 flex w-full gap-1", defaultClassNames.week),
1197
+ week_number_header: cn("w-7 group-[.calendar-sm]/calendar:w-6 group-[.calendar-lg]/calendar:w-8 select-none", defaultClassNames.week_number_header),
1198
+ week_number: cn("text-xs text-muted-foreground select-none group-[.calendar-sm]/calendar:text-[10px] group-[.calendar-lg]/calendar:text-sm", defaultClassNames.week_number),
1199
+ day: cn("group/day relative aspect-square h-full w-full rounded-md p-0 text-center select-none", defaultClassNames.day),
1200
+ day_button: cn(defaultClassNames.day_button),
1201
+ range_start: cn("relative isolate z-0 rounded-md bg-muted", defaultClassNames.range_start),
1202
+ range_middle: cn("rounded-md bg-muted", defaultClassNames.range_middle),
1203
+ range_end: cn("relative isolate z-0 rounded-md bg-muted", defaultClassNames.range_end),
1204
+ today: cn("rounded-md bg-muted text-foreground", defaultClassNames.today),
1205
+ outside: cn("text-muted-foreground aria-selected:text-muted-foreground", defaultClassNames.outside),
1206
+ disabled: cn("text-muted-foreground opacity-50", defaultClassNames.disabled),
1207
+ hidden: cn("invisible", defaultClassNames.hidden),
1208
+ ...classNames
1209
+ },
1210
+ components: {
1211
+ Root: ({ className, rootRef, ...props }) => {
1212
+ return /* @__PURE__ */ jsx("div", {
1213
+ "data-slot": "calendar",
1214
+ ref: rootRef,
1215
+ className: cn(className),
1216
+ ...props
1217
+ });
1218
+ },
1219
+ Dropdown: ({ value, onChange, options, disabled, "aria-label": ariaLabel, name }) => {
1220
+ return /* @__PURE__ */ jsxs(Select, {
1221
+ value: value?.toString(),
1222
+ disabled,
1223
+ onValueChange: (newVal) => {
1224
+ onChange?.({ target: {
1225
+ value: newVal,
1226
+ name
1227
+ } });
1228
+ },
1229
+ children: [/* @__PURE__ */ jsx(SelectTrigger, {
1230
+ size,
1231
+ "aria-label": ariaLabel,
1232
+ className: "w-fit min-w-0 px-1 border-none bg-transparent font-medium shadow-none focus-visible:ring-0 focus-visible:ring-offset-0 [&_[data-slot=select-value]]:w-auto",
1233
+ children: /* @__PURE__ */ jsx("span", {
1234
+ "data-slot": "select-value",
1235
+ className: "flex flex-1 text-left",
1236
+ children: getDropdownLabel(options, value, locale)
1237
+ })
1238
+ }), /* @__PURE__ */ jsx(SelectContent, { children: options?.map((option) => {
1239
+ const isMonth = options?.length === 12;
1240
+ let shortLabel = option.label;
1241
+ if (isMonth && option.value !== void 0) shortLabel = new Date(2e3, Number(option.value), 1).toLocaleString(locale?.code ?? "en-US", { month: "short" });
1242
+ return /* @__PURE__ */ jsx(SelectItem, {
1243
+ value: option.value.toString(),
1244
+ disabled: option.disabled,
1245
+ children: shortLabel
1246
+ }, option.value);
1247
+ }) })]
1248
+ });
1249
+ },
1250
+ Chevron: ({ className, orientation, ...props }) => {
1251
+ const sizeClasses = "size-4 group-[.calendar-sm]/calendar:size-3.5 group-[.calendar-lg]/calendar:size-5";
1252
+ if (orientation === "left") return /* @__PURE__ */ jsx(ChevronLeftIcon, {
1253
+ className: cn("size-5 group-[.calendar-sm]/calendar:size-4 group-[.calendar-lg]/calendar:size-6 rtl:rotate-180", className),
1254
+ strokeWidth: 3,
1255
+ ...props
1256
+ });
1257
+ if (orientation === "right") return /* @__PURE__ */ jsx(ChevronRightIcon, {
1258
+ className: cn("size-5 group-[.calendar-sm]/calendar:size-4 group-[.calendar-lg]/calendar:size-6 rtl:rotate-180", className),
1259
+ strokeWidth: 3,
1260
+ ...props
1261
+ });
1262
+ return /* @__PURE__ */ jsx(ChevronDownIcon, {
1263
+ className: cn(sizeClasses, className),
1264
+ strokeWidth: 2.5,
1265
+ ...props
1266
+ });
1267
+ },
1268
+ DayButton: ({ ...props }) => /* @__PURE__ */ jsx(CalendarDayButton, {
1269
+ locale,
1270
+ ...props
1271
+ }),
1272
+ WeekNumber: ({ children, ...props }) => {
1273
+ return /* @__PURE__ */ jsx("td", {
1274
+ ...props,
1275
+ children: /* @__PURE__ */ jsx("div", {
1276
+ className: "flex size-7 group-[.calendar-sm]/calendar:size-6 group-[.calendar-lg]/calendar:size-8 items-center justify-center text-center",
1277
+ children
1278
+ })
1279
+ });
1280
+ },
1281
+ ...components
1282
+ },
1283
+ ...props
1284
+ });
1285
+ }
1286
+ function CalendarDayButton({ className, day, modifiers, locale, ...props }) {
1287
+ getDefaultClassNames();
1288
+ const ref = React.useRef(null);
1289
+ React.useEffect(() => {
1290
+ if (modifiers.focused) ref.current?.focus();
1291
+ }, [modifiers.focused]);
1292
+ return /* @__PURE__ */ jsx("button", {
1293
+ ref,
1294
+ type: "button",
1295
+ "data-slot": "calendar-day-button",
1296
+ "data-day": day.date.toLocaleDateString(locale?.code),
1297
+ "data-selected-single": modifiers.selected && !modifiers.range_start && !modifiers.range_end && !modifiers.range_middle,
1298
+ "data-range-start": modifiers.range_start,
1299
+ "data-range-end": modifiers.range_end,
1300
+ "data-range-middle": modifiers.range_middle,
1301
+ className: cn("relative isolate z-10 flex aspect-square size-7 flex-col items-center justify-center gap-1 rounded-md font-normal leading-none transition-colors outline-none select-none", "group-[.calendar-sm]/calendar:size-6 group-[.calendar-lg]/calendar:size-8", "text-sm group-[.calendar-sm]/calendar:text-xs", "hover:bg-accent hover:text-accent-foreground", "focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:ring-offset-1 focus-visible:ring-offset-background", "active:translate-y-px", "disabled:pointer-events-none disabled:opacity-50", "group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-3 group-data-[focused=true]/day:ring-ring/50", "data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[selected-single=true]:hover:bg-primary/90", "data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground", "data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground", "data-[range-middle=true]:bg-muted data-[range-middle=true]:text-foreground", "dark:hover:text-foreground", className),
1302
+ ...props
1303
+ });
1304
+ }
1305
+ Calendar.displayName = "Calendar";
1306
+ CalendarDayButton.displayName = "CalendarDayButton";
1307
+ //#endregion
1308
+ //#region src/components/micro/card.tsx
1309
+ /**
1310
+ * ✅ AUDITED & REFACTORED
1311
+ * - Design System Compliant (22 Commandments)
1312
+ * - WCAG AAA/AA
1313
+ * - Form Control Parity
1314
+ * - CSS Delegated Logic
1315
+ */
1316
+ /**
1317
+ * @description Displays a card with header, content, and footer.
1318
+ * @requires CardHeader, CardTitle, CardDescription, CardContent, CardFooter
1319
+ * @example
1320
+ * <Card>
1321
+ * <CardHeader><CardTitle>Title</CardTitle></CardHeader>
1322
+ * <CardContent>Content here</CardContent>
1323
+ * </Card>
1324
+ */
1325
+ var Card = React.forwardRef(({ className, size = "md", ...props }, ref) => /* @__PURE__ */ jsx("div", {
1326
+ ref,
1327
+ "data-slot": "card",
1328
+ "data-size": size,
1329
+ className: cn("group/card flex flex-col overflow-hidden rounded-xl bg-card text-sm text-card-foreground ring-1 ring-foreground/10", "p-6 gap-5 data-[size=sm]:p-4 data-[size=sm]:gap-4 data-[size=lg]:p-8 data-[size=lg]:gap-6", className),
1330
+ ...props
1331
+ }));
1332
+ Card.displayName = "Card";
1333
+ var CardHeader = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", {
1334
+ ref,
1335
+ "data-slot": "card-header",
1336
+ className: cn("flex flex-col gap-1.5", className),
1337
+ ...props
1338
+ }));
1339
+ CardHeader.displayName = "CardHeader";
1340
+ var CardTitle = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", {
1341
+ ref,
1342
+ "data-slot": "card-title",
1343
+ className: cn("font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm group-data-[size=lg]/card:text-lg", className),
1344
+ ...props
1345
+ }));
1346
+ CardTitle.displayName = "CardTitle";
1347
+ var CardDescription = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", {
1348
+ ref,
1349
+ "data-slot": "card-description",
1350
+ className: cn("text-sm text-muted-foreground group-data-[size=sm]/card:text-xs group-data-[size=lg]/card:text-base", className),
1351
+ ...props
1352
+ }));
1353
+ CardDescription.displayName = "CardDescription";
1354
+ var CardContent = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", {
1355
+ ref,
1356
+ "data-slot": "card-content",
1357
+ className,
1358
+ ...props
1359
+ }));
1360
+ CardContent.displayName = "CardContent";
1361
+ var CardFooter = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", {
1362
+ ref,
1363
+ "data-slot": "card-footer",
1364
+ className: cn("flex items-center", className),
1365
+ ...props
1366
+ }));
1367
+ CardFooter.displayName = "CardFooter";
1368
+ //#endregion
1369
+ //#region src/components/micro/carousel.tsx
1370
+ /**
1371
+ * ✅ AUDITED & REFACTORED
1372
+ * - Design System Compliant (22 Commandments)
1373
+ * - WCAG AAA/AA
1374
+ * - Form Control Parity
1375
+ * - CSS Delegated Logic
1376
+ */
1377
+ var CarouselContext = React.createContext(null);
1378
+ function useCarousel() {
1379
+ const context = React.useContext(CarouselContext);
1380
+ if (!context) throw new Error("useCarousel must be used within a <Carousel />");
1381
+ return context;
1382
+ }
1383
+ var Carousel = React.forwardRef(({ orientation = "horizontal", opts, setApi, plugins, className, children, ...props }, ref) => {
1384
+ const [carouselRef, api] = useEmblaCarousel({
1385
+ ...opts,
1386
+ axis: orientation === "horizontal" ? "x" : "y"
1387
+ }, plugins);
1388
+ const [canScrollPrev, setCanScrollPrev] = React.useState(false);
1389
+ const [canScrollNext, setCanScrollNext] = React.useState(false);
1390
+ const onSelect = React.useCallback((api) => {
1391
+ if (!api) return;
1392
+ setCanScrollPrev(api.canScrollPrev());
1393
+ setCanScrollNext(api.canScrollNext());
1394
+ }, []);
1395
+ const scrollPrev = React.useCallback(() => {
1396
+ api?.scrollPrev();
1397
+ }, [api]);
1398
+ const scrollNext = React.useCallback(() => {
1399
+ api?.scrollNext();
1400
+ }, [api]);
1401
+ const handleKeyDown = React.useCallback((event) => {
1402
+ if (orientation === "horizontal") switch (event.key) {
1403
+ case "ArrowLeft":
1404
+ event.preventDefault();
1405
+ scrollPrev();
1406
+ break;
1407
+ case "ArrowRight":
1408
+ event.preventDefault();
1409
+ scrollNext();
1410
+ break;
1411
+ }
1412
+ else switch (event.key) {
1413
+ case "ArrowUp":
1414
+ event.preventDefault();
1415
+ scrollPrev();
1416
+ break;
1417
+ case "ArrowDown":
1418
+ event.preventDefault();
1419
+ scrollNext();
1420
+ break;
1421
+ }
1422
+ }, [
1423
+ scrollPrev,
1424
+ scrollNext,
1425
+ orientation
1426
+ ]);
1427
+ React.useEffect(() => {
1428
+ if (!api || !setApi) return;
1429
+ setApi(api);
1430
+ }, [api, setApi]);
1431
+ React.useEffect(() => {
1432
+ if (!api) return;
1433
+ onSelect(api);
1434
+ api.on("reInit", onSelect);
1435
+ api.on("select", onSelect);
1436
+ return () => {
1437
+ api?.off("reInit", onSelect);
1438
+ api?.off("select", onSelect);
1439
+ };
1440
+ }, [api, onSelect]);
1441
+ return /* @__PURE__ */ jsx(CarouselContext.Provider, {
1442
+ value: {
1443
+ carouselRef,
1444
+ api,
1445
+ opts,
1446
+ orientation,
1447
+ scrollPrev,
1448
+ scrollNext,
1449
+ canScrollPrev,
1450
+ canScrollNext
1451
+ },
1452
+ children: /* @__PURE__ */ jsx("div", {
1453
+ ref,
1454
+ onKeyDownCapture: handleKeyDown,
1455
+ className: cn("group/carousel relative", className),
1456
+ role: "region",
1457
+ "aria-roledescription": "carousel",
1458
+ "data-slot": "carousel",
1459
+ "data-orientation": orientation,
1460
+ ...props,
1461
+ children
1462
+ })
1463
+ });
1464
+ });
1465
+ Carousel.displayName = "Carousel";
1466
+ var CarouselContent = React.forwardRef(({ className, ...props }, ref) => {
1467
+ const { carouselRef } = useCarousel();
1468
+ return /* @__PURE__ */ jsx("div", {
1469
+ ref: React.useCallback((node) => {
1470
+ carouselRef(node);
1471
+ if (typeof ref === "function") ref(node);
1472
+ else if (ref) ref.current = node;
1473
+ }, [carouselRef, ref]),
1474
+ className: "overflow-hidden",
1475
+ "data-slot": "carousel-content",
1476
+ children: /* @__PURE__ */ jsx("div", {
1477
+ className: cn("flex group-data-[orientation=vertical]/carousel:flex-col", className),
1478
+ ...props
1479
+ })
1480
+ });
1481
+ });
1482
+ CarouselContent.displayName = "CarouselContent";
1483
+ var CarouselItem = React.forwardRef(({ className, ...props }, ref) => {
1484
+ return /* @__PURE__ */ jsx("div", {
1485
+ ref,
1486
+ role: "group",
1487
+ "aria-roledescription": "slide",
1488
+ "data-slot": "carousel-item",
1489
+ className: cn("min-w-0 shrink-0 grow-0 basis-full", className),
1490
+ ...props
1491
+ });
1492
+ });
1493
+ CarouselItem.displayName = "CarouselItem";
1494
+ var carouselButtonClasses = "inline-flex size-8 shrink-0 items-center justify-center rounded-full border border-border bg-background touch-manipulation transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50";
1495
+ var CarouselPrevious = React.forwardRef(({ className, ...props }, ref) => {
1496
+ const { scrollPrev, canScrollPrev } = useCarousel();
1497
+ return /* @__PURE__ */ jsxs("button", {
1498
+ ref,
1499
+ type: "button",
1500
+ "data-slot": "carousel-previous",
1501
+ className: cn(carouselButtonClasses, className),
1502
+ disabled: !canScrollPrev,
1503
+ onClick: scrollPrev,
1504
+ ...props,
1505
+ children: [/* @__PURE__ */ jsx(ChevronLeftIcon, { className: "size-4" }), /* @__PURE__ */ jsx("span", {
1506
+ className: "sr-only",
1507
+ children: "Previous slide"
1508
+ })]
1509
+ });
1510
+ });
1511
+ CarouselPrevious.displayName = "CarouselPrevious";
1512
+ var CarouselNext = React.forwardRef(({ className, ...props }, ref) => {
1513
+ const { scrollNext, canScrollNext } = useCarousel();
1514
+ return /* @__PURE__ */ jsxs("button", {
1515
+ ref,
1516
+ type: "button",
1517
+ "data-slot": "carousel-next",
1518
+ className: cn(carouselButtonClasses, className),
1519
+ disabled: !canScrollNext,
1520
+ onClick: scrollNext,
1521
+ ...props,
1522
+ children: [/* @__PURE__ */ jsx(ChevronRightIcon, { className: "size-4" }), /* @__PURE__ */ jsx("span", {
1523
+ className: "sr-only",
1524
+ children: "Next slide"
1525
+ })]
1526
+ });
1527
+ });
1528
+ CarouselNext.displayName = "CarouselNext";
1529
+ var CarouselDots = React.forwardRef(({ className, ...props }, ref) => {
1530
+ const { api } = useCarousel();
1531
+ const [selectedIndex, setSelectedIndex] = React.useState(0);
1532
+ const [scrollSnaps, setScrollSnaps] = React.useState([]);
1533
+ const onInit = React.useCallback((api) => {
1534
+ if (!api) return;
1535
+ setScrollSnaps(api.scrollSnapList());
1536
+ }, []);
1537
+ const onSelect = React.useCallback((api) => {
1538
+ if (!api) return;
1539
+ setSelectedIndex(api.selectedScrollSnap());
1540
+ }, []);
1541
+ React.useEffect(() => {
1542
+ if (!api) return;
1543
+ onInit(api);
1544
+ onSelect(api);
1545
+ api.on("reInit", onInit);
1546
+ api.on("reInit", onSelect);
1547
+ api.on("select", onSelect);
1548
+ return () => {
1549
+ api.off("reInit", onInit);
1550
+ api.off("reInit", onSelect);
1551
+ api.off("select", onSelect);
1552
+ };
1553
+ }, [
1554
+ api,
1555
+ onInit,
1556
+ onSelect
1557
+ ]);
1558
+ if (scrollSnaps.length === 0) return null;
1559
+ return /* @__PURE__ */ jsx("div", {
1560
+ ref,
1561
+ "data-slot": "carousel-dots",
1562
+ className: cn("flex items-center justify-center gap-2", className),
1563
+ ...props,
1564
+ children: scrollSnaps.map((_, index) => /* @__PURE__ */ jsx("button", {
1565
+ type: "button",
1566
+ "data-slot": "carousel-dot",
1567
+ "data-active": index === selectedIndex ? "" : void 0,
1568
+ "aria-label": `Go to slide ${index + 1}`,
1569
+ "aria-current": index === selectedIndex ? "true" : "false",
1570
+ className: cn("size-2 rounded-full transition-all duration-300", "bg-primary/20 hover:bg-primary/40 focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none focus-visible:ring-offset-2 focus-visible:ring-offset-background", "data-active:w-6 data-active:bg-primary"),
1571
+ onClick: () => api?.scrollTo(index)
1572
+ }, index))
1573
+ });
1574
+ });
1575
+ CarouselDots.displayName = "CarouselDots";
1576
+ //#endregion
1577
+ //#region src/components/micro/chart.tsx
1578
+ /**
1579
+ * ✅ AUDITED & REFACTORED
1580
+ * - Design System Compliant (22 Commandments)
1581
+ * - WCAG AAA/AA
1582
+ * - Form Control Parity
1583
+ * - CSS Delegated Logic
1584
+ */
1585
+ var THEMES = {
1586
+ light: "",
1587
+ dark: ".dark"
1588
+ };
1589
+ var INITIAL_DIMENSION = {
1590
+ width: 320,
1591
+ height: 200
1592
+ };
1593
+ var ChartContext = React.createContext(null);
1594
+ function useChart() {
1595
+ const context = React.useContext(ChartContext);
1596
+ if (!context) throw new Error("useChart must be used within a <ChartContainer />");
1597
+ return context;
1598
+ }
1599
+ /**
1600
+ * @description Recharts wrapper for theming and tooltips.
1601
+ * @requires ChartTooltip, ChartTooltipContent
1602
+ */
1603
+ var ChartContainer = React.forwardRef(function ChartContainer({ id, className, children, config, initialDimension = INITIAL_DIMENSION, ...props }, ref) {
1604
+ const uniqueId = React.useId();
1605
+ const chartId = `chart-${id ?? uniqueId.replace(/:/g, "")}`;
1606
+ return /* @__PURE__ */ jsx(ChartContext.Provider, {
1607
+ value: { config },
1608
+ children: /* @__PURE__ */ jsxs("div", {
1609
+ ref,
1610
+ "data-slot": "chart",
1611
+ "data-chart": chartId,
1612
+ className: cn("group/chart flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden", className),
1613
+ ...props,
1614
+ children: [/* @__PURE__ */ jsx(ChartStyle, {
1615
+ id: chartId,
1616
+ config
1617
+ }), /* @__PURE__ */ jsx(RechartsPrimitive.ResponsiveContainer, {
1618
+ initialDimension,
1619
+ children
1620
+ })]
1621
+ })
1622
+ });
1623
+ });
1624
+ ChartContainer.displayName = "ChartContainer";
1625
+ var ChartStyle = ({ id, config }) => {
1626
+ const colorConfig = Object.entries(config).filter(([, config]) => config.theme ?? config.color);
1627
+ if (!colorConfig.length) return null;
1628
+ return /* @__PURE__ */ jsx("style", { dangerouslySetInnerHTML: { __html: Object.entries(THEMES).map(([theme, prefix]) => `
1629
+ ${prefix} [data-chart=${id}] {
1630
+ ${colorConfig.map(([key, itemConfig]) => {
1631
+ const color = itemConfig.theme?.[theme] ?? itemConfig.color;
1632
+ return color ? ` --color-${key}: ${color};` : null;
1633
+ }).join("\n")}
1634
+ }
1635
+ `).join("\n") } });
1636
+ };
1637
+ var ChartTooltip = RechartsPrimitive.Tooltip;
1638
+ function ChartTooltipContent({ active, payload, className, indicator = "dot", hideLabel = false, hideIndicator = false, label, labelFormatter, labelClassName, formatter, color, nameKey, labelKey }) {
1639
+ const { config } = useChart();
1640
+ const tooltipLabel = React.useMemo(() => {
1641
+ if (hideLabel || !payload?.length) return null;
1642
+ const [item] = payload;
1643
+ const key = `${labelKey ?? item?.dataKey ?? item?.name ?? "value"}`;
1644
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
1645
+ const value = !labelKey && typeof label === "string" ? config[label]?.label ?? label : itemConfig?.label;
1646
+ if (labelFormatter) return /* @__PURE__ */ jsx("div", {
1647
+ className: cn("font-medium", labelClassName),
1648
+ children: labelFormatter(value, payload)
1649
+ });
1650
+ if (!value) return null;
1651
+ return /* @__PURE__ */ jsx("div", {
1652
+ className: cn("font-medium", labelClassName),
1653
+ children: value
1654
+ });
1655
+ }, [
1656
+ label,
1657
+ labelFormatter,
1658
+ payload,
1659
+ hideLabel,
1660
+ labelClassName,
1661
+ config,
1662
+ labelKey
1663
+ ]);
1664
+ if (!active || !payload?.length) return null;
1665
+ const nestLabel = payload.length === 1 && indicator !== "dot";
1666
+ return /* @__PURE__ */ jsxs("div", {
1667
+ className: cn("grid min-w-32 items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl", className),
1668
+ children: [!nestLabel ? tooltipLabel : null, /* @__PURE__ */ jsx("div", {
1669
+ className: "grid gap-1.5",
1670
+ children: payload.filter((item) => item.type !== "none").map((item, index) => {
1671
+ const key = `${nameKey ?? item.name ?? item.dataKey ?? "value"}`;
1672
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
1673
+ const indicatorColor = color ?? item.payload?.fill ?? item.color;
1674
+ return /* @__PURE__ */ jsx("div", {
1675
+ className: cn("flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground", indicator === "dot" && "items-center"),
1676
+ children: formatter && item?.value !== void 0 && item.name ? formatter(item.value, item.name, item, index, item.payload) : /* @__PURE__ */ jsxs(Fragment, { children: [itemConfig?.icon ? /* @__PURE__ */ jsx(itemConfig.icon, {}) : !hideIndicator && /* @__PURE__ */ jsx("div", {
1677
+ className: cn("shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)", {
1678
+ "h-2.5 w-2.5": indicator === "dot",
1679
+ "w-1": indicator === "line",
1680
+ "w-0 border-[1.5px] border-dashed bg-transparent": indicator === "dashed",
1681
+ "my-0.5": nestLabel && indicator === "dashed"
1682
+ }),
1683
+ style: {
1684
+ "--color-bg": indicatorColor,
1685
+ "--color-border": indicatorColor
1686
+ }
1687
+ }), /* @__PURE__ */ jsxs("div", {
1688
+ className: cn("flex flex-1 justify-between leading-none", {
1689
+ "items-end": nestLabel,
1690
+ "items-center": !nestLabel
1691
+ }),
1692
+ children: [/* @__PURE__ */ jsxs("div", {
1693
+ className: "grid gap-1.5",
1694
+ children: [nestLabel ? tooltipLabel : null, /* @__PURE__ */ jsx("span", {
1695
+ className: "text-muted-foreground",
1696
+ children: itemConfig?.label ?? item.name
1697
+ })]
1698
+ }), item.value != null && /* @__PURE__ */ jsx("span", {
1699
+ className: "font-mono font-medium text-foreground tabular-nums",
1700
+ children: typeof item.value === "number" ? item.value.toLocaleString() : String(item.value)
1701
+ })]
1702
+ })] })
1703
+ }, index);
1704
+ })
1705
+ })]
1706
+ });
1707
+ }
1708
+ var ChartLegend = RechartsPrimitive.Legend;
1709
+ function ChartLegendContent({ className, hideIcon = false, payload, verticalAlign = "bottom", nameKey }) {
1710
+ const { config } = useChart();
1711
+ if (!payload?.length) return null;
1712
+ return /* @__PURE__ */ jsx("div", {
1713
+ className: cn("flex items-center justify-center gap-4", {
1714
+ "pb-3": verticalAlign === "top",
1715
+ "pt-3": verticalAlign !== "top"
1716
+ }, className),
1717
+ children: payload.filter((item) => item.type !== "none").map((item, index) => {
1718
+ const key = `${nameKey ?? item.dataKey ?? "value"}`;
1719
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
1720
+ return /* @__PURE__ */ jsxs("div", {
1721
+ className: cn("flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground"),
1722
+ children: [itemConfig?.icon && !hideIcon ? /* @__PURE__ */ jsx(itemConfig.icon, {}) : /* @__PURE__ */ jsx("div", {
1723
+ className: "h-2 w-2 shrink-0 rounded-[2px]",
1724
+ style: { backgroundColor: item.color }
1725
+ }), itemConfig?.label]
1726
+ }, index);
1727
+ })
1728
+ });
1729
+ }
1730
+ function getPayloadConfigFromPayload(config, payload, key) {
1731
+ if (typeof payload !== "object" || payload === null) return;
1732
+ const payloadPayload = "payload" in payload && typeof payload.payload === "object" && payload.payload !== null ? payload.payload : void 0;
1733
+ let configLabelKey = key;
1734
+ if (key in payload && typeof payload[key] === "string") configLabelKey = payload[key];
1735
+ else if (payloadPayload && key in payloadPayload && typeof payloadPayload[key] === "string") configLabelKey = payloadPayload[key];
1736
+ return configLabelKey in config ? config[configLabelKey] : config[key];
1737
+ }
1738
+ //#endregion
1739
+ //#region src/components/micro/checkbox.tsx
1740
+ /**
1741
+ * ✅ AUDITED & REFACTORED
1742
+ * - Design System Compliant (20 Commandments)
1743
+ * - WCAG AAA/AA
1744
+ * - Form Control Parity
1745
+ * - CSS Delegated Logic
1746
+ */
1747
+ var checkboxVariants = cva("group/checkbox peer relative flex shrink-0 items-center justify-center rounded-sm border border-input after:absolute after:content-[''] transition-colors outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:focus-visible:border-destructive aria-invalid:focus-visible:ring-3 aria-invalid:focus-visible:ring-destructive/50 aria-invalid:data-checked:border-destructive aria-invalid:data-checked:bg-destructive aria-invalid:data-checked:text-destructive-foreground dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:focus-visible:ring-destructive/50 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary", { variants: { size: {
1748
+ sm: "size-3.5 after:-inset-x-2.5 after:-inset-y-2.5",
1749
+ md: "size-4 after:-inset-x-3 after:-inset-y-2",
1750
+ lg: "size-5 after:-inset-x-4 after:-inset-y-3"
1751
+ } } });
1752
+ /**
1753
+ * @description A control that allows the user to toggle between checked and not checked.
1754
+ * @example
1755
+ * <Checkbox id="terms" />
1756
+ * <label htmlFor="terms">Accept terms</label>
1757
+ */
1758
+ var Checkbox = React.forwardRef(function Checkbox({ className, size = "md", ...props }, ref) {
1759
+ return /* @__PURE__ */ jsx(Checkbox$1.Root, {
1760
+ ref,
1761
+ "data-slot": "checkbox",
1762
+ "data-size": size,
1763
+ className: cn(checkboxVariants({ size }), className),
1764
+ ...props
1765
+ });
1766
+ });
1767
+ Checkbox.displayName = "Checkbox";
1768
+ var CheckboxIndicator = React.forwardRef(function CheckboxIndicator({ className, ...props }, ref) {
1769
+ return /* @__PURE__ */ jsx(Checkbox$1.Indicator, {
1770
+ ref,
1771
+ "data-slot": "checkbox-indicator",
1772
+ className: cn("grid place-content-center text-current transition-none [&>svg]:size-3.5 group-data-[size=sm]/checkbox:[&>svg]:size-3 group-data-[size=lg]/checkbox:[&>svg]:size-4", className),
1773
+ ...props
1774
+ });
1775
+ });
1776
+ CheckboxIndicator.displayName = "CheckboxIndicator";
1777
+ //#endregion
1778
+ //#region src/components/micro/collapsible.tsx
1779
+ /**
1780
+ * ✅ AUDITED & REFACTORED
1781
+ * - Design System Compliant (22 Commandments)
1782
+ * - WCAG AAA/AA
1783
+ * - Form Control Parity
1784
+ * - CSS Delegated Logic
1785
+ */
1786
+ /**
1787
+ * @description An interactive component which expands/collapses a panel.
1788
+ * @requires CollapsibleTrigger, CollapsibleContent
1789
+ * @example
1790
+ * <Collapsible>
1791
+ * <CollapsibleTrigger>Toggle</CollapsibleTrigger>
1792
+ * <CollapsibleContent>Content</CollapsibleContent>
1793
+ * </Collapsible>
1794
+ */
1795
+ var Collapsible = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(Collapsible$1.Root, {
1796
+ ref,
1797
+ "data-slot": "collapsible",
1798
+ className,
1799
+ ...props
1800
+ }));
1801
+ Collapsible.displayName = "Collapsible";
1802
+ var CollapsibleTrigger = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(Collapsible$1.Trigger, {
1803
+ ref,
1804
+ "data-slot": "collapsible-trigger",
1805
+ className,
1806
+ ...props
1807
+ }));
1808
+ CollapsibleTrigger.displayName = "CollapsibleTrigger";
1809
+ var CollapsibleContent = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(Collapsible$1.Panel, {
1810
+ ref,
1811
+ "data-slot": "collapsible-content",
1812
+ className: cn("flex flex-col justify-end overflow-hidden h-(--collapsible-panel-height) transition-[height] duration-200 ease-out data-starting-style:h-0 data-ending-style:h-0 [&[hidden]:not([hidden='until-found'])]:hidden", className),
1813
+ ...props
1814
+ }));
1815
+ CollapsibleContent.displayName = "CollapsibleContent";
1816
+ //#endregion
1817
+ //#region src/components/micro/input-group.tsx
1818
+ /**
1819
+ * ✅ AUDITED & REFACTORED
1820
+ * - Self-contained: no imports from @/components/micro/*
1821
+ * - InputGroupButton, InputGroupInput, InputGroupTextarea render native HTML
1822
+ * - Size is always inherited from InputGroup wrapper via CSS group modifiers
1823
+ * - InputGroupButton placed directly in InputGroup (not inside InputGroupAddon)
1824
+ */
1825
+ var inputGroupVariants = cva([
1826
+ "group/input-group relative flex min-w-0 items-center overflow-hidden rounded-lg border border-input transition-colors outline-none",
1827
+ "has-disabled:bg-input/50 has-disabled:opacity-50 has-disabled:cursor-not-allowed dark:has-disabled:bg-input/80",
1828
+ "has-[[data-slot=input-group-control]:focus-visible]:border-ring",
1829
+ "has-[[data-slot=input-group-control]:focus-visible]:ring-3",
1830
+ "has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50",
1831
+ "has-[[data-slot=input-group-control]:focus-visible]:ring-offset-1",
1832
+ "has-[[data-slot=input-group-control]:focus-visible]:ring-offset-background",
1833
+ "has-[[data-slot][aria-invalid=true]]:border-destructive",
1834
+ "has-[[data-slot][aria-invalid=true]:focus-visible]:ring-3",
1835
+ "has-[[data-slot][aria-invalid=true]:focus-visible]:ring-destructive/50",
1836
+ "has-[[data-slot][aria-invalid=true]:focus-visible]:border-destructive",
1837
+ "dark:bg-input/30"
1838
+ ], { variants: { size: {
1839
+ sm: "min-h-7 text-xs",
1840
+ md: "min-h-8 text-sm",
1841
+ lg: "min-h-9 text-sm"
1842
+ } } });
1843
+ var InputGroup = React.forwardRef(function InputGroup({ className, size = "md", ...props }, ref) {
1844
+ return /* @__PURE__ */ jsx("div", {
1845
+ ref,
1846
+ "data-slot": "input-group",
1847
+ "data-size": size,
1848
+ role: "group",
1849
+ className: cn(inputGroupVariants({ size }), className),
1850
+ ...props
1851
+ });
1852
+ });
1853
+ InputGroup.displayName = "InputGroup";
1854
+ var inputGroupAddonVariants = cva([
1855
+ "flex h-auto cursor-text items-center justify-center gap-2 font-medium text-muted-foreground select-none",
1856
+ "group-has-[[data-slot][aria-invalid=true]]/input-group:text-destructive",
1857
+ "group-data-[size=sm]/input-group:py-0.5",
1858
+ "group-data-[size=md]/input-group:py-1.5",
1859
+ "group-data-[size=lg]/input-group:py-1.5",
1860
+ "[&>svg:not([class*='size-'])]:size-4",
1861
+ "group-data-[size=sm]/input-group:[&>svg:not([class*='size-'])]:size-3.5"
1862
+ ], { variants: { align: {
1863
+ start: "order-first pl-2 pr-1",
1864
+ end: "order-last pl-1 pr-2"
1865
+ } } });
1866
+ var InputGroupAddon = React.forwardRef(function InputGroupAddon({ className, align = "start", ...props }, ref) {
1867
+ return /* @__PURE__ */ jsx("div", {
1868
+ ref,
1869
+ "data-slot": "input-group-addon",
1870
+ "data-align": align,
1871
+ className: cn(inputGroupAddonVariants({ align }), className),
1872
+ onClick: (e) => {
1873
+ if (e.target.closest("button")) return;
1874
+ e.currentTarget.parentElement?.querySelector("input, textarea")?.focus();
1875
+ },
1876
+ ...props
1877
+ });
1878
+ });
1879
+ InputGroupAddon.displayName = "InputGroupAddon";
1880
+ var InputGroupText = React.forwardRef(function InputGroupText({ className, ...props }, ref) {
1881
+ return /* @__PURE__ */ jsx("span", {
1882
+ ref,
1883
+ className: cn("flex items-center gap-2 text-muted-foreground", "[&>svg]:pointer-events-none [&>svg:not([class*='size-'])]:size-4", "group-data-[size=sm]/input-group:[&>svg:not([class*='size-'])]:size-3.5", className),
1884
+ ...props
1885
+ });
1886
+ });
1887
+ InputGroupText.displayName = "InputGroupText";
1888
+ var inputGroupButtonVariants = cva([
1889
+ "inline-flex shrink-0 self-stretch cursor-pointer items-center justify-center gap-1.5 font-medium whitespace-nowrap transition-colors duration-150 select-none",
1890
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/50 focus-visible:ring-offset-1 focus-visible:ring-offset-background",
1891
+ "disabled:pointer-events-none disabled:opacity-50",
1892
+ "[&:not(:first-child)]:border-l [&:not(:last-child)]:border-r border-border",
1893
+ "[&>svg:not([class*='size-'])]:size-4",
1894
+ "group-data-[size=sm]/input-group:[&>svg:not([class*='size-'])]:size-3.5"
1895
+ ], { variants: {
1896
+ variant: {
1897
+ ghost: "bg-transparent text-muted-foreground hover:bg-muted hover:text-foreground",
1898
+ solid: "bg-primary text-primary-foreground hover:bg-primary/90",
1899
+ soft: "bg-muted text-foreground hover:bg-muted/80",
1900
+ outline: "border border-input bg-transparent text-foreground hover:bg-muted/50"
1901
+ },
1902
+ icon: {
1903
+ true: [
1904
+ "group-data-[size=sm]/input-group:w-7",
1905
+ "group-data-[size=md]/input-group:w-8",
1906
+ "group-data-[size=lg]/input-group:w-9"
1907
+ ],
1908
+ false: [
1909
+ "group-data-[size=sm]/input-group:px-2 group-data-[size=sm]/input-group:text-xs",
1910
+ "group-data-[size=md]/input-group:px-2.5 group-data-[size=md]/input-group:text-sm",
1911
+ "group-data-[size=lg]/input-group:px-3 group-data-[size=lg]/input-group:text-sm"
1912
+ ]
1913
+ }
1914
+ } });
1915
+ var InputGroupButton = React.forwardRef(function InputGroupButton({ className, type = "button", variant = "ghost", icon = false, ...props }, ref) {
1916
+ return /* @__PURE__ */ jsx("button", {
1917
+ ref,
1918
+ type,
1919
+ "data-slot": "input-group-button",
1920
+ className: cn(inputGroupButtonVariants({
1921
+ variant,
1922
+ icon
1923
+ }), className),
1924
+ ...props
1925
+ });
1926
+ });
1927
+ InputGroupButton.displayName = "InputGroupButton";
1928
+ var InputGroupInput = React.forwardRef(function InputGroupInput({ className, ...props }, ref) {
1929
+ return /* @__PURE__ */ jsx("input", {
1930
+ ref,
1931
+ "data-slot": "input-group-control",
1932
+ className: cn("min-w-0 flex-1 bg-transparent outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed", "group-data-[size=sm]/input-group:h-7 group-data-[size=sm]/input-group:px-2 group-data-[size=sm]/input-group:py-0.5 group-data-[size=sm]/input-group:text-xs", "group-data-[size=md]/input-group:h-8 group-data-[size=md]/input-group:px-2.5 group-data-[size=md]/input-group:py-1 group-data-[size=md]/input-group:text-sm", "group-data-[size=lg]/input-group:h-9 group-data-[size=lg]/input-group:px-3 group-data-[size=lg]/input-group:py-1.5 group-data-[size=lg]/input-group:text-sm", className),
1933
+ ...props
1934
+ });
1935
+ });
1936
+ InputGroupInput.displayName = "InputGroupInput";
1937
+ var InputGroupTextarea = React.forwardRef(function InputGroupTextarea({ className, ...props }, ref) {
1938
+ return /* @__PURE__ */ jsx("textarea", {
1939
+ ref,
1940
+ "data-slot": "input-group-control",
1941
+ className: cn("min-w-0 flex-1 resize-none bg-transparent py-2 outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed", "group-data-[size=sm]/input-group:px-2 group-data-[size=sm]/input-group:text-xs", "group-data-[size=md]/input-group:px-2.5 group-data-[size=md]/input-group:text-sm", "group-data-[size=lg]/input-group:px-3 group-data-[size=lg]/input-group:text-sm", className),
1942
+ ...props
1943
+ });
1944
+ });
1945
+ InputGroupTextarea.displayName = "InputGroupTextarea";
1946
+ //#endregion
1947
+ //#region src/components/micro/combobox.tsx
1948
+ /**
1949
+ * ✅ AUDITED & REFACTORED
1950
+ * - Design System Compliant (20 Commandments)
1951
+ * - WCAG AAA/AA
1952
+ * - Form Control Parity
1953
+ * - CSS Delegated Logic
1954
+ *
1955
+ * 🚨 CRITICAL RULE FOR AI:
1956
+ * When using <Combobox>, YOU MUST pass the `items` prop (an array of data).
1957
+ * Headless UI libraries rely on this prop to build a stable internal item registry.
1958
+ * If omitted, the library is forced to scan the DOM on every render to discover items,
1959
+ * which causes full list re-renders, layout recalculations, and severe "content jumping" bugs.
1960
+ * DO NOT rely purely on static children mapping for Base UI collection components.
1961
+ */
1962
+ var ComboboxContext = React.createContext({
1963
+ anchor: null,
1964
+ setAnchor: () => {}
1965
+ });
1966
+ function Combobox(props) {
1967
+ const [anchor, setAnchor] = React.useState(null);
1968
+ return /* @__PURE__ */ jsx(ComboboxContext.Provider, {
1969
+ value: {
1970
+ anchor,
1971
+ setAnchor
1972
+ },
1973
+ children: /* @__PURE__ */ jsx(Combobox$1.Root, { ...props })
1974
+ });
1975
+ }
1976
+ function ComboboxValue({ ...props }) {
1977
+ return /* @__PURE__ */ jsx(Combobox$1.Value, {
1978
+ "data-slot": "combobox-value",
1979
+ ...props
1980
+ });
1981
+ }
1982
+ function ComboboxTrigger({ className, children, ...props }) {
1983
+ return /* @__PURE__ */ jsxs(Combobox$1.Trigger, {
1984
+ "data-slot": "combobox-trigger",
1985
+ className: cn("[&>svg:not([class*='size-'])]:size-4", className),
1986
+ ...props,
1987
+ children: [children, /* @__PURE__ */ jsx(ChevronDownIcon, { className: "pointer-events-none size-4 text-muted-foreground" })]
1988
+ });
1989
+ }
1990
+ function ComboboxClear({ className, ...props }) {
1991
+ return /* @__PURE__ */ jsx(Combobox$1.Clear, {
1992
+ "data-slot": "combobox-clear",
1993
+ render: /* @__PURE__ */ jsx(InputGroupButton, {
1994
+ variant: "ghost",
1995
+ icon: true
1996
+ }),
1997
+ className: cn(className),
1998
+ ...props,
1999
+ children: /* @__PURE__ */ jsx(XIcon, { className: "pointer-events-none" })
2000
+ });
2001
+ }
2002
+ function ComboboxInput({ className, ...props }) {
2003
+ return /* @__PURE__ */ jsx(Combobox$1.Input, {
2004
+ "data-slot": "combobox-input",
2005
+ className: cn("flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50", className),
2006
+ ...props
2007
+ });
2008
+ }
2009
+ var ComboboxContent = React.forwardRef(({ className, side = "bottom", sideOffset = 4, align = "start", alignOffset = 0, anchor, ...props }, ref) => {
2010
+ const { anchor: contextAnchor } = React.useContext(ComboboxContext);
2011
+ return /* @__PURE__ */ jsx(Combobox$1.Positioner, {
2012
+ side,
2013
+ sideOffset,
2014
+ align,
2015
+ alignOffset,
2016
+ anchor: anchor || contextAnchor,
2017
+ className: "isolate z-50",
2018
+ children: /* @__PURE__ */ jsx(Combobox$1.Popup, {
2019
+ ref,
2020
+ "data-slot": "combobox-content",
2021
+ "data-chips": !!anchor,
2022
+ className: cn("group/combobox-content relative max-h-(--available-height) min-w-(--anchor-width) max-w-(--available-width) origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 p-1 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=input-group]]:mb-1 [&_[data-slot=input-group]]:w-full [&_[data-slot=input-group]]:border-input/30 [&_[data-slot=input-group]]:bg-input/30 [&_[data-slot=input-group]]:shadow-none 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", className),
2023
+ ...props
2024
+ })
2025
+ });
2026
+ });
2027
+ ComboboxContent.displayName = "ComboboxContent";
2028
+ function ComboboxList({ className, ...props }) {
2029
+ return /* @__PURE__ */ jsx(Combobox$1.List, {
2030
+ "data-slot": "combobox-list",
2031
+ className: cn("no-scrollbar max-h-[min(calc(--spacing(72)-(--spacing(9))),calc(var(--available-height)-(--spacing(9))))] scroll-py-1 overflow-y-auto overscroll-contain data-empty:hidden", className),
2032
+ ...props
2033
+ });
2034
+ }
2035
+ function ComboboxItem({ className, children, ...props }) {
2036
+ return /* @__PURE__ */ jsxs(Combobox$1.Item, {
2037
+ "data-slot": "combobox-item",
2038
+ className: cn("relative flex w-full cursor-default items-center gap-2 rounded-md py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-highlighted:bg-accent data-highlighted:text-accent-foreground not-data-[variant=destructive]:data-highlighted:[&>svg]:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&>svg]:pointer-events-none [&>svg]:shrink-0 [&>svg:not([class*='size-'])]:size-4", className),
2039
+ ...props,
2040
+ children: [children, /* @__PURE__ */ jsx(Combobox$1.ItemIndicator, {
2041
+ render: /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center" }),
2042
+ children: /* @__PURE__ */ jsx(CheckIcon, { className: "pointer-events-none" })
2043
+ })]
2044
+ });
2045
+ }
2046
+ function ComboboxGroup({ className, ...props }) {
2047
+ return /* @__PURE__ */ jsx(Combobox$1.Group, {
2048
+ "data-slot": "combobox-group",
2049
+ className: cn(className),
2050
+ ...props
2051
+ });
2052
+ }
2053
+ function ComboboxLabel({ className, ...props }) {
2054
+ return /* @__PURE__ */ jsx(Combobox$1.GroupLabel, {
2055
+ "data-slot": "combobox-label",
2056
+ className: cn("px-2 py-1.5 text-xs text-muted-foreground", className),
2057
+ ...props
2058
+ });
2059
+ }
2060
+ function ComboboxCollection({ ...props }) {
2061
+ return /* @__PURE__ */ jsx(Combobox$1.Collection, {
2062
+ "data-slot": "combobox-collection",
2063
+ ...props
2064
+ });
2065
+ }
2066
+ function ComboboxEmpty({ className, ...props }) {
2067
+ return /* @__PURE__ */ jsx(Combobox$1.Empty, {
2068
+ "data-slot": "combobox-empty",
2069
+ className: cn("hidden justify-center py-2 text-center text-sm text-muted-foreground group-data-empty/combobox-content:flex", className),
2070
+ ...props
2071
+ });
2072
+ }
2073
+ function ComboboxSeparator({ className, ...props }) {
2074
+ return /* @__PURE__ */ jsx(Combobox$1.Separator, {
2075
+ "data-slot": "combobox-separator",
2076
+ className: cn("my-1 h-px bg-border", className),
2077
+ ...props
2078
+ });
2079
+ }
2080
+ var ComboboxPortal = Combobox$1.Portal;
2081
+ var comboboxChipsVariants = cva("group/combobox-chips flex flex-wrap items-center gap-1 rounded-lg border border-input bg-transparent bg-clip-padding transition-colors focus-within:border-ring focus-within:ring-3 focus-within:ring-ring/50 has-aria-invalid:border-destructive has-aria-invalid:focus-within:ring-3 has-aria-invalid:focus-within:ring-destructive/20 has-[[data-slot=combobox-chip]]:px-1 dark:bg-input/30 dark:has-aria-invalid:border-destructive/50 dark:has-aria-invalid:focus-within:ring-destructive/40 has-disabled:opacity-50 has-disabled:cursor-not-allowed has-disabled:pointer-events-none", { variants: { size: {
2082
+ sm: "chips-sm min-h-7 px-2 py-0.5 text-xs",
2083
+ md: "chips-md min-h-8 px-2.5 py-1 text-sm",
2084
+ lg: "chips-lg min-h-9 px-3 py-1.5 text-sm"
2085
+ } } });
2086
+ function ComboboxChips({ className, size = "md", ...props }) {
2087
+ return /* @__PURE__ */ jsx(Combobox$1.Chips, {
2088
+ "data-slot": "combobox-chips",
2089
+ className: cn(comboboxChipsVariants({ size }), className),
2090
+ ...props
2091
+ });
2092
+ }
2093
+ function ComboboxChip({ className, children, showRemove = true, ...props }) {
2094
+ return /* @__PURE__ */ jsxs(Combobox$1.Chip, {
2095
+ "data-slot": "combobox-chip",
2096
+ className: cn("flex w-fit items-center justify-center gap-1 rounded-sm bg-muted px-1.5 font-medium whitespace-nowrap text-foreground has-disabled:pointer-events-none has-disabled:cursor-not-allowed has-disabled:opacity-50 has-data-[slot=combobox-chip-remove]:pr-0", "h-5 text-xs", "group-[.chips-sm]/combobox-chips:h-4 group-[.chips-sm]/combobox-chips:text-[10px]", "group-[.chips-lg]/combobox-chips:h-6 group-[.chips-lg]/combobox-chips:text-sm", className),
2097
+ ...props,
2098
+ children: [children, showRemove && /* @__PURE__ */ jsx(Combobox$1.ChipRemove, {
2099
+ className: "-ml-1 flex size-4 items-center justify-center rounded-sm opacity-50 transition-opacity outline-none hover:opacity-100 hover:bg-foreground/10 focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:ring-offset-1 focus-visible:ring-offset-background",
2100
+ "data-slot": "combobox-chip-remove",
2101
+ children: /* @__PURE__ */ jsx(XIcon, { className: "pointer-events-none size-3" })
2102
+ })]
2103
+ });
2104
+ }
2105
+ function ComboboxChipsInput({ className, ...props }) {
2106
+ return /* @__PURE__ */ jsx(Combobox$1.Input, {
2107
+ "data-slot": "combobox-chip-input",
2108
+ className: cn("min-w-16 flex-1 outline-none bg-transparent disabled:opacity-100 disabled:cursor-not-allowed disabled:pointer-events-none", "h-5", "group-[.chips-sm]/combobox-chips:h-4", "group-[.chips-lg]/combobox-chips:h-6", className),
2109
+ ...props
2110
+ });
2111
+ }
2112
+ function useComboboxContext() {
2113
+ const context = React.useContext(ComboboxContext);
2114
+ if (!context) throw new Error("useComboboxContext must be used within a Combobox");
2115
+ return context;
2116
+ }
2117
+ var ComboboxAnchor = React.forwardRef(({ className, ...props }, ref) => {
2118
+ const { setAnchor } = useComboboxContext();
2119
+ return /* @__PURE__ */ jsx("div", {
2120
+ ref: (node) => {
2121
+ setAnchor(node);
2122
+ if (typeof ref === "function") ref(node);
2123
+ else if (ref) ref.current = node;
2124
+ },
2125
+ "data-slot": "combobox-anchor",
2126
+ className,
2127
+ ...props
2128
+ });
2129
+ });
2130
+ ComboboxAnchor.displayName = "ComboboxAnchor";
2131
+ //#endregion
2132
+ //#region src/components/micro/command.tsx
2133
+ /**
2134
+ * ✅ AUDITED & REFACTORED
2135
+ * - Design System Compliant (22 Commandments)
2136
+ * - WCAG AAA/AA
2137
+ * - Form Control Parity
2138
+ * - CSS Delegated Logic
2139
+ */
2140
+ var CommandContext = React.createContext({ size: "md" });
2141
+ var Command = React.forwardRef(({ className, size = "md", ...props }, ref) => /* @__PURE__ */ jsx(CommandContext.Provider, {
2142
+ value: { size },
2143
+ children: /* @__PURE__ */ jsx(Command$1, {
2144
+ ref,
2145
+ "data-slot": "command",
2146
+ className: cn("flex size-full flex-col overflow-hidden rounded-xl bg-popover text-popover-foreground", className),
2147
+ ...props
2148
+ })
2149
+ }));
2150
+ Command.displayName = "Command";
2151
+ var commandInputVariants = cva("w-full outline-hidden disabled:cursor-not-allowed disabled:opacity-50", {
2152
+ variants: { size: {
2153
+ sm: "text-sm",
2154
+ md: "text-sm",
2155
+ lg: "text-base"
2156
+ } },
2157
+ defaultVariants: { size: "md" }
2158
+ });
2159
+ var CommandInput = React.forwardRef(({ className, ...props }, ref) => {
2160
+ const { size } = React.useContext(CommandContext);
2161
+ return /* @__PURE__ */ jsx("div", {
2162
+ "data-slot": "command-input-wrapper",
2163
+ className: cn("pb-0", size === "sm" && "p-1", size === "md" && "p-2", size === "lg" && "p-3"),
2164
+ children: /* @__PURE__ */ jsxs(InputGroup, {
2165
+ className: cn("rounded-lg border-input/30 bg-input/30 shadow-none", size === "sm" && "h-8", size === "md" && "h-10", size === "lg" && "h-11"),
2166
+ children: [/* @__PURE__ */ jsx(Command$1.Input, {
2167
+ ref,
2168
+ "data-slot": "command-input",
2169
+ className: cn(commandInputVariants({ size }), className),
2170
+ ...props
2171
+ }), /* @__PURE__ */ jsx(InputGroupAddon, {
2172
+ className: cn("shrink-0", size === "lg" ? "pl-3" : "pl-2"),
2173
+ children: /* @__PURE__ */ jsx(SearchIcon, { className: cn("opacity-50", size === "lg" ? "size-5" : "size-4") })
2174
+ })]
2175
+ })
2176
+ });
2177
+ });
2178
+ CommandInput.displayName = "CommandInput";
2179
+ var CommandList = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(Command$1.List, {
2180
+ ref,
2181
+ "data-slot": "command-list",
2182
+ className: cn("no-scrollbar max-h-72 scroll-py-1 overflow-x-hidden overflow-y-auto outline-none", className),
2183
+ ...props
2184
+ }));
2185
+ CommandList.displayName = "CommandList";
2186
+ var CommandEmpty = React.forwardRef(({ className, ...props }, ref) => {
2187
+ const { size } = React.useContext(CommandContext);
2188
+ return /* @__PURE__ */ jsx(Command$1.Empty, {
2189
+ ref,
2190
+ "data-slot": "command-empty",
2191
+ className: cn("text-center", size === "sm" && "py-4 text-xs", size === "md" && "py-6 text-sm", size === "lg" && "py-8 text-base", className),
2192
+ ...props
2193
+ });
2194
+ });
2195
+ CommandEmpty.displayName = "CommandEmpty";
2196
+ var commandGroupVariants = cva("overflow-hidden text-foreground **:[[cmdk-group-heading]]:font-medium **:[[cmdk-group-heading]]:text-muted-foreground **:[[cmdk-group-items]]:flex **:[[cmdk-group-items]]:flex-col", {
2197
+ variants: { size: {
2198
+ sm: "p-1 **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-items]]:gap-0.5",
2199
+ md: "p-2 **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-items]]:gap-1",
2200
+ lg: "p-3 **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-2 **:[[cmdk-group-heading]]:text-sm **:[[cmdk-group-items]]:gap-1"
2201
+ } },
2202
+ defaultVariants: { size: "md" }
2203
+ });
2204
+ var CommandGroup = React.forwardRef(({ className, ...props }, ref) => {
2205
+ const { size } = React.useContext(CommandContext);
2206
+ return /* @__PURE__ */ jsx(Command$1.Group, {
2207
+ ref,
2208
+ "data-slot": "command-group",
2209
+ className: cn(commandGroupVariants({ size }), className),
2210
+ ...props
2211
+ });
2212
+ });
2213
+ CommandGroup.displayName = "CommandGroup";
2214
+ var CommandSeparator = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(Command$1.Separator, {
2215
+ ref,
2216
+ "data-slot": "command-separator",
2217
+ className: cn("-mx-1 h-px bg-border", className),
2218
+ ...props
2219
+ }));
2220
+ CommandSeparator.displayName = "CommandSeparator";
2221
+ var commandItemVariants = cva("group/command-item relative flex cursor-default items-center outline-hidden select-none in-data-[slot=dialog-content]:rounded-lg data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 hover:bg-accent hover:text-accent-foreground data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground aria-selected:bg-accent aria-selected:text-accent-foreground *:pointer-events-none *:shrink-0 hover:*:text-accent-foreground data-[selected=true]:*:text-accent-foreground aria-selected:*:text-accent-foreground", {
2222
+ variants: { size: {
2223
+ sm: "gap-2 rounded-sm px-2 py-1 text-xs **:[svg:not([class*='size-'])]:size-3.5",
2224
+ md: "gap-2 rounded-sm px-2 py-1.5 text-sm **:[svg:not([class*='size-'])]:size-4",
2225
+ lg: "gap-3 rounded-md px-3 py-2.5 text-base **:[svg:not([class*='size-'])]:size-5"
2226
+ } },
2227
+ defaultVariants: { size: "md" }
2228
+ });
2229
+ var CommandItem = React.forwardRef(({ className, children, ...props }, ref) => {
2230
+ const { size } = React.useContext(CommandContext);
2231
+ return /* @__PURE__ */ jsx(Command$1.Item, {
2232
+ ref,
2233
+ "data-slot": "command-item",
2234
+ className: cn(commandItemVariants({ size }), className),
2235
+ ...props,
2236
+ children
2237
+ });
2238
+ });
2239
+ CommandItem.displayName = "CommandItem";
2240
+ var CommandShortcut = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("span", {
2241
+ ref,
2242
+ "data-slot": "command-shortcut",
2243
+ className: cn("ml-auto text-xs tracking-widest text-muted-foreground group-data-selected/command-item:text-foreground", className),
2244
+ ...props
2245
+ }));
2246
+ CommandShortcut.displayName = "CommandShortcut";
2247
+ //#endregion
2248
+ //#region src/components/micro/context-menu.tsx
2249
+ /**
2250
+ * ✅ AUDITED & REFACTORED
2251
+ * - Design System Compliant (22 Commandments)
2252
+ * - WCAG AAA/AA
2253
+ * - Form Control Parity
2254
+ * - CSS Delegated Logic
2255
+ */
2256
+ /**
2257
+ * @description Displays a menu to the user — triggered by a right-click.
2258
+ * @requires ContextMenuTrigger, ContextMenuContent, ContextMenuItem
2259
+ * @example
2260
+ * <ContextMenu>
2261
+ * <ContextMenuTrigger>Right click here</ContextMenuTrigger>
2262
+ * <ContextMenuContent>
2263
+ * <ContextMenuItem>Profile</ContextMenuItem>
2264
+ * </ContextMenuContent>
2265
+ * </ContextMenu>
2266
+ */
2267
+ function ContextMenu({ ...props }) {
2268
+ return /* @__PURE__ */ jsx(ContextMenu$1.Root, {
2269
+ "data-slot": "context-menu",
2270
+ ...props
2271
+ });
2272
+ }
2273
+ ContextMenu.displayName = "ContextMenu";
2274
+ var ContextMenuPortal = ContextMenu$1.Portal;
2275
+ ContextMenuPortal.displayName = "ContextMenuPortal";
2276
+ var ContextMenuTrigger = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(ContextMenu$1.Trigger, {
2277
+ ref,
2278
+ "data-slot": "context-menu-trigger",
2279
+ className: cn("select-none", className),
2280
+ ...props
2281
+ }));
2282
+ ContextMenuTrigger.displayName = "ContextMenuTrigger";
2283
+ function ContextMenuContent({ className, align = "start", alignOffset = 4, side = "right", sideOffset = 0, ...props }) {
2284
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(ContextMenu$1.Positioner, {
2285
+ className: "isolate z-50 outline-none",
2286
+ align,
2287
+ alignOffset,
2288
+ side,
2289
+ sideOffset,
2290
+ children: /* @__PURE__ */ jsx(ContextMenu$1.Popup, {
2291
+ "data-slot": "context-menu-content",
2292
+ className: cn("z-50 max-h-(--available-height) min-w-36 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none 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-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", className),
2293
+ ...props
2294
+ })
2295
+ }) });
2296
+ }
2297
+ ContextMenuContent.displayName = "ContextMenuContent";
2298
+ function ContextMenuGroup({ ...props }) {
2299
+ return /* @__PURE__ */ jsx(ContextMenu$1.Group, {
2300
+ "data-slot": "context-menu-group",
2301
+ ...props
2302
+ });
2303
+ }
2304
+ ContextMenuGroup.displayName = "ContextMenuGroup";
2305
+ var ContextMenuLabel = React.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(ContextMenu$1.GroupLabel, {
2306
+ ref,
2307
+ "data-slot": "context-menu-label",
2308
+ "data-inset": inset,
2309
+ className: cn("px-1.5 py-1 text-xs font-medium text-muted-foreground data-inset:pl-7", className),
2310
+ ...props
2311
+ }));
2312
+ ContextMenuLabel.displayName = "ContextMenuLabel";
2313
+ var ContextMenuItem = React.forwardRef(({ className, inset, variant, ...props }, ref) => /* @__PURE__ */ jsx(ContextMenu$1.Item, {
2314
+ ref,
2315
+ "data-slot": "context-menu-item",
2316
+ "data-inset": inset,
2317
+ "data-variant": variant,
2318
+ className: cn("group/context-menu-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 *:pointer-events-none *:shrink-0 **:[svg:not([class*='size-'])]:size-4 focus:*:text-accent-foreground data-[variant=destructive]:*:text-destructive", className),
2319
+ ...props
2320
+ }));
2321
+ ContextMenuItem.displayName = "ContextMenuItem";
2322
+ function ContextMenuSub({ ...props }) {
2323
+ return /* @__PURE__ */ jsx(ContextMenu$1.SubmenuRoot, {
2324
+ "data-slot": "context-menu-sub",
2325
+ ...props
2326
+ });
2327
+ }
2328
+ ContextMenuSub.displayName = "ContextMenuSub";
2329
+ var ContextMenuSubTrigger = React.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(ContextMenu$1.SubmenuTrigger, {
2330
+ ref,
2331
+ "data-slot": "context-menu-sub-trigger",
2332
+ "data-inset": inset,
2333
+ className: cn("flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-inset:pl-7 data-open:bg-accent data-open:text-accent-foreground", className),
2334
+ ...props,
2335
+ children: [children, /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto size-4 shrink-0" })]
2336
+ }));
2337
+ ContextMenuSubTrigger.displayName = "ContextMenuSubTrigger";
2338
+ function ContextMenuSubContent({ ...props }) {
2339
+ return /* @__PURE__ */ jsx(ContextMenuContent, {
2340
+ "data-slot": "context-menu-sub-content",
2341
+ className: "shadow-lg",
2342
+ side: "right",
2343
+ ...props
2344
+ });
2345
+ }
2346
+ ContextMenuSubContent.displayName = "ContextMenuSubContent";
2347
+ var ContextMenuCheckboxItem = React.forwardRef(({ className, children, checked, inset, ...props }, ref) => /* @__PURE__ */ jsxs(ContextMenu$1.CheckboxItem, {
2348
+ ref,
2349
+ "data-slot": "context-menu-checkbox-item",
2350
+ "data-inset": inset,
2351
+ className: cn("relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50", className),
2352
+ checked,
2353
+ ...props,
2354
+ children: [/* @__PURE__ */ jsx("span", {
2355
+ className: "pointer-events-none absolute right-2",
2356
+ children: /* @__PURE__ */ jsx(ContextMenu$1.CheckboxItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-4" }) })
2357
+ }), children]
2358
+ }));
2359
+ ContextMenuCheckboxItem.displayName = "ContextMenuCheckboxItem";
2360
+ function ContextMenuRadioGroup({ ...props }) {
2361
+ return /* @__PURE__ */ jsx(ContextMenu$1.RadioGroup, {
2362
+ "data-slot": "context-menu-radio-group",
2363
+ ...props
2364
+ });
2365
+ }
2366
+ ContextMenuRadioGroup.displayName = "ContextMenuRadioGroup";
2367
+ var ContextMenuRadioItem = React.forwardRef(({ className, children, inset, ...props }, ref) => /* @__PURE__ */ jsxs(ContextMenu$1.RadioItem, {
2368
+ ref,
2369
+ "data-slot": "context-menu-radio-item",
2370
+ "data-inset": inset,
2371
+ className: cn("relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50", className),
2372
+ ...props,
2373
+ children: [/* @__PURE__ */ jsx("span", {
2374
+ className: "pointer-events-none absolute right-2",
2375
+ children: /* @__PURE__ */ jsx(ContextMenu$1.RadioItemIndicator, { children: /* @__PURE__ */ jsx(CircleIcon, { className: "size-2 fill-current" }) })
2376
+ }), children]
2377
+ }));
2378
+ ContextMenuRadioItem.displayName = "ContextMenuRadioItem";
2379
+ var ContextMenuSeparator = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(ContextMenu$1.Separator, {
2380
+ ref,
2381
+ "data-slot": "context-menu-separator",
2382
+ className: cn("-mx-1 my-1 h-px bg-border", className),
2383
+ ...props
2384
+ }));
2385
+ ContextMenuSeparator.displayName = "ContextMenuSeparator";
2386
+ var ContextMenuShortcut = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("span", {
2387
+ ref,
2388
+ "data-slot": "context-menu-shortcut",
2389
+ className: cn("ml-auto text-xs tracking-widest text-muted-foreground group-focus/context-menu-item:text-accent-foreground", className),
2390
+ ...props
2391
+ }));
2392
+ ContextMenuShortcut.displayName = "ContextMenuShortcut";
2393
+ //#endregion
2394
+ //#region src/components/micro/dialog.tsx
2395
+ /**
2396
+ * ✅ AUDITED & REFACTORED
2397
+ * - Design System Compliant (22 Commandments)
2398
+ * - WCAG AAA/AA
2399
+ * - Form Control Parity
2400
+ * - CSS Delegated Logic
2401
+ */
2402
+ function Dialog({ ...props }) {
2403
+ return /* @__PURE__ */ jsx(Dialog$1.Root, {
2404
+ "data-slot": "dialog",
2405
+ ...props
2406
+ });
2407
+ }
2408
+ var DialogTrigger = React.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx(Dialog$1.Trigger, {
2409
+ ref,
2410
+ "data-slot": "dialog-trigger",
2411
+ ...props
2412
+ }));
2413
+ DialogTrigger.displayName = "DialogTrigger";
2414
+ var DialogPortal = Dialog$1.Portal;
2415
+ var DialogClose = React.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx(Dialog$1.Close, {
2416
+ ref,
2417
+ "data-slot": "dialog-close",
2418
+ ...props
2419
+ }));
2420
+ DialogClose.displayName = "DialogClose";
2421
+ var DialogOverlay = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(Dialog$1.Backdrop, {
2422
+ ref,
2423
+ "data-slot": "dialog-overlay",
2424
+ className: cn("fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0", className),
2425
+ ...props
2426
+ }));
2427
+ DialogOverlay.displayName = "DialogOverlay";
2428
+ var DialogContent = React.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(DialogOverlay, {}), /* @__PURE__ */ jsx(Dialog$1.Popup, {
2429
+ ref,
2430
+ "data-slot": "dialog-content",
2431
+ className: cn("group/dialog-content fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-sm text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none max-h-[calc(100dvh-2rem)] sm:max-h-[calc(100dvh-4rem)] overflow-y-auto", "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", className),
2432
+ ...props,
2433
+ children
2434
+ })] }));
2435
+ DialogContent.displayName = "DialogContent";
2436
+ var DialogHeader = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", {
2437
+ ref,
2438
+ "data-slot": "dialog-header",
2439
+ className: cn("flex flex-col gap-2", className),
2440
+ ...props
2441
+ }));
2442
+ DialogHeader.displayName = "DialogHeader";
2443
+ var DialogFooter = React.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx("div", {
2444
+ ref,
2445
+ "data-slot": "dialog-footer",
2446
+ className: cn("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", className),
2447
+ ...props,
2448
+ children
2449
+ }));
2450
+ DialogFooter.displayName = "DialogFooter";
2451
+ var DialogTitle = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(Dialog$1.Title, {
2452
+ ref,
2453
+ "data-slot": "dialog-title",
2454
+ className: cn("font-heading text-base leading-none font-medium", className),
2455
+ ...props
2456
+ }));
2457
+ DialogTitle.displayName = "DialogTitle";
2458
+ var DialogDescription = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(Dialog$1.Description, {
2459
+ ref,
2460
+ "data-slot": "dialog-description",
2461
+ className: cn("text-sm text-muted-foreground", className),
2462
+ ...props
2463
+ }));
2464
+ DialogDescription.displayName = "DialogDescription";
2465
+ //#endregion
2466
+ //#region src/components/micro/direction.tsx
2467
+ /**
2468
+ * ✅ AUDITED & REFACTORED
2469
+ * - Design System Compliant (22 Commandments)
2470
+ * - WCAG AAA/AA
2471
+ * - Form Control Parity
2472
+ * - CSS Delegated Logic
2473
+ */
2474
+ //#endregion
2475
+ //#region src/components/micro/drawer.tsx
2476
+ /**
2477
+ * ✅ AUDITED & REFACTORED
2478
+ * - Design System Compliant (22 Commandments)
2479
+ * - WCAG AAA/AA
2480
+ * - Form Control Parity
2481
+ * - CSS Delegated Logic
2482
+ */
2483
+ function Drawer({ ...props }) {
2484
+ return /* @__PURE__ */ jsx(Drawer$1.Root, {
2485
+ "data-slot": "drawer",
2486
+ ...props
2487
+ });
2488
+ }
2489
+ Drawer.displayName = "Drawer";
2490
+ var DrawerTrigger = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(Drawer$1.Trigger, {
2491
+ ref,
2492
+ "data-slot": "drawer-trigger",
2493
+ ...props
2494
+ }));
2495
+ DrawerTrigger.displayName = "DrawerTrigger";
2496
+ var DrawerPortal = Drawer$1.Portal;
2497
+ var DrawerClose = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(Drawer$1.Close, {
2498
+ ref,
2499
+ "data-slot": "drawer-close",
2500
+ ...props
2501
+ }));
2502
+ DrawerClose.displayName = "DrawerClose";
2503
+ var DrawerOverlay = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(Drawer$1.Overlay, {
2504
+ ref,
2505
+ "data-slot": "drawer-overlay",
2506
+ className: cn("fixed inset-0 z-50 bg-black/10 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0", className),
2507
+ ...props
2508
+ }));
2509
+ DrawerOverlay.displayName = "DrawerOverlay";
2510
+ var DrawerContent = React.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(DrawerPortal, {
2511
+ "data-slot": "drawer-portal",
2512
+ children: [/* @__PURE__ */ jsx(DrawerOverlay, {}), /* @__PURE__ */ jsxs(Drawer$1.Content, {
2513
+ ref,
2514
+ "data-slot": "drawer-content",
2515
+ className: cn("group/drawer-content fixed z-50 flex h-auto flex-col bg-popover text-sm text-popover-foreground data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-xl data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:rounded-r-xl data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:rounded-l-xl data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-xl data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-sm", className),
2516
+ ...props,
2517
+ children: [/* @__PURE__ */ jsx("div", { className: "mx-auto mt-4 hidden h-1 w-[100px] shrink-0 rounded-full bg-muted group-data-[vaul-drawer-direction=bottom]/drawer-content:block" }), children]
2518
+ })]
2519
+ }));
2520
+ DrawerContent.displayName = "DrawerContent";
2521
+ var DrawerHeader = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", {
2522
+ ref,
2523
+ "data-slot": "drawer-header",
2524
+ className: cn("flex flex-col gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-0.5 md:text-left", className),
2525
+ ...props
2526
+ }));
2527
+ DrawerHeader.displayName = "DrawerHeader";
2528
+ var DrawerFooter = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", {
2529
+ ref,
2530
+ "data-slot": "drawer-footer",
2531
+ className: cn("mt-auto flex flex-col gap-2 p-4", className),
2532
+ ...props
2533
+ }));
2534
+ DrawerFooter.displayName = "DrawerFooter";
2535
+ var DrawerTitle = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(Drawer$1.Title, {
2536
+ ref,
2537
+ "data-slot": "drawer-title",
2538
+ className: cn("font-heading text-base font-medium text-foreground", className),
2539
+ ...props
2540
+ }));
2541
+ DrawerTitle.displayName = "DrawerTitle";
2542
+ var DrawerDescription = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(Drawer$1.Description, {
2543
+ ref,
2544
+ "data-slot": "drawer-description",
2545
+ className: cn("text-sm text-muted-foreground", className),
2546
+ ...props
2547
+ }));
2548
+ DrawerDescription.displayName = "DrawerDescription";
2549
+ //#endregion
2550
+ //#region src/components/micro/dropdown-menu.tsx
2551
+ /**
2552
+ * ✅ AUDITED & REFACTORED
2553
+ * - Design System Compliant (22 Commandments)
2554
+ * - WCAG AAA/AA
2555
+ * - Form Control Parity
2556
+ * - CSS Delegated Logic
2557
+ */
2558
+ function DropdownMenu({ ...props }) {
2559
+ return /* @__PURE__ */ jsx(Menu.Root, {
2560
+ "data-slot": "dropdown-menu",
2561
+ ...props
2562
+ });
2563
+ }
2564
+ DropdownMenu.displayName = "DropdownMenu";
2565
+ var DropdownMenuPortal = Menu.Portal;
2566
+ DropdownMenuPortal.displayName = "DropdownMenuPortal";
2567
+ var DropdownMenuTrigger = React.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx(Menu.Trigger, {
2568
+ ref,
2569
+ "data-slot": "dropdown-menu-trigger",
2570
+ ...props
2571
+ }));
2572
+ DropdownMenuTrigger.displayName = "DropdownMenuTrigger";
2573
+ var DropdownMenuContent = React.forwardRef(({ align = "start", alignOffset = 0, side = "bottom", sideOffset = 4, className, ...props }, ref) => {
2574
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(Menu.Positioner, {
2575
+ className: "isolate z-50 outline-none",
2576
+ align,
2577
+ alignOffset,
2578
+ side,
2579
+ sideOffset,
2580
+ children: /* @__PURE__ */ jsx(Menu.Popup, {
2581
+ ref,
2582
+ "data-slot": "dropdown-menu-content",
2583
+ className: cn("z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none 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-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95", className),
2584
+ ...props
2585
+ })
2586
+ }) });
2587
+ });
2588
+ DropdownMenuContent.displayName = "DropdownMenuContent";
2589
+ var DropdownMenuGroup = React.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx(Menu.Group, {
2590
+ ref,
2591
+ "data-slot": "dropdown-menu-group",
2592
+ ...props
2593
+ }));
2594
+ DropdownMenuGroup.displayName = "DropdownMenuGroup";
2595
+ var DropdownMenuLabel = React.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(Menu.GroupLabel, {
2596
+ ref,
2597
+ "data-slot": "dropdown-menu-label",
2598
+ "data-inset": inset,
2599
+ className: cn("px-1.5 py-1 text-xs font-medium text-muted-foreground data-inset:pl-7", className),
2600
+ ...props
2601
+ }));
2602
+ DropdownMenuLabel.displayName = "DropdownMenuLabel";
2603
+ var DropdownMenuItem = React.forwardRef(({ className, inset, variant, ...props }, ref) => /* @__PURE__ */ jsx(Menu.Item, {
2604
+ ref,
2605
+ "data-slot": "dropdown-menu-item",
2606
+ "data-inset": inset,
2607
+ "data-variant": variant,
2608
+ className: cn("group/dropdown-menu-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:*:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 *:pointer-events-none *:shrink-0 **:[svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:text-destructive", className),
2609
+ ...props
2610
+ }));
2611
+ DropdownMenuItem.displayName = "DropdownMenuItem";
2612
+ function DropdownMenuSub({ ...props }) {
2613
+ return /* @__PURE__ */ jsx(Menu.SubmenuRoot, {
2614
+ "data-slot": "dropdown-menu-sub",
2615
+ ...props
2616
+ });
2617
+ }
2618
+ DropdownMenuSub.displayName = "DropdownMenuSub";
2619
+ var DropdownMenuSubTrigger = React.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(Menu.SubmenuTrigger, {
2620
+ ref,
2621
+ "data-slot": "dropdown-menu-sub-trigger",
2622
+ "data-inset": inset,
2623
+ className: cn("flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:*:text-accent-foreground data-inset:pl-7 data-popup-open:bg-accent data-popup-open:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground *:pointer-events-none *:shrink-0 **:[svg:not([class*='size-'])]:size-4", className),
2624
+ ...props,
2625
+ children: [children, /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto" })]
2626
+ }));
2627
+ DropdownMenuSubTrigger.displayName = "DropdownMenuSubTrigger";
2628
+ var DropdownMenuSubContent = React.forwardRef(({ align = "start", alignOffset = -3, side = "right", sideOffset = 0, className, ...props }, ref) => /* @__PURE__ */ jsx(DropdownMenuContent, {
2629
+ ref,
2630
+ "data-slot": "dropdown-menu-sub-content",
2631
+ className: cn("w-auto min-w-[96px] rounded-lg bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-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-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", className),
2632
+ align,
2633
+ alignOffset,
2634
+ side,
2635
+ sideOffset,
2636
+ ...props
2637
+ }));
2638
+ DropdownMenuSubContent.displayName = "DropdownMenuSubContent";
2639
+ var DropdownMenuCheckboxItem = React.forwardRef(({ className, children, checked, inset, ...props }, ref) => /* @__PURE__ */ jsxs(Menu.CheckboxItem, {
2640
+ ref,
2641
+ "data-slot": "dropdown-menu-checkbox-item",
2642
+ "data-inset": inset,
2643
+ className: cn("relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:*:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 *:pointer-events-none *:shrink-0 **:[svg:not([class*='size-'])]:size-4", className),
2644
+ checked,
2645
+ ...props,
2646
+ children: [/* @__PURE__ */ jsx("span", {
2647
+ className: "pointer-events-none absolute right-2 flex items-center justify-center",
2648
+ "data-slot": "dropdown-menu-checkbox-item-indicator",
2649
+ children: /* @__PURE__ */ jsx(Menu.CheckboxItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
2650
+ }), children]
2651
+ }));
2652
+ DropdownMenuCheckboxItem.displayName = "DropdownMenuCheckboxItem";
2653
+ var DropdownMenuRadioGroup = React.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx(Menu.RadioGroup, {
2654
+ ref,
2655
+ "data-slot": "dropdown-menu-radio-group",
2656
+ ...props
2657
+ }));
2658
+ DropdownMenuRadioGroup.displayName = "DropdownMenuRadioGroup";
2659
+ var DropdownMenuRadioItem = React.forwardRef(({ className, children, inset, ...props }, ref) => /* @__PURE__ */ jsxs(Menu.RadioItem, {
2660
+ ref,
2661
+ "data-slot": "dropdown-menu-radio-item",
2662
+ "data-inset": inset,
2663
+ className: cn("relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:*:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 *:pointer-events-none *:shrink-0 **:[svg:not([class*='size-'])]:size-4", className),
2664
+ ...props,
2665
+ children: [/* @__PURE__ */ jsx("span", {
2666
+ className: "pointer-events-none absolute right-2 flex items-center justify-center",
2667
+ "data-slot": "dropdown-menu-radio-item-indicator",
2668
+ children: /* @__PURE__ */ jsx(Menu.RadioItemIndicator, { children: /* @__PURE__ */ jsx(CircleIcon, { className: "size-2 fill-current" }) })
2669
+ }), children]
2670
+ }));
2671
+ DropdownMenuRadioItem.displayName = "DropdownMenuRadioItem";
2672
+ var DropdownMenuSeparator = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(Menu.Separator, {
2673
+ ref,
2674
+ "data-slot": "dropdown-menu-separator",
2675
+ className: cn("-mx-1 my-1 h-px bg-border", className),
2676
+ ...props
2677
+ }));
2678
+ DropdownMenuSeparator.displayName = "DropdownMenuSeparator";
2679
+ var DropdownMenuShortcut = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("span", {
2680
+ ref,
2681
+ "data-slot": "dropdown-menu-shortcut",
2682
+ className: cn("ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground", className),
2683
+ ...props
2684
+ }));
2685
+ DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
2686
+ //#endregion
2687
+ //#region src/components/micro/empty.tsx
2688
+ /**
2689
+ * ✅ AUDITED & REFACTORED
2690
+ * - Design System Compliant (22 Commandments)
2691
+ * - WCAG AAA/AA
2692
+ * - Form Control Parity
2693
+ * - CSS Delegated Logic
2694
+ */
2695
+ /**
2696
+ * @description A placeholder state component for empty data.
2697
+ * @requires EmptyHeader, EmptyTitle, EmptyDescription, EmptyMedia, EmptyContent, EmptyAction
2698
+ * @example
2699
+ * <Empty>
2700
+ * <EmptyHeader>
2701
+ * <EmptyTitle>No data</EmptyTitle>
2702
+ * </EmptyHeader>
2703
+ * </Empty>
2704
+ */
2705
+ var Empty = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", {
2706
+ ref,
2707
+ "data-slot": "empty",
2708
+ className: cn("flex w-full min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-xl border-dashed p-6 text-center text-balance", className),
2709
+ ...props
2710
+ }));
2711
+ Empty.displayName = "Empty";
2712
+ var EmptyHeader = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", {
2713
+ ref,
2714
+ "data-slot": "empty-header",
2715
+ className: cn("flex max-w-sm flex-col items-center gap-2", className),
2716
+ ...props
2717
+ }));
2718
+ EmptyHeader.displayName = "EmptyHeader";
2719
+ var emptyMediaVariants = cva("flex shrink-0 items-center justify-center *:pointer-events-none *:shrink-0", { variants: { variant: { icon: "flex size-8 shrink-0 items-center justify-center rounded-lg bg-muted text-foreground **:[svg:not([class*='size-'])]:size-4" } } });
2720
+ var EmptyMedia = React.forwardRef(({ className, variant, ...props }, ref) => /* @__PURE__ */ jsx("div", {
2721
+ ref,
2722
+ "data-slot": "empty-icon",
2723
+ "data-variant": variant,
2724
+ className: cn(emptyMediaVariants({
2725
+ variant,
2726
+ className
2727
+ })),
2728
+ ...props
2729
+ }));
2730
+ EmptyMedia.displayName = "EmptyMedia";
2731
+ var EmptyTitle = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("h3", {
2732
+ ref,
2733
+ "data-slot": "empty-title",
2734
+ className: cn("font-heading text-sm font-medium tracking-tight", className),
2735
+ ...props
2736
+ }));
2737
+ EmptyTitle.displayName = "EmptyTitle";
2738
+ var EmptyDescription = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("p", {
2739
+ ref,
2740
+ "data-slot": "empty-description",
2741
+ className: cn("text-sm/relaxed text-muted-foreground [&_a]:underline [&_a]:underline-offset-4 [&_a:hover]:text-primary", className),
2742
+ ...props
2743
+ }));
2744
+ EmptyDescription.displayName = "EmptyDescription";
2745
+ var EmptyContent = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", {
2746
+ ref,
2747
+ "data-slot": "empty-content",
2748
+ className: cn("flex w-full max-w-sm min-w-0 flex-col items-center gap-2.5 text-sm text-balance", className),
2749
+ ...props
2750
+ }));
2751
+ EmptyContent.displayName = "EmptyContent";
2752
+ var EmptyAction = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", {
2753
+ ref,
2754
+ "data-slot": "empty-action",
2755
+ className: cn("flex flex-col items-center gap-2", className),
2756
+ ...props
2757
+ }));
2758
+ EmptyAction.displayName = "EmptyAction";
2759
+ //#endregion
2760
+ //#region src/components/micro/label.tsx
2761
+ /**
2762
+ * ✅ AUDITED & REFACTORED
2763
+ * - Design System Compliant (22 Commandments)
2764
+ * - WCAG AAA/AA
2765
+ * - Form Control Parity
2766
+ * - CSS Delegated Logic
2767
+ */
2768
+ var labelVariants = cva("flex items-center gap-2 leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50 group-data-[invalid=true]:text-destructive", { variants: { size: {
2769
+ sm: "text-xs",
2770
+ md: "text-sm",
2771
+ lg: "text-sm"
2772
+ } } });
2773
+ /**
2774
+ * @description Renders an accessible label associated with controls.
2775
+ * @example
2776
+ * <Label htmlFor="email">Email</Label>
2777
+ */
2778
+ var Label = React.forwardRef(({ className, size = "md", ...props }, ref) => {
2779
+ return /* @__PURE__ */ jsx("label", {
2780
+ ref,
2781
+ "data-slot": "label",
2782
+ className: cn(labelVariants({
2783
+ size,
2784
+ className
2785
+ })),
2786
+ ...props
2787
+ });
2788
+ });
2789
+ Label.displayName = "Label";
2790
+ //#endregion
2791
+ //#region src/components/micro/separator.tsx
2792
+ /**
2793
+ * ✅ AUDITED & REFACTORED
2794
+ * - Design System Compliant (22 Commandments)
2795
+ * - WCAG AAA/AA
2796
+ * - Form Control Parity
2797
+ * - CSS Delegated Logic
2798
+ */
2799
+ /**
2800
+ * @description Visually or semantically separates content.
2801
+ * @example
2802
+ * <Separator orientation="vertical" />
2803
+ */
2804
+ function Separator({ className, orientation = "horizontal", ...props }) {
2805
+ return /* @__PURE__ */ jsx(Separator$1, {
2806
+ "data-slot": "separator",
2807
+ orientation,
2808
+ className: cn("shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch", className),
2809
+ ...props
2810
+ });
2811
+ }
2812
+ //#endregion
2813
+ //#region src/components/micro/field.tsx
2814
+ /**
2815
+ * ✅ AUDITED & REFACTORED
2816
+ * - Design System Compliant (22 Commandments)
2817
+ * - WCAG AAA/AA
2818
+ * - Form Control Parity
2819
+ * - CSS Delegated Logic
2820
+ */
2821
+ var FieldSet = React.forwardRef(({ className, ...props }, ref) => {
2822
+ return /* @__PURE__ */ jsx("fieldset", {
2823
+ ref,
2824
+ "data-slot": "field-set",
2825
+ className: cn("flex flex-col gap-4", className),
2826
+ ...props
2827
+ });
2828
+ });
2829
+ FieldSet.displayName = "FieldSet";
2830
+ var FieldLegend = React.forwardRef(({ className, variant = "legend", ...props }, ref) => {
2831
+ return /* @__PURE__ */ jsx("legend", {
2832
+ ref,
2833
+ "data-slot": "field-legend",
2834
+ "data-variant": variant,
2835
+ className: cn("mb-1.5 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base", className),
2836
+ ...props
2837
+ });
2838
+ });
2839
+ FieldLegend.displayName = "FieldLegend";
2840
+ var FieldGroup = React.forwardRef(({ className, ...props }, ref) => {
2841
+ return /* @__PURE__ */ jsx("div", {
2842
+ ref,
2843
+ "data-slot": "field-group",
2844
+ className: cn("group/field-group flex flex-col gap-5 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4", className),
2845
+ ...props
2846
+ });
2847
+ });
2848
+ FieldGroup.displayName = "FieldGroup";
2849
+ var fieldVariants = cva("group/field flex min-w-fit", {
2850
+ variants: {
2851
+ orientation: {
2852
+ vertical: "flex-col [&>.sr-only]:w-auto",
2853
+ horizontal: "flex-row items-center [&>[data-slot=field-label]]:flex-auto",
2854
+ responsive: "flex-col @md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>[data-slot=field-label]]:flex-auto [&>.sr-only]:w-auto"
2855
+ },
2856
+ size: {
2857
+ sm: "",
2858
+ md: "",
2859
+ lg: ""
2860
+ }
2861
+ },
2862
+ compoundVariants: [
2863
+ {
2864
+ orientation: "vertical",
2865
+ size: "sm",
2866
+ className: "gap-0.5"
2867
+ },
2868
+ {
2869
+ orientation: "vertical",
2870
+ size: "md",
2871
+ className: "gap-0.5"
2872
+ },
2873
+ {
2874
+ orientation: "vertical",
2875
+ size: "lg",
2876
+ className: "gap-0.5"
2877
+ },
2878
+ {
2879
+ orientation: "horizontal",
2880
+ size: "sm",
2881
+ className: "gap-1"
2882
+ },
2883
+ {
2884
+ orientation: "horizontal",
2885
+ size: "md",
2886
+ className: "gap-1.5"
2887
+ },
2888
+ {
2889
+ orientation: "horizontal",
2890
+ size: "lg",
2891
+ className: "gap-2"
2892
+ },
2893
+ {
2894
+ orientation: "responsive",
2895
+ size: "sm",
2896
+ className: "gap-0.5 @md/field-group:gap-1"
2897
+ },
2898
+ {
2899
+ orientation: "responsive",
2900
+ size: "md",
2901
+ className: "gap-0.5 @md/field-group:gap-1.5"
2902
+ },
2903
+ {
2904
+ orientation: "responsive",
2905
+ size: "lg",
2906
+ className: "gap-0.5 @md/field-group:gap-2"
2907
+ }
2908
+ ]
2909
+ });
2910
+ var Field = React.forwardRef(({ className, orientation = "vertical", size = "md", error, ...props }, ref) => {
2911
+ return /* @__PURE__ */ jsx("div", {
2912
+ ref,
2913
+ role: "group",
2914
+ "data-slot": "field",
2915
+ "data-orientation": orientation,
2916
+ "data-size": size,
2917
+ "data-invalid": !!error,
2918
+ className: cn(fieldVariants({
2919
+ orientation,
2920
+ size
2921
+ }), className),
2922
+ ...props
2923
+ });
2924
+ });
2925
+ Field.displayName = "Field";
2926
+ var FieldContent = React.forwardRef(({ className, ...props }, ref) => {
2927
+ return /* @__PURE__ */ jsx("div", {
2928
+ ref,
2929
+ "data-slot": "field-content",
2930
+ className: cn("group/field-content flex flex-1 flex-col gap-0.5 leading-snug", className),
2931
+ ...props
2932
+ });
2933
+ });
2934
+ FieldContent.displayName = "FieldContent";
2935
+ var FieldLabel = React.forwardRef(({ className, ...props }, ref) => {
2936
+ return /* @__PURE__ */ jsx(Label, {
2937
+ ref,
2938
+ "data-slot": "field-label",
2939
+ className: cn("group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50", "text-sm group-data-[size=sm]/field:text-xs", className),
2940
+ ...props
2941
+ });
2942
+ });
2943
+ FieldLabel.displayName = "FieldLabel";
2944
+ var FieldTitle = React.forwardRef(({ className, ...props }, ref) => {
2945
+ return /* @__PURE__ */ jsx("div", {
2946
+ ref,
2947
+ "data-slot": "field-title",
2948
+ className: cn("flex w-fit items-center gap-2 font-medium group-data-[disabled=true]/field:opacity-50", "text-sm group-data-[size=sm]/field:text-xs", className),
2949
+ ...props
2950
+ });
2951
+ });
2952
+ FieldTitle.displayName = "FieldTitle";
2953
+ var FieldDescription = React.forwardRef(({ className, ...props }, ref) => {
2954
+ return /* @__PURE__ */ jsx("p", {
2955
+ ref,
2956
+ "data-slot": "field-description",
2957
+ className: cn("text-left leading-normal font-normal text-muted-foreground group-data-[orientation=horizontal]/field:text-balance [[data-variant=legend]+&]:-mt-1.5", "last:mt-0 nth-last-2:-mt-1", "[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary", "text-sm group-data-[size=sm]/field:text-xs", className),
2958
+ ...props
2959
+ });
2960
+ });
2961
+ FieldDescription.displayName = "FieldDescription";
2962
+ var FieldSeparator = React.forwardRef(({ children, className, ...props }, ref) => {
2963
+ return /* @__PURE__ */ jsxs("div", {
2964
+ ref,
2965
+ "data-slot": "field-separator",
2966
+ "data-content": !!children,
2967
+ className: cn("relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2", className),
2968
+ ...props,
2969
+ children: [/* @__PURE__ */ jsx(Separator, { className: "absolute inset-0 top-1/2" }), children && /* @__PURE__ */ jsx("span", {
2970
+ className: "relative mx-auto block w-fit bg-background px-2 text-muted-foreground",
2971
+ "data-slot": "field-separator-content",
2972
+ children
2973
+ })]
2974
+ });
2975
+ });
2976
+ FieldSeparator.displayName = "FieldSeparator";
2977
+ var FieldError = React.forwardRef(({ className, children, errors, ...props }, ref) => {
2978
+ const content = React.useMemo(() => {
2979
+ if (children) return children;
2980
+ if (!errors?.length) return null;
2981
+ const uniqueErrors = [...new Map(errors.map((error) => [error?.message, error])).values()];
2982
+ if (uniqueErrors?.length == 1) return uniqueErrors[0]?.message;
2983
+ return /* @__PURE__ */ jsx("ul", {
2984
+ className: "ml-4 flex list-disc flex-col gap-1",
2985
+ children: uniqueErrors.map((error, index) => error?.message && /* @__PURE__ */ jsx("li", { children: error.message }, index))
2986
+ });
2987
+ }, [children, errors]);
2988
+ if (!content) return null;
2989
+ return /* @__PURE__ */ jsxs("div", {
2990
+ ref,
2991
+ role: "alert",
2992
+ "data-slot": "field-error",
2993
+ className: cn("text-sm font-medium text-destructive flex items-start gap-1.5 animate-in fade-in-0 slide-in-from-top-1", className),
2994
+ ...props,
2995
+ children: [/* @__PURE__ */ jsx(AlertCircleIcon, { className: "size-4 shrink-0 mt-0.5" }), /* @__PURE__ */ jsx("div", {
2996
+ className: "flex-1",
2997
+ children: content
2998
+ })]
2999
+ });
3000
+ });
3001
+ FieldError.displayName = "FieldError";
3002
+ //#endregion
3003
+ //#region src/components/micro/hover-card.tsx
3004
+ /**
3005
+ * ✅ AUDITED & REFACTORED
3006
+ * - Design System Compliant (22 Commandments)
3007
+ * - WCAG AAA/AA
3008
+ * - Form Control Parity
3009
+ * - CSS Delegated Logic
3010
+ */
3011
+ /**
3012
+ * @description For sighted users to preview content available behind a link.
3013
+ * @requires HoverCardTrigger, HoverCardContent
3014
+ * @example
3015
+ * <HoverCard>
3016
+ * <HoverCardTrigger>Hover me</HoverCardTrigger>
3017
+ * <HoverCardContent>Details</HoverCardContent>
3018
+ * </HoverCard>
3019
+ */
3020
+ function HoverCard({ ...props }) {
3021
+ return /* @__PURE__ */ jsx(PreviewCard.Root, {
3022
+ "data-slot": "hover-card",
3023
+ ...props
3024
+ });
3025
+ }
3026
+ var HoverCardTrigger = React.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx(PreviewCard.Trigger, {
3027
+ ref,
3028
+ "data-slot": "hover-card-trigger",
3029
+ ...props
3030
+ }));
3031
+ HoverCardTrigger.displayName = "HoverCardTrigger";
3032
+ var HoverCardPortal = PreviewCard.Portal;
3033
+ var HoverCardContent = React.forwardRef(({ className, side = "bottom", sideOffset = 4, align = "center", alignOffset = 4, ...props }, ref) => {
3034
+ return /* @__PURE__ */ jsx(PreviewCard.Positioner, {
3035
+ align,
3036
+ alignOffset,
3037
+ side,
3038
+ sideOffset,
3039
+ className: "isolate",
3040
+ children: /* @__PURE__ */ jsx(PreviewCard.Popup, {
3041
+ ref,
3042
+ "data-slot": "hover-card-content",
3043
+ className: cn("z-50 w-64 origin-(--transform-origin) rounded-lg bg-popover p-2.5 text-sm text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden duration-100", "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-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 motion-reduce:animate-none motion-reduce:transition-none", className),
3044
+ ...props
3045
+ })
3046
+ });
3047
+ });
3048
+ HoverCardContent.displayName = "HoverCardContent";
3049
+ //#endregion
3050
+ //#region src/components/micro/input.tsx
3051
+ /**
3052
+ * ✅ AUDITED & REFACTORED
3053
+ * - Design System Compliant (20 Commandments)
3054
+ * - WCAG AAA/AA
3055
+ * - Form Control Parity
3056
+ * - CSS Delegated Logic
3057
+ */
3058
+ var inputVariants = cva("min-w-0 rounded-lg border border-input bg-transparent text-sm transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:focus-visible:ring-3 aria-invalid:focus-visible:ring-destructive/50 dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:focus-visible:ring-destructive/50", { variants: { size: {
3059
+ sm: "h-7 px-2 py-0.5 text-xs",
3060
+ md: "h-8 px-2.5 py-1 text-sm",
3061
+ lg: "h-9 px-3 py-1.5 text-sm"
3062
+ } } });
3063
+ /**
3064
+ * @description Displays a form input field or a component that looks like an input field.
3065
+ * @example
3066
+ * <Input type="email" placeholder="Email" />
3067
+ */
3068
+ var Input = React.forwardRef(function Input({ className, size = "md", ...props }, ref) {
3069
+ return /* @__PURE__ */ jsx(Input$1, {
3070
+ ref,
3071
+ "data-slot": "input",
3072
+ className: cn(inputVariants({
3073
+ size,
3074
+ className
3075
+ })),
3076
+ ...props
3077
+ });
3078
+ });
3079
+ Input.displayName = "Input";
3080
+ //#endregion
3081
+ //#region src/components/micro/input-otp.tsx
3082
+ /**
3083
+ * ✅ AUDITED & REFACTORED
3084
+ * - Design System Compliant (20 Commandments)
3085
+ * - WCAG AAA/AA
3086
+ * - Form Control Parity
3087
+ * - CSS Delegated Logic
3088
+ */
3089
+ var inputOTPVariants = cva("cn-input-otp group/otp inline-flex items-center has-disabled:opacity-50 has-disabled:cursor-not-allowed has-disabled:pointer-events-none", { variants: { size: {
3090
+ sm: "min-h-7 text-xs",
3091
+ md: "min-h-8 text-sm",
3092
+ lg: "min-h-9 text-sm"
3093
+ } } });
3094
+ var InputOTP = React.forwardRef(({ className, containerClassName, size = "md", ...props }, ref) => {
3095
+ return /* @__PURE__ */ jsx("div", {
3096
+ "data-slot": "input-otp",
3097
+ "data-size": size,
3098
+ className: cn(inputOTPVariants({ size })),
3099
+ children: /* @__PURE__ */ jsx(OTPInput, {
3100
+ ...ref ? { ref } : {},
3101
+ containerClassName: cn("flex items-center", containerClassName),
3102
+ spellCheck: false,
3103
+ className: cn("disabled:cursor-not-allowed disabled:opacity-100", className),
3104
+ ...props
3105
+ })
3106
+ });
3107
+ });
3108
+ InputOTP.displayName = "InputOTP";
3109
+ var InputOTPGroup = React.forwardRef(({ className, ...props }, ref) => {
3110
+ return /* @__PURE__ */ jsx("div", {
3111
+ ref,
3112
+ "data-slot": "input-otp-group",
3113
+ className: cn("flex items-center gap-2", className),
3114
+ ...props
3115
+ });
3116
+ });
3117
+ InputOTPGroup.displayName = "InputOTPGroup";
3118
+ var InputOTPSlot = React.forwardRef(({ index, className, ...props }, ref) => {
3119
+ const { char, hasFakeCaret, isActive } = React.useContext(OTPInputContext)?.slots[index] ?? {};
3120
+ return /* @__PURE__ */ jsxs("div", {
3121
+ ref,
3122
+ "data-slot": "input-otp-slot",
3123
+ "data-active": isActive ? "" : void 0,
3124
+ className: cn("relative flex size-8 group-data-[size=sm]/otp:size-7 group-data-[size=lg]/otp:size-9 items-center justify-center border border-input rounded-lg bg-transparent transition-colors outline-none", "aria-invalid:border-destructive dark:aria-invalid:border-destructive/50", "data-active:z-10 data-active:border-ring data-active:ring-3 data-active:ring-ring/50 data-active:ring-offset-1 data-active:ring-offset-background", "data-active:aria-invalid:border-destructive data-active:aria-invalid:ring-3 data-active:aria-invalid:ring-destructive/50", "dark:bg-input/30 dark:data-active:aria-invalid:ring-destructive/50", className),
3125
+ ...props,
3126
+ children: [char, hasFakeCaret && /* @__PURE__ */ jsx("div", {
3127
+ className: "pointer-events-none absolute inset-0 flex items-center justify-center",
3128
+ children: /* @__PURE__ */ jsx("div", { className: "h-4 w-px animate-caret-blink bg-foreground duration-1000" })
3129
+ })]
3130
+ });
3131
+ });
3132
+ InputOTPSlot.displayName = "InputOTPSlot";
3133
+ var InputOTPSeparator = React.forwardRef(({ className, children, ...props }, ref) => {
3134
+ return /* @__PURE__ */ jsx("div", {
3135
+ ref,
3136
+ "data-slot": "input-otp-separator",
3137
+ className: cn("flex items-center text-muted-foreground [&>svg:not([class*='size-'])]:size-4 group-data-[size=sm]/otp:[&>svg:not([class*='size-'])]:size-3.5", className),
3138
+ role: "separator",
3139
+ ...props,
3140
+ children
3141
+ });
3142
+ });
3143
+ InputOTPSeparator.displayName = "InputOTPSeparator";
3144
+ //#endregion
3145
+ //#region src/components/micro/item.tsx
3146
+ /**
3147
+ * @description Base flex container for listing items consistently.
3148
+ */
3149
+ function ItemGroup({ className, ...props }) {
3150
+ return /* @__PURE__ */ jsx("div", {
3151
+ role: "list",
3152
+ "data-slot": "item-group",
3153
+ className: cn("group/item-group flex w-full flex-col gap-4 has-data-[size=sm]:gap-2.5 has-data-[size=xs]:gap-2", className),
3154
+ ...props
3155
+ });
3156
+ }
3157
+ function ItemSeparator({ className, ...props }) {
3158
+ return /* @__PURE__ */ jsx(Separator, {
3159
+ "data-slot": "item-separator",
3160
+ orientation: "horizontal",
3161
+ className: cn("my-2", className),
3162
+ ...props
3163
+ });
3164
+ }
3165
+ var itemVariants = cva("group/item flex w-full flex-wrap items-center rounded-lg border text-sm transition-colors duration-100 outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:ring-offset-1 focus-visible:ring-offset-background [&_a]:transition-colors [&_a]:hover:bg-muted border-transparent", { variants: {
3166
+ variant: {
3167
+ outline: "border-border",
3168
+ muted: "border-transparent bg-muted/50"
3169
+ },
3170
+ size: {
3171
+ sm: "gap-1 px-2.5 py-2 in-data-[slot=dropdown-menu-content]:p-0",
3172
+ md: "gap-1.5 px-3 py-2.5",
3173
+ lg: "gap-2 px-3.5 py-2.5"
3174
+ }
3175
+ } });
3176
+ function Item({ className, variant, size = "md", render, ...props }) {
3177
+ return useRender({
3178
+ defaultTagName: "div",
3179
+ props: mergeProps({ className: cn(itemVariants({
3180
+ variant,
3181
+ size,
3182
+ className
3183
+ })) }, props),
3184
+ render,
3185
+ state: {
3186
+ slot: "item",
3187
+ variant,
3188
+ size
3189
+ }
3190
+ });
3191
+ }
3192
+ var itemMediaVariants = cva("flex shrink-0 items-center justify-center gap-2 group-has-data-[slot=item-description]/item:translate-y-0.5 group-has-data-[slot=item-description]/item:self-start [&>svg]:pointer-events-none bg-transparent", { variants: { variant: {
3193
+ icon: "[&_svg:not([class*='size-'])]:size-4",
3194
+ image: "size-10 overflow-hidden rounded-sm group-data-[size=sm]/item:size-8 group-data-[size=xs]/item:size-6 [&>img]:size-full [&>img]:object-cover"
3195
+ } } });
3196
+ function ItemMedia({ className, variant, ...props }) {
3197
+ return /* @__PURE__ */ jsx("div", {
3198
+ "data-slot": "item-media",
3199
+ "data-variant": variant,
3200
+ className: cn(itemMediaVariants({
3201
+ variant,
3202
+ className
3203
+ })),
3204
+ ...props
3205
+ });
3206
+ }
3207
+ function ItemContent({ className, ...props }) {
3208
+ return /* @__PURE__ */ jsx("div", {
3209
+ "data-slot": "item-content",
3210
+ className: cn("flex flex-1 flex-col gap-1 group-data-[size=xs]/item:gap-0 [&+[data-slot=item-content]]:flex-none", className),
3211
+ ...props
3212
+ });
3213
+ }
3214
+ function ItemTitle({ className, ...props }) {
3215
+ return /* @__PURE__ */ jsx("div", {
3216
+ "data-slot": "item-title",
3217
+ className: cn("line-clamp-1 flex w-fit items-center gap-2 text-sm leading-snug font-medium underline-offset-4", className),
3218
+ ...props
3219
+ });
3220
+ }
3221
+ function ItemDescription({ className, ...props }) {
3222
+ return /* @__PURE__ */ jsx("p", {
3223
+ "data-slot": "item-description",
3224
+ className: cn("line-clamp-2 text-left text-sm leading-normal font-normal text-muted-foreground group-data-[size=xs]/item:text-xs [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary", className),
3225
+ ...props
3226
+ });
3227
+ }
3228
+ function ItemActions({ className, ...props }) {
3229
+ return /* @__PURE__ */ jsx("div", {
3230
+ "data-slot": "item-actions",
3231
+ className: cn("flex items-center gap-2", className),
3232
+ ...props
3233
+ });
3234
+ }
3235
+ function ItemHeader({ className, ...props }) {
3236
+ return /* @__PURE__ */ jsx("div", {
3237
+ "data-slot": "item-header",
3238
+ className: cn("flex basis-full items-center justify-between gap-2", className),
3239
+ ...props
3240
+ });
3241
+ }
3242
+ function ItemFooter({ className, ...props }) {
3243
+ return /* @__PURE__ */ jsx("div", {
3244
+ "data-slot": "item-footer",
3245
+ className: cn("flex basis-full items-center justify-between gap-2", className),
3246
+ ...props
3247
+ });
3248
+ }
3249
+ //#endregion
3250
+ //#region src/components/micro/kbd.tsx
3251
+ /**
3252
+ * ✅ AUDITED & REFACTORED
3253
+ * - Design System Compliant (22 Commandments)
3254
+ * - WCAG AAA/AA
3255
+ * - Form Control Parity
3256
+ * - CSS Delegated Logic
3257
+ */
3258
+ /**
3259
+ * @description Displays a keyboard shortcut.
3260
+ * @example
3261
+ * <Kbd>⌘K</Kbd>
3262
+ */
3263
+ function Kbd({ className, ...props }) {
3264
+ return /* @__PURE__ */ jsx("kbd", {
3265
+ "data-slot": "kbd",
3266
+ className: cn("pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-sm bg-muted px-1 font-sans text-xs font-medium text-muted-foreground select-none in-data-[slot=tooltip-content]:bg-background/20 in-data-[slot=tooltip-content]:text-background dark:in-data-[slot=tooltip-content]:bg-background/10 [&>svg:not([class*='size-'])]:size-3", className),
3267
+ ...props
3268
+ });
3269
+ }
3270
+ function KbdGroup({ className, ...props }) {
3271
+ return /* @__PURE__ */ jsx("kbd", {
3272
+ "data-slot": "kbd-group",
3273
+ className: cn("inline-flex items-center gap-1", className),
3274
+ ...props
3275
+ });
3276
+ }
3277
+ //#endregion
3278
+ //#region src/components/micro/menubar.tsx
3279
+ /**
3280
+ * ✅ AUDITED & REFACTORED
3281
+ * - Design System Compliant (22 Commandments)
3282
+ * - WCAG AAA/AA
3283
+ * - Form Control Parity
3284
+ * - CSS Delegated Logic
3285
+ */
3286
+ /**
3287
+ * @description A visually persistent menu common in desktop applications.
3288
+ * @requires MenubarMenu, MenubarTrigger, MenubarContent, MenubarItem
3289
+ * @example
3290
+ * <Menubar>
3291
+ * <MenubarMenu>
3292
+ * <MenubarTrigger>File</MenubarTrigger>
3293
+ * <MenubarContent><MenubarItem>New</MenubarItem></MenubarContent>
3294
+ * </MenubarMenu>
3295
+ * </Menubar>
3296
+ */
3297
+ function Menubar({ className, ...props }) {
3298
+ return /* @__PURE__ */ jsx(Menubar$1, {
3299
+ "data-slot": "menubar",
3300
+ className: cn("flex h-8 items-center gap-0.5 rounded-lg border border-border p-[3px]", className),
3301
+ ...props
3302
+ });
3303
+ }
3304
+ function MenubarMenu({ ...props }) {
3305
+ return /* @__PURE__ */ jsx(DropdownMenu, {
3306
+ "data-slot": "menubar-menu",
3307
+ ...props
3308
+ });
3309
+ }
3310
+ function MenubarGroup({ ...props }) {
3311
+ return /* @__PURE__ */ jsx(DropdownMenuGroup, {
3312
+ "data-slot": "menubar-group",
3313
+ ...props
3314
+ });
3315
+ }
3316
+ function MenubarPortal({ ...props }) {
3317
+ return /* @__PURE__ */ jsx(DropdownMenuPortal, {
3318
+ "data-slot": "menubar-portal",
3319
+ ...props
3320
+ });
3321
+ }
3322
+ function MenubarTrigger({ className, ...props }) {
3323
+ return /* @__PURE__ */ jsx(DropdownMenuTrigger, {
3324
+ "data-slot": "menubar-trigger",
3325
+ className: cn("flex items-center rounded-sm px-1.5 py-[2px] text-sm font-medium outline-hidden select-none hover:bg-muted aria-expanded:bg-muted", className),
3326
+ ...props
3327
+ });
3328
+ }
3329
+ function MenubarContent({ className, align = "start", alignOffset = -4, sideOffset = 8, ...props }) {
3330
+ return /* @__PURE__ */ jsx(DropdownMenuContent, {
3331
+ "data-slot": "menubar-content",
3332
+ align,
3333
+ alignOffset,
3334
+ sideOffset,
3335
+ className: cn("min-w-36 rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 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-open:animate-in data-open:fade-in-0 data-open:zoom-in-95", className),
3336
+ ...props
3337
+ });
3338
+ }
3339
+ function MenubarItem({ className, inset, variant, ...props }) {
3340
+ return /* @__PURE__ */ jsx(DropdownMenuItem, {
3341
+ "data-slot": "menubar-item",
3342
+ "data-inset": inset,
3343
+ "data-variant": variant,
3344
+ className: cn("group/menubar-item gap-1.5 rounded-md px-1.5 py-1 text-sm focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:[&>svg]:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:opacity-50 [&>svg:not([class*='size-'])]:size-4 data-[variant=destructive]:[&>svg]:text-destructive", className),
3345
+ ...props
3346
+ });
3347
+ }
3348
+ function MenubarCheckboxItem({ className, children, checked, inset, ...props }) {
3349
+ return /* @__PURE__ */ jsxs(Menu.CheckboxItem, {
3350
+ "data-slot": "menubar-checkbox-item",
3351
+ "data-inset": inset,
3352
+ className: cn("relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-1.5 pl-7 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:[&>svg]:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&>svg]:pointer-events-none [&>svg]:shrink-0", className),
3353
+ checked,
3354
+ ...props,
3355
+ children: [/* @__PURE__ */ jsx("span", {
3356
+ className: "pointer-events-none absolute left-1.5 flex size-4 items-center justify-center [&_svg:not([class*='size-'])]:size-4",
3357
+ children: /* @__PURE__ */ jsx(Menu.CheckboxItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { "aria-hidden": "true" }) })
3358
+ }), children]
3359
+ });
3360
+ }
3361
+ function MenubarRadioGroup({ ...props }) {
3362
+ return /* @__PURE__ */ jsx(DropdownMenuRadioGroup, {
3363
+ "data-slot": "menubar-radio-group",
3364
+ ...props
3365
+ });
3366
+ }
3367
+ function MenubarRadioItem({ className, children, inset, ...props }) {
3368
+ return /* @__PURE__ */ jsxs(Menu.RadioItem, {
3369
+ "data-slot": "menubar-radio-item",
3370
+ "data-inset": inset,
3371
+ className: cn("relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-1.5 pl-7 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:[&>svg]:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&>svg]:pointer-events-none [&>svg]:shrink-0 [&>svg:not([class*='size-'])]:size-4", className),
3372
+ ...props,
3373
+ children: [/* @__PURE__ */ jsx("span", {
3374
+ className: "pointer-events-none absolute left-1.5 flex size-4 items-center justify-center [&_svg:not([class*='size-'])]:size-4",
3375
+ children: /* @__PURE__ */ jsx(Menu.RadioItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { "aria-hidden": "true" }) })
3376
+ }), children]
3377
+ });
3378
+ }
3379
+ function MenubarLabel({ className, inset, ...props }) {
3380
+ return /* @__PURE__ */ jsx(DropdownMenuLabel, {
3381
+ "data-slot": "menubar-label",
3382
+ "data-inset": inset,
3383
+ className: cn("px-1.5 py-1 text-sm font-medium data-inset:pl-7", className),
3384
+ ...props
3385
+ });
3386
+ }
3387
+ function MenubarSeparator({ className, ...props }) {
3388
+ return /* @__PURE__ */ jsx(DropdownMenuSeparator, {
3389
+ "data-slot": "menubar-separator",
3390
+ className: cn("-mx-1 my-1 h-px bg-border", className),
3391
+ ...props
3392
+ });
3393
+ }
3394
+ function MenubarShortcut({ className, ...props }) {
3395
+ return /* @__PURE__ */ jsx(DropdownMenuShortcut, {
3396
+ "data-slot": "menubar-shortcut",
3397
+ className: cn("ml-auto text-xs tracking-widest text-muted-foreground group-focus/menubar-item:text-accent-foreground", className),
3398
+ ...props
3399
+ });
3400
+ }
3401
+ function MenubarSub({ ...props }) {
3402
+ return /* @__PURE__ */ jsx(DropdownMenuSub, {
3403
+ "data-slot": "menubar-sub",
3404
+ ...props
3405
+ });
3406
+ }
3407
+ function MenubarSubTrigger({ className, inset, ...props }) {
3408
+ return /* @__PURE__ */ jsx(DropdownMenuSubTrigger, {
3409
+ "data-slot": "menubar-sub-trigger",
3410
+ "data-inset": inset,
3411
+ className: cn("gap-1.5 rounded-md px-1.5 py-1 text-sm focus:bg-accent focus:text-accent-foreground data-inset:pl-7 data-open:bg-accent data-open:text-accent-foreground [&_svg:not([class*='size-'])]:size-4", className),
3412
+ ...props
3413
+ });
3414
+ }
3415
+ function MenubarSubContent({ className, ...props }) {
3416
+ return /* @__PURE__ */ jsx(DropdownMenuSubContent, {
3417
+ "data-slot": "menubar-sub-content",
3418
+ className: cn("min-w-32 rounded-lg bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-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-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", className),
3419
+ ...props
3420
+ });
3421
+ }
3422
+ //#endregion
3423
+ //#region src/components/micro/navigation-menu.tsx
3424
+ /**
3425
+ * ✅ AUDITED & REFACTORED
3426
+ * - Design System Compliant (22 Commandments)
3427
+ * - WCAG AAA/AA
3428
+ * - Form Control Parity
3429
+ * - CSS Delegated Logic
3430
+ */
3431
+ /**
3432
+ * @description A collection of links for navigating websites.
3433
+ * @requires NavigationMenuList, NavigationMenuItem, NavigationMenuTrigger, NavigationMenuContent
3434
+ */
3435
+ var NavigationMenu = React.forwardRef(({ className, children, ...props }, ref) => {
3436
+ return /* @__PURE__ */ jsx(NavigationMenu$1.Root, {
3437
+ ref,
3438
+ "data-slot": "navigation-menu",
3439
+ className: cn("group/navigation-menu relative flex max-w-max flex-1 items-center justify-center", className),
3440
+ ...props,
3441
+ children
3442
+ });
3443
+ });
3444
+ NavigationMenu.displayName = "NavigationMenu";
3445
+ var NavigationMenuList = React.forwardRef(({ className, ...props }, ref) => {
3446
+ return /* @__PURE__ */ jsx(NavigationMenu$1.List, {
3447
+ ref,
3448
+ "data-slot": "navigation-menu-list",
3449
+ className: cn("group flex flex-1 list-none items-center justify-center gap-0", className),
3450
+ ...props
3451
+ });
3452
+ });
3453
+ NavigationMenuList.displayName = "NavigationMenuList";
3454
+ var NavigationMenuItem = React.forwardRef(({ className, ...props }, ref) => {
3455
+ return /* @__PURE__ */ jsx(NavigationMenu$1.Item, {
3456
+ ref,
3457
+ "data-slot": "navigation-menu-item",
3458
+ className: cn("relative", className),
3459
+ ...props
3460
+ });
3461
+ });
3462
+ NavigationMenuItem.displayName = "NavigationMenuItem";
3463
+ function navigationMenuTriggerStyle(className) {
3464
+ return cn("group/navigation-menu-trigger inline-flex h-9 w-max items-center justify-center rounded-lg px-2.5 py-1.5 text-sm font-medium transition-all outline-none hover:bg-muted focus:bg-muted focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted", className);
3465
+ }
3466
+ var NavigationMenuTrigger = React.forwardRef(({ className, children, ...props }, ref) => {
3467
+ return /* @__PURE__ */ jsxs(NavigationMenu$1.Trigger, {
3468
+ ref,
3469
+ "data-slot": "navigation-menu-trigger",
3470
+ className: cn(navigationMenuTriggerStyle("group"), className),
3471
+ ...props,
3472
+ children: [
3473
+ children,
3474
+ " ",
3475
+ /* @__PURE__ */ jsx(ChevronDownIcon, {
3476
+ className: "relative top-px ml-1 size-3 transition duration-300 group-data-popup-open/navigation-menu-trigger:rotate-180",
3477
+ "aria-hidden": "true"
3478
+ })
3479
+ ]
3480
+ });
3481
+ });
3482
+ NavigationMenuTrigger.displayName = "NavigationMenuTrigger";
3483
+ var NavigationMenuContent = React.forwardRef(({ className, ...props }, ref) => {
3484
+ return /* @__PURE__ */ jsx(NavigationMenu$1.Content, {
3485
+ ref,
3486
+ "data-slot": "navigation-menu-content",
3487
+ className: cn("data-ending-style:data-activation-direction=left:translate-x-[50%] data-ending-style:data-activation-direction=right:translate-x-[-50%] data-starting-style:data-activation-direction=left:translate-x-[-50%] data-starting-style:data-activation-direction=right:translate-x-[50%] h-full w-auto p-1 transition-[opacity,transform,translate] duration-[0.35s] ease-[cubic-bezier(0.22,1,0.36,1)] group-data-[viewport=false]/navigation-menu:rounded-lg group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:ring-1 group-data-[viewport=false]/navigation-menu:ring-foreground/10 group-data-[viewport=false]/navigation-menu:duration-300 data-ending-style:opacity-0 data-starting-style:opacity-0 data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 data-[motion^=from-]:animate-in data-[motion^=from-]:fade-in data-[motion^=to-]:animate-out data-[motion^=to-]:fade-out group-data-[viewport=false]/navigation-menu:data-open:animate-in group-data-[viewport=false]/navigation-menu:data-open:fade-in-0 group-data-[viewport=false]/navigation-menu:data-open:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-closed:animate-out group-data-[viewport=false]/navigation-menu:data-closed:fade-out-0 group-data-[viewport=false]/navigation-menu:data-closed:zoom-out-95", className),
3488
+ ...props
3489
+ });
3490
+ });
3491
+ NavigationMenuContent.displayName = "NavigationMenuContent";
3492
+ var NavigationMenuPositioner = React.forwardRef(({ className, side = "bottom", sideOffset = 8, align = "start", alignOffset = 0, ...props }, ref) => {
3493
+ return /* @__PURE__ */ jsx(NavigationMenu$1.Positioner, {
3494
+ ref,
3495
+ side,
3496
+ sideOffset,
3497
+ align,
3498
+ alignOffset,
3499
+ className: cn("isolate z-50 h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) transition-[top,left,right,bottom] duration-[0.35s] ease-[cubic-bezier(0.22,1,0.36,1)] data-instant:transition-none data-[side=bottom]:before:top-[-10px] data-[side=bottom]:before:right-0 data-[side=bottom]:before:left-0", className),
3500
+ ...props,
3501
+ children: /* @__PURE__ */ jsx(NavigationMenu$1.Popup, {
3502
+ className: "data-ending-style:easing-[ease] xs:w-(--popup-width) relative h-(--popup-height) w-(--popup-width) origin-(--transform-origin) rounded-lg bg-popover text-popover-foreground shadow ring-1 ring-foreground/10 transition-[opacity,transform,width,height,scale,translate] duration-[0.35s] ease-[cubic-bezier(0.22,1,0.36,1)] outline-none data-ending-style:scale-90 data-ending-style:opacity-0 data-ending-style:duration-150 data-starting-style:scale-90 data-starting-style:opacity-0",
3503
+ children: /* @__PURE__ */ jsx(NavigationMenuViewport, {})
3504
+ })
3505
+ });
3506
+ });
3507
+ NavigationMenuPositioner.displayName = "NavigationMenuPositioner";
3508
+ var NavigationMenuViewport = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(NavigationMenu$1.Viewport, {
3509
+ ref,
3510
+ className: cn("relative size-full overflow-hidden", className),
3511
+ ...props
3512
+ }));
3513
+ NavigationMenuViewport.displayName = "NavigationMenuViewport";
3514
+ var NavigationMenuLink = React.forwardRef(({ className, ...props }, ref) => {
3515
+ return /* @__PURE__ */ jsx(NavigationMenu$1.Link, {
3516
+ ref,
3517
+ "data-slot": "navigation-menu-link",
3518
+ className: cn("flex items-center gap-2 rounded-lg p-2 text-sm transition-all outline-none hover:bg-muted focus:bg-muted focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:ring-offset-1 focus-visible:ring-offset-background in-data-[slot=navigation-menu-content]:rounded-md in-data-[slot=navigation-menu-content]:focus:ring-0 in-data-[slot=navigation-menu-content]:focus:outline-none data-active:bg-muted/50 data-active:hover:bg-muted data-active:focus:bg-muted [&>svg:not([class*='size-'])]:size-4", className),
3519
+ ...props
3520
+ });
3521
+ });
3522
+ NavigationMenuLink.displayName = "NavigationMenuLink";
3523
+ var NavigationMenuPortal = NavigationMenu$1.Portal;
3524
+ //#endregion
3525
+ //#region src/components/micro/pagination.tsx
3526
+ var ellipsisSizeMap = {
3527
+ sm: {
3528
+ container: "size-7",
3529
+ icon: "[&>svg:not([class*='size-'])]:size-3"
3530
+ },
3531
+ md: {
3532
+ container: "size-9",
3533
+ icon: "[&>svg:not([class*='size-'])]:size-4"
3534
+ },
3535
+ lg: {
3536
+ container: "size-11",
3537
+ icon: "[&>svg:not([class*='size-'])]:size-5"
3538
+ }
3539
+ };
3540
+ /**
3541
+ * @description Pagination with page navigation, next and previous links.
3542
+ * @requires PaginationContent, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious
3543
+ */
3544
+ function Pagination({ className, ...props }) {
3545
+ return /* @__PURE__ */ jsx("nav", {
3546
+ role: "navigation",
3547
+ "aria-label": "pagination",
3548
+ "data-slot": "pagination",
3549
+ className: cn("group/pagination mx-auto flex w-full justify-center", className),
3550
+ ...props
3551
+ });
3552
+ }
3553
+ function PaginationContent({ className, ...props }) {
3554
+ return /* @__PURE__ */ jsx("ul", {
3555
+ "data-slot": "pagination-content",
3556
+ className: cn("flex items-center gap-0.5", className),
3557
+ ...props
3558
+ });
3559
+ }
3560
+ function PaginationItem({ ...props }) {
3561
+ return /* @__PURE__ */ jsx("li", {
3562
+ "data-slot": "pagination-item",
3563
+ ...props
3564
+ });
3565
+ }
3566
+ function PaginationLink({ className, isActive, size = "md", ...props }) {
3567
+ return /* @__PURE__ */ jsx(Button, {
3568
+ variant: isActive ? "outline" : "ghost",
3569
+ size,
3570
+ className,
3571
+ nativeButton: false,
3572
+ render: /* @__PURE__ */ jsx("a", {
3573
+ "aria-current": isActive ? "page" : void 0,
3574
+ "data-slot": "pagination-link",
3575
+ "data-active": isActive ? "" : void 0,
3576
+ ...props
3577
+ })
3578
+ });
3579
+ }
3580
+ function PaginationPrevious({ className, text = "Previous", size = "md", ...props }) {
3581
+ return /* @__PURE__ */ jsxs(PaginationLink, {
3582
+ "aria-label": "Go to previous page",
3583
+ size,
3584
+ className: cn("pl-2.5", className),
3585
+ ...props,
3586
+ children: [/* @__PURE__ */ jsx(ChevronLeftIcon, {
3587
+ "aria-hidden": "true",
3588
+ "data-icon": "inline-start"
3589
+ }), /* @__PURE__ */ jsx("span", {
3590
+ className: "hidden sm:block",
3591
+ children: text
3592
+ })]
3593
+ });
3594
+ }
3595
+ function PaginationNext({ className, text = "Next", size = "md", ...props }) {
3596
+ return /* @__PURE__ */ jsxs(PaginationLink, {
3597
+ "aria-label": "Go to next page",
3598
+ size,
3599
+ className: cn("pr-2.5", className),
3600
+ ...props,
3601
+ children: [/* @__PURE__ */ jsx("span", {
3602
+ className: "hidden sm:block",
3603
+ children: text
3604
+ }), /* @__PURE__ */ jsx(ChevronRightIcon, {
3605
+ "aria-hidden": "true",
3606
+ "data-icon": "inline-end"
3607
+ })]
3608
+ });
3609
+ }
3610
+ function PaginationEllipsis({ className, size = "md", ...props }) {
3611
+ const { container, icon } = ellipsisSizeMap[size];
3612
+ return /* @__PURE__ */ jsxs("span", {
3613
+ "aria-hidden": true,
3614
+ "data-slot": "pagination-ellipsis",
3615
+ className: cn("flex items-center justify-center", container, icon, className),
3616
+ ...props,
3617
+ children: [/* @__PURE__ */ jsx(MoreHorizontalIcon, { "aria-hidden": "true" }), /* @__PURE__ */ jsx("span", {
3618
+ className: "sr-only",
3619
+ children: "More pages"
3620
+ })]
3621
+ });
3622
+ }
3623
+ //#endregion
3624
+ //#region src/components/micro/popover.tsx
3625
+ /**
3626
+ * ✅ AUDITED & REFACTORED
3627
+ * - Design System Compliant (22 Commandments)
3628
+ * - WCAG AAA/AA
3629
+ * - Form Control Parity
3630
+ * - CSS Delegated Logic
3631
+ * - No Hardcoded Dimensions
3632
+ */
3633
+ function Popover(props) {
3634
+ return /* @__PURE__ */ jsx(Popover$1.Root, { ...props });
3635
+ }
3636
+ var PopoverTrigger = React.forwardRef((props, ref) => {
3637
+ return /* @__PURE__ */ jsx(Popover$1.Trigger, {
3638
+ ref,
3639
+ "data-slot": "popover-trigger",
3640
+ ...props
3641
+ });
3642
+ });
3643
+ PopoverTrigger.displayName = "PopoverTrigger";
3644
+ var PopoverPortal = Popover$1.Portal;
3645
+ var PopoverContent = React.forwardRef(({ className, align = "center", alignOffset = 0, side = "bottom", sideOffset = 4, ...props }, ref) => {
3646
+ return /* @__PURE__ */ jsx(Popover$1.Positioner, {
3647
+ align,
3648
+ alignOffset,
3649
+ side,
3650
+ sideOffset,
3651
+ className: "isolate z-50",
3652
+ children: /* @__PURE__ */ jsx(Popover$1.Popup, {
3653
+ ref,
3654
+ "data-slot": "popover-content",
3655
+ className: cn("flex origin-(--transform-origin) flex-col gap-2.5 rounded-lg bg-popover p-2.5 text-sm text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden duration-100 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-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", className),
3656
+ ...props
3657
+ })
3658
+ });
3659
+ });
3660
+ PopoverContent.displayName = "PopoverContent";
3661
+ var PopoverHeader = React.forwardRef(({ className, ...props }, ref) => {
3662
+ return /* @__PURE__ */ jsx("div", {
3663
+ ref,
3664
+ "data-slot": "popover-header",
3665
+ className: cn("flex flex-col gap-0.5 text-sm", className),
3666
+ ...props
3667
+ });
3668
+ });
3669
+ PopoverHeader.displayName = "PopoverHeader";
3670
+ var PopoverTitle = React.forwardRef(({ className, ...props }, ref) => {
3671
+ return /* @__PURE__ */ jsx(Popover$1.Title, {
3672
+ ref,
3673
+ "data-slot": "popover-title",
3674
+ className: cn("font-medium", className),
3675
+ ...props
3676
+ });
3677
+ });
3678
+ PopoverTitle.displayName = "PopoverTitle";
3679
+ var PopoverDescription = React.forwardRef(({ className, ...props }, ref) => {
3680
+ return /* @__PURE__ */ jsx(Popover$1.Description, {
3681
+ ref,
3682
+ "data-slot": "popover-description",
3683
+ className: cn("text-muted-foreground", className),
3684
+ ...props
3685
+ });
3686
+ });
3687
+ PopoverDescription.displayName = "PopoverDescription";
3688
+ //#endregion
3689
+ //#region src/components/micro/progress.tsx
3690
+ /**
3691
+ * ✅ AUDITED & REFACTORED
3692
+ * - Design System Compliant (22 Commandments)
3693
+ * - WCAG AAA/AA
3694
+ * - Form Control Parity
3695
+ * - CSS Delegated Logic
3696
+ */
3697
+ var ProgressContext = React.createContext({
3698
+ size: "md",
3699
+ color: "primary"
3700
+ });
3701
+ /**
3702
+ * @description Displays an indicator showing the completion progress of a task.
3703
+ * @example
3704
+ * <Progress value={33} />
3705
+ */
3706
+ function Progress({ className, children, size = "md", color = "primary", ...props }) {
3707
+ return /* @__PURE__ */ jsx(ProgressContext.Provider, {
3708
+ value: {
3709
+ size,
3710
+ color
3711
+ },
3712
+ children: /* @__PURE__ */ jsx(Progress$1.Root, {
3713
+ "data-slot": "progress",
3714
+ className: cn("flex flex-wrap gap-x-3 gap-y-1.5", className),
3715
+ ...props,
3716
+ children
3717
+ })
3718
+ });
3719
+ }
3720
+ function ProgressTrack({ className, ...props }) {
3721
+ const { size } = React.useContext(ProgressContext);
3722
+ return /* @__PURE__ */ jsx(Progress$1.Track, {
3723
+ className: cn("relative flex w-full items-center overflow-x-hidden rounded-full bg-muted", size ? {
3724
+ sm: "h-1",
3725
+ md: "h-1.5",
3726
+ lg: "h-2"
3727
+ }[size] : "", className),
3728
+ "data-slot": "progress-track",
3729
+ ...props
3730
+ });
3731
+ }
3732
+ function ProgressIndicator({ className, ...props }) {
3733
+ const { color } = React.useContext(ProgressContext);
3734
+ return /* @__PURE__ */ jsx(Progress$1.Indicator, {
3735
+ "data-slot": "progress-indicator",
3736
+ className: cn("h-full transition-all", {
3737
+ primary: "bg-primary",
3738
+ secondary: "bg-secondary",
3739
+ destructive: "bg-destructive",
3740
+ success: "bg-success",
3741
+ warning: "bg-warning",
3742
+ info: "bg-info",
3743
+ tertiary: "bg-tertiary",
3744
+ muted: "bg-muted",
3745
+ accent: "bg-accent"
3746
+ }[color], className),
3747
+ ...props
3748
+ });
3749
+ }
3750
+ function ProgressLabel({ className, ...props }) {
3751
+ const { size } = React.useContext(ProgressContext);
3752
+ return /* @__PURE__ */ jsx(Progress$1.Label, {
3753
+ className: cn({
3754
+ sm: "text-xs",
3755
+ md: "text-sm",
3756
+ lg: "text-base"
3757
+ }[size], "font-medium", className),
3758
+ "data-slot": "progress-label",
3759
+ ...props
3760
+ });
3761
+ }
3762
+ function ProgressValue({ className, ...props }) {
3763
+ const { size } = React.useContext(ProgressContext);
3764
+ return /* @__PURE__ */ jsx(Progress$1.Value, {
3765
+ className: cn("ml-auto text-muted-foreground tabular-nums", {
3766
+ sm: "text-xs",
3767
+ md: "text-sm",
3768
+ lg: "text-base"
3769
+ }[size], className),
3770
+ "data-slot": "progress-value",
3771
+ ...props
3772
+ });
3773
+ }
3774
+ //#endregion
3775
+ //#region src/components/micro/radio-group.tsx
3776
+ /**
3777
+ * ✅ AUDITED & REFACTORED
3778
+ * - Design System Compliant (22 Commandments)
3779
+ * - WCAG AAA/AA
3780
+ * - Form Control Parity
3781
+ * - CSS Delegated Logic
3782
+ */
3783
+ var RadioGroup = React.forwardRef(function RadioGroup({ className, ...props }, ref) {
3784
+ return /* @__PURE__ */ jsx(RadioGroup$1, {
3785
+ ref,
3786
+ "data-slot": "radio-group",
3787
+ className: cn("grid gap-2", className),
3788
+ ...props
3789
+ });
3790
+ });
3791
+ RadioGroup.displayName = "RadioGroup";
3792
+ var radioGroupItemVariants = cva("group/radio peer relative flex aspect-square shrink-0 rounded-full border border-input after:absolute after:content-[''] outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:focus-visible:border-destructive aria-invalid:focus-visible:ring-3 aria-invalid:focus-visible:ring-destructive/50 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:focus-visible:ring-destructive/50 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary", { variants: { size: {
3793
+ sm: "size-3.5 after:-inset-x-2.5 after:-inset-y-2.5",
3794
+ md: "size-4 after:-inset-x-3 after:-inset-y-2",
3795
+ lg: "size-5 after:-inset-x-4 after:-inset-y-3"
3796
+ } } });
3797
+ var RadioGroupItem = React.forwardRef(function RadioGroupItem({ className, size = "md", ...props }, ref) {
3798
+ return /* @__PURE__ */ jsx(Radio.Root, {
3799
+ ref,
3800
+ "data-slot": "radio-group-item",
3801
+ "data-size": size,
3802
+ className: cn(radioGroupItemVariants({
3803
+ size,
3804
+ className
3805
+ })),
3806
+ ...props,
3807
+ children: /* @__PURE__ */ jsx(Radio.Indicator, {
3808
+ "data-slot": "radio-group-indicator",
3809
+ className: "flex items-center justify-center size-4 group-data-[size=sm]/radio:size-3.5 group-data-[size=lg]/radio:size-5",
3810
+ children: /* @__PURE__ */ jsx("span", { className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary-foreground size-2 group-data-[size=sm]/radio:size-1.5 group-data-[size=lg]/radio:size-2.5" })
3811
+ })
3812
+ });
3813
+ });
3814
+ RadioGroupItem.displayName = "RadioGroupItem";
3815
+ //#endregion
3816
+ //#region src/components/micro/resizable.tsx
3817
+ /**
3818
+ * ✅ AUDITED & REFACTORED
3819
+ * - Design System Compliant (22 Commandments)
3820
+ * - WCAG AAA/AA
3821
+ * - Form Control Parity
3822
+ * - CSS Delegated Logic
3823
+ */
3824
+ /**
3825
+ * @description Accessible resizable panel groups and layouts.
3826
+ * @requires ResizablePanel, ResizableHandle
3827
+ */
3828
+ function ResizablePanelGroup({ className, ...props }) {
3829
+ return /* @__PURE__ */ jsx(ResizablePrimitive.Group, {
3830
+ "data-slot": "resizable-panel-group",
3831
+ className: cn("flex h-full w-full aria-[orientation=vertical]:flex-col", className),
3832
+ ...props
3833
+ });
3834
+ }
3835
+ function ResizablePanel({ ...props }) {
3836
+ return /* @__PURE__ */ jsx(ResizablePrimitive.Panel, {
3837
+ "data-slot": "resizable-panel",
3838
+ ...props
3839
+ });
3840
+ }
3841
+ function ResizableHandle({ withHandle, className, ...props }) {
3842
+ return /* @__PURE__ */ jsx(ResizablePrimitive.Separator, {
3843
+ "data-slot": "resizable-handle",
3844
+ className: cn("relative flex w-px items-center justify-center bg-border ring-offset-background after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-ring focus-visible:outline-hidden aria-[orientation=horizontal]:h-px aria-[orientation=horizontal]:w-full aria-[orientation=horizontal]:after:left-0 aria-[orientation=horizontal]:after:h-1 aria-[orientation=horizontal]:after:w-full aria-[orientation=horizontal]:after:translate-x-0 aria-[orientation=horizontal]:after:-translate-y-1/2 [&[aria-orientation=horizontal]_[data-slot=resizable-handle-bar]]:rotate-90", className),
3845
+ ...props,
3846
+ children: withHandle && /* @__PURE__ */ jsx("div", {
3847
+ "data-slot": "resizable-handle-bar",
3848
+ className: "z-10 flex h-6 w-1 shrink-0 rounded-lg bg-border"
3849
+ })
3850
+ });
3851
+ }
3852
+ //#endregion
3853
+ //#region src/components/micro/scroll-area.tsx
3854
+ /**
3855
+ * ✅ AUDITED & REFACTORED
3856
+ * - Design System Compliant (22 Commandments)
3857
+ * - WCAG AAA/AA
3858
+ * - Form Control Parity
3859
+ * - CSS Delegated Logic
3860
+ */
3861
+ /**
3862
+ * @description Augments native scroll functionality for custom, cross-browser styling.
3863
+ * @example
3864
+ * <ScrollArea className="h-[200px] w-[350px]">
3865
+ * Jokester began sneaking into the castle in the middle of the night.
3866
+ * </ScrollArea>
3867
+ */
3868
+ function ScrollArea({ className, children, ...props }) {
3869
+ return /* @__PURE__ */ jsxs(ScrollArea$1.Root, {
3870
+ "data-slot": "scroll-area",
3871
+ className: cn("relative", className),
3872
+ ...props,
3873
+ children: [
3874
+ /* @__PURE__ */ jsx(ScrollArea$1.Viewport, {
3875
+ "data-slot": "scroll-area-viewport",
3876
+ className: "size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:ring-offset-1 focus-visible:ring-offset-background",
3877
+ children
3878
+ }),
3879
+ /* @__PURE__ */ jsx(ScrollBar, {}),
3880
+ /* @__PURE__ */ jsx(ScrollArea$1.Corner, {})
3881
+ ]
3882
+ });
3883
+ }
3884
+ function ScrollBar({ className, orientation = "vertical", ...props }) {
3885
+ return /* @__PURE__ */ jsx(ScrollArea$1.Scrollbar, {
3886
+ "data-slot": "scroll-area-scrollbar",
3887
+ "data-orientation": orientation,
3888
+ orientation,
3889
+ className: cn("flex touch-none p-px transition-colors select-none data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-border data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-border data-vertical:border-l-transparent", className),
3890
+ ...props,
3891
+ children: /* @__PURE__ */ jsx(ScrollArea$1.Thumb, {
3892
+ "data-slot": "scroll-area-thumb",
3893
+ className: "relative flex-1 rounded-full bg-border"
3894
+ })
3895
+ });
3896
+ }
3897
+ //#endregion
3898
+ //#region src/components/micro/sheet.tsx
3899
+ /**
3900
+ * ✅ AUDITED & REFACTORED
3901
+ * - Design System Compliant (22 Commandments)
3902
+ * - WCAG AAA/AA
3903
+ * - Form Control Parity
3904
+ * - CSS Delegated Logic
3905
+ */
3906
+ function Sheet({ ...props }) {
3907
+ return /* @__PURE__ */ jsx(Dialog$1.Root, {
3908
+ "data-slot": "sheet",
3909
+ ...props
3910
+ });
3911
+ }
3912
+ function SheetTrigger({ ...props }) {
3913
+ return /* @__PURE__ */ jsx(Dialog$1.Trigger, {
3914
+ "data-slot": "sheet-trigger",
3915
+ ...props
3916
+ });
3917
+ }
3918
+ function SheetClose({ ...props }) {
3919
+ return /* @__PURE__ */ jsx(Dialog$1.Close, {
3920
+ "data-slot": "sheet-close",
3921
+ ...props
3922
+ });
3923
+ }
3924
+ var SheetPortal = Dialog$1.Portal;
3925
+ function SheetOverlay({ className, ...props }) {
3926
+ return /* @__PURE__ */ jsx(Dialog$1.Backdrop, {
3927
+ "data-slot": "sheet-overlay",
3928
+ className: cn("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 motion-reduce:transition-none", className),
3929
+ ...props
3930
+ });
3931
+ }
3932
+ function SheetContent({ className, children, side = "right", showCloseButton = true, ...props }) {
3933
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(SheetOverlay, {}), /* @__PURE__ */ jsxs(Dialog$1.Popup, {
3934
+ "data-slot": "sheet-content",
3935
+ "data-side": side,
3936
+ className: cn("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 motion-reduce:transition-none", className),
3937
+ ...props,
3938
+ children: [children, showCloseButton && /* @__PURE__ */ jsxs(Dialog$1.Close, {
3939
+ "data-slot": "sheet-close",
3940
+ render: /* @__PURE__ */ jsx(Button, {
3941
+ variant: "ghost",
3942
+ className: "absolute top-4 right-4",
3943
+ size: "sm"
3944
+ }),
3945
+ children: [/* @__PURE__ */ jsx(XIcon, { "aria-hidden": "true" }), /* @__PURE__ */ jsx("span", {
3946
+ className: "sr-only",
3947
+ children: "Close"
3948
+ })]
3949
+ })]
3950
+ })] });
3951
+ }
3952
+ function SheetHeader({ className, ...props }) {
3953
+ return /* @__PURE__ */ jsx("div", {
3954
+ "data-slot": "sheet-header",
3955
+ className: cn("flex flex-col gap-0.5 p-4", className),
3956
+ ...props
3957
+ });
3958
+ }
3959
+ function SheetFooter({ className, ...props }) {
3960
+ return /* @__PURE__ */ jsx("div", {
3961
+ "data-slot": "sheet-footer",
3962
+ className: cn("mt-auto flex flex-col gap-2 p-4", className),
3963
+ ...props
3964
+ });
3965
+ }
3966
+ function SheetTitle({ className, ...props }) {
3967
+ return /* @__PURE__ */ jsx(Dialog$1.Title, {
3968
+ "data-slot": "sheet-title",
3969
+ className: cn("font-heading text-base font-medium text-foreground", className),
3970
+ ...props
3971
+ });
3972
+ }
3973
+ function SheetDescription({ className, ...props }) {
3974
+ return /* @__PURE__ */ jsx(Dialog$1.Description, {
3975
+ "data-slot": "sheet-description",
3976
+ className: cn("text-sm text-muted-foreground", className),
3977
+ ...props
3978
+ });
3979
+ }
3980
+ //#endregion
3981
+ //#region src/components/micro/sidebar.tsx
3982
+ var Sidebar = React.forwardRef(({ className, defaultState = "expanded", expandedWidth = 256, collapsedWidth = 72, ...props }, ref) => {
3983
+ const handleTransitionStart = (e) => {
3984
+ if (e.propertyName === "width") e.currentTarget.style.willChange = "width";
3985
+ };
3986
+ const handleTransitionEnd = (e) => {
3987
+ if (e.propertyName === "width") e.currentTarget.style.willChange = "auto";
3988
+ };
3989
+ return /* @__PURE__ */ jsx("div", {
3990
+ ref,
3991
+ role: "navigation",
3992
+ "aria-expanded": defaultState === "expanded",
3993
+ style: {
3994
+ "--sb-expanded": `${expandedWidth}px`,
3995
+ "--sb-collapsed": `${collapsedWidth}px`
3996
+ },
3997
+ className: cn("group shrink-0 h-full overflow-hidden border-r border-r-border bg-sidebar text-sidebar-foreground", "transition-[width,border-width] duration-[400ms]", "data-[state=expanded]:w-[var(--sb-expanded)]", "data-[state=collapsed]:w-[var(--sb-collapsed)]", collapsedWidth === 0 && "data-[state=collapsed]:border-r-0", className),
3998
+ "data-state": defaultState,
3999
+ onTransitionStart: handleTransitionStart,
4000
+ onTransitionEnd: handleTransitionEnd,
4001
+ children: /* @__PURE__ */ jsx("div", {
4002
+ className: "flex h-full flex-col p-2",
4003
+ style: { width: `${expandedWidth}px` },
4004
+ ...props
4005
+ })
4006
+ });
4007
+ });
4008
+ Sidebar.displayName = "Sidebar";
4009
+ var SidebarLogo = React.forwardRef(({ className, icon, text, ...props }, ref) => {
4010
+ return /* @__PURE__ */ jsxs("div", {
4011
+ ref,
4012
+ className: cn("flex h-12 items-center overflow-hidden text-sidebar-foreground", className),
4013
+ ...props,
4014
+ children: [/* @__PURE__ */ jsx("div", {
4015
+ className: "flex shrink-0 items-center justify-center",
4016
+ style: { width: "calc(var(--sb-collapsed) - 16px)" },
4017
+ children: icon
4018
+ }), /* @__PURE__ */ jsx("span", {
4019
+ className: "whitespace-nowrap font-semibold transition-opacity group-data-[state=collapsed]:opacity-0 group-data-[state=collapsed]:duration-[80ms] group-data-[state=expanded]:duration-[200ms] group-data-[state=expanded]:delay-[300ms]",
4020
+ children: text
4021
+ })]
4022
+ });
4023
+ });
4024
+ SidebarLogo.displayName = "SidebarLogo";
4025
+ var SidebarLabel = React.forwardRef(({ className, icon, text, ...props }, ref) => {
4026
+ return /* @__PURE__ */ jsxs("div", {
4027
+ ref,
4028
+ className: cn("flex h-10 items-center overflow-hidden text-sm text-sidebar-foreground", "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground cursor-pointer rounded-md", className),
4029
+ ...props,
4030
+ children: [/* @__PURE__ */ jsx("div", {
4031
+ className: "flex shrink-0 items-center justify-center [&>svg]:size-4",
4032
+ style: { width: "calc(var(--sb-collapsed) - 16px)" },
4033
+ children: icon
4034
+ }), /* @__PURE__ */ jsx("span", {
4035
+ className: "whitespace-nowrap transition-opacity group-data-[state=collapsed]:opacity-0 group-data-[state=collapsed]:duration-[80ms] group-data-[state=expanded]:duration-[200ms] group-data-[state=expanded]:delay-[300ms]",
4036
+ children: text
4037
+ })]
4038
+ });
4039
+ });
4040
+ SidebarLabel.displayName = "SidebarLabel";
4041
+ var SidebarMenuItemList = React.forwardRef(({ className, ...props }, ref) => {
4042
+ return /* @__PURE__ */ jsx("div", {
4043
+ ref,
4044
+ className: cn("flex flex-col gap-1", className),
4045
+ ...props
4046
+ });
4047
+ });
4048
+ SidebarMenuItemList.displayName = "SidebarMenuItemList";
4049
+ var SidebarMenuItem = React.forwardRef(({ className, text, ...props }, ref) => {
4050
+ return /* @__PURE__ */ jsx("div", {
4051
+ ref,
4052
+ className: cn("flex h-8 items-center pr-4 text-sm text-sidebar-foreground/70", "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground cursor-pointer rounded-md", className),
4053
+ style: { paddingLeft: "calc(var(--sb-collapsed) - 16px)" },
4054
+ ...props,
4055
+ children: /* @__PURE__ */ jsx("span", {
4056
+ className: "whitespace-nowrap transition-opacity group-data-[state=collapsed]:opacity-0 group-data-[state=collapsed]:duration-[80ms] group-data-[state=expanded]:duration-[200ms] group-data-[state=expanded]:delay-[300ms]",
4057
+ children: text
4058
+ })
4059
+ });
4060
+ });
4061
+ SidebarMenuItem.displayName = "SidebarMenuItem";
4062
+ function useSidebarToggle(initialState = "expanded", onStateChange) {
4063
+ const sidebarRef = React.useRef(null);
4064
+ const onStateChangeRef = React.useRef(onStateChange);
4065
+ React.useEffect(() => {
4066
+ onStateChangeRef.current = onStateChange;
4067
+ }, [onStateChange]);
4068
+ const setSidebarState = React.useCallback((state) => {
4069
+ if (sidebarRef.current) {
4070
+ sidebarRef.current.setAttribute("data-state", state);
4071
+ sidebarRef.current.setAttribute("aria-expanded", String(state === "expanded"));
4072
+ onStateChangeRef.current?.(state);
4073
+ }
4074
+ }, []);
4075
+ return {
4076
+ sidebarRef,
4077
+ toggleSidebar: React.useCallback(() => {
4078
+ if (sidebarRef.current) {
4079
+ const current = sidebarRef.current.getAttribute("data-state");
4080
+ setSidebarState(current === "expanded" ? "collapsed" : "expanded");
4081
+ }
4082
+ }, [setSidebarState]),
4083
+ setSidebarState,
4084
+ defaultState: initialState
4085
+ };
4086
+ }
4087
+ //#endregion
4088
+ //#region src/components/micro/skeleton.tsx
4089
+ /**
4090
+ * ✅ AUDITED & REFACTORED
4091
+ * - Design System Compliant (22 Commandments)
4092
+ * - WCAG AAA/AA
4093
+ * - Form Control Parity
4094
+ * - CSS Delegated Logic
4095
+ */
4096
+ /**
4097
+ * @description Use to show a placeholder while content is loading.
4098
+ * @example
4099
+ * <Skeleton className="w-[100px] h-[20px] rounded-full" />
4100
+ */
4101
+ var Skeleton = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", {
4102
+ ref,
4103
+ "data-slot": "skeleton",
4104
+ className: cn("animate-pulse rounded-lg bg-muted", className),
4105
+ ...props
4106
+ }));
4107
+ Skeleton.displayName = "Skeleton";
4108
+ //#endregion
4109
+ //#region src/components/micro/slider.tsx
4110
+ /**
4111
+ * ✅ AUDITED & REFACTORED
4112
+ * - Design System Compliant (22 Commandments)
4113
+ * - WCAG AAA/AA
4114
+ * - Form Control Parity
4115
+ * - CSS Delegated Logic
4116
+ */
4117
+ var sliderVariants = cva("peer group/slider data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full");
4118
+ var trackVariants = cva("relative grow overflow-hidden rounded-full bg-muted select-none data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full", { variants: { size: {
4119
+ sm: "data-[orientation=horizontal]:h-1 data-[orientation=vertical]:w-1",
4120
+ md: "data-[orientation=horizontal]:h-1.5 data-[orientation=vertical]:w-1.5",
4121
+ lg: "data-[orientation=horizontal]:h-2 data-[orientation=vertical]:w-2"
4122
+ } } });
4123
+ var thumbVariants = cva("relative block shrink-0 rounded-full border border-ring bg-background ring-ring/50 transition-[color,box-shadow] select-none after:absolute after:-inset-2 focus-visible:ring-3 focus-visible:ring-offset-1 focus-visible:ring-offset-background has-[:focus-visible]:ring-3 has-[:focus-visible]:ring-offset-1 has-[:focus-visible]:ring-offset-background focus-visible:outline-none has-[:focus-visible]:outline-none disabled:pointer-events-none group-aria-invalid/slider:border-destructive group-aria-invalid/slider:focus-visible:border-destructive group-aria-invalid/slider:has-[:focus-visible]:border-destructive group-aria-invalid/slider:focus-visible:ring-destructive/50 group-aria-invalid/slider:has-[:focus-visible]:ring-destructive/50 dark:group-aria-invalid/slider:focus-visible:ring-destructive/50 dark:group-aria-invalid/slider:has-[:focus-visible]:ring-destructive/50", { variants: { size: {
4124
+ sm: "size-3",
4125
+ md: "size-4",
4126
+ lg: "size-5"
4127
+ } } });
4128
+ var SliderContext = React.createContext({ size: "md" });
4129
+ var Slider = React.forwardRef(function Slider({ className, size = "md", ...props }, ref) {
4130
+ return /* @__PURE__ */ jsx(SliderContext.Provider, {
4131
+ value: { size },
4132
+ children: /* @__PURE__ */ jsx(Slider$1.Root, {
4133
+ ref,
4134
+ className: cn(sliderVariants({ className })),
4135
+ "data-slot": "slider",
4136
+ thumbAlignment: "edge",
4137
+ ...props
4138
+ })
4139
+ });
4140
+ });
4141
+ Slider.displayName = "Slider";
4142
+ var SliderControl = React.forwardRef(function SliderControl({ className, ...props }, ref) {
4143
+ return /* @__PURE__ */ jsx(Slider$1.Control, {
4144
+ ref,
4145
+ "data-slot": "slider-control",
4146
+ className: cn("relative flex w-full touch-none items-center select-none data-disabled:opacity-50 data-disabled:cursor-not-allowed data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-40 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col", className),
4147
+ ...props
4148
+ });
4149
+ });
4150
+ SliderControl.displayName = "SliderControl";
4151
+ var SliderTrack = React.forwardRef(function SliderTrack({ className, ...props }, ref) {
4152
+ const { size } = React.useContext(SliderContext);
4153
+ return /* @__PURE__ */ jsx(Slider$1.Track, {
4154
+ ref,
4155
+ "data-slot": "slider-track",
4156
+ className: cn(trackVariants({ size }), className),
4157
+ ...props
4158
+ });
4159
+ });
4160
+ SliderTrack.displayName = "SliderTrack";
4161
+ var SliderIndicator = React.forwardRef(function SliderIndicator({ className, ...props }, ref) {
4162
+ return /* @__PURE__ */ jsx(Slider$1.Indicator, {
4163
+ ref,
4164
+ "data-slot": "slider-indicator",
4165
+ className: cn("group-aria-invalid/slider:bg-destructive bg-primary select-none data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full", className),
4166
+ ...props
4167
+ });
4168
+ });
4169
+ SliderIndicator.displayName = "SliderIndicator";
4170
+ var SliderThumb = React.forwardRef(function SliderThumb({ className, ...props }, ref) {
4171
+ const { size } = React.useContext(SliderContext);
4172
+ return /* @__PURE__ */ jsx(Slider$1.Thumb, {
4173
+ ref,
4174
+ "data-slot": "slider-thumb",
4175
+ className: cn(thumbVariants({ size }), className),
4176
+ ...props
4177
+ });
4178
+ });
4179
+ SliderThumb.displayName = "SliderThumb";
4180
+ //#endregion
4181
+ //#region src/components/micro/spinner.tsx
4182
+ var spinnerVariants = cva("animate-spin motion-reduce:animate-none", { variants: { size: {
4183
+ sm: "size-3.5",
4184
+ md: "size-4",
4185
+ lg: "size-5"
4186
+ } } });
4187
+ /**
4188
+ * @description A loading indicator component.
4189
+ * @example
4190
+ * <Spinner size="md" />
4191
+ */
4192
+ function Spinner({ className, size = "md", ...props }) {
4193
+ return /* @__PURE__ */ jsx(Loader2Icon, {
4194
+ "data-slot": "spinner",
4195
+ role: "status",
4196
+ "aria-label": "Loading",
4197
+ className: spinnerVariants({
4198
+ size,
4199
+ className
4200
+ }),
4201
+ ...props
4202
+ });
4203
+ }
4204
+ //#endregion
4205
+ //#region src/components/micro/theme-provider.tsx
4206
+ /**
4207
+ * ThemeProvider — Micro primitive.
4208
+ *
4209
+ * Supports both **uncontrolled** and **controlled** modes:
4210
+ *
4211
+ * - **Uncontrolled**: pass `defaultMode` (optional). Internal state manages
4212
+ * the current mode. Children call `setMode()` via `useTheme()`.
4213
+ * - **Controlled**: pass `mode` + `onModeChange`. The caller owns the state;
4214
+ * `setMode()` inside the context delegates to `onModeChange`.
4215
+ *
4216
+ * Does NOT read localStorage, system preference, or sync to <html>.
4217
+ * All of that belongs to Macro layer (e.g. a ThemeManager preset).
4218
+ */
4219
+ var ThemeContext = React.createContext(void 0);
4220
+ /**
4221
+ * Read and control the nearest ThemeProvider.
4222
+ * Returns `undefined` when no provider is found in the tree.
4223
+ *
4224
+ * @example
4225
+ * ```tsx
4226
+ * const theme = useTheme();
4227
+ * theme?.setMode("dark");
4228
+ * console.log(theme?.mode); // "light" | "dark"
4229
+ * ```
4230
+ */
4231
+ function useTheme() {
4232
+ return React.useContext(ThemeContext);
4233
+ }
4234
+ /**
4235
+ * ThemeProvider — wraps children in a `display: contents` div with the
4236
+ * `.dark` or `.light` class applied, enabling CSS variable cascade without
4237
+ * affecting layout.
4238
+ *
4239
+ * @example Uncontrolled
4240
+ * ```tsx
4241
+ * <ThemeProvider defaultMode="dark">
4242
+ * <App />
4243
+ * </ThemeProvider>
4244
+ * ```
4245
+ *
4246
+ * @example Controlled
4247
+ * ```tsx
4248
+ * const [mode, setMode] = useState<ThemeMode>("light");
4249
+ *
4250
+ * <ThemeProvider mode={mode} onModeChange={setMode}>
4251
+ * <App />
4252
+ * </ThemeProvider>
4253
+ * ```
4254
+ */
4255
+ function ThemeProvider({ children, defaultMode, mode: controlledMode, onModeChange }) {
4256
+ const isControlled = controlledMode !== void 0;
4257
+ const [internalMode, setInternalMode] = React.useState(defaultMode ?? "light");
4258
+ const mode = isControlled ? controlledMode : internalMode;
4259
+ const setMode = React.useCallback((next) => {
4260
+ if (isControlled) onModeChange(next);
4261
+ else setInternalMode(next);
4262
+ }, [isControlled, onModeChange]);
4263
+ const value = React.useMemo(() => ({
4264
+ mode,
4265
+ setMode
4266
+ }), [mode, setMode]);
4267
+ return /* @__PURE__ */ jsx(ThemeContext.Provider, {
4268
+ value,
4269
+ children: /* @__PURE__ */ jsx("div", {
4270
+ className: mode,
4271
+ style: { display: "contents" },
4272
+ children
4273
+ })
4274
+ });
4275
+ }
4276
+ ThemeProvider.displayName = "ThemeProvider";
4277
+ /**
4278
+ * ThemeWrapper — re-applies the current theme class inside a Portal.
4279
+ * Used internally by Dialog, Tooltip, Popover, etc. to tunnel the theme
4280
+ * across the Portal boundary.
4281
+ *
4282
+ * Falls back gracefully (renders children as-is) when no ThemeProvider
4283
+ * is found in the tree.
4284
+ */
4285
+ function ThemeWrapper({ children }) {
4286
+ const theme = useTheme();
4287
+ if (!theme) return /* @__PURE__ */ jsx(Fragment, { children });
4288
+ return /* @__PURE__ */ jsx("div", {
4289
+ className: theme.mode,
4290
+ style: { display: "contents" },
4291
+ children
4292
+ });
4293
+ }
4294
+ ThemeWrapper.displayName = "ThemeWrapper";
4295
+ //#endregion
4296
+ //#region src/components/micro/sonner.tsx
4297
+ /**
4298
+ * ✅ AUDITED & REFACTORED
4299
+ * - Design System Compliant (22 Commandments)
4300
+ * - WCAG AAA/AA
4301
+ * - Form Control Parity
4302
+ * - CSS Delegated Logic
4303
+ */
4304
+ function Toaster({ ...props }) {
4305
+ const theme = useTheme()?.mode;
4306
+ return /* @__PURE__ */ jsx(Toaster$1, {
4307
+ theme,
4308
+ className: "toaster group",
4309
+ icons: {
4310
+ success: /* @__PURE__ */ jsx(CircleCheckIcon, {
4311
+ "aria-hidden": "true",
4312
+ className: "size-4"
4313
+ }),
4314
+ info: /* @__PURE__ */ jsx(InfoIcon, {
4315
+ "aria-hidden": "true",
4316
+ className: "size-4"
4317
+ }),
4318
+ warning: /* @__PURE__ */ jsx(TriangleAlertIcon, {
4319
+ "aria-hidden": "true",
4320
+ className: "size-4"
4321
+ }),
4322
+ error: /* @__PURE__ */ jsx(OctagonXIcon, {
4323
+ "aria-hidden": "true",
4324
+ className: "size-4"
4325
+ }),
4326
+ loading: /* @__PURE__ */ jsx(Spinner, { size: "md" })
4327
+ },
4328
+ richColors: true,
4329
+ style: {
4330
+ "--normal-bg": "var(--popover)",
4331
+ "--normal-text": "var(--popover-foreground)",
4332
+ "--normal-border": "var(--border)",
4333
+ "--border-radius": "var(--radius)",
4334
+ "--success-bg": "color-mix(in srgb, var(--success) 10%, var(--popover))",
4335
+ "--success-text": "var(--success)",
4336
+ "--success-border": "color-mix(in srgb, var(--success) 20%, var(--popover))",
4337
+ "--error-bg": "color-mix(in srgb, var(--destructive) 10%, var(--popover))",
4338
+ "--error-text": "var(--destructive)",
4339
+ "--error-border": "color-mix(in srgb, var(--destructive) 20%, var(--popover))",
4340
+ "--warning-bg": "color-mix(in srgb, var(--warning) 10%, var(--popover))",
4341
+ "--warning-text": "var(--warning)",
4342
+ "--warning-border": "color-mix(in srgb, var(--warning) 20%, var(--popover))",
4343
+ "--info-bg": "color-mix(in srgb, var(--info) 10%, var(--popover))",
4344
+ "--info-text": "var(--info)",
4345
+ "--info-border": "color-mix(in srgb, var(--info) 20%, var(--popover))"
4346
+ },
4347
+ toastOptions: { classNames: {
4348
+ toast: "group toast",
4349
+ description: "group-[.toast]:text-muted-foreground",
4350
+ actionButton: "group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",
4351
+ cancelButton: "group-[.toast]:bg-muted group-[.toast]:text-muted-foreground"
4352
+ } },
4353
+ ...props
4354
+ });
4355
+ }
4356
+ //#endregion
4357
+ //#region src/components/micro/switch.tsx
4358
+ /**
4359
+ * ✅ AUDITED & REFACTORED
4360
+ * - Design System Compliant (22 Commandments)
4361
+ * - WCAG AAA/AA
4362
+ * - Form Control Parity
4363
+ * - CSS Delegated Logic
4364
+ */
4365
+ var switchVariants = cva("group/switch peer relative inline-flex shrink-0 items-center rounded-full border border-transparent p-px after:absolute after:content-[''] transition-all outline-none focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:ring-offset-1 focus-visible:ring-offset-background aria-invalid:focus-visible:ring-destructive/50 dark:aria-invalid:focus-visible:ring-destructive/50 data-checked:bg-primary data-unchecked:bg-input dark:data-unchecked:bg-secondary data-disabled:pointer-events-none data-disabled:cursor-not-allowed data-disabled:opacity-50", { variants: { size: {
4366
+ sm: "switch-sm h-4 w-7 after:-inset-x-2.5 after:-inset-y-2.5",
4367
+ md: "switch-md h-5 w-9 after:-inset-x-3 after:-inset-y-2",
4368
+ lg: "switch-lg h-6 w-11 after:-inset-x-4 after:-inset-y-3"
4369
+ } } });
4370
+ /**
4371
+ * @description A control that allows the user to toggle between checked and not checked.
4372
+ * @example
4373
+ * <Switch id="airplane-mode" />
4374
+ */
4375
+ var Switch = React.forwardRef(function Switch({ className, size = "md", ...props }, ref) {
4376
+ return /* @__PURE__ */ jsx(Switch$1.Root, {
4377
+ ref,
4378
+ "data-slot": "switch",
4379
+ className: cn(switchVariants({
4380
+ size,
4381
+ className
4382
+ })),
4383
+ ...props
4384
+ });
4385
+ });
4386
+ Switch.displayName = "Switch";
4387
+ var SwitchThumb = React.forwardRef(function SwitchThumb({ className, ...props }, ref) {
4388
+ return /* @__PURE__ */ jsx(Switch$1.Thumb, {
4389
+ ref,
4390
+ "data-slot": "switch-thumb",
4391
+ className: cn("pointer-events-none block rounded-full bg-background shadow-sm shadow-black/10 ring-0 transition-transform data-unchecked:translate-x-0 dark:data-checked:bg-primary-foreground dark:data-unchecked:bg-foreground size-4 data-checked:translate-x-4 group-[.switch-sm]/switch:size-3 group-[.switch-sm]/switch:data-checked:translate-x-3 group-[.switch-lg]/switch:size-5 group-[.switch-lg]/switch:data-checked:translate-x-5", className),
4392
+ ...props
4393
+ });
4394
+ });
4395
+ SwitchThumb.displayName = "SwitchThumb";
4396
+ //#endregion
4397
+ //#region src/components/micro/table.tsx
4398
+ /**
4399
+ * ✅ AUDITED & REFACTORED
4400
+ * - Design System Compliant (22 Commandments)
4401
+ * - WCAG AAA/AA
4402
+ * - Form Control Parity
4403
+ * - CSS Delegated Logic
4404
+ */
4405
+ var Table = React.forwardRef(({ className, children, ...props }, ref) => {
4406
+ return /* @__PURE__ */ jsx("div", {
4407
+ ref,
4408
+ "data-slot": "table-container",
4409
+ className: cn("group/table relative w-full overflow-auto", className),
4410
+ ...props,
4411
+ children: /* @__PURE__ */ jsx("table", {
4412
+ "data-slot": "table",
4413
+ className: "w-full caption-bottom text-sm",
4414
+ children
4415
+ })
4416
+ });
4417
+ });
4418
+ Table.displayName = "Table";
4419
+ var TableHeader = React.forwardRef(({ className, ...props }, ref) => {
4420
+ return /* @__PURE__ */ jsx("thead", {
4421
+ ref,
4422
+ "data-slot": "table-header",
4423
+ className: cn("[&>tr]:border-b", className),
4424
+ ...props
4425
+ });
4426
+ });
4427
+ TableHeader.displayName = "TableHeader";
4428
+ var TableBody = React.forwardRef(({ className, ...props }, ref) => {
4429
+ return /* @__PURE__ */ jsx("tbody", {
4430
+ ref,
4431
+ "data-slot": "table-body",
4432
+ className: cn("[&>tr:last-child]:border-0", className),
4433
+ ...props
4434
+ });
4435
+ });
4436
+ TableBody.displayName = "TableBody";
4437
+ var TableFooter = React.forwardRef(({ className, ...props }, ref) => {
4438
+ return /* @__PURE__ */ jsx("tfoot", {
4439
+ ref,
4440
+ "data-slot": "table-footer",
4441
+ className: cn("border-t border-t-border bg-muted/50 font-medium [&>tr]:last:border-b-0", className),
4442
+ ...props
4443
+ });
4444
+ });
4445
+ TableFooter.displayName = "TableFooter";
4446
+ var TableRow = React.forwardRef(({ className, ...props }, ref) => {
4447
+ return /* @__PURE__ */ jsx("tr", {
4448
+ ref,
4449
+ "data-slot": "table-row",
4450
+ className: cn("border-b border-b-border transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted", className),
4451
+ ...props
4452
+ });
4453
+ });
4454
+ TableRow.displayName = "TableRow";
4455
+ var TableHead = React.forwardRef(({ className, sortDirection, sortOptions = [
4456
+ "asc",
4457
+ "desc",
4458
+ "none"
4459
+ ], onSort, children, ...props }, ref) => {
4460
+ const handleSortClick = () => {
4461
+ if (!onSort || !sortDirection || sortOptions.length === 0) return;
4462
+ const currentIndex = sortOptions.indexOf(sortDirection);
4463
+ onSort(sortOptions[currentIndex === -1 ? 0 : (currentIndex + 1) % sortOptions.length]);
4464
+ };
4465
+ return /* @__PURE__ */ jsx("th", {
4466
+ ref,
4467
+ "data-slot": "table-head",
4468
+ className: cn("h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground has-[[role=checkbox]]:pr-0", className),
4469
+ ...props,
4470
+ children: onSort && sortDirection ? /* @__PURE__ */ jsxs("button", {
4471
+ type: "button",
4472
+ onClick: handleSortClick,
4473
+ className: "-ml-1 flex items-center gap-1.5 rounded-sm px-1 py-0.5 text-inherit hover:bg-muted/50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
4474
+ children: [children, /* @__PURE__ */ jsxs("div", {
4475
+ className: "flex flex-col",
4476
+ children: [/* @__PURE__ */ jsx(ChevronUp, { className: cn("size-[14px] -mb-1.5 opacity-30", { "opacity-100": sortDirection === "asc" }) }), /* @__PURE__ */ jsx(ChevronDown, { className: cn("size-[14px] opacity-30", { "opacity-100": sortDirection === "desc" }) })]
4477
+ })]
4478
+ }) : children
4479
+ });
4480
+ });
4481
+ TableHead.displayName = "TableHead";
4482
+ var TableCell = React.forwardRef(({ className, ...props }, ref) => {
4483
+ return /* @__PURE__ */ jsx("td", {
4484
+ ref,
4485
+ "data-slot": "table-cell",
4486
+ className: cn("p-2 align-middle whitespace-nowrap has-[[role=checkbox]]:pr-0", className),
4487
+ ...props
4488
+ });
4489
+ });
4490
+ TableCell.displayName = "TableCell";
4491
+ var TableCaption = React.forwardRef(({ className, ...props }, ref) => {
4492
+ return /* @__PURE__ */ jsx("caption", {
4493
+ ref,
4494
+ "data-slot": "table-caption",
4495
+ className: cn("mt-4 text-sm text-muted-foreground", className),
4496
+ ...props
4497
+ });
4498
+ });
4499
+ TableCaption.displayName = "TableCaption";
4500
+ //#endregion
4501
+ //#region src/components/micro/tabs.tsx
4502
+ /**
4503
+ * ✅ AUDITED & REFACTORED
4504
+ * - Design System Compliant (22 Commandments)
4505
+ * - WCAG AAA/AA
4506
+ * - Form Control Parity
4507
+ * - CSS Delegated Logic
4508
+ */
4509
+ var Tabs = React.forwardRef(({ className, orientation = "horizontal", ...props }, ref) => {
4510
+ return /* @__PURE__ */ jsx(Tabs$1.Root, {
4511
+ ref,
4512
+ "data-slot": "tabs",
4513
+ "data-orientation": orientation,
4514
+ "data-horizontal": orientation === "horizontal" ? "" : void 0,
4515
+ "data-vertical": orientation === "vertical" ? "" : void 0,
4516
+ className: cn("group/tabs flex gap-2 data-horizontal:flex-col", className),
4517
+ ...props
4518
+ });
4519
+ });
4520
+ Tabs.displayName = "Tabs";
4521
+ var tabsListVariants = cva("group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground h-fit group-data-vertical/tabs:flex-col data-[variant=line]:rounded-none bg-muted", { variants: { variant: { line: "gap-1 bg-transparent" } } });
4522
+ var TabsList = React.forwardRef(({ className, variant, ...props }, ref) => {
4523
+ return /* @__PURE__ */ jsx(Tabs$1.List, {
4524
+ ref,
4525
+ "data-slot": "tabs-list",
4526
+ "data-variant": variant,
4527
+ className: cn(tabsListVariants({ variant }), className),
4528
+ ...props
4529
+ });
4530
+ });
4531
+ TabsList.displayName = "TabsList";
4532
+ var TabsTrigger = React.forwardRef(({ className, ...props }, ref) => {
4533
+ return /* @__PURE__ */ jsx(Tabs$1.Tab, {
4534
+ ref,
4535
+ "data-slot": "tabs-trigger",
4536
+ className: cn("relative inline-flex flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2.5 py-1.5 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50 has-[[data-icon=inline-end]]:pr-1 has-[[data-icon=inline-start]]:pl-1 aria-disabled:pointer-events-none aria-disabled:opacity-50 dark:text-muted-foreground dark:hover:text-foreground data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&>svg]:pointer-events-none [&>svg]:shrink-0 [&>svg:not([class*='size-'])]:size-4", "group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent", "data-active:bg-background data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 dark:data-active:text-foreground", "after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:bottom-[-5px] group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100", className),
4537
+ ...props
4538
+ });
4539
+ });
4540
+ TabsTrigger.displayName = "TabsTrigger";
4541
+ var TabsContent = React.forwardRef(({ className, ...props }, ref) => {
4542
+ return /* @__PURE__ */ jsx(Tabs$1.Panel, {
4543
+ ref,
4544
+ "data-slot": "tabs-content",
4545
+ className: cn("flex-1 text-sm outline-none", className),
4546
+ ...props
4547
+ });
4548
+ });
4549
+ TabsContent.displayName = "TabsContent";
4550
+ //#endregion
4551
+ //#region src/components/micro/textarea.tsx
4552
+ /**
4553
+ * ✅ AUDITED & REFACTORED
4554
+ * - Design System Compliant (22 Commandments)
4555
+ * - WCAG AAA/AA
4556
+ * - Form Control Parity
4557
+ * - CSS Delegated Logic
4558
+ */
4559
+ var textareaVariants = cva("flex field-sizing-content min-h-16 min-w-0 rounded-lg border border-input bg-transparent text-sm transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:focus-visible:ring-3 aria-invalid:focus-visible:ring-destructive/50 dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:focus-visible:ring-destructive/50", { variants: { size: {
4560
+ sm: "px-2 py-1.5 text-xs",
4561
+ md: "px-2.5 py-2",
4562
+ lg: "px-3 py-2.5"
4563
+ } } });
4564
+ /**
4565
+ * @description Displays a form textarea.
4566
+ * @example
4567
+ * <Textarea placeholder="Type your message here." />
4568
+ */
4569
+ var Textarea = React.forwardRef(function Textarea({ className, size = "md", ...props }, ref) {
4570
+ return /* @__PURE__ */ jsx("textarea", {
4571
+ ref,
4572
+ "data-slot": "textarea",
4573
+ className: cn(textareaVariants({
4574
+ size,
4575
+ className
4576
+ })),
4577
+ ...props
4578
+ });
4579
+ });
4580
+ Textarea.displayName = "Textarea";
4581
+ //#endregion
4582
+ //#region src/components/micro/toggle.tsx
4583
+ /**
4584
+ * ✅ AUDITED & REFACTORED
4585
+ * - Design System Compliant (22 Commandments)
4586
+ * - WCAG AAA/AA
4587
+ * - Form Control Parity
4588
+ * - CSS Delegated Logic
4589
+ */
4590
+ var toggleVariants = cva("group/toggle inline-flex items-center justify-center rounded-lg text-sm font-medium whitespace-nowrap transition-all outline-none hover:bg-muted hover:text-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:focus-visible:border-destructive aria-invalid:focus-visible:ring-3 aria-invalid:focus-visible:ring-destructive/50 dark:aria-invalid:focus-visible:ring-destructive/50 aria-pressed:bg-muted aria-pressed:text-foreground data-[state=on]:bg-muted data-[state=on]:text-foreground [&>svg]:pointer-events-none [&>svg]:shrink-0 [&>svg:not([class*='size-'])]:size-4 bg-transparent", { variants: {
4591
+ variant: {
4592
+ default: "",
4593
+ outline: "border border-input bg-transparent hover:bg-muted hover:text-foreground"
4594
+ },
4595
+ size: {
4596
+ sm: "h-7 min-w-7 gap-1 px-2.5 text-xs [&>svg:not([class*='size-'])]:size-3.5",
4597
+ md: "h-8 min-w-8 gap-1.5 px-3 text-sm",
4598
+ lg: "h-9 min-w-9 gap-2 px-3.5 text-sm"
4599
+ }
4600
+ } });
4601
+ /**
4602
+ * @description A two-state button that can be either on or off.
4603
+ * @example
4604
+ * <Toggle aria-label="Toggle italic">
4605
+ * <ItalicIcon />
4606
+ * </Toggle>
4607
+ */
4608
+ function Toggle({ className, variant = "default", size = "md", ...props }) {
4609
+ return /* @__PURE__ */ jsx(Toggle$1, {
4610
+ "data-slot": "toggle",
4611
+ className: toggleVariants({
4612
+ variant,
4613
+ size,
4614
+ className
4615
+ }),
4616
+ ...props
4617
+ });
4618
+ }
4619
+ //#endregion
4620
+ //#region src/components/micro/toggle-group.tsx
4621
+ /**
4622
+ * ✅ AUDITED & REFACTORED
4623
+ * - Design System Compliant (22 Commandments)
4624
+ * - WCAG AAA/AA
4625
+ * - Form Control Parity
4626
+ * - CSS Delegated Logic
4627
+ */
4628
+ var ToggleGroupContext = React.createContext({
4629
+ variant: "default",
4630
+ size: "md",
4631
+ spacing: 2,
4632
+ orientation: "horizontal"
4633
+ });
4634
+ /**
4635
+ * @description A set of two-state buttons that can be toggled on or off.
4636
+ * @requires ToggleGroupItem
4637
+ * @example
4638
+ * <ToggleGroup>
4639
+ * <ToggleGroupItem value="a">A</ToggleGroupItem>
4640
+ * </ToggleGroup>
4641
+ */
4642
+ function ToggleGroup({ className, variant, size, spacing = 2, orientation = "horizontal", children, ...props }) {
4643
+ return /* @__PURE__ */ jsx(ToggleGroup$1, {
4644
+ "data-slot": "toggle-group",
4645
+ "data-variant": variant,
4646
+ "data-size": size,
4647
+ "data-spacing": spacing,
4648
+ "data-orientation": orientation,
4649
+ style: { "--gap": spacing },
4650
+ className: cn("group/toggle-group flex w-fit items-center rounded-lg data-[size=sm]:rounded-md data-vertical:flex-col data-vertical:items-stretch", className),
4651
+ ...props,
4652
+ children: /* @__PURE__ */ jsx(ToggleGroupContext.Provider, {
4653
+ value: {
4654
+ variant,
4655
+ size,
4656
+ spacing,
4657
+ orientation
4658
+ },
4659
+ children
4660
+ })
4661
+ });
4662
+ }
4663
+ function ToggleGroupItem({ className, children, variant, size = "md", ...props }) {
4664
+ const context = React.useContext(ToggleGroupContext);
4665
+ return /* @__PURE__ */ jsx(Toggle$1, {
4666
+ "data-slot": "toggle-group-item",
4667
+ "data-variant": context.variant ?? variant,
4668
+ "data-size": context.size ?? size,
4669
+ "data-spacing": context.spacing,
4670
+ className: cn("shrink-0 group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-2 focus:z-10 focus-visible:z-10 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-end]:pr-1.5 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-start]:pl-1.5 group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-l-lg group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-t-lg group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-r-lg group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-b-lg group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:border-l-0 group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:border-t-0 group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-l group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-t", toggleVariants({
4671
+ variant: context.variant ?? variant,
4672
+ size: context.size ?? size
4673
+ }), className),
4674
+ ...props,
4675
+ children
4676
+ });
4677
+ }
4678
+ //#endregion
4679
+ //#region src/components/micro/tooltip.tsx
4680
+ /**
4681
+ * ✅ AUDITED & REFACTORED
4682
+ * - Design System Compliant (22 Commandments)
4683
+ * - WCAG AAA/AA
4684
+ * - Form Control Parity
4685
+ * - CSS Delegated Logic
4686
+ */
4687
+ /**
4688
+ * @description A popup that displays information related to an element.
4689
+ * @requires TooltipTrigger, TooltipContent, TooltipProvider
4690
+ * @example
4691
+ * <TooltipProvider>
4692
+ * <Tooltip>
4693
+ * <TooltipTrigger>Hover</TooltipTrigger>
4694
+ * <TooltipContent>Add to library</TooltipContent>
4695
+ * </Tooltip>
4696
+ * </TooltipProvider>
4697
+ */
4698
+ function TooltipProvider({ delay = 0, ...props }) {
4699
+ return /* @__PURE__ */ jsx(Tooltip$1.Provider, {
4700
+ "data-slot": "tooltip-provider",
4701
+ delay,
4702
+ ...props
4703
+ });
4704
+ }
4705
+ function Tooltip({ ...props }) {
4706
+ return /* @__PURE__ */ jsx(Tooltip$1.Root, {
4707
+ "data-slot": "tooltip",
4708
+ ...props
4709
+ });
4710
+ }
4711
+ var TooltipTrigger = React.forwardRef((props, ref) => {
4712
+ return /* @__PURE__ */ jsx(Tooltip$1.Trigger, {
4713
+ ref,
4714
+ "data-slot": "tooltip-trigger",
4715
+ ...props
4716
+ });
4717
+ });
4718
+ TooltipTrigger.displayName = "TooltipTrigger";
4719
+ var TooltipPortal = Tooltip$1.Portal;
4720
+ var TooltipContent = React.forwardRef(({ className, side = "top", sideOffset = 4, align = "center", alignOffset = 0, children, ...props }, ref) => {
4721
+ return /* @__PURE__ */ jsx(Tooltip$1.Positioner, {
4722
+ align,
4723
+ alignOffset,
4724
+ side,
4725
+ sideOffset,
4726
+ className: "isolate z-50",
4727
+ children: /* @__PURE__ */ jsx(Tooltip$1.Popup, {
4728
+ ref,
4729
+ "data-slot": "tooltip-content",
4730
+ className: cn("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 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-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", className),
4731
+ ...props,
4732
+ children
4733
+ })
4734
+ });
4735
+ });
4736
+ TooltipContent.displayName = "TooltipContent";
4737
+ //#endregion
4738
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertAction, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogClose, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertIcon, AlertTitle, AspectRatio, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonIcon, Calendar, CalendarDayButton, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselDots, CarouselItem, CarouselNext, CarouselPrevious, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, CheckboxIndicator, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, ComboboxAnchor, ComboboxChip, ComboboxChips, ComboboxChipsInput, ComboboxClear, ComboboxCollection, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxLabel, ComboboxList, ComboboxPortal, ComboboxSeparator, ComboboxTrigger, ComboboxValue, Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DirectionProvider, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Empty, EmptyAction, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, HoverCard, HoverCardContent, HoverCardPortal, HoverCardTrigger, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Kbd, KbdGroup, Label, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, NavigationMenu, NavigationMenuContent, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuPortal, NavigationMenuPositioner, NavigationMenuTrigger, NavigationMenuViewport, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverPortal, PopoverTitle, PopoverTrigger, Progress, ProgressIndicator, ProgressLabel, ProgressTrack, ProgressValue, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectPortal, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarLabel, SidebarLogo, SidebarMenuItem, SidebarMenuItemList, Skeleton, Slider, SliderControl, SliderIndicator, SliderThumb, SliderTrack, Spinner, Switch, SwitchThumb, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeProvider, ThemeWrapper, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipPortal, TooltipProvider, TooltipTrigger, badgeVariants, buttonVariants, cn, labelVariants, navigationMenuTriggerStyle, selectTriggerVariants, tabsListVariants, toggleVariants, useCarousel, useComboboxContext, useDirection, useIsMobile, useSidebarToggle, useTheme };
4739
+
4740
+ //# sourceMappingURL=index.js.map