@omnifyjp/ui 0.5.3 → 1.0.1

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 (410) hide show
  1. package/README.md +3 -6
  2. package/dist/chunk-2C2HRGM7.js +51 -0
  3. package/dist/chunk-2C2HRGM7.js.map +1 -0
  4. package/dist/chunk-2TUWDXAC.js +196 -0
  5. package/dist/chunk-2TUWDXAC.js.map +1 -0
  6. package/dist/chunk-34ARZSNP.js +63 -0
  7. package/dist/chunk-34ARZSNP.js.map +1 -0
  8. package/dist/chunk-35DNN46W.js +13 -0
  9. package/dist/chunk-35DNN46W.js.map +1 -0
  10. package/dist/chunk-35U6QG4P.js +116 -0
  11. package/dist/chunk-35U6QG4P.js.map +1 -0
  12. package/dist/chunk-3EOHW4QN.js +35 -0
  13. package/dist/chunk-3EOHW4QN.js.map +1 -0
  14. package/dist/chunk-3VU56V66.js +41 -0
  15. package/dist/chunk-3VU56V66.js.map +1 -0
  16. package/dist/chunk-55E7D2HR.js +99 -0
  17. package/dist/chunk-55E7D2HR.js.map +1 -0
  18. package/dist/chunk-67YUL2ZS.js +53 -0
  19. package/dist/chunk-67YUL2ZS.js.map +1 -0
  20. package/dist/chunk-6DIDQ4TB.js +131 -0
  21. package/dist/chunk-6DIDQ4TB.js.map +1 -0
  22. package/dist/chunk-6GWVQB3Q.js +155 -0
  23. package/dist/chunk-6GWVQB3Q.js.map +1 -0
  24. package/dist/chunk-75WZR6HF.js +44 -0
  25. package/dist/chunk-75WZR6HF.js.map +1 -0
  26. package/dist/chunk-7IRLBU2I.js +114 -0
  27. package/dist/chunk-7IRLBU2I.js.map +1 -0
  28. package/dist/chunk-7RMTPT6O.js +99 -0
  29. package/dist/chunk-7RMTPT6O.js.map +1 -0
  30. package/dist/chunk-7XH3MGBR.js +128 -0
  31. package/dist/chunk-7XH3MGBR.js.map +1 -0
  32. package/dist/chunk-A3BB5ZOC.js +77 -0
  33. package/dist/chunk-A3BB5ZOC.js.map +1 -0
  34. package/dist/chunk-BAQWGQJG.js +106 -0
  35. package/dist/chunk-BAQWGQJG.js.map +1 -0
  36. package/dist/chunk-BRSM3SZP.js +46 -0
  37. package/dist/chunk-BRSM3SZP.js.map +1 -0
  38. package/dist/chunk-C34KSTWA.js +43 -0
  39. package/dist/chunk-C34KSTWA.js.map +1 -0
  40. package/dist/chunk-C5NZAOA7.js +54 -0
  41. package/dist/chunk-C5NZAOA7.js.map +1 -0
  42. package/dist/chunk-CUZR4JWM.js +23 -0
  43. package/dist/chunk-CUZR4JWM.js.map +1 -0
  44. package/dist/chunk-DGPY4WP3.js +11 -0
  45. package/dist/chunk-DGPY4WP3.js.map +1 -0
  46. package/dist/chunk-EWBCV7VA.js +65 -0
  47. package/dist/chunk-EWBCV7VA.js.map +1 -0
  48. package/dist/chunk-F2ZJLKDP.js +119 -0
  49. package/dist/chunk-F2ZJLKDP.js.map +1 -0
  50. package/dist/chunk-FLWMT4DB.js +66 -0
  51. package/dist/chunk-FLWMT4DB.js.map +1 -0
  52. package/dist/chunk-FRKG7JQY.js +48 -0
  53. package/dist/chunk-FRKG7JQY.js.map +1 -0
  54. package/dist/chunk-G7HTZBUR.js +187 -0
  55. package/dist/chunk-G7HTZBUR.js.map +1 -0
  56. package/dist/chunk-IAWKX5W4.js +219 -0
  57. package/dist/chunk-IAWKX5W4.js.map +1 -0
  58. package/dist/chunk-INLM7UJC.js +238 -0
  59. package/dist/chunk-INLM7UJC.js.map +1 -0
  60. package/dist/chunk-JAJMM32I.js +18 -0
  61. package/dist/chunk-JAJMM32I.js.map +1 -0
  62. package/dist/chunk-JJSVA3TH.js +61 -0
  63. package/dist/chunk-JJSVA3TH.js.map +1 -0
  64. package/dist/chunk-JLTBUACL.js +121 -0
  65. package/dist/chunk-JLTBUACL.js.map +1 -0
  66. package/dist/chunk-JRU2QX7T.js +38 -0
  67. package/dist/chunk-JRU2QX7T.js.map +1 -0
  68. package/dist/chunk-JXGRW2MR.js +17 -0
  69. package/dist/chunk-JXGRW2MR.js.map +1 -0
  70. package/dist/chunk-LMT327XH.js +56 -0
  71. package/dist/chunk-LMT327XH.js.map +1 -0
  72. package/dist/chunk-LTTNCAAA.js +138 -0
  73. package/dist/chunk-LTTNCAAA.js.map +1 -0
  74. package/dist/chunk-MJLFJPUG.js +143 -0
  75. package/dist/chunk-MJLFJPUG.js.map +1 -0
  76. package/dist/chunk-MZ2P566X.js +65 -0
  77. package/dist/chunk-MZ2P566X.js.map +1 -0
  78. package/dist/chunk-N47H4MHX.js +41 -0
  79. package/dist/chunk-N47H4MHX.js.map +1 -0
  80. package/dist/chunk-NNJTKHCE.js +160 -0
  81. package/dist/chunk-NNJTKHCE.js.map +1 -0
  82. package/dist/chunk-NPL2R5LD.js +171 -0
  83. package/dist/chunk-NPL2R5LD.js.map +1 -0
  84. package/dist/chunk-NU56GKGM.js +44 -0
  85. package/dist/chunk-NU56GKGM.js.map +1 -0
  86. package/dist/chunk-P3M5TZD2.js +24 -0
  87. package/dist/chunk-P3M5TZD2.js.map +1 -0
  88. package/dist/chunk-PGWNOZDX.js +28 -0
  89. package/dist/chunk-PGWNOZDX.js.map +1 -0
  90. package/dist/chunk-QB3UWRZH.js +92 -0
  91. package/dist/chunk-QB3UWRZH.js.map +1 -0
  92. package/dist/chunk-R2CDE5DO.js +33 -0
  93. package/dist/chunk-R2CDE5DO.js.map +1 -0
  94. package/dist/chunk-RQNZDWY3.js +65 -0
  95. package/dist/chunk-RQNZDWY3.js.map +1 -0
  96. package/dist/chunk-S6PDRGR5.js +109 -0
  97. package/dist/chunk-S6PDRGR5.js.map +1 -0
  98. package/dist/chunk-TGYQ3AKH.js +95 -0
  99. package/dist/chunk-TGYQ3AKH.js.map +1 -0
  100. package/dist/chunk-TJMK2KBE.js +112 -0
  101. package/dist/chunk-TJMK2KBE.js.map +1 -0
  102. package/dist/chunk-USIHM7FV.js +211 -0
  103. package/dist/chunk-USIHM7FV.js.map +1 -0
  104. package/dist/chunk-VVYSAGB3.js +104 -0
  105. package/dist/chunk-VVYSAGB3.js.map +1 -0
  106. package/dist/chunk-WD5KZE25.js +25 -0
  107. package/dist/chunk-WD5KZE25.js.map +1 -0
  108. package/dist/chunk-WL4ZO2H3.js +33 -0
  109. package/dist/chunk-WL4ZO2H3.js.map +1 -0
  110. package/dist/chunk-WRCHR4AK.js +23 -0
  111. package/dist/chunk-WRCHR4AK.js.map +1 -0
  112. package/dist/chunk-WS6E7HBT.js +39 -0
  113. package/dist/chunk-WS6E7HBT.js.map +1 -0
  114. package/dist/chunk-XOJJBNDX.js +33 -0
  115. package/dist/chunk-XOJJBNDX.js.map +1 -0
  116. package/dist/chunk-YBMEQZX7.js +164 -0
  117. package/dist/chunk-YBMEQZX7.js.map +1 -0
  118. package/dist/chunk-Z2QAABLM.js +86 -0
  119. package/dist/chunk-Z2QAABLM.js.map +1 -0
  120. package/dist/chunk-ZHEKDP5X.js +41 -0
  121. package/dist/chunk-ZHEKDP5X.js.map +1 -0
  122. package/dist/chunk-ZPMXRW2A.js +63 -0
  123. package/dist/chunk-ZPMXRW2A.js.map +1 -0
  124. package/dist/chunk-ZYEGBF7G.js +25 -0
  125. package/dist/chunk-ZYEGBF7G.js.map +1 -0
  126. package/dist/components/accordion.d.ts +37 -0
  127. package/dist/components/accordion.js +4 -0
  128. package/dist/components/accordion.js.map +1 -0
  129. package/dist/components/alert-dialog.d.ts +56 -0
  130. package/dist/components/alert-dialog.js +5 -0
  131. package/dist/components/alert-dialog.js.map +1 -0
  132. package/dist/components/alert.d.ts +68 -0
  133. package/dist/components/alert.js +4 -0
  134. package/dist/components/alert.js.map +1 -0
  135. package/dist/components/aspect-ratio.d.ts +23 -0
  136. package/dist/components/aspect-ratio.js +3 -0
  137. package/dist/components/aspect-ratio.js.map +1 -0
  138. package/dist/components/avatar.d.ts +48 -0
  139. package/dist/components/avatar.js +4 -0
  140. package/dist/components/avatar.js.map +1 -0
  141. package/dist/components/badge.d.ts +52 -0
  142. package/dist/components/badge.js +4 -0
  143. package/dist/components/badge.js.map +1 -0
  144. package/dist/components/breadcrumb.d.ts +50 -0
  145. package/dist/components/breadcrumb.js +4 -0
  146. package/dist/components/breadcrumb.js.map +1 -0
  147. package/dist/components/button.d.ts +81 -0
  148. package/dist/components/button.js +4 -0
  149. package/dist/components/button.js.map +1 -0
  150. package/dist/components/calendar-category-badge.d.ts +24 -0
  151. package/dist/components/calendar-category-badge.js +5 -0
  152. package/dist/components/calendar-category-badge.js.map +1 -0
  153. package/dist/components/calendar-event-chip.d.ts +41 -0
  154. package/dist/components/calendar-event-chip.js +30 -0
  155. package/dist/components/calendar-event-chip.js.map +1 -0
  156. package/dist/components/calendar-event-sheet.d.ts +68 -0
  157. package/dist/components/calendar-event-sheet.js +83 -0
  158. package/dist/components/calendar-event-sheet.js.map +1 -0
  159. package/dist/components/calendar-mini.d.ts +65 -0
  160. package/dist/components/calendar-mini.js +93 -0
  161. package/dist/components/calendar-mini.js.map +1 -0
  162. package/dist/components/calendar-toolbar.d.ts +58 -0
  163. package/dist/components/calendar-toolbar.js +54 -0
  164. package/dist/components/calendar-toolbar.js.map +1 -0
  165. package/dist/components/calendar.d.ts +19 -0
  166. package/dist/components/calendar.js +5 -0
  167. package/dist/components/calendar.js.map +1 -0
  168. package/dist/components/card.d.ts +43 -0
  169. package/dist/components/card.js +4 -0
  170. package/dist/components/card.js.map +1 -0
  171. package/dist/components/carousel.d.ts +53 -0
  172. package/dist/components/carousel.js +5 -0
  173. package/dist/components/carousel.js.map +1 -0
  174. package/dist/components/chart.d.ts +125 -0
  175. package/dist/components/chart.js +239 -0
  176. package/dist/components/chart.js.map +1 -0
  177. package/dist/components/checkbox.d.ts +24 -0
  178. package/dist/components/checkbox.js +4 -0
  179. package/dist/components/checkbox.js.map +1 -0
  180. package/dist/components/collapsible.d.ts +28 -0
  181. package/dist/components/collapsible.js +3 -0
  182. package/dist/components/collapsible.js.map +1 -0
  183. package/dist/components/color-picker.d.ts +35 -0
  184. package/dist/components/color-picker.js +7 -0
  185. package/dist/components/color-picker.js.map +1 -0
  186. package/dist/components/combobox.d.ts +98 -0
  187. package/dist/components/combobox.js +8 -0
  188. package/dist/components/combobox.js.map +1 -0
  189. package/dist/components/command.d.ts +63 -0
  190. package/dist/components/command.js +5 -0
  191. package/dist/components/command.js.map +1 -0
  192. package/dist/components/context-menu.d.ts +70 -0
  193. package/dist/components/context-menu.js +4 -0
  194. package/dist/components/context-menu.js.map +1 -0
  195. package/dist/components/date-picker.d.ts +71 -0
  196. package/dist/components/date-picker.js +90 -0
  197. package/dist/components/date-picker.js.map +1 -0
  198. package/dist/components/dialog.d.ts +58 -0
  199. package/dist/components/dialog.js +4 -0
  200. package/dist/components/dialog.js.map +1 -0
  201. package/dist/components/drawer.d.ts +60 -0
  202. package/dist/components/drawer.js +4 -0
  203. package/dist/components/drawer.js.map +1 -0
  204. package/dist/components/dropdown-menu.d.ts +76 -0
  205. package/dist/components/dropdown-menu.js +4 -0
  206. package/dist/components/dropdown-menu.js.map +1 -0
  207. package/dist/components/file-upload.d.ts +44 -0
  208. package/dist/components/file-upload.js +5 -0
  209. package/dist/components/file-upload.js.map +1 -0
  210. package/dist/components/form.d.ts +67 -0
  211. package/dist/components/form.js +111 -0
  212. package/dist/components/form.js.map +1 -0
  213. package/dist/components/hover-card.d.ts +43 -0
  214. package/dist/components/hover-card.js +4 -0
  215. package/dist/components/hover-card.js.map +1 -0
  216. package/dist/components/input-otp.d.ts +38 -0
  217. package/dist/components/input-otp.js +4 -0
  218. package/dist/components/input-otp.js.map +1 -0
  219. package/dist/components/input.d.ts +38 -0
  220. package/dist/components/input.js +4 -0
  221. package/dist/components/input.js.map +1 -0
  222. package/dist/components/label.d.ts +20 -0
  223. package/dist/components/label.js +4 -0
  224. package/dist/components/label.js.map +1 -0
  225. package/dist/components/menubar.d.ts +82 -0
  226. package/dist/components/menubar.js +4 -0
  227. package/dist/components/menubar.js.map +1 -0
  228. package/dist/components/navigation-menu.d.ts +64 -0
  229. package/dist/components/navigation-menu.js +4 -0
  230. package/dist/components/navigation-menu.js.map +1 -0
  231. package/dist/components/pagination.d.ts +59 -0
  232. package/dist/components/pagination.js +5 -0
  233. package/dist/components/pagination.js.map +1 -0
  234. package/dist/components/password-input.d.ts +32 -0
  235. package/dist/components/password-input.js +5 -0
  236. package/dist/components/password-input.js.map +1 -0
  237. package/dist/components/permission-grid.d.ts +67 -0
  238. package/dist/components/permission-grid.js +5 -0
  239. package/dist/components/permission-grid.js.map +1 -0
  240. package/dist/components/popover.d.ts +37 -0
  241. package/dist/components/popover.js +4 -0
  242. package/dist/components/popover.js.map +1 -0
  243. package/dist/components/progress.d.ts +20 -0
  244. package/dist/components/progress.js +4 -0
  245. package/dist/components/progress.js.map +1 -0
  246. package/dist/components/radio-group.d.ts +38 -0
  247. package/dist/components/radio-group.js +4 -0
  248. package/dist/components/radio-group.js.map +1 -0
  249. package/dist/components/rating.d.ts +35 -0
  250. package/dist/components/rating.js +4 -0
  251. package/dist/components/rating.js.map +1 -0
  252. package/dist/components/resizable.d.ts +36 -0
  253. package/dist/components/resizable.js +4 -0
  254. package/dist/components/resizable.js.map +1 -0
  255. package/dist/components/scope-tree.d.ts +78 -0
  256. package/dist/components/scope-tree.js +5 -0
  257. package/dist/components/scope-tree.js.map +1 -0
  258. package/dist/components/scope-type-badge.d.ts +35 -0
  259. package/dist/components/scope-type-badge.js +5 -0
  260. package/dist/components/scope-type-badge.js.map +1 -0
  261. package/dist/components/scroll-area.d.ts +29 -0
  262. package/dist/components/scroll-area.js +4 -0
  263. package/dist/components/scroll-area.js.map +1 -0
  264. package/dist/components/select.d.ts +52 -0
  265. package/dist/components/select.js +4 -0
  266. package/dist/components/select.js.map +1 -0
  267. package/dist/components/separator.d.ts +24 -0
  268. package/dist/components/separator.js +4 -0
  269. package/dist/components/separator.js.map +1 -0
  270. package/dist/components/sheet.d.ts +51 -0
  271. package/dist/components/sheet.js +4 -0
  272. package/dist/components/sheet.js.map +1 -0
  273. package/dist/components/skeleton.d.ts +25 -0
  274. package/dist/components/skeleton.js +4 -0
  275. package/dist/components/skeleton.js.map +1 -0
  276. package/dist/components/slider.d.ts +24 -0
  277. package/dist/components/slider.js +4 -0
  278. package/dist/components/slider.js.map +1 -0
  279. package/dist/components/slug-input.d.ts +50 -0
  280. package/dist/components/slug-input.js +6 -0
  281. package/dist/components/slug-input.js.map +1 -0
  282. package/dist/components/sonner.d.ts +22 -0
  283. package/dist/components/sonner.js +3 -0
  284. package/dist/components/sonner.js.map +1 -0
  285. package/dist/components/stage-type-badge.d.ts +30 -0
  286. package/dist/components/stage-type-badge.js +5 -0
  287. package/dist/components/stage-type-badge.js.map +1 -0
  288. package/dist/components/switch.d.ts +26 -0
  289. package/dist/components/switch.js +4 -0
  290. package/dist/components/switch.js.map +1 -0
  291. package/dist/components/table.d.ts +57 -0
  292. package/dist/components/table.js +4 -0
  293. package/dist/components/table.js.map +1 -0
  294. package/dist/components/tabs.d.ts +39 -0
  295. package/dist/components/tabs.js +4 -0
  296. package/dist/components/tabs.js.map +1 -0
  297. package/dist/components/tag-input.d.ts +40 -0
  298. package/dist/components/tag-input.js +5 -0
  299. package/dist/components/tag-input.js.map +1 -0
  300. package/dist/components/textarea.d.ts +21 -0
  301. package/dist/components/textarea.js +4 -0
  302. package/dist/components/textarea.js.map +1 -0
  303. package/dist/components/time-picker.d.ts +57 -0
  304. package/dist/components/time-picker.js +8 -0
  305. package/dist/components/time-picker.js.map +1 -0
  306. package/dist/components/toggle-group.d.ts +45 -0
  307. package/dist/components/toggle-group.js +5 -0
  308. package/dist/components/toggle-group.js.map +1 -0
  309. package/dist/components/toggle.d.ts +31 -0
  310. package/dist/components/toggle.js +4 -0
  311. package/dist/components/toggle.js.map +1 -0
  312. package/dist/components/tooltip.d.ts +34 -0
  313. package/dist/components/tooltip.js +4 -0
  314. package/dist/components/tooltip.js.map +1 -0
  315. package/dist/components/workflow-category-badge.d.ts +32 -0
  316. package/dist/components/workflow-category-badge.js +5 -0
  317. package/dist/components/workflow-category-badge.js.map +1 -0
  318. package/dist/components/workflow-diagram.d.ts +63 -0
  319. package/dist/components/workflow-diagram.js +5 -0
  320. package/dist/components/workflow-diagram.js.map +1 -0
  321. package/dist/components/workflow-status-badge.d.ts +30 -0
  322. package/dist/components/workflow-status-badge.js +5 -0
  323. package/dist/components/workflow-status-badge.js.map +1 -0
  324. package/dist/components/workflow-stepper.d.ts +52 -0
  325. package/dist/components/workflow-stepper.js +4 -0
  326. package/dist/components/workflow-stepper.js.map +1 -0
  327. package/dist/hooks/use-mobile.d.ts +3 -3
  328. package/dist/hooks/use-mobile.js +1 -1
  329. package/dist/hooks/use-mobile.js.map +1 -1
  330. package/dist/index.d.ts +98 -16
  331. package/dist/index.js +62 -13
  332. package/dist/lib/types.d.ts +84 -1
  333. package/dist/lib/types.js +1 -1
  334. package/dist/lib/types.js.map +1 -1
  335. package/dist/lib/utils.d.ts +5 -1
  336. package/dist/lib/utils.js +1 -1
  337. package/dist/lib/utils.js.map +1 -1
  338. package/package.json +68 -31
  339. package/src/styles/fonts.css +0 -0
  340. package/src/styles/index.css +3 -1
  341. package/src/styles/tailwind.css +4 -0
  342. package/src/styles/theme.css +461 -0
  343. package/dist/chunk-2GN4WIOV.js +0 -240
  344. package/dist/chunk-2GN4WIOV.js.map +0 -1
  345. package/dist/chunk-5BL4VFRJ.js +0 -57
  346. package/dist/chunk-5BL4VFRJ.js.map +0 -1
  347. package/dist/chunk-735JNJJO.js +0 -27
  348. package/dist/chunk-735JNJJO.js.map +0 -1
  349. package/dist/chunk-EJEVW4RO.js +0 -49
  350. package/dist/chunk-EJEVW4RO.js.map +0 -1
  351. package/dist/chunk-FVOQZTHE.js +0 -191
  352. package/dist/chunk-FVOQZTHE.js.map +0 -1
  353. package/dist/chunk-ITXOZ4IR.js +0 -85
  354. package/dist/chunk-ITXOZ4IR.js.map +0 -1
  355. package/dist/chunk-NVPNMQSR.js +0 -30
  356. package/dist/chunk-NVPNMQSR.js.map +0 -1
  357. package/dist/chunk-O25D7DCP.js +0 -72
  358. package/dist/chunk-O25D7DCP.js.map +0 -1
  359. package/dist/chunk-O2ADW2GC.js +0 -224
  360. package/dist/chunk-O2ADW2GC.js.map +0 -1
  361. package/dist/chunk-OY3PSPA5.js +0 -661
  362. package/dist/chunk-OY3PSPA5.js.map +0 -1
  363. package/dist/chunk-UASABUQA.js +0 -39
  364. package/dist/chunk-UASABUQA.js.map +0 -1
  365. package/dist/chunk-UR2QLIS2.js +0 -93
  366. package/dist/chunk-UR2QLIS2.js.map +0 -1
  367. package/dist/chunk-XDXGUPCR.js +0 -123
  368. package/dist/chunk-XDXGUPCR.js.map +0 -1
  369. package/dist/components/AppShell.d.ts +0 -27
  370. package/dist/components/AppShell.js +0 -13
  371. package/dist/components/AppShell.js.map +0 -1
  372. package/dist/components/Header.d.ts +0 -11
  373. package/dist/components/Header.js +0 -9
  374. package/dist/components/Header.js.map +0 -1
  375. package/dist/components/LanguageSelector.d.ts +0 -11
  376. package/dist/components/LanguageSelector.js +0 -5
  377. package/dist/components/LanguageSelector.js.map +0 -1
  378. package/dist/components/OrganizationSelector.d.ts +0 -8
  379. package/dist/components/OrganizationSelector.js +0 -4
  380. package/dist/components/OrganizationSelector.js.map +0 -1
  381. package/dist/components/OrganizationSetupModal.d.ts +0 -5
  382. package/dist/components/OrganizationSetupModal.js +0 -4
  383. package/dist/components/OrganizationSetupModal.js.map +0 -1
  384. package/dist/components/PageContainer.d.ts +0 -105
  385. package/dist/components/PageContainer.js +0 -3
  386. package/dist/components/PageContainer.js.map +0 -1
  387. package/dist/components/ServiceMenu.d.ts +0 -11
  388. package/dist/components/ServiceMenu.js +0 -3
  389. package/dist/components/ServiceMenu.js.map +0 -1
  390. package/dist/components/Sidebar.d.ts +0 -11
  391. package/dist/components/Sidebar.js +0 -5
  392. package/dist/components/Sidebar.js.map +0 -1
  393. package/dist/contexts/LanguageContext.d.ts +0 -17
  394. package/dist/contexts/LanguageContext.js +0 -4
  395. package/dist/contexts/LanguageContext.js.map +0 -1
  396. package/dist/contexts/OrganizationContext.d.ts +0 -28
  397. package/dist/contexts/OrganizationContext.js +0 -3
  398. package/dist/contexts/OrganizationContext.js.map +0 -1
  399. package/dist/contexts/ThemeContext.d.ts +0 -14
  400. package/dist/contexts/ThemeContext.js +0 -3
  401. package/dist/contexts/ThemeContext.js.map +0 -1
  402. package/dist/hooks/useDateFormat.d.ts +0 -28
  403. package/dist/hooks/useDateFormat.js +0 -4
  404. package/dist/hooks/useDateFormat.js.map +0 -1
  405. package/dist/i18n.d.ts +0 -38
  406. package/dist/i18n.js +0 -3
  407. package/dist/i18n.js.map +0 -1
  408. package/dist/types.d.ts +0 -91
  409. package/dist/types.js +0 -3
  410. package/dist/types.js.map +0 -1
package/README.md CHANGED
@@ -1,14 +1,11 @@
1
1
  # @omnifyjp/ui
2
2
 
3
- A production-ready application shell framework for multi-tenant React apps. Provides a complete layout system with collapsible sidebar, header with organization switching, theme management, internationalization (vi/en/ja), and flexible page containers.
4
-
5
- Built on top of [`@omnifyjp/ui-components`](https://www.npmjs.com/package/@omnifyjp/ui-components) components.
3
+ A comprehensive UI component library for React apps. Contains 67 Shadcn/Radix primitives and 14 domain-specific components with a complete design token system.
6
4
 
7
5
  ## Installation
8
6
 
9
7
  ```bash
10
8
  npm install @omnifyjp/ui
11
- # This automatically installs @omnifyjp/ui-components as a dependency
12
9
  ```
13
10
 
14
11
  ### Peer Dependencies
@@ -445,7 +442,7 @@ This package depends on:
445
442
 
446
443
  | Package | Purpose |
447
444
  |---------|---------|
448
- | `@omnifyjp/ui-components` | UI component primitives (auto-installed) |
445
+ | `@omnifyjp/ui` | UI component primitives (auto-installed) |
449
446
  | `i18next` | Internationalization core |
450
447
  | `react-i18next` | React i18n bindings |
451
448
  | `date-fns` | Date formatting |
@@ -466,7 +463,7 @@ Peer dependencies (you provide):
466
463
 
467
464
  | Package | Description |
468
465
  |---------|-------------|
469
- | [`@omnifyjp/ui-components`](https://www.npmjs.com/package/@omnifyjp/ui-components) | 53 Shadcn primitives + 14 domain components |
466
+ | [`@omnifyjp/ui`](https://www.npmjs.com/package/@omnifyjp/ui) | 53 Shadcn primitives + 14 domain components |
470
467
  | [`@omnifyjp/editor`](https://www.npmjs.com/package/@omnifyjp/editor) | Rich text editors (Tiptap + BlockNote) |
471
468
 
472
469
  ---
@@ -0,0 +1,51 @@
1
+ import { Badge } from './chunk-A3BB5ZOC.js';
2
+ import { cn } from './chunk-DGPY4WP3.js';
3
+ import { MoreHorizontal, FileText, FileSignature, ShoppingCart, Receipt, Calendar } from 'lucide-react';
4
+ import { jsxs, jsx } from 'react/jsx-runtime';
5
+
6
+ var categoryConfig = {
7
+ leave: {
8
+ icon: Calendar,
9
+ style: "bg-blue-50 dark:bg-blue-500/15 text-blue-600 dark:text-blue-400 border-blue-200 dark:border-blue-500/30"
10
+ },
11
+ expense: {
12
+ icon: Receipt,
13
+ style: "bg-green-50 dark:bg-green-500/15 text-green-600 dark:text-green-400 border-green-200 dark:border-green-500/30"
14
+ },
15
+ purchase: {
16
+ icon: ShoppingCart,
17
+ style: "bg-amber-50 dark:bg-amber-500/15 text-amber-600 dark:text-amber-400 border-amber-200 dark:border-amber-500/30"
18
+ },
19
+ contract: {
20
+ icon: FileSignature,
21
+ style: "bg-purple-50 dark:bg-purple-500/15 text-purple-600 dark:text-purple-400 border-purple-200 dark:border-purple-500/30"
22
+ },
23
+ document: {
24
+ icon: FileText,
25
+ style: "bg-cyan-50 dark:bg-cyan-500/15 text-cyan-600 dark:text-cyan-400 border-cyan-200 dark:border-cyan-500/30"
26
+ },
27
+ other: {
28
+ icon: MoreHorizontal,
29
+ style: "bg-muted text-muted-foreground"
30
+ }
31
+ };
32
+ var defaultLabels = {
33
+ leave: "Leave",
34
+ expense: "Expense",
35
+ purchase: "Purchase",
36
+ contract: "Contract",
37
+ document: "Document",
38
+ other: "Other"
39
+ };
40
+ function WorkflowCategoryBadge({ category, label, className }) {
41
+ const config = categoryConfig[category];
42
+ const Icon = config.icon;
43
+ return /* @__PURE__ */ jsxs(Badge, { variant: "outline", className: cn(config.style, className), children: [
44
+ /* @__PURE__ */ jsx(Icon, { className: "w-3 h-3 mr-1" }),
45
+ label ?? defaultLabels[category]
46
+ ] });
47
+ }
48
+
49
+ export { WorkflowCategoryBadge };
50
+ //# sourceMappingURL=chunk-2C2HRGM7.js.map
51
+ //# sourceMappingURL=chunk-2C2HRGM7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/workflow-category-badge.tsx"],"names":[],"mappings":";;;;;AA6BA,IAAM,cAAA,GAAqF;AAAA,EACzF,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,KAAA,EACE;AAAA,GACJ;AAAA,EACA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,OAAA;AAAA,IACN,KAAA,EACE;AAAA,GACJ;AAAA,EACA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,YAAA;AAAA,IACN,KAAA,EACE;AAAA,GACJ;AAAA,EACA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,aAAA;AAAA,IACN,KAAA,EACE;AAAA,GACJ;AAAA,EACA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,QAAA;AAAA,IACN,KAAA,EACE;AAAA,GACJ;AAAA,EACA,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,cAAA;AAAA,IACN,KAAA,EAAO;AAAA;AAEX,CAAA;AAEA,IAAM,aAAA,GAAkD;AAAA,EACtD,KAAA,EAAO,OAAA;AAAA,EACP,OAAA,EAAS,SAAA;AAAA,EACT,QAAA,EAAU,UAAA;AAAA,EACV,QAAA,EAAU,UAAA;AAAA,EACV,QAAA,EAAU,UAAA;AAAA,EACV,KAAA,EAAO;AACT,CAAA;AAmBO,SAAS,qBAAA,CAAsB,EAAE,QAAA,EAAU,KAAA,EAAO,WAAU,EAA+B;AAChG,EAAA,MAAM,MAAA,GAAS,eAAe,QAAQ,CAAA;AACtC,EAAA,MAAM,OAAO,MAAA,CAAO,IAAA;AAEpB,EAAA,uBACE,IAAA,CAAC,SAAM,OAAA,EAAQ,SAAA,EAAU,WAAW,EAAA,CAAG,MAAA,CAAO,KAAA,EAAO,SAAS,CAAA,EAC5D,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,WAAU,cAAA,EAAe,CAAA;AAAA,IAC9B,KAAA,IAAS,cAAc,QAAQ;AAAA,GAAA,EAClC,CAAA;AAEJ","file":"chunk-2C2HRGM7.js","sourcesContent":["import {\n Calendar,\n Receipt,\n ShoppingCart,\n FileSignature,\n FileText,\n MoreHorizontal,\n} from 'lucide-react';\nimport { cn } from '../lib/utils';\nimport { Badge } from './badge';\n\n/** Supported workflow categories with built-in icon and color mappings. */\nexport type WorkflowCategory =\n | 'leave'\n | 'expense'\n | 'purchase'\n | 'contract'\n | 'document'\n | 'other';\n\nexport interface WorkflowCategoryBadgeProps {\n /** The category key. Determines the icon and color. */\n category: WorkflowCategory;\n /** The displayed label text. Defaults to a capitalized version of the category. */\n label?: string;\n /** Optional additional className. */\n className?: string;\n}\n\nconst categoryConfig: Record<WorkflowCategory, { icon: typeof Calendar; style: string }> = {\n leave: {\n icon: Calendar,\n style:\n 'bg-blue-50 dark:bg-blue-500/15 text-blue-600 dark:text-blue-400 border-blue-200 dark:border-blue-500/30',\n },\n expense: {\n icon: Receipt,\n style:\n 'bg-green-50 dark:bg-green-500/15 text-green-600 dark:text-green-400 border-green-200 dark:border-green-500/30',\n },\n purchase: {\n icon: ShoppingCart,\n style:\n 'bg-amber-50 dark:bg-amber-500/15 text-amber-600 dark:text-amber-400 border-amber-200 dark:border-amber-500/30',\n },\n contract: {\n icon: FileSignature,\n style:\n 'bg-purple-50 dark:bg-purple-500/15 text-purple-600 dark:text-purple-400 border-purple-200 dark:border-purple-500/30',\n },\n document: {\n icon: FileText,\n style:\n 'bg-cyan-50 dark:bg-cyan-500/15 text-cyan-600 dark:text-cyan-400 border-cyan-200 dark:border-cyan-500/30',\n },\n other: {\n icon: MoreHorizontal,\n style: 'bg-muted text-muted-foreground',\n },\n};\n\nconst defaultLabels: Record<WorkflowCategory, string> = {\n leave: 'Leave',\n expense: 'Expense',\n purchase: 'Purchase',\n contract: 'Contract',\n document: 'Document',\n other: 'Other',\n};\n\n/**\n * WorkflowCategoryBadge renders a badge with an icon and color for a workflow category.\n *\n * Each category has a dedicated icon and color scheme:\n * - leave: Calendar (blue)\n * - expense: Receipt (green)\n * - purchase: ShoppingCart (amber)\n * - contract: FileSignature (purple)\n * - document: FileText (cyan)\n * - other: MoreHorizontal (muted)\n *\n * @example\n * ```tsx\n * <WorkflowCategoryBadge category=\"expense\" />\n * <WorkflowCategoryBadge category=\"leave\" label=\"Annual Leave\" />\n * ```\n */\nexport function WorkflowCategoryBadge({ category, label, className }: WorkflowCategoryBadgeProps) {\n const config = categoryConfig[category];\n const Icon = config.icon;\n\n return (\n <Badge variant=\"outline\" className={cn(config.style, className)}>\n <Icon className=\"w-3 h-3 mr-1\" />\n {label ?? defaultLabels[category]}\n </Badge>\n );\n}\n"]}
@@ -0,0 +1,196 @@
1
+ import { Button } from './chunk-55E7D2HR.js';
2
+ import { cn } from './chunk-DGPY4WP3.js';
3
+ import * as React from 'react';
4
+ import useEmblaCarousel from 'embla-carousel-react';
5
+ import { ArrowLeft, ArrowRight } from 'lucide-react';
6
+ import { jsx, jsxs } from 'react/jsx-runtime';
7
+
8
+ var CarouselContext = React.createContext(null);
9
+ function useCarousel() {
10
+ const context = React.useContext(CarouselContext);
11
+ if (!context) {
12
+ throw new Error("useCarousel must be used within a <Carousel />");
13
+ }
14
+ return context;
15
+ }
16
+ function Carousel({
17
+ orientation = "horizontal",
18
+ opts,
19
+ setApi,
20
+ plugins,
21
+ className,
22
+ children,
23
+ ...props
24
+ }) {
25
+ const [carouselRef, api] = useEmblaCarousel(
26
+ {
27
+ ...opts,
28
+ axis: orientation === "horizontal" ? "x" : "y"
29
+ },
30
+ plugins
31
+ );
32
+ const [canScrollPrev, setCanScrollPrev] = React.useState(false);
33
+ const [canScrollNext, setCanScrollNext] = React.useState(false);
34
+ const onSelect = React.useCallback((api2) => {
35
+ if (!api2) return;
36
+ setCanScrollPrev(api2.canScrollPrev());
37
+ setCanScrollNext(api2.canScrollNext());
38
+ }, []);
39
+ const scrollPrev = React.useCallback(() => {
40
+ api?.scrollPrev();
41
+ }, [api]);
42
+ const scrollNext = React.useCallback(() => {
43
+ api?.scrollNext();
44
+ }, [api]);
45
+ const handleKeyDown = React.useCallback(
46
+ (event) => {
47
+ if (event.key === "ArrowLeft") {
48
+ event.preventDefault();
49
+ scrollPrev();
50
+ } else if (event.key === "ArrowRight") {
51
+ event.preventDefault();
52
+ scrollNext();
53
+ }
54
+ },
55
+ [scrollPrev, scrollNext]
56
+ );
57
+ React.useEffect(() => {
58
+ if (!api || !setApi) return;
59
+ setApi(api);
60
+ }, [api, setApi]);
61
+ React.useEffect(() => {
62
+ if (!api) return;
63
+ onSelect(api);
64
+ api.on("reInit", onSelect);
65
+ api.on("select", onSelect);
66
+ return () => {
67
+ api?.off("select", onSelect);
68
+ };
69
+ }, [api, onSelect]);
70
+ return /* @__PURE__ */ jsx(
71
+ CarouselContext.Provider,
72
+ {
73
+ value: {
74
+ carouselRef,
75
+ api,
76
+ opts,
77
+ orientation: orientation || (opts?.axis === "y" ? "vertical" : "horizontal"),
78
+ scrollPrev,
79
+ scrollNext,
80
+ canScrollPrev,
81
+ canScrollNext
82
+ },
83
+ children: /* @__PURE__ */ jsx(
84
+ "div",
85
+ {
86
+ onKeyDownCapture: handleKeyDown,
87
+ className: cn("relative", className),
88
+ role: "region",
89
+ "aria-roledescription": "carousel",
90
+ "data-slot": "carousel",
91
+ ...props,
92
+ children
93
+ }
94
+ )
95
+ }
96
+ );
97
+ }
98
+ function CarouselContent({ className, ...props }) {
99
+ const { carouselRef, orientation } = useCarousel();
100
+ return /* @__PURE__ */ jsx(
101
+ "div",
102
+ {
103
+ ref: carouselRef,
104
+ className: "overflow-hidden",
105
+ "data-slot": "carousel-content",
106
+ children: /* @__PURE__ */ jsx(
107
+ "div",
108
+ {
109
+ className: cn(
110
+ "flex",
111
+ orientation === "horizontal" ? "-ml-4" : "-mt-4 flex-col",
112
+ className
113
+ ),
114
+ ...props
115
+ }
116
+ )
117
+ }
118
+ );
119
+ }
120
+ function CarouselItem({ className, ...props }) {
121
+ const { orientation } = useCarousel();
122
+ return /* @__PURE__ */ jsx(
123
+ "div",
124
+ {
125
+ role: "group",
126
+ "aria-roledescription": "slide",
127
+ "data-slot": "carousel-item",
128
+ className: cn(
129
+ "min-w-0 shrink-0 grow-0 basis-full",
130
+ orientation === "horizontal" ? "pl-4" : "pt-4",
131
+ className
132
+ ),
133
+ ...props
134
+ }
135
+ );
136
+ }
137
+ function CarouselPrevious({
138
+ className,
139
+ variant = "outline",
140
+ size = "icon",
141
+ ...props
142
+ }) {
143
+ const { orientation, scrollPrev, canScrollPrev } = useCarousel();
144
+ return /* @__PURE__ */ jsxs(
145
+ Button,
146
+ {
147
+ "data-slot": "carousel-previous",
148
+ variant,
149
+ size,
150
+ className: cn(
151
+ "absolute size-8 rounded-full",
152
+ orientation === "horizontal" ? "top-1/2 -left-12 -translate-y-1/2" : "-top-12 left-1/2 -translate-x-1/2 rotate-90",
153
+ className
154
+ ),
155
+ disabled: !canScrollPrev,
156
+ onClick: scrollPrev,
157
+ ...props,
158
+ children: [
159
+ /* @__PURE__ */ jsx(ArrowLeft, {}),
160
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Previous slide" })
161
+ ]
162
+ }
163
+ );
164
+ }
165
+ function CarouselNext({
166
+ className,
167
+ variant = "outline",
168
+ size = "icon",
169
+ ...props
170
+ }) {
171
+ const { orientation, scrollNext, canScrollNext } = useCarousel();
172
+ return /* @__PURE__ */ jsxs(
173
+ Button,
174
+ {
175
+ "data-slot": "carousel-next",
176
+ variant,
177
+ size,
178
+ className: cn(
179
+ "absolute size-8 rounded-full",
180
+ orientation === "horizontal" ? "top-1/2 -right-12 -translate-y-1/2" : "-bottom-12 left-1/2 -translate-x-1/2 rotate-90",
181
+ className
182
+ ),
183
+ disabled: !canScrollNext,
184
+ onClick: scrollNext,
185
+ ...props,
186
+ children: [
187
+ /* @__PURE__ */ jsx(ArrowRight, {}),
188
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Next slide" })
189
+ ]
190
+ }
191
+ );
192
+ }
193
+
194
+ export { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious };
195
+ //# sourceMappingURL=chunk-2TUWDXAC.js.map
196
+ //# sourceMappingURL=chunk-2TUWDXAC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/carousel.tsx"],"names":["api"],"mappings":"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","file":"chunk-2TUWDXAC.js","sourcesContent":["import * as React from \"react\";\nimport useEmblaCarousel from \"embla-carousel-react\";\nimport { ArrowLeft, ArrowRight } from \"lucide-react\";\n\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\n\ntype CarouselApi = ReturnType<typeof useEmblaCarousel>[1];\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>;\ntype CarouselOptions = UseCarouselParameters[0];\ntype CarouselPlugin = UseCarouselParameters[1];\n\ntype CarouselProps = {\n /** Embla Carousel options (e.g., `{ loop: true, align: \"start\" }`). */\n opts?: CarouselOptions;\n /** Embla Carousel plugins (e.g., Autoplay, ClassNames). */\n plugins?: CarouselPlugin;\n /** Scroll axis direction. Defaults to `\"horizontal\"`. */\n orientation?: \"horizontal\" | \"vertical\";\n /** Callback to receive the Embla API instance for external control. */\n setApi?: (api: CarouselApi) => void;\n};\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0];\n api: ReturnType<typeof useEmblaCarousel>[1];\n scrollPrev: () => void;\n scrollNext: () => void;\n canScrollPrev: boolean;\n canScrollNext: boolean;\n} & CarouselProps;\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null);\n\n/** Returns the carousel context. Must be called within a `<Carousel>` provider. */\nfunction useCarousel() {\n const context = React.useContext(CarouselContext);\n\n if (!context) {\n throw new Error(\"useCarousel must be used within a <Carousel />\");\n }\n\n return context;\n}\n\n/**\n * Carousel/slider component powered by Embla Carousel.\n *\n * Provides a context for child components (`CarouselContent`, `CarouselItem`,\n * `CarouselPrevious`, `CarouselNext`). Supports horizontal/vertical orientation,\n * keyboard navigation (arrow keys), and plugin extensibility.\n *\n * @example\n * ```tsx\n * <Carousel opts={{ loop: true }}>\n * <CarouselContent>\n * <CarouselItem>Slide 1</CarouselItem>\n * <CarouselItem>Slide 2</CarouselItem>\n * <CarouselItem>Slide 3</CarouselItem>\n * </CarouselContent>\n * <CarouselPrevious />\n * <CarouselNext />\n * </Carousel>\n * ```\n */\nfunction Carousel({\n orientation = \"horizontal\",\n opts,\n setApi,\n plugins,\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & CarouselProps) {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\n },\n plugins,\n );\n const [canScrollPrev, setCanScrollPrev] = React.useState(false);\n const [canScrollNext, setCanScrollNext] = React.useState(false);\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) return;\n setCanScrollPrev(api.canScrollPrev());\n setCanScrollNext(api.canScrollNext());\n }, []);\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev();\n }, [api]);\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext();\n }, [api]);\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n scrollPrev();\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault();\n scrollNext();\n }\n },\n [scrollPrev, scrollNext],\n );\n\n React.useEffect(() => {\n if (!api || !setApi) return;\n setApi(api);\n }, [api, setApi]);\n\n React.useEffect(() => {\n if (!api) return;\n onSelect(api);\n api.on(\"reInit\", onSelect);\n api.on(\"select\", onSelect);\n\n return () => {\n api?.off(\"select\", onSelect);\n };\n }, [api, onSelect]);\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api: api,\n opts,\n orientation:\n orientation || (opts?.axis === \"y\" ? \"vertical\" : \"horizontal\"),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}\n >\n <div\n onKeyDownCapture={handleKeyDown}\n className={cn(\"relative\", className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n data-slot=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n );\n}\n\n/** Scrollable container for `CarouselItem` elements. Manages the overflow viewport. */\nfunction CarouselContent({ className, ...props }: React.ComponentProps<\"div\">) {\n const { carouselRef, orientation } = useCarousel();\n\n return (\n <div\n ref={carouselRef}\n className=\"overflow-hidden\"\n data-slot=\"carousel-content\"\n >\n <div\n className={cn(\n \"flex\",\n orientation === \"horizontal\" ? \"-ml-4\" : \"-mt-4 flex-col\",\n className,\n )}\n {...props}\n />\n </div>\n );\n}\n\n/** Individual slide within the carousel. Defaults to full-width (`basis-full`). */\nfunction CarouselItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const { orientation } = useCarousel();\n\n return (\n <div\n role=\"group\"\n aria-roledescription=\"slide\"\n data-slot=\"carousel-item\"\n className={cn(\n \"min-w-0 shrink-0 grow-0 basis-full\",\n orientation === \"horizontal\" ? \"pl-4\" : \"pt-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Navigation button to scroll to the previous slide. Automatically disabled when at the beginning. */\nfunction CarouselPrevious({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n return (\n <Button\n data-slot=\"carousel-previous\"\n variant={variant}\n size={size}\n className={cn(\n \"absolute size-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"top-1/2 -left-12 -translate-y-1/2\"\n : \"-top-12 left-1/2 -translate-x-1/2 rotate-90\",\n className,\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n <ArrowLeft />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n );\n}\n\n/** Navigation button to scroll to the next slide. Automatically disabled when at the end. */\nfunction CarouselNext({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollNext, canScrollNext } = useCarousel();\n\n return (\n <Button\n data-slot=\"carousel-next\"\n variant={variant}\n size={size}\n className={cn(\n \"absolute size-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"top-1/2 -right-12 -translate-y-1/2\"\n : \"-bottom-12 left-1/2 -translate-x-1/2 rotate-90\",\n className,\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n <ArrowRight />\n <span className=\"sr-only\">Next slide</span>\n </Button>\n );\n}\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n};\n"]}
@@ -0,0 +1,63 @@
1
+ import { cn } from './chunk-DGPY4WP3.js';
2
+ import * as AccordionPrimitive from '@radix-ui/react-accordion';
3
+ import { ChevronDownIcon } from 'lucide-react';
4
+ import { jsx, jsxs } from 'react/jsx-runtime';
5
+
6
+ function Accordion({
7
+ ...props
8
+ }) {
9
+ return /* @__PURE__ */ jsx(AccordionPrimitive.Root, { "data-slot": "accordion", ...props });
10
+ }
11
+ function AccordionItem({
12
+ className,
13
+ ...props
14
+ }) {
15
+ return /* @__PURE__ */ jsx(
16
+ AccordionPrimitive.Item,
17
+ {
18
+ "data-slot": "accordion-item",
19
+ className: cn("border-b last:border-b-0", className),
20
+ ...props
21
+ }
22
+ );
23
+ }
24
+ function AccordionTrigger({
25
+ className,
26
+ children,
27
+ ...props
28
+ }) {
29
+ return /* @__PURE__ */ jsx(AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ jsxs(
30
+ AccordionPrimitive.Trigger,
31
+ {
32
+ "data-slot": "accordion-trigger",
33
+ className: cn(
34
+ "focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-[var(--density-accordion)] text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180",
35
+ className
36
+ ),
37
+ ...props,
38
+ children: [
39
+ children,
40
+ /* @__PURE__ */ jsx(ChevronDownIcon, { className: "text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200" })
41
+ ]
42
+ }
43
+ ) });
44
+ }
45
+ function AccordionContent({
46
+ className,
47
+ children,
48
+ ...props
49
+ }) {
50
+ return /* @__PURE__ */ jsx(
51
+ AccordionPrimitive.Content,
52
+ {
53
+ "data-slot": "accordion-content",
54
+ className: "data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm",
55
+ ...props,
56
+ children: /* @__PURE__ */ jsx("div", { className: cn("pt-0 pb-[var(--density-accordion)]", className), children })
57
+ }
58
+ );
59
+ }
60
+
61
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger };
62
+ //# sourceMappingURL=chunk-34ARZSNP.js.map
63
+ //# sourceMappingURL=chunk-34ARZSNP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/accordion.tsx"],"names":[],"mappings":";;;;;AA8BA,SAAS,SAAA,CAAU;AAAA,EACjB,GAAG;AACL,CAAA,EAAyD;AACvD,EAAA,2BAA2B,kBAAA,CAAA,IAAA,EAAnB,EAAwB,WAAA,EAAU,WAAA,EAAa,GAAG,KAAA,EAAO,CAAA;AACnE;AAGA,SAAS,aAAA,CAAc;AAAA,EACrB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAyD;AACvD,EAAA,uBACE,GAAA;AAAA,IAAoB,kBAAA,CAAA,IAAA;AAAA,IAAnB;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,0BAAA,EAA4B,SAAS,CAAA;AAAA,MAClD,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAAS,gBAAA,CAAiB;AAAA,EACxB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA4D;AAC1D,EAAA,uBACE,GAAA,CAAoB,kBAAA,CAAA,MAAA,EAAnB,EAA0B,SAAA,EAAU,MAAA,EACnC,QAAA,kBAAA,IAAA;AAAA,IAAoB,kBAAA,CAAA,OAAA;AAAA,IAAnB;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,qUAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACD,GAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAU,6GAAA,EAA8G;AAAA;AAAA;AAAA,GAC3I,EACF,CAAA;AAEJ;AAGA,SAAS,gBAAA,CAAiB;AAAA,EACxB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA4D;AAC1D,EAAA,uBACE,GAAA;AAAA,IAAoB,kBAAA,CAAA,OAAA;AAAA,IAAnB;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAU,2GAAA;AAAA,MACT,GAAG,KAAA;AAAA,MAEJ,8BAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,oCAAA,EAAsC,SAAS,GAAI,QAAA,EAAS;AAAA;AAAA,GACjF;AAEJ","file":"chunk-34ARZSNP.js","sourcesContent":["import * as React from \"react\";\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\";\nimport { ChevronDownIcon } from \"lucide-react\";\n\nimport { cn } from \"../lib/utils\";\n\n/**\n * Vertically collapsible content sections built on Radix Accordion.\n *\n * Supports `\"single\"` (one panel open at a time) and `\"multiple\"` (any number open)\n * modes via the `type` prop. Each section animates open/closed with a chevron indicator.\n *\n * @example\n * ```tsx\n * <Accordion type=\"single\" collapsible>\n * <AccordionItem value=\"item-1\">\n * <AccordionTrigger>Is it accessible?</AccordionTrigger>\n * <AccordionContent>\n * Yes. It adheres to the WAI-ARIA Accordion pattern.\n * </AccordionContent>\n * </AccordionItem>\n * <AccordionItem value=\"item-2\">\n * <AccordionTrigger>Is it styled?</AccordionTrigger>\n * <AccordionContent>\n * Yes. It ships with default styles via Tailwind CSS.\n * </AccordionContent>\n * </AccordionItem>\n * </Accordion>\n * ```\n */\nfunction Accordion({\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Root>) {\n return <AccordionPrimitive.Root data-slot=\"accordion\" {...props} />;\n}\n\n/** Individual accordion section. Requires a unique `value` prop. */\nfunction AccordionItem({\n className,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Item>) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn(\"border-b last:border-b-0\", className)}\n {...props}\n />\n );\n}\n\n/** Clickable trigger that toggles its parent `AccordionItem`. Renders a chevron icon that rotates on open. */\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Trigger>) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n \"focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-[var(--density-accordion)] text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronDownIcon className=\"text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n );\n}\n\n/** Animated collapsible content area within an `AccordionItem`. */\nfunction AccordionContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Content>) {\n return (\n <AccordionPrimitive.Content\n data-slot=\"accordion-content\"\n className=\"data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm\"\n {...props}\n >\n <div className={cn(\"pt-0 pb-[var(--density-accordion)]\", className)}>{children}</div>\n </AccordionPrimitive.Content>\n );\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };"]}
@@ -0,0 +1,13 @@
1
+ import * as AspectRatioPrimitive from '@radix-ui/react-aspect-ratio';
2
+ import { jsx } from 'react/jsx-runtime';
3
+
4
+ // src/components/aspect-ratio.tsx
5
+ function AspectRatio({
6
+ ...props
7
+ }) {
8
+ return /* @__PURE__ */ jsx(AspectRatioPrimitive.Root, { "data-slot": "aspect-ratio", ...props });
9
+ }
10
+
11
+ export { AspectRatio };
12
+ //# sourceMappingURL=chunk-35DNN46W.js.map
13
+ //# sourceMappingURL=chunk-35DNN46W.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/aspect-ratio.tsx"],"names":[],"mappings":";;;;AAmBA,SAAS,WAAA,CAAY;AAAA,EACnB,GAAG;AACL,CAAA,EAA2D;AACzD,EAAA,2BAA6B,oBAAA,CAAA,IAAA,EAArB,EAA0B,WAAA,EAAU,cAAA,EAAgB,GAAG,KAAA,EAAO,CAAA;AACxE","file":"chunk-35DNN46W.js","sourcesContent":["import * as AspectRatioPrimitive from \"@radix-ui/react-aspect-ratio\";\n\n/**\n * Maintains a consistent width-to-height ratio for its content.\n *\n * Useful for images, videos, and maps that need to preserve their aspect ratio\n * across different viewport sizes. Built on Radix AspectRatio.\n *\n * @example\n * ```tsx\n * <AspectRatio ratio={16 / 9}>\n * <img\n * src=\"/hero.jpg\"\n * alt=\"Hero image\"\n * className=\"h-full w-full rounded-md object-cover\"\n * />\n * </AspectRatio>\n * ```\n */\nfunction AspectRatio({\n ...props\n}: React.ComponentProps<typeof AspectRatioPrimitive.Root>) {\n return <AspectRatioPrimitive.Root data-slot=\"aspect-ratio\" {...props} />;\n}\n\nexport { AspectRatio };\n"]}
@@ -0,0 +1,116 @@
1
+ import { cn } from './chunk-DGPY4WP3.js';
2
+ import * as React from 'react';
3
+ import { Star } from 'lucide-react';
4
+ import { jsxs, jsx } from 'react/jsx-runtime';
5
+
6
+ function Rating({
7
+ value = 0,
8
+ onChange,
9
+ max = 5,
10
+ size = "md",
11
+ readonly = false,
12
+ allowHalf = false,
13
+ className
14
+ }) {
15
+ const [hoverValue, setHoverValue] = React.useState(null);
16
+ const sizeClasses = {
17
+ sm: "w-4 h-4",
18
+ md: "w-5 h-5",
19
+ lg: "w-6 h-6"
20
+ };
21
+ const handleClick = (index, isHalf) => {
22
+ if (readonly) return;
23
+ const newValue = isHalf ? index + 0.5 : index + 1;
24
+ onChange?.(newValue);
25
+ };
26
+ const handleMouseMove = (index, e) => {
27
+ if (readonly || !allowHalf) return;
28
+ const rect = e.currentTarget.getBoundingClientRect();
29
+ const x = e.clientX - rect.left;
30
+ const isHalf = x < rect.width / 2;
31
+ setHoverValue(isHalf ? index + 0.5 : index + 1);
32
+ };
33
+ const handleMouseEnter = (index) => {
34
+ if (readonly) return;
35
+ if (!allowHalf) {
36
+ setHoverValue(index + 1);
37
+ }
38
+ };
39
+ const handleMouseLeave = () => {
40
+ setHoverValue(null);
41
+ };
42
+ const getStarFill = (index) => {
43
+ const currentValue = hoverValue !== null ? hoverValue : value;
44
+ if (currentValue >= index + 1) {
45
+ return "full";
46
+ } else if (allowHalf && currentValue >= index + 0.5) {
47
+ return "half";
48
+ } else {
49
+ return "empty";
50
+ }
51
+ };
52
+ return /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-1", className), children: [
53
+ Array.from({ length: max }).map((_, index) => {
54
+ const fill = getStarFill(index);
55
+ return /* @__PURE__ */ jsx(
56
+ "button",
57
+ {
58
+ type: "button",
59
+ onClick: (e) => {
60
+ if (!allowHalf) {
61
+ handleClick(index, false);
62
+ return;
63
+ }
64
+ const rect = e.currentTarget.getBoundingClientRect();
65
+ const x = e.clientX - rect.left;
66
+ const isHalf = x < rect.width / 2;
67
+ handleClick(index, isHalf);
68
+ },
69
+ onMouseMove: (e) => handleMouseMove(index, e),
70
+ onMouseEnter: () => handleMouseEnter(index),
71
+ onMouseLeave: handleMouseLeave,
72
+ disabled: readonly,
73
+ className: cn(
74
+ "relative transition-transform hover:scale-110",
75
+ !readonly && "cursor-pointer",
76
+ readonly && "cursor-default"
77
+ ),
78
+ children: fill === "half" ? /* @__PURE__ */ jsxs("div", { className: "relative", children: [
79
+ /* @__PURE__ */ jsx(
80
+ Star,
81
+ {
82
+ className: cn(
83
+ sizeClasses[size],
84
+ "text-muted-foreground/40"
85
+ )
86
+ }
87
+ ),
88
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0 overflow-hidden w-1/2", children: /* @__PURE__ */ jsx(
89
+ Star,
90
+ {
91
+ className: cn(
92
+ sizeClasses[size],
93
+ "text-yellow-400 fill-yellow-400"
94
+ )
95
+ }
96
+ ) })
97
+ ] }) : /* @__PURE__ */ jsx(
98
+ Star,
99
+ {
100
+ className: cn(
101
+ sizeClasses[size],
102
+ fill === "full" ? "text-yellow-400 fill-yellow-400" : "text-muted-foreground/40"
103
+ )
104
+ }
105
+ )
106
+ },
107
+ index
108
+ );
109
+ }),
110
+ value > 0 && /* @__PURE__ */ jsx("span", { className: "ml-2 text-sm text-muted-foreground", children: value.toFixed(allowHalf ? 1 : 0) })
111
+ ] });
112
+ }
113
+
114
+ export { Rating };
115
+ //# sourceMappingURL=chunk-35U6QG4P.js.map
116
+ //# sourceMappingURL=chunk-35U6QG4P.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/rating.tsx"],"names":[],"mappings":"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","file":"chunk-35U6QG4P.js","sourcesContent":["import * as React from \"react\";\nimport { Star } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\ninterface RatingProps {\n /** Current rating value (e.g., `3` or `3.5` with half stars). */\n value?: number;\n /** Callback fired when the user clicks a star. Receives the new rating number. */\n onChange?: (value: number) => void;\n /** Maximum number of stars. Defaults to `5`. */\n max?: number;\n /** Size of the star icons. Defaults to `\"md\"`. */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Whether the rating is display-only (non-interactive). Defaults to `false`. */\n readonly?: boolean;\n /** Whether half-star ratings are enabled. Defaults to `false`. */\n allowHalf?: boolean;\n /** Additional CSS class for the outer container. */\n className?: string;\n}\n\n/**\n * Star rating component with hover preview and optional half-star support.\n * Shows filled/empty/half star icons and displays the numeric value beside the stars.\n *\n * @example\n * ```tsx\n * const [rating, setRating] = useState(0);\n *\n * <Rating value={rating} onChange={setRating} max={5} />\n *\n * // Read-only display with half stars:\n * <Rating value={3.5} readonly allowHalf />\n * ```\n */\nexport function Rating({\n value = 0,\n onChange,\n max = 5,\n size = \"md\",\n readonly = false,\n allowHalf = false,\n className,\n}: RatingProps) {\n const [hoverValue, setHoverValue] = React.useState<number | null>(null);\n\n const sizeClasses = {\n sm: \"w-4 h-4\",\n md: \"w-5 h-5\",\n lg: \"w-6 h-6\",\n };\n\n const handleClick = (index: number, isHalf: boolean) => {\n if (readonly) return;\n const newValue = isHalf ? index + 0.5 : index + 1;\n onChange?.(newValue);\n };\n\n const handleMouseMove = (index: number, e: React.MouseEvent<HTMLButtonElement>) => {\n if (readonly || !allowHalf) return;\n\n const rect = e.currentTarget.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const isHalf = x < rect.width / 2;\n\n setHoverValue(isHalf ? index + 0.5 : index + 1);\n };\n\n const handleMouseEnter = (index: number) => {\n if (readonly) return;\n if (!allowHalf) {\n setHoverValue(index + 1);\n }\n };\n\n const handleMouseLeave = () => {\n setHoverValue(null);\n };\n\n const getStarFill = (index: number) => {\n const currentValue = hoverValue !== null ? hoverValue : value;\n\n if (currentValue >= index + 1) {\n return \"full\";\n } else if (allowHalf && currentValue >= index + 0.5) {\n return \"half\";\n } else {\n return \"empty\";\n }\n };\n\n return (\n <div className={cn(\"flex items-center gap-1\", className)}>\n {Array.from({ length: max }).map((_, index) => {\n const fill = getStarFill(index);\n\n return (\n <button\n key={index}\n type=\"button\"\n onClick={(e) => {\n if (!allowHalf) {\n handleClick(index, false);\n return;\n }\n const rect = e.currentTarget.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const isHalf = x < rect.width / 2;\n handleClick(index, isHalf);\n }}\n onMouseMove={(e) => handleMouseMove(index, e)}\n onMouseEnter={() => handleMouseEnter(index)}\n onMouseLeave={handleMouseLeave}\n disabled={readonly}\n className={cn(\n \"relative transition-transform hover:scale-110\",\n !readonly && \"cursor-pointer\",\n readonly && \"cursor-default\"\n )}\n >\n {fill === \"half\" ? (\n <div className=\"relative\">\n <Star\n className={cn(\n sizeClasses[size],\n \"text-muted-foreground/40\"\n )}\n />\n <div className=\"absolute inset-0 overflow-hidden w-1/2\">\n <Star\n className={cn(\n sizeClasses[size],\n \"text-yellow-400 fill-yellow-400\"\n )}\n />\n </div>\n </div>\n ) : (\n <Star\n className={cn(\n sizeClasses[size],\n fill === \"full\"\n ? \"text-yellow-400 fill-yellow-400\"\n : \"text-muted-foreground/40\"\n )}\n />\n )}\n </button>\n );\n })}\n\n {value > 0 && (\n <span className=\"ml-2 text-sm text-muted-foreground\">\n {value.toFixed(allowHalf ? 1 : 0)}\n </span>\n )}\n </div>\n );\n}\n"]}
@@ -0,0 +1,35 @@
1
+ import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
2
+ import { jsx } from 'react/jsx-runtime';
3
+
4
+ // src/components/collapsible.tsx
5
+ function Collapsible({
6
+ ...props
7
+ }) {
8
+ return /* @__PURE__ */ jsx(CollapsiblePrimitive.Root, { "data-slot": "collapsible", ...props });
9
+ }
10
+ function CollapsibleTrigger2({
11
+ ...props
12
+ }) {
13
+ return /* @__PURE__ */ jsx(
14
+ CollapsiblePrimitive.CollapsibleTrigger,
15
+ {
16
+ "data-slot": "collapsible-trigger",
17
+ ...props
18
+ }
19
+ );
20
+ }
21
+ function CollapsibleContent2({
22
+ ...props
23
+ }) {
24
+ return /* @__PURE__ */ jsx(
25
+ CollapsiblePrimitive.CollapsibleContent,
26
+ {
27
+ "data-slot": "collapsible-content",
28
+ ...props
29
+ }
30
+ );
31
+ }
32
+
33
+ export { Collapsible, CollapsibleContent2 as CollapsibleContent, CollapsibleTrigger2 as CollapsibleTrigger };
34
+ //# sourceMappingURL=chunk-3EOHW4QN.js.map
35
+ //# sourceMappingURL=chunk-3EOHW4QN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/collapsible.tsx"],"names":["CollapsibleTrigger","CollapsibleContent"],"mappings":";;;;AAoBA,SAAS,WAAA,CAAY;AAAA,EACnB,GAAG;AACL,CAAA,EAA2D;AACzD,EAAA,2BAA6B,oBAAA,CAAA,IAAA,EAArB,EAA0B,WAAA,EAAU,aAAA,EAAe,GAAG,KAAA,EAAO,CAAA;AACvE;AAGA,SAASA,mBAAAA,CAAmB;AAAA,EAC1B,GAAG;AACL,CAAA,EAAyE;AACvE,EAAA,uBACE,GAAA;AAAA,IAAsB,oBAAA,CAAA,kBAAA;AAAA,IAArB;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAASC,mBAAAA,CAAmB;AAAA,EAC1B,GAAG;AACL,CAAA,EAAyE;AACvE,EAAA,uBACE,GAAA;AAAA,IAAsB,oBAAA,CAAA,kBAAA;AAAA,IAArB;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAEJ","file":"chunk-3EOHW4QN.js","sourcesContent":["import * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\";\n\n/**\n * Expandable/collapsible container built on Radix Collapsible.\n *\n * Manages open/closed state for a single content region. For multiple\n * collapsible sections, consider using `Accordion` instead.\n *\n * @example\n * ```tsx\n * <Collapsible>\n * <CollapsibleTrigger asChild>\n * <Button variant=\"ghost\">Toggle details</Button>\n * </CollapsibleTrigger>\n * <CollapsibleContent>\n * <p>Hidden content revealed on toggle.</p>\n * </CollapsibleContent>\n * </Collapsible>\n * ```\n */\nfunction Collapsible({\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.Root>) {\n return <CollapsiblePrimitive.Root data-slot=\"collapsible\" {...props} />;\n}\n\n/** Button or element that toggles the collapsible open/closed state. Supports `asChild` for custom trigger elements. */\nfunction CollapsibleTrigger({\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>) {\n return (\n <CollapsiblePrimitive.CollapsibleTrigger\n data-slot=\"collapsible-trigger\"\n {...props}\n />\n );\n}\n\n/** Content region that shows/hides when the collapsible is toggled. */\nfunction CollapsibleContent({\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>) {\n return (\n <CollapsiblePrimitive.CollapsibleContent\n data-slot=\"collapsible-content\"\n {...props}\n />\n );\n}\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent };\n"]}
@@ -0,0 +1,41 @@
1
+ import { cn } from './chunk-DGPY4WP3.js';
2
+ import * as React from 'react';
3
+ import { cva } from 'class-variance-authority';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ var inputVariants = cva(
7
+ "file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex w-full min-w-0 rounded-md border bg-input-background transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
8
+ {
9
+ variants: {
10
+ size: {
11
+ xs: "h-element-xs px-2 text-xs",
12
+ sm: "h-element-sm px-2.5 text-sm",
13
+ default: "h-element px-3 py-1 text-base md:text-sm",
14
+ lg: "h-element-lg px-4 text-sm",
15
+ xl: "h-element-xl px-4 text-base"
16
+ }
17
+ },
18
+ defaultVariants: {
19
+ size: "default"
20
+ }
21
+ }
22
+ );
23
+ var Input = React.forwardRef(
24
+ ({ className, type, size, ...props }, ref) => {
25
+ return /* @__PURE__ */ jsx(
26
+ "input",
27
+ {
28
+ type,
29
+ ref,
30
+ "data-slot": "input",
31
+ className: cn(inputVariants({ size, className })),
32
+ ...props
33
+ }
34
+ );
35
+ }
36
+ );
37
+ Input.displayName = "Input";
38
+
39
+ export { Input, inputVariants };
40
+ //# sourceMappingURL=chunk-3VU56V66.js.map
41
+ //# sourceMappingURL=chunk-3VU56V66.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/input.tsx"],"names":[],"mappings":";;;;;AAKA,IAAM,aAAA,GAAgB,GAAA;AAAA,EACpB,8kBAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,2BAAA;AAAA,QACJ,EAAA,EAAI,6BAAA;AAAA,QACJ,OAAA,EAAS,0CAAA;AAAA,QACT,EAAA,EAAI,2BAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM;AAAA;AACR;AAEJ;AAgCA,IAAM,KAAA,GAAc,KAAA,CAAA,UAAA;AAAA,EAClB,CAAC,EAAE,SAAA,EAAW,IAAA,EAAM,MAAM,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC5C,IAAA,uBACE,GAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,GAAA;AAAA,QACA,WAAA,EAAU,OAAA;AAAA,QACV,WAAW,EAAA,CAAG,aAAA,CAAc,EAAE,IAAA,EAAM,SAAA,EAAW,CAAC,CAAA;AAAA,QAC/C,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AACA,KAAA,CAAM,WAAA,GAAc,OAAA","file":"chunk-3VU56V66.js","sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/utils\";\n\nconst inputVariants = cva(\n \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex w-full min-w-0 rounded-md border bg-input-background transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n size: {\n xs: \"h-element-xs px-2 text-xs\",\n sm: \"h-element-sm px-2.5 text-sm\",\n default: \"h-element px-3 py-1 text-base md:text-sm\",\n lg: \"h-element-lg px-4 text-sm\",\n xl: \"h-element-xl px-4 text-base\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n },\n);\n\ninterface InputProps\n extends Omit<React.ComponentProps<\"input\">, \"size\">,\n VariantProps<typeof inputVariants> {}\n\n/**\n * Text input component with multiple size variants.\n *\n * Extends native `<input>` — all standard HTML input attributes are supported.\n *\n * @example\n * ```tsx\n * // Default input\n * <Input placeholder=\"Enter text...\" />\n *\n * // Sizes: xs (24px) | sm (28px) | default (32px) | lg (36px) | xl (44px)\n * <Input size=\"xs\" placeholder=\"Tiny\" />\n * <Input size=\"sm\" placeholder=\"Small\" />\n * <Input size=\"lg\" placeholder=\"Large\" />\n * <Input size=\"xl\" placeholder=\"Extra large\" />\n *\n * // With type\n * <Input type=\"email\" placeholder=\"email@example.com\" />\n * <Input type=\"number\" placeholder=\"0\" />\n * <Input type=\"date\" />\n *\n * // Disabled / invalid\n * <Input disabled placeholder=\"Disabled\" />\n * <Input aria-invalid placeholder=\"Error state\" />\n * ```\n */\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, size, ...props }, ref) => {\n return (\n <input\n type={type}\n ref={ref}\n data-slot=\"input\"\n className={cn(inputVariants({ size, className }))}\n {...props}\n />\n );\n },\n);\nInput.displayName = \"Input\";\n\nexport { Input, inputVariants };\nexport type { InputProps };\n"]}