@jbpark/ui-kit 5.2.0 → 5.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) hide show
  1. package/dist/Button.d.mts +1 -19
  2. package/dist/Button.d.mts.map +1 -1
  3. package/dist/Button.mjs +2 -4
  4. package/dist/Button.mjs.map +1 -1
  5. package/dist/Card.d.mts +1 -10
  6. package/dist/Card.d.mts.map +1 -1
  7. package/dist/Card.mjs +1 -2
  8. package/dist/Card.mjs.map +1 -1
  9. package/dist/Layout.d.mts +5 -6
  10. package/dist/Layout.d.mts.map +1 -1
  11. package/dist/Layout.mjs +1 -2
  12. package/dist/Layout.mjs.map +1 -1
  13. package/dist/Menu.d.mts +1 -1
  14. package/dist/Menu.mjs +1 -2
  15. package/dist/Reveals.d.mts +2 -3
  16. package/dist/Reveals.d.mts.map +1 -1
  17. package/dist/Reveals.mjs +1 -2
  18. package/dist/Reveals.mjs.map +1 -1
  19. package/dist/Space.d.mts +1 -17
  20. package/dist/Space.d.mts.map +1 -1
  21. package/dist/Space.mjs +1 -2
  22. package/dist/Space.mjs.map +1 -1
  23. package/dist/Tag.d.mts +1 -9
  24. package/dist/Tag.d.mts.map +1 -1
  25. package/dist/Tag.mjs +1 -2
  26. package/dist/Tag.mjs.map +1 -1
  27. package/dist/Typography.d.mts +5 -6
  28. package/dist/Typography.d.mts.map +1 -1
  29. package/dist/Typography.mjs +1 -2
  30. package/dist/Typography.mjs.map +1 -1
  31. package/dist/_virtual/_rolldown/runtime.mjs +6 -11
  32. package/dist/components/atoms/checkbox/checkbox.d.mts +2 -17
  33. package/dist/components/atoms/checkbox/checkbox.d.mts.map +1 -1
  34. package/dist/components/atoms/checkbox/checkbox.mjs +2 -4
  35. package/dist/components/atoms/checkbox/checkbox.mjs.map +1 -1
  36. package/dist/components/atoms/checkbox/group.d.mts +2 -16
  37. package/dist/components/atoms/checkbox/group.d.mts.map +1 -1
  38. package/dist/components/atoms/checkbox/group.mjs +4 -5
  39. package/dist/components/atoms/checkbox/group.mjs.map +1 -1
  40. package/dist/components/atoms/checkbox/index.d.mts +3 -4
  41. package/dist/components/atoms/checkbox/index.d.mts.map +1 -1
  42. package/dist/components/atoms/checkbox/index.mjs +1 -2
  43. package/dist/components/atoms/checkbox/index.mjs.map +1 -1
  44. package/dist/components/atoms/color-picker.d.mts +2 -15
  45. package/dist/components/atoms/color-picker.d.mts.map +1 -1
  46. package/dist/components/atoms/color-picker.mjs +2 -4
  47. package/dist/components/atoms/color-picker.mjs.map +1 -1
  48. package/dist/components/atoms/date-picker.d.mts +2 -11
  49. package/dist/components/atoms/date-picker.d.mts.map +1 -1
  50. package/dist/components/atoms/date-picker.mjs +2 -4
  51. package/dist/components/atoms/date-picker.mjs.map +1 -1
  52. package/dist/components/atoms/float-button/back-top.d.mts +2 -10
  53. package/dist/components/atoms/float-button/back-top.d.mts.map +1 -1
  54. package/dist/components/atoms/float-button/back-top.mjs +4 -5
  55. package/dist/components/atoms/float-button/back-top.mjs.map +1 -1
  56. package/dist/components/atoms/float-button/float-button.d.mts +2 -8
  57. package/dist/components/atoms/float-button/float-button.d.mts.map +1 -1
  58. package/dist/components/atoms/float-button/float-button.mjs +1 -2
  59. package/dist/components/atoms/float-button/float-button.mjs.map +1 -1
  60. package/dist/components/atoms/float-button/index.d.mts +3 -4
  61. package/dist/components/atoms/float-button/index.d.mts.map +1 -1
  62. package/dist/components/atoms/float-button/index.mjs +1 -2
  63. package/dist/components/atoms/float-button/index.mjs.map +1 -1
  64. package/dist/components/atoms/index.d.mts +13 -12
  65. package/dist/components/atoms/input/index.d.mts +4 -5
  66. package/dist/components/atoms/input/index.d.mts.map +1 -1
  67. package/dist/components/atoms/input/index.mjs +2 -3
  68. package/dist/components/atoms/input/index.mjs.map +1 -1
  69. package/dist/components/atoms/input/input.d.mts +2 -7
  70. package/dist/components/atoms/input/input.d.mts.map +1 -1
  71. package/dist/components/atoms/input/input.mjs +1 -2
  72. package/dist/components/atoms/input/input.mjs.map +1 -1
  73. package/dist/components/atoms/input/search.d.mts +2 -15
  74. package/dist/components/atoms/input/search.d.mts.map +1 -1
  75. package/dist/components/atoms/input/search.mjs +2 -4
  76. package/dist/components/atoms/input/search.mjs.map +1 -1
  77. package/dist/components/atoms/input/text-area.d.mts +2 -8
  78. package/dist/components/atoms/input/text-area.d.mts.map +1 -1
  79. package/dist/components/atoms/input/text-area.mjs +1 -2
  80. package/dist/components/atoms/input/text-area.mjs.map +1 -1
  81. package/dist/components/atoms/option-group.d.mts +1 -1
  82. package/dist/components/atoms/option-group.d.mts.map +1 -1
  83. package/dist/components/atoms/option-group.mjs +1 -1
  84. package/dist/components/atoms/option-group.mjs.map +1 -1
  85. package/dist/components/atoms/popover.d.mts +2 -14
  86. package/dist/components/atoms/popover.d.mts.map +1 -1
  87. package/dist/components/atoms/popover.mjs +1 -2
  88. package/dist/components/atoms/popover.mjs.map +1 -1
  89. package/dist/components/atoms/progress.d.mts +2 -10
  90. package/dist/components/atoms/progress.d.mts.map +1 -1
  91. package/dist/components/atoms/progress.mjs +1 -2
  92. package/dist/components/atoms/progress.mjs.map +1 -1
  93. package/dist/components/atoms/radio/context.mjs +2 -4
  94. package/dist/components/atoms/radio/context.mjs.map +1 -1
  95. package/dist/components/atoms/radio/group.d.mts +2 -19
  96. package/dist/components/atoms/radio/group.d.mts.map +1 -1
  97. package/dist/components/atoms/radio/group.mjs +2 -4
  98. package/dist/components/atoms/radio/group.mjs.map +1 -1
  99. package/dist/components/atoms/radio/index.d.mts +3 -4
  100. package/dist/components/atoms/radio/index.d.mts.map +1 -1
  101. package/dist/components/atoms/radio/index.mjs +1 -2
  102. package/dist/components/atoms/radio/index.mjs.map +1 -1
  103. package/dist/components/atoms/radio/radio.d.mts +2 -18
  104. package/dist/components/atoms/radio/radio.d.mts.map +1 -1
  105. package/dist/components/atoms/radio/radio.mjs +2 -4
  106. package/dist/components/atoms/radio/radio.mjs.map +1 -1
  107. package/dist/components/atoms/select.d.mts +2 -10
  108. package/dist/components/atoms/select.d.mts.map +1 -1
  109. package/dist/components/atoms/select.mjs +2 -3
  110. package/dist/components/atoms/select.mjs.map +1 -1
  111. package/dist/components/atoms/skeleton/button.d.mts +2 -7
  112. package/dist/components/atoms/skeleton/button.d.mts.map +1 -1
  113. package/dist/components/atoms/skeleton/button.mjs +1 -2
  114. package/dist/components/atoms/skeleton/button.mjs.map +1 -1
  115. package/dist/components/atoms/skeleton/index.d.mts +4 -5
  116. package/dist/components/atoms/skeleton/index.d.mts.map +1 -1
  117. package/dist/components/atoms/skeleton/index.mjs +2 -3
  118. package/dist/components/atoms/skeleton/index.mjs.map +1 -1
  119. package/dist/components/atoms/skeleton/node.d.mts +2 -7
  120. package/dist/components/atoms/skeleton/node.d.mts.map +1 -1
  121. package/dist/components/atoms/skeleton/node.mjs +1 -2
  122. package/dist/components/atoms/skeleton/node.mjs.map +1 -1
  123. package/dist/components/atoms/skeleton/skeleton.d.mts +2 -20
  124. package/dist/components/atoms/skeleton/skeleton.d.mts.map +1 -1
  125. package/dist/components/atoms/skeleton/skeleton.mjs +2 -4
  126. package/dist/components/atoms/skeleton/skeleton.mjs.map +1 -1
  127. package/dist/components/atoms/spin.d.mts +2 -10
  128. package/dist/components/atoms/spin.d.mts.map +1 -1
  129. package/dist/components/atoms/spin.mjs +2 -4
  130. package/dist/components/atoms/spin.mjs.map +1 -1
  131. package/dist/components/atoms/switch.d.mts +2 -14
  132. package/dist/components/atoms/switch.d.mts.map +1 -1
  133. package/dist/components/atoms/switch.mjs +4 -6
  134. package/dist/components/atoms/switch.mjs.map +1 -1
  135. package/dist/components/atoms/typography/link.d.mts +2 -10
  136. package/dist/components/atoms/typography/link.d.mts.map +1 -1
  137. package/dist/components/atoms/typography/link.mjs +1 -2
  138. package/dist/components/atoms/typography/link.mjs.map +1 -1
  139. package/dist/components/atoms/typography/paragraph.d.mts +2 -8
  140. package/dist/components/atoms/typography/paragraph.d.mts.map +1 -1
  141. package/dist/components/atoms/typography/paragraph.mjs +1 -2
  142. package/dist/components/atoms/typography/paragraph.mjs.map +1 -1
  143. package/dist/components/atoms/typography/text.d.mts +2 -10
  144. package/dist/components/atoms/typography/text.d.mts.map +1 -1
  145. package/dist/components/atoms/typography/text.mjs +1 -2
  146. package/dist/components/atoms/typography/text.mjs.map +1 -1
  147. package/dist/components/atoms/typography/title.d.mts +2 -9
  148. package/dist/components/atoms/typography/title.d.mts.map +1 -1
  149. package/dist/components/atoms/typography/title.mjs +1 -2
  150. package/dist/components/atoms/typography/title.mjs.map +1 -1
  151. package/dist/components/atoms/typography/typography.d.mts +2 -7
  152. package/dist/components/atoms/typography/typography.d.mts.map +1 -1
  153. package/dist/components/atoms/typography/typography.mjs +1 -2
  154. package/dist/components/atoms/typography/typography.mjs.map +1 -1
  155. package/dist/components/molecules/collapse.d.mts +2 -14
  156. package/dist/components/molecules/collapse.d.mts.map +1 -1
  157. package/dist/components/molecules/collapse.mjs +4 -6
  158. package/dist/components/molecules/collapse.mjs.map +1 -1
  159. package/dist/components/molecules/dropdown.d.mts +2 -15
  160. package/dist/components/molecules/dropdown.d.mts.map +1 -1
  161. package/dist/components/molecules/dropdown.mjs +2 -4
  162. package/dist/components/molecules/dropdown.mjs.map +1 -1
  163. package/dist/components/molecules/index.d.mts +7 -7
  164. package/dist/components/molecules/marquees/index.d.mts +3 -4
  165. package/dist/components/molecules/marquees/index.d.mts.map +1 -1
  166. package/dist/components/molecules/marquees/index.mjs +2 -3
  167. package/dist/components/molecules/marquees/index.mjs.map +1 -1
  168. package/dist/components/molecules/marquees/item.d.mts +2 -11
  169. package/dist/components/molecules/marquees/item.d.mts.map +1 -1
  170. package/dist/components/molecules/marquees/item.mjs +14 -19
  171. package/dist/components/molecules/marquees/item.mjs.map +1 -1
  172. package/dist/components/molecules/marquees/marquees.d.mts +2 -11
  173. package/dist/components/molecules/marquees/marquees.d.mts.map +1 -1
  174. package/dist/components/molecules/marquees/marquees.mjs +10 -20
  175. package/dist/components/molecules/marquees/marquees.mjs.map +1 -1
  176. package/dist/components/molecules/marquees/use-pause-on-hover.mjs +26 -0
  177. package/dist/components/molecules/marquees/use-pause-on-hover.mjs.map +1 -0
  178. package/dist/components/molecules/menu/item/item.mjs +2 -4
  179. package/dist/components/molecules/menu/item/item.mjs.map +1 -1
  180. package/dist/components/molecules/menu/item/label.mjs +1 -2
  181. package/dist/components/molecules/menu/item/label.mjs.map +1 -1
  182. package/dist/components/molecules/menu/menu.d.mts +2 -17
  183. package/dist/components/molecules/menu/menu.d.mts.map +1 -1
  184. package/dist/components/molecules/menu/menu.mjs +2 -4
  185. package/dist/components/molecules/menu/menu.mjs.map +1 -1
  186. package/dist/components/molecules/reveals/item.d.mts +2 -15
  187. package/dist/components/molecules/reveals/item.d.mts.map +1 -1
  188. package/dist/components/molecules/reveals/item.mjs +2 -4
  189. package/dist/components/molecules/reveals/item.mjs.map +1 -1
  190. package/dist/components/molecules/reveals/reveals.d.mts +2 -18
  191. package/dist/components/molecules/reveals/reveals.d.mts.map +1 -1
  192. package/dist/components/molecules/reveals/reveals.mjs +2 -3
  193. package/dist/components/molecules/reveals/reveals.mjs.map +1 -1
  194. package/dist/components/molecules/splitter/index.d.mts +3 -4
  195. package/dist/components/molecules/splitter/index.d.mts.map +1 -1
  196. package/dist/components/molecules/splitter/index.mjs +1 -2
  197. package/dist/components/molecules/splitter/index.mjs.map +1 -1
  198. package/dist/components/molecules/splitter/panel.d.mts +2 -8
  199. package/dist/components/molecules/splitter/panel.d.mts.map +1 -1
  200. package/dist/components/molecules/splitter/panel.mjs +1 -2
  201. package/dist/components/molecules/splitter/panel.mjs.map +1 -1
  202. package/dist/components/molecules/splitter/splitter.d.mts +2 -14
  203. package/dist/components/molecules/splitter/splitter.d.mts.map +1 -1
  204. package/dist/components/molecules/splitter/splitter.mjs +2 -4
  205. package/dist/components/molecules/splitter/splitter.mjs.map +1 -1
  206. package/dist/components/molecules/upload.d.mts +2 -15
  207. package/dist/components/molecules/upload.d.mts.map +1 -1
  208. package/dist/components/molecules/upload.mjs +2 -4
  209. package/dist/components/molecules/upload.mjs.map +1 -1
  210. package/dist/components/organisms/drawer.d.mts +2 -25
  211. package/dist/components/organisms/drawer.d.mts.map +1 -1
  212. package/dist/components/organisms/drawer.mjs +2 -4
  213. package/dist/components/organisms/drawer.mjs.map +1 -1
  214. package/dist/components/organisms/imperative-stack.mjs +9 -11
  215. package/dist/components/organisms/imperative-stack.mjs.map +1 -1
  216. package/dist/components/organisms/index.d.mts +6 -5
  217. package/dist/components/organisms/list/index.d.mts +3 -4
  218. package/dist/components/organisms/list/index.d.mts.map +1 -1
  219. package/dist/components/organisms/list/index.mjs +1 -2
  220. package/dist/components/organisms/list/index.mjs.map +1 -1
  221. package/dist/components/organisms/list/item.d.mts +2 -8
  222. package/dist/components/organisms/list/item.d.mts.map +1 -1
  223. package/dist/components/organisms/list/item.mjs +1 -2
  224. package/dist/components/organisms/list/item.mjs.map +1 -1
  225. package/dist/components/organisms/list/list.d.mts +3 -20
  226. package/dist/components/organisms/list/list.d.mts.map +1 -1
  227. package/dist/components/organisms/list/list.mjs +3 -5
  228. package/dist/components/organisms/list/list.mjs.map +1 -1
  229. package/dist/components/organisms/modal.d.mts +2 -22
  230. package/dist/components/organisms/modal.d.mts.map +1 -1
  231. package/dist/components/organisms/modal.mjs +3 -5
  232. package/dist/components/organisms/modal.mjs.map +1 -1
  233. package/dist/components/organisms/swiper/index.d.mts +3 -4
  234. package/dist/components/organisms/swiper/index.d.mts.map +1 -1
  235. package/dist/components/organisms/swiper/index.mjs +2 -3
  236. package/dist/components/organisms/swiper/index.mjs.map +1 -1
  237. package/dist/components/organisms/swiper/slide.d.mts +2 -8
  238. package/dist/components/organisms/swiper/slide.d.mts.map +1 -1
  239. package/dist/components/organisms/swiper/slide.mjs +2 -4
  240. package/dist/components/organisms/swiper/slide.mjs.map +1 -1
  241. package/dist/components/organisms/swiper/swiper.d.mts +2 -15
  242. package/dist/components/organisms/swiper/swiper.d.mts.map +1 -1
  243. package/dist/components/organisms/swiper/swiper.mjs +2 -4
  244. package/dist/components/organisms/swiper/swiper.mjs.map +1 -1
  245. package/dist/components/organisms/toast.d.mts +2 -13
  246. package/dist/components/organisms/toast.d.mts.map +1 -1
  247. package/dist/components/organisms/toast.mjs +2 -4
  248. package/dist/components/organisms/toast.mjs.map +1 -1
  249. package/dist/components/templates/container.d.mts +2 -10
  250. package/dist/components/templates/container.d.mts.map +1 -1
  251. package/dist/components/templates/container.mjs +1 -2
  252. package/dist/components/templates/container.mjs.map +1 -1
  253. package/dist/components/templates/empty.d.mts +2 -11
  254. package/dist/components/templates/empty.d.mts.map +1 -1
  255. package/dist/components/templates/empty.mjs +1 -2
  256. package/dist/components/templates/empty.mjs.map +1 -1
  257. package/dist/components/templates/grid/col.d.mts +2 -17
  258. package/dist/components/templates/grid/col.d.mts.map +1 -1
  259. package/dist/components/templates/grid/col.mjs +2 -4
  260. package/dist/components/templates/grid/col.mjs.map +1 -1
  261. package/dist/components/templates/grid/row-context.mjs +1 -2
  262. package/dist/components/templates/grid/row-context.mjs.map +1 -1
  263. package/dist/components/templates/grid/row.d.mts +2 -13
  264. package/dist/components/templates/grid/row.d.mts.map +1 -1
  265. package/dist/components/templates/grid/row.mjs +2 -4
  266. package/dist/components/templates/grid/row.mjs.map +1 -1
  267. package/dist/components/templates/layout/content.d.mts +2 -9
  268. package/dist/components/templates/layout/content.d.mts.map +1 -1
  269. package/dist/components/templates/layout/content.mjs +1 -2
  270. package/dist/components/templates/layout/content.mjs.map +1 -1
  271. package/dist/components/templates/layout/footer.d.mts +2 -8
  272. package/dist/components/templates/layout/footer.d.mts.map +1 -1
  273. package/dist/components/templates/layout/footer.mjs +1 -2
  274. package/dist/components/templates/layout/footer.mjs.map +1 -1
  275. package/dist/components/templates/layout/header.d.mts +2 -9
  276. package/dist/components/templates/layout/header.d.mts.map +1 -1
  277. package/dist/components/templates/layout/header.mjs +1 -2
  278. package/dist/components/templates/layout/header.mjs.map +1 -1
  279. package/dist/components/templates/layout/layout.d.mts +2 -8
  280. package/dist/components/templates/layout/layout.d.mts.map +1 -1
  281. package/dist/components/templates/layout/layout.mjs +1 -2
  282. package/dist/components/templates/layout/layout.mjs.map +1 -1
  283. package/dist/components/templates/layout/sider-context.mjs +1 -2
  284. package/dist/components/templates/layout/sider-context.mjs.map +1 -1
  285. package/dist/components/templates/layout/sider.d.mts +2 -21
  286. package/dist/components/templates/layout/sider.d.mts.map +1 -1
  287. package/dist/components/templates/layout/sider.mjs +2 -4
  288. package/dist/components/templates/layout/sider.mjs.map +1 -1
  289. package/dist/components/templates/page-header.d.mts +2 -14
  290. package/dist/components/templates/page-header.d.mts.map +1 -1
  291. package/dist/components/templates/page-header.mjs +2 -4
  292. package/dist/components/templates/page-header.mjs.map +1 -1
  293. package/dist/components/templates/result.d.mts +2 -13
  294. package/dist/components/templates/result.d.mts.map +1 -1
  295. package/dist/components/templates/result.mjs +1 -2
  296. package/dist/components/templates/result.mjs.map +1 -1
  297. package/dist/core/accordion.d.mts +5 -22
  298. package/dist/core/accordion.d.mts.map +1 -1
  299. package/dist/core/accordion.mjs +3 -5
  300. package/dist/core/accordion.mjs.map +1 -1
  301. package/dist/core/badge.d.mts +4 -13
  302. package/dist/core/badge.d.mts.map +1 -1
  303. package/dist/core/badge.mjs +2 -3
  304. package/dist/core/badge.mjs.map +1 -1
  305. package/dist/core/button.d.mts +5 -15
  306. package/dist/core/button.d.mts.map +1 -1
  307. package/dist/core/button.mjs +1 -2
  308. package/dist/core/button.mjs.map +1 -1
  309. package/dist/core/calendar.d.mts +4 -21
  310. package/dist/core/calendar.d.mts.map +1 -1
  311. package/dist/core/calendar.mjs +3 -5
  312. package/dist/core/calendar.mjs.map +1 -1
  313. package/dist/core/checkbox.d.mts +2 -8
  314. package/dist/core/checkbox.d.mts.map +1 -1
  315. package/dist/core/checkbox.mjs +3 -5
  316. package/dist/core/checkbox.mjs.map +1 -1
  317. package/dist/core/dialog.d.mts +12 -48
  318. package/dist/core/dialog.d.mts.map +1 -1
  319. package/dist/core/dialog.mjs +3 -5
  320. package/dist/core/dialog.mjs.map +1 -1
  321. package/dist/core/drawer.d.mts +11 -46
  322. package/dist/core/drawer.d.mts.map +1 -1
  323. package/dist/core/drawer.mjs +3 -5
  324. package/dist/core/drawer.mjs.map +1 -1
  325. package/dist/core/field.d.mts +15 -54
  326. package/dist/core/field.d.mts.map +1 -1
  327. package/dist/core/field.mjs +3 -5
  328. package/dist/core/field.mjs.map +1 -1
  329. package/dist/core/input.d.mts +2 -9
  330. package/dist/core/input.d.mts.map +1 -1
  331. package/dist/core/input.mjs +2 -3
  332. package/dist/core/input.mjs.map +1 -1
  333. package/dist/core/label.d.mts +1 -7
  334. package/dist/core/label.d.mts.map +1 -1
  335. package/dist/core/label.mjs +2 -4
  336. package/dist/core/label.mjs.map +1 -1
  337. package/dist/core/popover.d.mts +9 -33
  338. package/dist/core/popover.d.mts.map +1 -1
  339. package/dist/core/popover.mjs +3 -5
  340. package/dist/core/popover.mjs.map +1 -1
  341. package/dist/core/progress.d.mts +2 -11
  342. package/dist/core/progress.d.mts.map +1 -1
  343. package/dist/core/progress.mjs +3 -5
  344. package/dist/core/progress.mjs.map +1 -1
  345. package/dist/core/radio-group.d.mts +4 -15
  346. package/dist/core/radio-group.d.mts.map +1 -1
  347. package/dist/core/radio-group.mjs +3 -5
  348. package/dist/core/radio-group.mjs.map +1 -1
  349. package/dist/core/resizable.d.mts +5 -17
  350. package/dist/core/resizable.d.mts.map +1 -1
  351. package/dist/core/resizable.mjs +3 -5
  352. package/dist/core/resizable.mjs.map +1 -1
  353. package/dist/core/select.d.mts +13 -50
  354. package/dist/core/select.d.mts.map +1 -1
  355. package/dist/core/select.mjs +3 -5
  356. package/dist/core/select.mjs.map +1 -1
  357. package/dist/core/separator.d.mts +2 -10
  358. package/dist/core/separator.d.mts.map +1 -1
  359. package/dist/core/separator.mjs +2 -4
  360. package/dist/core/separator.mjs.map +1 -1
  361. package/dist/core/skeleton.d.mts +2 -8
  362. package/dist/core/skeleton.d.mts.map +1 -1
  363. package/dist/core/skeleton.mjs +2 -3
  364. package/dist/core/skeleton.mjs.map +1 -1
  365. package/dist/core/switch.d.mts +3 -12
  366. package/dist/core/switch.d.mts.map +1 -1
  367. package/dist/core/switch.mjs +3 -5
  368. package/dist/core/switch.mjs.map +1 -1
  369. package/dist/core/textarea.d.mts +2 -8
  370. package/dist/core/textarea.d.mts.map +1 -1
  371. package/dist/core/textarea.mjs +2 -3
  372. package/dist/core/textarea.mjs.map +1 -1
  373. package/dist/core.mjs +1 -2
  374. package/dist/index.d.mts +31 -33
  375. package/dist/index.mjs +2 -3
  376. package/dist/providers/config/config.d.mts +2 -14
  377. package/dist/providers/config/config.d.mts.map +1 -1
  378. package/dist/providers/config/config.mjs +5 -6
  379. package/dist/providers/config/config.mjs.map +1 -1
  380. package/dist/providers/config/context.d.mts +0 -2
  381. package/dist/providers/config/context.d.mts.map +1 -1
  382. package/dist/providers/config/context.mjs +2 -4
  383. package/dist/providers/config/context.mjs.map +1 -1
  384. package/dist/providers/config/registry.d.mts +2 -7
  385. package/dist/providers/config/registry.d.mts.map +1 -1
  386. package/dist/providers/config/registry.mjs +2 -4
  387. package/dist/providers/config/registry.mjs.map +1 -1
  388. package/dist/providers/config/types.d.mts.map +1 -1
  389. package/dist/providers.d.mts +1 -2
  390. package/dist/providers.mjs +1 -2
  391. package/dist/style.css +1013 -1868
  392. package/dist/utils.d.mts +0 -1
  393. package/dist/utils.d.mts.map +1 -1
  394. package/dist/utils.mjs +1 -2
  395. package/dist/utils.mjs.map +1 -1
  396. package/package.json +29 -28
  397. package/dist/components/templates/grid/index.d.mts +0 -2
  398. package/dist/components/templates/index.d.mts +0 -13
  399. package/dist/providers/config/index.d.mts +0 -4
  400. package/dist/style.css.map +0 -1
  401. package/dist/style.mjs +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"item.mjs","names":[],"sources":["../../../../../src/components/molecules/menu/item/item.tsx"],"sourcesContent":["'use client';\n\nimport { useRef, useState } from 'react';\n\nimport { ChevronDown } from 'lucide-react';\nimport { AnimatePresence, motion } from 'motion/react';\n\nimport { cn } from '@repo/ui/utils';\n\nimport { MENU_CLASSNAMES, MenuItem, Props } from '../menu';\nimport Label from './label';\n\ninterface ItemProps extends Props, MenuItem {\n itemKey: React.Key;\n keyPath: React.Key[];\n root?: boolean;\n index: number;\n}\nconst OFFSET: [number, number] = [8, 8];\nconst INLINE_OFFSET = 16;\n\nconst STYLES = {\n hover: {\n classes: ['hover:underline', 'hover:underline-offset-8'],\n },\n open: {\n classes: ['underline', 'underline-offset-8'],\n },\n} as const;\n\nconst getItemClasses = (\n root: boolean,\n isHorizontal: boolean,\n isInline: boolean,\n hasChildren: boolean,\n customClasses?: string,\n) =>\n cn(\n 'px-4 py-2',\n 'cursor-pointer',\n 'whitespace-nowrap',\n root && isHorizontal ? 'inline-flex' : 'flex',\n ...(root\n ? [\n 'h-full',\n 'rounded-none border-transparent',\n hasChildren && 'hover:border-current',\n isHorizontal ? 'border-b-2' : 'border-r-2',\n isInline && 'border-none',\n ]\n : ['rounded-md', ...STYLES.hover.classes]),\n customClasses,\n );\n\nconst Item = ({\n itemKey,\n keyPath,\n root = false,\n index,\n mode,\n label,\n children,\n selectionMap,\n classNames,\n styles,\n offset = OFFSET,\n inlineOffset = INLINE_OFFSET,\n onClick,\n onSelect,\n ...props\n}: ItemProps) => {\n const [open, setOpen] = useState<boolean>(false);\n\n const itemRef = useRef<HTMLLIElement | null>(null);\n\n const isHorizontal = mode === 'horizontal';\n const isInline = mode === 'inline';\n\n const [left, top] = offset;\n\n const selected = selectionMap?.get(itemKey) ?? false;\n\n const item = {\n ...props,\n label,\n key: itemKey,\n children,\n };\n\n const itemClassNames = getItemClasses(\n root,\n isHorizontal,\n isInline,\n !!children?.length,\n root ? classNames?.rootItem : classNames?.item,\n );\n\n const handleSelect = (domEvent: React.SyntheticEvent) => {\n domEvent.stopPropagation();\n\n if (isInline) {\n setOpen(!open);\n }\n\n const params = {\n domEvent,\n key: itemKey,\n keyPath,\n item,\n };\n\n onClick?.(params);\n\n if (!selected) {\n onSelect?.(params);\n }\n };\n\n // Roving tabindex (WAI-ARIA menu pattern): only the first item in each\n // menu/submenu level is a Tab stop (below); arrow keys move real DOM\n // focus between sibling <li>s within that same level, which is what\n // ends up mattering for actual keyboard use even though — unlike a\n // fully state-tracked implementation — focus resets to the first item\n // if the user Tabs out and back in rather than resuming where they left\n // off.\n //\n // Deliberately not `useKeyPress` (unlike dropdown.tsx's trigger and\n // radio.tsx/checkbox.tsx's icon mode, #229's action item 5): that hook\n // is a static combo -> handler binding, one listener per combo. This\n // handler is a single stateful branch — Enter/Space select, Escape\n // conditionally closes a submenu and stops the event from also closing\n // an ancestor Dropdown, and the arrow-key branch reads `itemRef` at\n // fire time to focus a *sibling* `<li>`. Splitting that into 3-4\n // separate useKeyPress calls (each its own listener) per menu item\n // wouldn't fix a bug — the existing logic is already correct — it would\n // just multiply listeners across every item in a menu for no benefit.\n const handleKeyDown = (domEvent: React.KeyboardEvent) => {\n if (domEvent.key === 'Enter' || domEvent.key === ' ') {\n domEvent.preventDefault();\n handleSelect(domEvent);\n return;\n }\n\n if (domEvent.key === 'Escape') {\n if (children?.length && open) {\n domEvent.stopPropagation();\n setOpen(false);\n }\n return;\n }\n\n const isNext = isHorizontal\n ? domEvent.key === 'ArrowRight'\n : domEvent.key === 'ArrowDown';\n const isPrev = isHorizontal\n ? domEvent.key === 'ArrowLeft'\n : domEvent.key === 'ArrowUp';\n\n if (!isNext && !isPrev) {\n return;\n }\n\n domEvent.preventDefault();\n const sibling = isNext\n ? itemRef.current?.nextElementSibling\n : itemRef.current?.previousElementSibling;\n sibling?.querySelector<HTMLElement>('[role=\"menuitem\"]')?.focus();\n };\n\n const childrenContainerClassNames = cn(\n isInline ? 'relative overflow-hidden' : 'absolute min-w-[200px]',\n !isInline && root && isHorizontal\n ? 'left-0 top-full pt-2 pl-0'\n : !isInline\n ? 'left-full top-0 pl-2 pt-0'\n : 'pl-4',\n );\n\n const childrenContainerStyle = isInline\n ? {\n paddingLeft: inlineOffset,\n }\n : root && isHorizontal\n ? {\n paddingTop: top,\n }\n : {\n paddingLeft: left,\n };\n\n return (\n <li\n ref={itemRef}\n role=\"none\"\n className={cn(\n 'group',\n 'relative',\n root && isHorizontal ? 'inline-block' : 'block',\n )}\n onMouseEnter={() => {\n if (isInline) {\n return;\n }\n setOpen(true);\n }}\n onMouseLeave={() => {\n if (isInline) {\n return;\n }\n setOpen(false);\n }}\n onFocus={() => {\n if (isInline) {\n return;\n }\n setOpen(true);\n }}\n onBlur={e => {\n if (isInline) {\n return;\n }\n if (!itemRef.current?.contains(e.relatedTarget as Node)) {\n setOpen(false);\n }\n }}\n >\n <div\n role=\"menuitem\"\n tabIndex={index === 0 ? 0 : -1}\n aria-expanded={children?.length ? open : undefined}\n aria-haspopup={children?.length ? 'menu' : undefined}\n aria-current={selected ? true : undefined}\n className={cn(\n itemClassNames,\n ...(selected\n ? root\n ? ['border-current']\n : [...STYLES.open.classes, ...STYLES.hover.classes]\n : root && !!children?.length\n ? ['group-hover:border-current']\n : []),\n //\n )}\n style={root ? styles?.rootItem : styles?.item}\n onClick={handleSelect}\n onKeyDown={handleKeyDown}\n >\n <div\n className={cn(\n 'w-full',\n 'inline-flex items-center justify-between',\n //\n )}\n >\n <Label className={cn(classNames?.label)} style={styles?.label}>\n {label}\n </Label>\n {!root && !isInline && !!children?.length && (\n <ChevronDown className={cn('-rotate-90')} />\n )}\n {isInline && !!children?.length && (\n <ChevronDown\n className={cn(\n 'transition-all',\n open ? '-rotate-180' : 'rotate-0',\n )}\n />\n )}\n </div>\n </div>\n <AnimatePresence>\n {!!children?.length && open && (\n <motion.div\n className={cn(\n childrenContainerClassNames,\n //\n )}\n style={childrenContainerStyle}\n initial={isInline ? { height: 0, opacity: 0 } : { opacity: 0 }}\n animate={isInline ? { height: 'auto', opacity: 1 } : { opacity: 1 }}\n exit={isInline ? { height: 0, opacity: 0 } : { opacity: 0 }}\n transition={{ duration: 0.2 }}\n >\n <ul\n role=\"menu\"\n className={cn(\n MENU_CLASSNAMES,\n isInline && 'shadow-none',\n classNames?.subMenu,\n //\n )}\n style={styles?.subMenu}\n >\n {children.map((child, childIndex) => (\n <Item\n {...child}\n key={child.key}\n itemKey={child.key}\n keyPath={[...keyPath, child.key]}\n index={childIndex}\n selectionMap={selectionMap}\n mode={mode}\n classNames={classNames}\n styles={styles}\n offset={offset}\n inlineOffset={inlineOffset}\n onClick={onClick}\n onSelect={onSelect}\n />\n ))}\n </ul>\n </motion.div>\n )}\n </AnimatePresence>\n </li>\n );\n};\n\nexport default Item;\n"],"mappings":"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"}
1
+ {"version":3,"file":"item.mjs","names":[],"sources":["../../../../../src/components/molecules/menu/item/item.tsx"],"sourcesContent":["'use client';\n\nimport { useRef, useState } from 'react';\n\nimport { ChevronDown } from 'lucide-react';\nimport { AnimatePresence, motion } from 'motion/react';\n\nimport { cn } from '@repo/ui/utils';\n\nimport { MENU_CLASSNAMES, MenuItem, Props } from '../menu';\nimport Label from './label';\n\ninterface ItemProps extends Props, MenuItem {\n itemKey: React.Key;\n keyPath: React.Key[];\n root?: boolean;\n index: number;\n}\nconst OFFSET: [number, number] = [8, 8];\nconst INLINE_OFFSET = 16;\n\nconst STYLES = {\n hover: {\n classes: ['hover:underline', 'hover:underline-offset-8'],\n },\n open: {\n classes: ['underline', 'underline-offset-8'],\n },\n} as const;\n\nconst getItemClasses = (\n root: boolean,\n isHorizontal: boolean,\n isInline: boolean,\n hasChildren: boolean,\n customClasses?: string,\n) =>\n cn(\n 'px-4 py-2',\n 'cursor-pointer',\n 'whitespace-nowrap',\n root && isHorizontal ? 'inline-flex' : 'flex',\n ...(root\n ? [\n 'h-full',\n 'rounded-none border-transparent',\n hasChildren && 'hover:border-current',\n isHorizontal ? 'border-b-2' : 'border-r-2',\n isInline && 'border-none',\n ]\n : ['rounded-md', ...STYLES.hover.classes]),\n customClasses,\n );\n\nconst Item = ({\n itemKey,\n keyPath,\n root = false,\n index,\n mode,\n label,\n children,\n selectionMap,\n classNames,\n styles,\n offset = OFFSET,\n inlineOffset = INLINE_OFFSET,\n onClick,\n onSelect,\n ...props\n}: ItemProps) => {\n const [open, setOpen] = useState<boolean>(false);\n\n const itemRef = useRef<HTMLLIElement | null>(null);\n\n const isHorizontal = mode === 'horizontal';\n const isInline = mode === 'inline';\n\n const [left, top] = offset;\n\n const selected = selectionMap?.get(itemKey) ?? false;\n\n const item = {\n ...props,\n label,\n key: itemKey,\n children,\n };\n\n const itemClassNames = getItemClasses(\n root,\n isHorizontal,\n isInline,\n !!children?.length,\n root ? classNames?.rootItem : classNames?.item,\n );\n\n const handleSelect = (domEvent: React.SyntheticEvent) => {\n domEvent.stopPropagation();\n\n if (isInline) {\n setOpen(!open);\n }\n\n // Next.js's types pull in React's `react/experimental` augmentation\n // (adding `useOptimistic`'s internal key symbol to `React.Key`), which\n // widens `itemKey`/`item.key` here beyond what `ClickEventHandler`\n // expects when this file is type-checked as part of a Next.js app —\n // real menu item keys are always string/number, never that symbol.\n const params = {\n domEvent,\n key: itemKey as Exclude<React.Key, symbol>,\n keyPath,\n item: item as unknown as MenuItem,\n };\n\n onClick?.(params);\n\n if (!selected) {\n onSelect?.(params);\n }\n };\n\n // Roving tabindex (WAI-ARIA menu pattern): only the first item in each\n // menu/submenu level is a Tab stop (below); arrow keys move real DOM\n // focus between sibling <li>s within that same level, which is what\n // ends up mattering for actual keyboard use even though — unlike a\n // fully state-tracked implementation — focus resets to the first item\n // if the user Tabs out and back in rather than resuming where they left\n // off.\n //\n // Deliberately not `useKeyPress` (unlike dropdown.tsx's trigger and\n // radio.tsx/checkbox.tsx's icon mode, #229's action item 5): that hook\n // is a static combo -> handler binding, one listener per combo. This\n // handler is a single stateful branch — Enter/Space select, Escape\n // conditionally closes a submenu and stops the event from also closing\n // an ancestor Dropdown, and the arrow-key branch reads `itemRef` at\n // fire time to focus a *sibling* `<li>`. Splitting that into 3-4\n // separate useKeyPress calls (each its own listener) per menu item\n // wouldn't fix a bug — the existing logic is already correct — it would\n // just multiply listeners across every item in a menu for no benefit.\n const handleKeyDown = (domEvent: React.KeyboardEvent) => {\n if (domEvent.key === 'Enter' || domEvent.key === ' ') {\n domEvent.preventDefault();\n handleSelect(domEvent);\n return;\n }\n\n if (domEvent.key === 'Escape') {\n if (children?.length && open) {\n domEvent.stopPropagation();\n setOpen(false);\n }\n return;\n }\n\n const isNext = isHorizontal\n ? domEvent.key === 'ArrowRight'\n : domEvent.key === 'ArrowDown';\n const isPrev = isHorizontal\n ? domEvent.key === 'ArrowLeft'\n : domEvent.key === 'ArrowUp';\n\n if (!isNext && !isPrev) {\n return;\n }\n\n domEvent.preventDefault();\n const sibling = isNext\n ? itemRef.current?.nextElementSibling\n : itemRef.current?.previousElementSibling;\n sibling?.querySelector<HTMLElement>('[role=\"menuitem\"]')?.focus();\n };\n\n const childrenContainerClassNames = cn(\n isInline ? 'relative overflow-hidden' : 'absolute min-w-[200px]',\n !isInline && root && isHorizontal\n ? 'left-0 top-full pt-2 pl-0'\n : !isInline\n ? 'left-full top-0 pl-2 pt-0'\n : 'pl-4',\n );\n\n const childrenContainerStyle = isInline\n ? {\n paddingLeft: inlineOffset,\n }\n : root && isHorizontal\n ? {\n paddingTop: top,\n }\n : {\n paddingLeft: left,\n };\n\n return (\n <li\n ref={itemRef}\n role=\"none\"\n className={cn(\n 'group',\n 'relative',\n root && isHorizontal ? 'inline-block' : 'block',\n )}\n onMouseEnter={() => {\n if (isInline) {\n return;\n }\n setOpen(true);\n }}\n onMouseLeave={() => {\n if (isInline) {\n return;\n }\n setOpen(false);\n }}\n onFocus={() => {\n if (isInline) {\n return;\n }\n setOpen(true);\n }}\n onBlur={e => {\n if (isInline) {\n return;\n }\n if (!itemRef.current?.contains(e.relatedTarget as Node)) {\n setOpen(false);\n }\n }}\n >\n <div\n role=\"menuitem\"\n tabIndex={index === 0 ? 0 : -1}\n aria-expanded={children?.length ? open : undefined}\n aria-haspopup={children?.length ? 'menu' : undefined}\n aria-current={selected ? true : undefined}\n className={cn(\n itemClassNames,\n ...(selected\n ? root\n ? ['border-current']\n : [...STYLES.open.classes, ...STYLES.hover.classes]\n : root && !!children?.length\n ? ['group-hover:border-current']\n : []),\n //\n )}\n style={root ? styles?.rootItem : styles?.item}\n onClick={handleSelect}\n onKeyDown={handleKeyDown}\n >\n <div\n className={cn(\n 'w-full',\n 'inline-flex items-center justify-between',\n //\n )}\n >\n <Label className={cn(classNames?.label)} style={styles?.label}>\n {label}\n </Label>\n {!root && !isInline && !!children?.length && (\n <ChevronDown className={cn('-rotate-90')} />\n )}\n {isInline && !!children?.length && (\n <ChevronDown\n className={cn(\n 'transition-all',\n open ? '-rotate-180' : 'rotate-0',\n )}\n />\n )}\n </div>\n </div>\n <AnimatePresence>\n {!!children?.length && open && (\n <motion.div\n className={cn(\n childrenContainerClassNames,\n //\n )}\n style={childrenContainerStyle}\n initial={isInline ? { height: 0, opacity: 0 } : { opacity: 0 }}\n animate={isInline ? { height: 'auto', opacity: 1 } : { opacity: 1 }}\n exit={isInline ? { height: 0, opacity: 0 } : { opacity: 0 }}\n transition={{ duration: 0.2 }}\n >\n <ul\n role=\"menu\"\n className={cn(\n MENU_CLASSNAMES,\n isInline && 'shadow-none',\n classNames?.subMenu,\n //\n )}\n style={styles?.subMenu}\n >\n {children.map((child, childIndex) => (\n <Item\n {...child}\n key={child.key}\n itemKey={child.key}\n keyPath={[...keyPath, child.key]}\n index={childIndex}\n selectionMap={selectionMap}\n mode={mode}\n classNames={classNames}\n styles={styles}\n offset={offset}\n inlineOffset={inlineOffset}\n onClick={onClick}\n onSelect={onSelect}\n />\n ))}\n </ul>\n </motion.div>\n )}\n </AnimatePresence>\n </li>\n );\n};\n\nexport default Item;\n"],"mappings":"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"}
@@ -1,7 +1,6 @@
1
1
  import { cn } from "../../../../utils.mjs";
2
2
  import Typography from "../../../../Typography.mjs";
3
3
  import { jsx } from "react/jsx-runtime";
4
-
5
4
  //#region src/components/molecules/menu/item/label.tsx
6
5
  const Label = ({ children, className, ...props }) => {
7
6
  if (typeof children === "string") return /* @__PURE__ */ jsx(Typography.Text, {
@@ -11,7 +10,7 @@ const Label = ({ children, className, ...props }) => {
11
10
  });
12
11
  return children;
13
12
  };
14
-
15
13
  //#endregion
16
14
  export { Label as default };
15
+
17
16
  //# sourceMappingURL=label.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"label.mjs","names":[],"sources":["../../../../../src/components/molecules/menu/item/label.tsx"],"sourcesContent":["import { cn } from '@repo/ui/utils';\n\nimport Typography from '../../../atoms/typography';\n\ninterface Props extends React.ComponentPropsWithoutRef<\n typeof Typography.Text\n> {}\n\nconst Label = ({ children, className, ...props }: Props) => {\n if (typeof children === 'string') {\n return (\n <Typography.Text className={cn(className)} {...props}>\n {children}\n </Typography.Text>\n );\n }\n\n return children;\n};\n\nexport default Label;\n"],"mappings":";;;;;AAQA,MAAM,SAAS,EAAE,UAAU,WAAW,GAAG,YAAmB;AAC1D,KAAI,OAAO,aAAa,SACtB,QACE,oBAAC,WAAW;EAAK,WAAW,GAAG,UAAU;EAAE,GAAI;EAC5C;GACe;AAItB,QAAO"}
1
+ {"version":3,"file":"label.mjs","names":[],"sources":["../../../../../src/components/molecules/menu/item/label.tsx"],"sourcesContent":["import { cn } from '@repo/ui/utils';\n\nimport Typography from '../../../atoms/typography';\n\ninterface Props extends React.ComponentPropsWithoutRef<\n typeof Typography.Text\n> {}\n\nconst Label = ({ children, className, ...props }: Props) => {\n if (typeof children === 'string') {\n return (\n <Typography.Text className={cn(className)} {...props}>\n {children}\n </Typography.Text>\n );\n }\n\n return children;\n};\n\nexport default Label;\n"],"mappings":";;;;AAQA,MAAM,SAAS,EAAE,UAAU,WAAW,GAAG,YAAmB;CAC1D,IAAI,OAAO,aAAa,UACtB,OACE,oBAAC,WAAW,MAAZ;EAAiB,WAAW,GAAG,SAAS;EAAG,GAAI;EAC5C;CACc,CAAA;CAIrB,OAAO;AACT"}
@@ -1,5 +1,3 @@
1
- import * as react_jsx_runtime0 from "react/jsx-runtime";
2
-
3
1
  //#region src/components/molecules/menu/menu.d.ts
4
2
  interface MenuItem {
5
3
  label: React.ReactNode;
@@ -43,20 +41,7 @@ declare const MENU_CLASSNAMES: string[];
43
41
  type SelectionMap = ReadonlyMap<React.Key, boolean>;
44
42
  declare const buildSelectionMap: (items: MenuItem[], selectedKeysSet: ReadonlySet<React.Key>) => SelectionMap;
45
43
  declare const findKey: (menu: MenuItem, targetKeys: ReadonlySet<React.Key>) => boolean;
46
- declare const Menu: ({
47
- items,
48
- mode,
49
- defaultSelectedKeys,
50
- selectedKeys: _selectedKeys,
51
- className,
52
- classNames,
53
- styles,
54
- offset,
55
- inlineOffset,
56
- onClick,
57
- onSelect: _onSelect,
58
- ...props
59
- }: MenuProps) => react_jsx_runtime0.JSX.Element;
44
+ declare const Menu: ({ items, mode, defaultSelectedKeys, selectedKeys: _selectedKeys, className, classNames, styles, offset, inlineOffset, onClick, onSelect: _onSelect, ...props }: MenuProps) => import("react").JSX.Element;
60
45
  //#endregion
61
- export { ClickEventHandler, MENU_CLASSNAMES, Menu, MenuItem, MenuProps, Props, SelectionMap, buildSelectionMap, findKey };
46
+ export { ClickEventHandler, MENU_CLASSNAMES, MenuItem, MenuProps, Props, SelectionMap, buildSelectionMap, Menu as default, findKey };
62
47
  //# sourceMappingURL=menu.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"menu.d.mts","names":[],"sources":["../../../../src/components/molecules/menu/menu.tsx"],"mappings":";;;UAUiB,QAAA;EACf,KAAA,EAAO,KAAA,CAAM,SAAA;EACb,GAAA,EAAK,KAAA,CAAM,GAAA;EACX,IAAA;EACA,IAAA;EACA,QAAA,GAAW,QAAA;AAAA;AAAA,UAGI,KAAA;EACf,IAAA;EACA,YAAA,GAAe,KAAA,CAAM,GAAA;EACrB,mBAAA,GAAsB,KAAA,CAAM,GAAA;EAC5B,YAAA,GAAe,YAAA;EACf,MAAA;EACA,YAAA;EACA,UAAA;IACE,QAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;EAAA;EAEF,MAAA;IACE,QAAA,GAAW,KAAA,CAAM,aAAA;IACjB,OAAA,GAAU,KAAA,CAAM,aAAA;IAChB,IAAA,GAAO,KAAA,CAAM,aAAA;IACb,KAAA,GAAQ,KAAA,CAAM,aAAA;EAAA;EAEhB,OAAA,GAAU,iBAAA;EACV,QAAA,GAAW,iBAAA;AAAA;AAAA,UAGI,SAAA,SAEb,KAAA,EACA,IAAA,CAAK,KAAA,CAAM,wBAAA;EACb,KAAA,GAAQ,QAAA;AAAA;AAAA,KAGE,iBAAA,IAAqB,MAAA;EAC/B,QAAA,EAAU,KAAA,CAAM,cAAA;EAChB,GAAA,EAAK,KAAA,CAAM,GAAA;EACX,OAAA,EAAS,KAAA,CAAM,GAAA;EACf,IAAA,EAAM,QAAA;AAAA;AAAA,cAGK,eAAA;AAAA,KASD,YAAA,GAAe,WAAA,CAAY,KAAA,CAAM,GAAA;AAAA,cAEhC,iBAAA,GACX,KAAA,EAAO,QAAA,IACP,eAAA,EAAiB,WAAA,CAAY,KAAA,CAAM,GAAA,MAClC,YAAA;AAAA,cAeU,OAAA,GACX,IAAA,EAAM,QAAA,EACN,UAAA,EAAY,WAAA,CAAY,KAAA,CAAM,GAAA;AAAA,cAiB1B,IAAA;EAAQ,KAAA;EAAA,IAAA;EAAA,mBAAA;EAAA,YAAA,EAAA,aAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAA,MAAA;EAAA,YAAA;EAAA,OAAA;EAAA,QAAA,EAAA,SAAA;EAAA,GAAA;AAAA,GAaX,SAAA,KAAS,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"menu.d.mts","names":[],"sources":["../../../../src/components/molecules/menu/menu.tsx"],"mappings":";UAUiB;EACf,OAAO,MAAM;EACb,KAAK,MAAM;EACX;EACA;EACA,WAAW;;UAGI;EACf;EACA,eAAe,MAAM;EACrB,sBAAsB,MAAM;EAC5B,eAAe;EACf;EACA;EACA;IACE;IACA;IACA;IACA;;EAEF;IACE,WAAW,MAAM;IACjB,UAAU,MAAM;IAChB,OAAO,MAAM;IACb,QAAQ,MAAM;;EAEhB,UAAU;EACV,WAAW;;UAGI,kBAEb,OACA,KAAK,MAAM;EACb,QAAQ;;KAGE,qBAAqB;EAC/B,UAAU,MAAM;EAChB,KAAK,MAAM;EACX,SAAS,MAAM;EACf,MAAM;;cAGK;KASD,eAAe,YAAY,MAAM;cAEhC,oBACX,OAAO,YACP,iBAAiB,YAAY,MAAM,SAClC;cAeU,UACX,MAAM,UACN,YAAY,YAAY,MAAM;cAiB1B,SAAQ,OAAA,MAAA,qBAAA,cAAA,eAAA,WAAA,YAAA,QAAA,QAAA,cAAA,SAAA,UAAA,cAAA,SAaX,8BAAS,IAAA"}
@@ -1,11 +1,9 @@
1
- 'use client';
2
-
1
+ "use client";
3
2
  import { cn } from "../../../utils.mjs";
4
3
  import Item from "./item/item.mjs";
5
4
  import { createElement, useMemo } from "react";
6
5
  import { jsx } from "react/jsx-runtime";
7
6
  import { useControllableState } from "@jbpark/use-hooks";
8
-
9
7
  //#region src/components/molecules/menu/menu.tsx
10
8
  const MENU_CLASSNAMES = [
11
9
  "p-0",
@@ -66,7 +64,7 @@ const Menu = ({ items, mode = "vertical", defaultSelectedKeys = [], selectedKeys
66
64
  }))
67
65
  });
68
66
  };
69
-
70
67
  //#endregion
71
68
  export { MENU_CLASSNAMES, buildSelectionMap, Menu as default, findKey };
69
+
72
70
  //# sourceMappingURL=menu.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"menu.mjs","names":[],"sources":["../../../../src/components/molecules/menu/menu.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\n\nimport { useControllableState } from '@jbpark/use-hooks';\n\nimport { cn } from '@repo/ui/utils';\n\nimport Item from './item';\n\nexport interface MenuItem {\n label: React.ReactNode;\n key: React.Key;\n type?: string;\n path?: string;\n children?: MenuItem[];\n}\n\nexport interface Props {\n mode?: 'horizontal' | 'vertical' | 'inline';\n selectedKeys?: React.Key[];\n defaultSelectedKeys?: React.Key[];\n selectionMap?: SelectionMap;\n offset?: [number, number];\n inlineOffset?: number;\n classNames?: {\n rootItem?: string;\n subMenu?: string;\n item?: string;\n label?: string;\n };\n styles?: {\n rootItem?: React.CSSProperties;\n subMenu?: React.CSSProperties;\n item?: React.CSSProperties;\n label?: React.CSSProperties;\n };\n onClick?: ClickEventHandler;\n onSelect?: ClickEventHandler;\n}\n\nexport interface MenuProps\n extends\n Props,\n Omit<React.ComponentPropsWithoutRef<'ul'>, 'onClick' | 'onSelect'> {\n items?: MenuItem[];\n}\n\nexport type ClickEventHandler = (params: {\n domEvent: React.SyntheticEvent;\n key: React.Key;\n keyPath: React.Key[];\n item: MenuItem;\n}) => void;\n\nexport const MENU_CLASSNAMES = [\n 'p-0',\n 'bg-popover',\n 'text-popover-foreground',\n 'shadow-md',\n 'rounded-md',\n //\n];\n\nexport type SelectionMap = ReadonlyMap<React.Key, boolean>;\n\nexport const buildSelectionMap = (\n items: MenuItem[],\n selectedKeysSet: ReadonlySet<React.Key>,\n): SelectionMap => {\n const map = new Map<React.Key, boolean>();\n\n const dfs = (node: MenuItem): boolean => {\n const self = selectedKeysSet.has(node.key);\n const hasSelectedChild = node.children?.some(child => dfs(child)) ?? false;\n const isSelected = self || hasSelectedChild;\n map.set(node.key, isSelected);\n return isSelected;\n };\n\n items.forEach(dfs);\n return map;\n};\n\nexport const findKey = (\n menu: MenuItem,\n targetKeys: ReadonlySet<React.Key>,\n): boolean => {\n if (targetKeys.has(menu.key)) {\n return true;\n }\n\n if (menu.children && Array.isArray(menu.children)) {\n for (const child of menu.children) {\n if (findKey(child, targetKeys)) {\n return true;\n }\n }\n }\n\n return false;\n};\n\nconst Menu = ({\n items,\n mode = 'vertical',\n defaultSelectedKeys = [],\n selectedKeys: _selectedKeys,\n className,\n classNames,\n styles,\n offset,\n inlineOffset,\n onClick,\n onSelect: _onSelect,\n ...props\n}: MenuProps) => {\n const [selectedKeys, setSelectedKeys] = useControllableState<React.Key[]>({\n value: _selectedKeys,\n defaultValue: defaultSelectedKeys ?? [],\n });\n\n const selectedKeysSet = useMemo(\n () => new Set<React.Key>(selectedKeys ?? []),\n [selectedKeys],\n );\n\n const selectionMap = useMemo(\n () => buildSelectionMap(items ?? [], selectedKeysSet),\n [items, selectedKeysSet],\n );\n\n const onSelect = (params: {\n domEvent: React.SyntheticEvent;\n key: React.Key;\n keyPath: React.Key[];\n item: MenuItem;\n }) => {\n setSelectedKeys([params.key]);\n _onSelect?.(params);\n };\n\n return (\n <ul\n role=\"menu\"\n className={cn(\n MENU_CLASSNAMES,\n mode === 'horizontal' ? 'flex' : 'inline-block',\n className,\n )}\n {...props}\n >\n {items?.map((item, index) => (\n <Item\n root\n {...item}\n key={item.key}\n itemKey={item.key}\n keyPath={[item.key]}\n index={index}\n selectionMap={selectionMap}\n mode={mode}\n classNames={classNames}\n styles={styles}\n offset={offset}\n inlineOffset={inlineOffset}\n onClick={onClick}\n onSelect={onSelect}\n />\n ))}\n </ul>\n );\n};\n\nexport default Menu;\n"],"mappings":";;;;;;;;;AAuDA,MAAa,kBAAkB;CAC7B;CACA;CACA;CACA;CACA;CAED;AAID,MAAa,qBACX,OACA,oBACiB;CACjB,MAAM,sBAAM,IAAI,KAAyB;CAEzC,MAAM,OAAO,SAA4B;EACvC,MAAM,OAAO,gBAAgB,IAAI,KAAK,IAAI;EAC1C,MAAM,mBAAmB,KAAK,UAAU,MAAK,UAAS,IAAI,MAAM,CAAC,IAAI;EACrE,MAAM,aAAa,QAAQ;AAC3B,MAAI,IAAI,KAAK,KAAK,WAAW;AAC7B,SAAO;;AAGT,OAAM,QAAQ,IAAI;AAClB,QAAO;;AAGT,MAAa,WACX,MACA,eACY;AACZ,KAAI,WAAW,IAAI,KAAK,IAAI,CAC1B,QAAO;AAGT,KAAI,KAAK,YAAY,MAAM,QAAQ,KAAK,SAAS,EAC/C;OAAK,MAAM,SAAS,KAAK,SACvB,KAAI,QAAQ,OAAO,WAAW,CAC5B,QAAO;;AAKb,QAAO;;AAGT,MAAM,QAAQ,EACZ,OACA,OAAO,YACP,sBAAsB,EAAE,EACxB,cAAc,eACd,WACA,YACA,QACA,QACA,cACA,SACA,UAAU,WACV,GAAG,YACY;CACf,MAAM,CAAC,cAAc,mBAAmB,qBAAkC;EACxE,OAAO;EACP,cAAc,uBAAuB,EAAE;EACxC,CAAC;CAEF,MAAM,kBAAkB,cAChB,IAAI,IAAe,gBAAgB,EAAE,CAAC,EAC5C,CAAC,aAAa,CACf;CAED,MAAM,eAAe,cACb,kBAAkB,SAAS,EAAE,EAAE,gBAAgB,EACrD,CAAC,OAAO,gBAAgB,CACzB;CAED,MAAM,YAAY,WAKZ;AACJ,kBAAgB,CAAC,OAAO,IAAI,CAAC;AAC7B,cAAY,OAAO;;AAGrB,QACE,oBAAC;EACC,MAAK;EACL,WAAW,GACT,iBACA,SAAS,eAAe,SAAS,gBACjC,UACD;EACD,GAAI;YAEH,OAAO,KAAK,MAAM,UACjB,8BAAC;GACC;GACA,GAAI;GACJ,KAAK,KAAK;GACV,SAAS,KAAK;GACd,SAAS,CAAC,KAAK,IAAI;GACZ;GACO;GACR;GACM;GACJ;GACA;GACM;GACL;GACC;IACV,CACF;GACC"}
1
+ {"version":3,"file":"menu.mjs","names":[],"sources":["../../../../src/components/molecules/menu/menu.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\n\nimport { useControllableState } from '@jbpark/use-hooks';\n\nimport { cn } from '@repo/ui/utils';\n\nimport Item from './item';\n\nexport interface MenuItem {\n label: React.ReactNode;\n key: React.Key;\n type?: string;\n path?: string;\n children?: MenuItem[];\n}\n\nexport interface Props {\n mode?: 'horizontal' | 'vertical' | 'inline';\n selectedKeys?: React.Key[];\n defaultSelectedKeys?: React.Key[];\n selectionMap?: SelectionMap;\n offset?: [number, number];\n inlineOffset?: number;\n classNames?: {\n rootItem?: string;\n subMenu?: string;\n item?: string;\n label?: string;\n };\n styles?: {\n rootItem?: React.CSSProperties;\n subMenu?: React.CSSProperties;\n item?: React.CSSProperties;\n label?: React.CSSProperties;\n };\n onClick?: ClickEventHandler;\n onSelect?: ClickEventHandler;\n}\n\nexport interface MenuProps\n extends\n Props,\n Omit<React.ComponentPropsWithoutRef<'ul'>, 'onClick' | 'onSelect'> {\n items?: MenuItem[];\n}\n\nexport type ClickEventHandler = (params: {\n domEvent: React.SyntheticEvent;\n key: React.Key;\n keyPath: React.Key[];\n item: MenuItem;\n}) => void;\n\nexport const MENU_CLASSNAMES = [\n 'p-0',\n 'bg-popover',\n 'text-popover-foreground',\n 'shadow-md',\n 'rounded-md',\n //\n];\n\nexport type SelectionMap = ReadonlyMap<React.Key, boolean>;\n\nexport const buildSelectionMap = (\n items: MenuItem[],\n selectedKeysSet: ReadonlySet<React.Key>,\n): SelectionMap => {\n const map = new Map<React.Key, boolean>();\n\n const dfs = (node: MenuItem): boolean => {\n const self = selectedKeysSet.has(node.key);\n const hasSelectedChild = node.children?.some(child => dfs(child)) ?? false;\n const isSelected = self || hasSelectedChild;\n map.set(node.key, isSelected);\n return isSelected;\n };\n\n items.forEach(dfs);\n return map;\n};\n\nexport const findKey = (\n menu: MenuItem,\n targetKeys: ReadonlySet<React.Key>,\n): boolean => {\n if (targetKeys.has(menu.key)) {\n return true;\n }\n\n if (menu.children && Array.isArray(menu.children)) {\n for (const child of menu.children) {\n if (findKey(child, targetKeys)) {\n return true;\n }\n }\n }\n\n return false;\n};\n\nconst Menu = ({\n items,\n mode = 'vertical',\n defaultSelectedKeys = [],\n selectedKeys: _selectedKeys,\n className,\n classNames,\n styles,\n offset,\n inlineOffset,\n onClick,\n onSelect: _onSelect,\n ...props\n}: MenuProps) => {\n const [selectedKeys, setSelectedKeys] = useControllableState<React.Key[]>({\n value: _selectedKeys,\n defaultValue: defaultSelectedKeys ?? [],\n });\n\n const selectedKeysSet = useMemo(\n () => new Set<React.Key>(selectedKeys ?? []),\n [selectedKeys],\n );\n\n const selectionMap = useMemo(\n () => buildSelectionMap(items ?? [], selectedKeysSet),\n [items, selectedKeysSet],\n );\n\n const onSelect = (params: {\n domEvent: React.SyntheticEvent;\n key: React.Key;\n keyPath: React.Key[];\n item: MenuItem;\n }) => {\n setSelectedKeys([params.key]);\n _onSelect?.(params);\n };\n\n return (\n <ul\n role=\"menu\"\n className={cn(\n MENU_CLASSNAMES,\n mode === 'horizontal' ? 'flex' : 'inline-block',\n className,\n )}\n {...props}\n >\n {items?.map((item, index) => (\n <Item\n root\n {...item}\n key={item.key}\n itemKey={item.key}\n keyPath={[item.key]}\n index={index}\n selectionMap={selectionMap}\n mode={mode}\n classNames={classNames}\n styles={styles}\n offset={offset}\n inlineOffset={inlineOffset}\n onClick={onClick}\n onSelect={onSelect}\n />\n ))}\n </ul>\n );\n};\n\nexport default Menu;\n"],"mappings":";;;;;;;AAuDA,MAAa,kBAAkB;CAC7B;CACA;CACA;CACA;CACA;AAEF;AAIA,MAAa,qBACX,OACA,oBACiB;CACjB,MAAM,sBAAM,IAAI,IAAwB;CAExC,MAAM,OAAO,SAA4B;EACvC,MAAM,OAAO,gBAAgB,IAAI,KAAK,GAAG;EACzC,MAAM,mBAAmB,KAAK,UAAU,MAAK,UAAS,IAAI,KAAK,CAAC,KAAK;EACrE,MAAM,aAAa,QAAQ;EAC3B,IAAI,IAAI,KAAK,KAAK,UAAU;EAC5B,OAAO;CACT;CAEA,MAAM,QAAQ,GAAG;CACjB,OAAO;AACT;AAEA,MAAa,WACX,MACA,eACY;CACZ,IAAI,WAAW,IAAI,KAAK,GAAG,GACzB,OAAO;CAGT,IAAI,KAAK,YAAY,MAAM,QAAQ,KAAK,QAAQ,GACzC;OAAA,MAAM,SAAS,KAAK,UACvB,IAAI,QAAQ,OAAO,UAAU,GAC3B,OAAO;CAAA;CAKb,OAAO;AACT;AAEA,MAAM,QAAQ,EACZ,OACA,OAAO,YACP,sBAAsB,CAAC,GACvB,cAAc,eACd,WACA,YACA,QACA,QACA,cACA,SACA,UAAU,WACV,GAAG,YACY;CACf,MAAM,CAAC,cAAc,mBAAmB,qBAAkC;EACxE,OAAO;EACP,cAAc,uBAAuB,CAAC;CACxC,CAAC;CAED,MAAM,kBAAkB,cAChB,IAAI,IAAe,gBAAgB,CAAC,CAAC,GAC3C,CAAC,YAAY,CACf;CAEA,MAAM,eAAe,cACb,kBAAkB,SAAS,CAAC,GAAG,eAAe,GACpD,CAAC,OAAO,eAAe,CACzB;CAEA,MAAM,YAAY,WAKZ;EACJ,gBAAgB,CAAC,OAAO,GAAG,CAAC;EAC5B,YAAY,MAAM;CACpB;CAEA,OACE,oBAAC,MAAD;EACE,MAAK;EACL,WAAW,GACT,iBACA,SAAS,eAAe,SAAS,gBACjC,SACF;EACA,GAAI;EAEH,UAAA,OAAO,KAAK,MAAM,UACjB,8BAAC,MAAD;GACE,MAAA;GACA,GAAI;GACJ,KAAK,KAAK;GACV,SAAS,KAAK;GACd,SAAS,CAAC,KAAK,GAAG;GACX;GACO;GACR;GACM;GACJ;GACA;GACM;GACL;GACC;EACX,CAAA,CACF;CACC,CAAA;AAER"}
@@ -1,6 +1,4 @@
1
- import * as react_jsx_runtime0 from "react/jsx-runtime";
2
1
  import { MotionProps } from "motion/react";
3
-
4
2
  //#region src/components/molecules/reveals/item.d.ts
5
3
  declare const effectVariants: {
6
4
  fadeIn: {
@@ -43,18 +41,7 @@ interface ItemProps {
43
41
  variants?: MotionProps['variants'];
44
42
  transition?: MotionProps['transition'];
45
43
  }
46
- declare const Item: ({
47
- effect,
48
- children,
49
- once,
50
- viewport,
51
- variants,
52
- duration,
53
- delay,
54
- transition,
55
- className,
56
- ...props
57
- }: ItemProps) => react_jsx_runtime0.JSX.Element;
44
+ declare const Item: ({ effect, children, once, viewport, variants, duration, delay, transition, className, ...props }: ItemProps) => import("react").JSX.Element;
58
45
  //#endregion
59
- export { Item, ItemProps };
46
+ export { ItemProps, Item as default };
60
47
  //# sourceMappingURL=item.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"item.d.mts","names":[],"sources":["../../../../src/components/molecules/reveals/item.tsx"],"mappings":";;;;cAMM,cAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAeW,SAAA;EACf,MAAA,gBAAsB,cAAA;EACtB,KAAA;EACA,IAAA;EACA,QAAA;EACA,SAAA;EACA,QAAA,GAAW,KAAA,CAAM,SAAA;EACjB,QAAA,GAAW,WAAA;EACX,QAAA,GAAW,WAAA;EACX,UAAA,GAAa,WAAA;AAAA;AAAA,cAGT,IAAA;EAAQ,MAAA;EAAA,QAAA;EAAA,IAAA;EAAA,QAAA;EAAA,QAAA;EAAA,QAAA;EAAA,KAAA;EAAA,UAAA;EAAA,SAAA;EAAA,GAAA;AAAA,GAWX,SAAA,KAAS,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"item.d.mts","names":[],"sources":["../../../../src/components/molecules/reveals/item.tsx"],"mappings":";;cAMM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAeW;EACf,sBAAsB;EACtB;EACA;EACA;EACA;EACA,WAAW,MAAM;EACjB,WAAW;EACX,WAAW;EACX,aAAa;;cAGT,SAAQ,QAAA,UAAA,MAAA,UAAA,UAAA,UAAA,OAAA,YAAA,cAAA,SAWX,8BAAS,IAAA"}
@@ -1,9 +1,7 @@
1
- 'use client';
2
-
1
+ "use client";
3
2
  import { cn } from "../../../utils.mjs";
4
3
  import { jsx } from "react/jsx-runtime";
5
4
  import { motion } from "motion/react";
6
-
7
5
  //#region src/components/molecules/reveals/item.tsx
8
6
  const effectVariants = {
9
7
  fadeIn: {
@@ -61,7 +59,7 @@ const Item = ({ effect = "fadeInUp", children, once, viewport, variants, duratio
61
59
  children
62
60
  });
63
61
  };
64
-
65
62
  //#endregion
66
63
  export { Item as default };
64
+
67
65
  //# sourceMappingURL=item.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"item.mjs","names":[],"sources":["../../../../src/components/molecules/reveals/item.tsx"],"sourcesContent":["'use client';\n\nimport { type MotionProps, motion } from 'motion/react';\n\nimport { cn } from '@repo/ui/utils';\n\nconst effectVariants = {\n fadeIn: {\n offscreen: { opacity: 0 },\n onscreen: { opacity: 1 },\n },\n fadeInUp: {\n offscreen: { opacity: 0, y: 50 },\n onscreen: { opacity: 1, y: 0 },\n },\n slideInUp: {\n offscreen: { opacity: 1, y: 50 },\n onscreen: { opacity: 1, y: 0 },\n },\n};\n\nexport interface ItemProps {\n effect?: keyof typeof effectVariants;\n delay?: number;\n once?: boolean;\n duration?: number;\n className?: string;\n children?: React.ReactNode;\n viewport?: MotionProps['viewport'];\n variants?: MotionProps['variants'];\n transition?: MotionProps['transition'];\n}\n\nconst Item = ({\n effect = 'fadeInUp',\n children,\n once,\n viewport,\n variants,\n duration,\n delay,\n transition,\n className,\n ...props\n}: ItemProps) => {\n return (\n <motion.div\n initial=\"offscreen\"\n whileInView=\"onscreen\"\n viewport={{ once, ...viewport }}\n variants={{\n offscreen: {\n ...effectVariants[effect].offscreen,\n ...variants?.offscreen,\n transition: {\n duration: 0,\n },\n },\n onscreen: {\n ...effectVariants[effect].onscreen,\n ...variants?.onscreen,\n transition: {\n duration,\n ease: 'easeOut',\n delay,\n ...transition,\n },\n },\n }}\n className={cn(\n 'flex h-full items-center justify-center',\n className,\n //\n )}\n {...props}\n >\n {children}\n </motion.div>\n );\n};\n\nexport default Item;\n"],"mappings":";;;;;;;AAMA,MAAM,iBAAiB;CACrB,QAAQ;EACN,WAAW,EAAE,SAAS,GAAG;EACzB,UAAU,EAAE,SAAS,GAAG;EACzB;CACD,UAAU;EACR,WAAW;GAAE,SAAS;GAAG,GAAG;GAAI;EAChC,UAAU;GAAE,SAAS;GAAG,GAAG;GAAG;EAC/B;CACD,WAAW;EACT,WAAW;GAAE,SAAS;GAAG,GAAG;GAAI;EAChC,UAAU;GAAE,SAAS;GAAG,GAAG;GAAG;EAC/B;CACF;AAcD,MAAM,QAAQ,EACZ,SAAS,YACT,UACA,MACA,UACA,UACA,UACA,OACA,YACA,WACA,GAAG,YACY;AACf,QACE,oBAAC,OAAO;EACN,SAAQ;EACR,aAAY;EACZ,UAAU;GAAE;GAAM,GAAG;GAAU;EAC/B,UAAU;GACR,WAAW;IACT,GAAG,eAAe,QAAQ;IAC1B,GAAG,UAAU;IACb,YAAY,EACV,UAAU,GACX;IACF;GACD,UAAU;IACR,GAAG,eAAe,QAAQ;IAC1B,GAAG,UAAU;IACb,YAAY;KACV;KACA,MAAM;KACN;KACA,GAAG;KACJ;IACF;GACF;EACD,WAAW,GACT,2CACA,UAED;EACD,GAAI;EAEH;GACU"}
1
+ {"version":3,"file":"item.mjs","names":[],"sources":["../../../../src/components/molecules/reveals/item.tsx"],"sourcesContent":["'use client';\n\nimport { type MotionProps, motion } from 'motion/react';\n\nimport { cn } from '@repo/ui/utils';\n\nconst effectVariants = {\n fadeIn: {\n offscreen: { opacity: 0 },\n onscreen: { opacity: 1 },\n },\n fadeInUp: {\n offscreen: { opacity: 0, y: 50 },\n onscreen: { opacity: 1, y: 0 },\n },\n slideInUp: {\n offscreen: { opacity: 1, y: 50 },\n onscreen: { opacity: 1, y: 0 },\n },\n};\n\nexport interface ItemProps {\n effect?: keyof typeof effectVariants;\n delay?: number;\n once?: boolean;\n duration?: number;\n className?: string;\n children?: React.ReactNode;\n viewport?: MotionProps['viewport'];\n variants?: MotionProps['variants'];\n transition?: MotionProps['transition'];\n}\n\nconst Item = ({\n effect = 'fadeInUp',\n children,\n once,\n viewport,\n variants,\n duration,\n delay,\n transition,\n className,\n ...props\n}: ItemProps) => {\n return (\n <motion.div\n initial=\"offscreen\"\n whileInView=\"onscreen\"\n viewport={{ once, ...viewport }}\n variants={{\n offscreen: {\n ...effectVariants[effect].offscreen,\n ...variants?.offscreen,\n transition: {\n duration: 0,\n },\n },\n onscreen: {\n ...effectVariants[effect].onscreen,\n ...variants?.onscreen,\n transition: {\n duration,\n ease: 'easeOut',\n delay,\n ...transition,\n },\n },\n }}\n className={cn(\n 'flex h-full items-center justify-center',\n className,\n //\n )}\n {...props}\n >\n {children}\n </motion.div>\n );\n};\n\nexport default Item;\n"],"mappings":";;;;;AAMA,MAAM,iBAAiB;CACrB,QAAQ;EACN,WAAW,EAAE,SAAS,EAAE;EACxB,UAAU,EAAE,SAAS,EAAE;CACzB;CACA,UAAU;EACR,WAAW;GAAE,SAAS;GAAG,GAAG;EAAG;EAC/B,UAAU;GAAE,SAAS;GAAG,GAAG;EAAE;CAC/B;CACA,WAAW;EACT,WAAW;GAAE,SAAS;GAAG,GAAG;EAAG;EAC/B,UAAU;GAAE,SAAS;GAAG,GAAG;EAAE;CAC/B;AACF;AAcA,MAAM,QAAQ,EACZ,SAAS,YACT,UACA,MACA,UACA,UACA,UACA,OACA,YACA,WACA,GAAG,YACY;CACf,OACE,oBAAC,OAAO,KAAR;EACE,SAAQ;EACR,aAAY;EACZ,UAAU;GAAE;GAAM,GAAG;EAAS;EAC9B,UAAU;GACR,WAAW;IACT,GAAG,eAAe,OAAO,CAAC;IAC1B,GAAG,UAAU;IACb,YAAY,EACV,UAAU,EACZ;GACF;GACA,UAAU;IACR,GAAG,eAAe,OAAO,CAAC;IAC1B,GAAG,UAAU;IACb,YAAY;KACV;KACA,MAAM;KACN;KACA,GAAG;IACL;GACF;EACF;EACA,WAAW,GACT,2CACA,SAEF;EACA,GAAI;EAEH;CACS,CAAA;AAEhB"}
@@ -1,6 +1,4 @@
1
1
  import { ItemProps } from "./item.mjs";
2
- import * as react_jsx_runtime0 from "react/jsx-runtime";
3
-
4
2
  //#region src/components/molecules/reveals/reveals.d.ts
5
3
  interface Props extends React.ComponentPropsWithoutRef<'div'>, ItemProps {
6
4
  cascade?: number;
@@ -14,21 +12,7 @@ interface Props extends React.ComponentPropsWithoutRef<'div'>, ItemProps {
14
12
  declare const DURATION = 0.6;
15
13
  declare const DELAY = 0;
16
14
  declare const CASCADE = 0.1;
17
- declare const Reveals: ({
18
- children,
19
- className,
20
- classNames,
21
- items,
22
- cascade,
23
- duration,
24
- delay,
25
- effect,
26
- once,
27
- viewport,
28
- variants,
29
- transition,
30
- ...props
31
- }: Props) => react_jsx_runtime0.JSX.Element;
15
+ declare const Reveals: ({ children, className, classNames, items, cascade, duration, delay, effect, once, viewport, variants, transition, ...props }: Props) => import("react").JSX.Element;
32
16
  //#endregion
33
- export { CASCADE, DELAY, DURATION, Props, Reveals };
17
+ export { CASCADE, DELAY, DURATION, Props, Reveals as default };
34
18
  //# sourceMappingURL=reveals.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reveals.d.mts","names":[],"sources":["../../../../src/components/molecules/reveals/reveals.tsx"],"mappings":";;;;UAMiB,KAAA,SACP,KAAA,CAAM,wBAAA,SAAiC,SAAA;EAC/C,OAAA;EACA,UAAA;IACE,IAAA;IACA,IAAA;EAAA;EAEF,IAAA;EACA,KAAA,GAAQ,SAAA;AAAA;AAAA,cAGG,QAAA;AAAA,cACA,KAAA;AAAA,cACA,OAAA;AAAA,cAEP,OAAA;EAAW,QAAA;EAAA,SAAA;EAAA,UAAA;EAAA,KAAA;EAAA,OAAA;EAAA,QAAA;EAAA,KAAA;EAAA,MAAA;EAAA,IAAA;EAAA,QAAA;EAAA,QAAA;EAAA,UAAA;EAAA,GAAA;AAAA,GAcd,KAAA,KAAK,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"reveals.d.mts","names":[],"sources":["../../../../src/components/molecules/reveals/reveals.tsx"],"mappings":";;UAMiB,cACP,MAAM,iCAAiC;EAC/C;EACA;IACE;IACA;;EAEF;EACA,QAAQ;;cAGG;cACA;cACA;cAEP,YAAW,UAAA,WAAA,YAAA,OAAA,SAAA,UAAA,OAAA,QAAA,MAAA,UAAA,UAAA,eAAA,SAcd,0BAAK,IAAA"}
@@ -2,12 +2,11 @@ import { cn } from "../../../utils.mjs";
2
2
  import Item from "./item.mjs";
3
3
  import { Children } from "react";
4
4
  import { jsx } from "react/jsx-runtime";
5
-
6
5
  //#region src/components/molecules/reveals/reveals.tsx
7
6
  const DURATION = .6;
8
7
  const DELAY = 0;
9
8
  const CASCADE = .1;
10
- const Reveals = ({ children, className, classNames, items = [], cascade = CASCADE, duration = DURATION, delay = DELAY, effect, once, viewport, variants, transition, ...props }) => {
9
+ const Reveals = ({ children, className, classNames, items = [], cascade = CASCADE, duration = DURATION, delay = 0, effect, once, viewport, variants, transition, ...props }) => {
11
10
  const renderItems = (items) => items.map((item, index) => /* @__PURE__ */ jsx(Item, {
12
11
  effect,
13
12
  duration,
@@ -26,7 +25,7 @@ const Reveals = ({ children, className, classNames, items = [], cascade = CASCAD
26
25
  children: renderItems(children ? Children.toArray(children).map((child) => ({ children: child })) : items)
27
26
  });
28
27
  };
29
-
30
28
  //#endregion
31
29
  export { CASCADE, DELAY, DURATION, Reveals as default };
30
+
32
31
  //# sourceMappingURL=reveals.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"reveals.mjs","names":[],"sources":["../../../../src/components/molecules/reveals/reveals.tsx"],"sourcesContent":["import { Children } from 'react';\n\nimport { cn } from '@repo/ui/utils';\n\nimport Item, { type ItemProps } from './item';\n\nexport interface Props\n extends React.ComponentPropsWithoutRef<'div'>, ItemProps {\n cascade?: number;\n classNames?: {\n root?: string;\n item?: string;\n };\n once?: boolean;\n items?: ItemProps[];\n}\n\nexport const DURATION = 0.6;\nexport const DELAY = 0;\nexport const CASCADE = 0.1;\n\nconst Reveals = ({\n children,\n className,\n classNames,\n items = [],\n cascade = CASCADE,\n duration = DURATION,\n delay = DELAY,\n effect,\n once,\n viewport,\n variants,\n transition,\n ...props\n}: Props) => {\n const renderItems = (items: ItemProps[]) =>\n items.map((item, index) => (\n <Item\n key={index}\n effect={effect}\n duration={duration}\n delay={delay + cascade * index}\n once={once}\n viewport={viewport}\n variants={variants}\n transition={transition}\n {...item}\n className={cn(\n item.className,\n classNames?.item,\n //\n )}\n >\n {item.children}\n </Item>\n ));\n\n return (\n <div\n className={cn(\n 'flex gap-5',\n className,\n classNames?.root,\n //\n )}\n {...props}\n >\n {renderItems(\n children\n ? Children.toArray(children).map(child => ({\n children: child,\n }))\n : items,\n )}\n </div>\n );\n};\n\nexport default Reveals;\n"],"mappings":";;;;;;AAiBA,MAAa,WAAW;AACxB,MAAa,QAAQ;AACrB,MAAa,UAAU;AAEvB,MAAM,WAAW,EACf,UACA,WACA,YACA,QAAQ,EAAE,EACV,UAAU,SACV,WAAW,UACX,QAAQ,OACR,QACA,MACA,UACA,UACA,YACA,GAAG,YACQ;CACX,MAAM,eAAe,UACnB,MAAM,KAAK,MAAM,UACf,oBAAC;EAES;EACE;EACV,OAAO,QAAQ,UAAU;EACnB;EACI;EACA;EACE;EACZ,GAAI;EACJ,WAAW,GACT,KAAK,WACL,YAAY,KAEb;YAEA,KAAK;IAfD,MAgBA,CACP;AAEJ,QACE,oBAAC;EACC,WAAW,GACT,cACA,WACA,YAAY,KAEb;EACD,GAAI;YAEH,YACC,WACI,SAAS,QAAQ,SAAS,CAAC,KAAI,WAAU,EACvC,UAAU,OACX,EAAE,GACH,MACL;GACG"}
1
+ {"version":3,"file":"reveals.mjs","names":[],"sources":["../../../../src/components/molecules/reveals/reveals.tsx"],"sourcesContent":["import { Children } from 'react';\n\nimport { cn } from '@repo/ui/utils';\n\nimport Item, { type ItemProps } from './item';\n\nexport interface Props\n extends React.ComponentPropsWithoutRef<'div'>, ItemProps {\n cascade?: number;\n classNames?: {\n root?: string;\n item?: string;\n };\n once?: boolean;\n items?: ItemProps[];\n}\n\nexport const DURATION = 0.6;\nexport const DELAY = 0;\nexport const CASCADE = 0.1;\n\nconst Reveals = ({\n children,\n className,\n classNames,\n items = [],\n cascade = CASCADE,\n duration = DURATION,\n delay = DELAY,\n effect,\n once,\n viewport,\n variants,\n transition,\n ...props\n}: Props) => {\n const renderItems = (items: ItemProps[]) =>\n items.map((item, index) => (\n <Item\n key={index}\n effect={effect}\n duration={duration}\n delay={delay + cascade * index}\n once={once}\n viewport={viewport}\n variants={variants}\n transition={transition}\n {...item}\n className={cn(\n item.className,\n classNames?.item,\n //\n )}\n >\n {item.children}\n </Item>\n ));\n\n return (\n <div\n className={cn(\n 'flex gap-5',\n className,\n classNames?.root,\n //\n )}\n {...props}\n >\n {renderItems(\n children\n ? Children.toArray(children).map(child => ({\n children: child,\n }))\n : items,\n )}\n </div>\n );\n};\n\nexport default Reveals;\n"],"mappings":";;;;;AAiBA,MAAa,WAAW;AACxB,MAAa,QAAQ;AACrB,MAAa,UAAU;AAEvB,MAAM,WAAW,EACf,UACA,WACA,YACA,QAAQ,CAAC,GACT,UAAU,SACV,WAAW,UACX,QAAA,GACA,QACA,MACA,UACA,UACA,YACA,GAAG,YACQ;CACX,MAAM,eAAe,UACnB,MAAM,KAAK,MAAM,UACf,oBAAC,MAAD;EAEU;EACE;EACV,OAAO,QAAQ,UAAU;EACnB;EACI;EACA;EACE;EACZ,GAAI;EACJ,WAAW,GACT,KAAK,WACL,YAAY,IAEd;EAEC,UAAA,KAAK;CACF,GAhBC,KAgBD,CACP;CAEH,OACE,oBAAC,OAAD;EACE,WAAW,GACT,cACA,WACA,YAAY,IAEd;EACA,GAAI;EAEH,UAAA,YACC,WACI,SAAS,QAAQ,QAAQ,CAAC,CAAC,KAAI,WAAU,EACvC,UAAU,MACZ,EAAE,IACF,KACN;CACG,CAAA;AAET"}
@@ -1,11 +1,10 @@
1
- import { Panel, Props } from "./panel.mjs";
2
- import { Props as Props$1, Splitter as Splitter$1 } from "./splitter.mjs";
3
-
1
+ import Panel, { Props } from "./panel.mjs";
2
+ import Splitter$1, { Props as Props$1 } from "./splitter.mjs";
4
3
  //#region src/components/molecules/splitter/index.d.ts
5
4
  type SplitterComponent = typeof Splitter$1 & {
6
5
  Panel: typeof Panel;
7
6
  };
8
7
  declare const Splitter: SplitterComponent;
9
8
  //#endregion
10
- export { Splitter };
9
+ export { type Props$1 as Props, Splitter as default };
11
10
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/molecules/splitter/index.ts"],"mappings":";;;;KAGK,iBAAA,UAA2B,UAAA;EAAiB,KAAA,SAAc,KAAA;AAAA;AAAA,cAEzD,QAAA,EAA2B,iBAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/molecules/splitter/index.ts"],"mappings":";;;KAGK,2BAA2B;EAAiB,cAAc;;cAEzD,UAA2B"}
@@ -1,10 +1,9 @@
1
1
  import Panel from "./panel.mjs";
2
2
  import Splitter$1 from "./splitter.mjs";
3
-
4
3
  //#region src/components/molecules/splitter/index.ts
5
4
  const Splitter = Splitter$1;
6
5
  Splitter.Panel = Panel;
7
-
8
6
  //#endregion
9
7
  export { Splitter as default };
8
+
10
9
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["SplitterImpl"],"sources":["../../../../src/components/molecules/splitter/index.ts"],"sourcesContent":["import Panel, { type Props as SplitterPanelProps } from './panel';\nimport SplitterImpl, { type Props } from './splitter';\n\ntype SplitterComponent = typeof SplitterImpl & { Panel: typeof Panel };\n\nconst Splitter = SplitterImpl as SplitterComponent;\n\nSplitter.Panel = Panel;\n\nexport default Splitter;\nexport type { Props, SplitterPanelProps };\n"],"mappings":";;;;AAKA,MAAM,WAAWA;AAEjB,SAAS,QAAQ"}
1
+ {"version":3,"file":"index.mjs","names":["SplitterImpl"],"sources":["../../../../src/components/molecules/splitter/index.ts"],"sourcesContent":["import Panel, { type Props as SplitterPanelProps } from './panel';\nimport SplitterImpl, { type Props } from './splitter';\n\ntype SplitterComponent = typeof SplitterImpl & { Panel: typeof Panel };\n\nconst Splitter = SplitterImpl as SplitterComponent;\n\nSplitter.Panel = Panel;\n\nexport default Splitter;\nexport type { Props, SplitterPanelProps };\n"],"mappings":";;;AAKA,MAAM,WAAWA;AAEjB,SAAS,QAAQ"}
@@ -1,17 +1,11 @@
1
1
  import { ResizablePanel as ResizablePanel$1 } from "../../../core/resizable.mjs";
2
2
  import "../../../core.mjs";
3
- import * as react_jsx_runtime0 from "react/jsx-runtime";
4
-
5
3
  //#region src/components/molecules/splitter/panel.d.ts
6
4
  declare const ResizablePanel: typeof ResizablePanel$1;
7
5
  interface Props extends React.ComponentProps<typeof ResizablePanel> {
8
6
  children: React.ReactNode;
9
7
  }
10
- declare const Panel: ({
11
- children,
12
- className,
13
- ...props
14
- }: Props) => react_jsx_runtime0.JSX.Element;
8
+ declare const Panel: ({ children, className, ...props }: Props) => import("react").JSX.Element;
15
9
  //#endregion
16
- export { Panel, Props };
10
+ export { Props, Panel as default };
17
11
  //# sourceMappingURL=panel.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"panel.d.mts","names":[],"sources":["../../../../src/components/molecules/splitter/panel.tsx"],"mappings":";;;;;cAGQ,cAAA,SAAc,gBAAA;AAAA,UAEL,KAAA,SAAc,KAAA,CAAM,cAAA,QAAsB,cAAA;EACzD,QAAA,EAAU,KAAA,CAAM,SAAA;AAAA;AAAA,cAGZ,KAAA;EAAS,QAAA;EAAA,SAAA;EAAA,GAAA;AAAA,GAAmC,KAAA,KAAK,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"panel.d.mts","names":[],"sources":["../../../../src/components/molecules/splitter/panel.tsx"],"mappings":";;;cAGQ,uBAAc;UAEL,cAAc,MAAM,sBAAsB;EACzD,UAAU,MAAM;;cAGZ,UAAS,UAAA,cAAA,SAAmC,0BAAK,IAAA"}
@@ -1,7 +1,6 @@
1
1
  import { cn } from "../../../utils.mjs";
2
2
  import { resizable_exports } from "../../../core/resizable.mjs";
3
3
  import { jsx } from "react/jsx-runtime";
4
-
5
4
  //#region src/components/molecules/splitter/panel.tsx
6
5
  const { ResizablePanel } = resizable_exports;
7
6
  const Panel = ({ children, className, ...props }) => {
@@ -11,7 +10,7 @@ const Panel = ({ children, className, ...props }) => {
11
10
  children
12
11
  });
13
12
  };
14
-
15
13
  //#endregion
16
14
  export { Panel as default };
15
+
17
16
  //# sourceMappingURL=panel.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"panel.mjs","names":["resizable"],"sources":["../../../../src/components/molecules/splitter/panel.tsx"],"sourcesContent":["import { resizable } from '@repo/ui/core';\nimport { cn } from '@repo/ui/utils';\n\nconst { ResizablePanel } = resizable;\n\nexport interface Props extends React.ComponentProps<typeof ResizablePanel> {\n children: React.ReactNode;\n}\n\nconst Panel = ({ children, className, ...props }: Props) => {\n return (\n <ResizablePanel\n className={cn('min-h-0 min-w-0 overflow-auto', className)}\n {...props}\n >\n {children}\n </ResizablePanel>\n );\n};\n\nexport default Panel;\n"],"mappings":";;;;;AAGA,MAAM,EAAE,mBAAmBA;AAM3B,MAAM,SAAS,EAAE,UAAU,WAAW,GAAG,YAAmB;AAC1D,QACE,oBAAC;EACC,WAAW,GAAG,iCAAiC,UAAU;EACzD,GAAI;EAEH;GACc"}
1
+ {"version":3,"file":"panel.mjs","names":["resizable"],"sources":["../../../../src/components/molecules/splitter/panel.tsx"],"sourcesContent":["import { resizable } from '@repo/ui/core';\nimport { cn } from '@repo/ui/utils';\n\nconst { ResizablePanel } = resizable;\n\nexport interface Props extends React.ComponentProps<typeof ResizablePanel> {\n children: React.ReactNode;\n}\n\nconst Panel = ({ children, className, ...props }: Props) => {\n return (\n <ResizablePanel\n className={cn('min-h-0 min-w-0 overflow-auto', className)}\n {...props}\n >\n {children}\n </ResizablePanel>\n );\n};\n\nexport default Panel;\n"],"mappings":";;;;AAGA,MAAM,EAAE,mBAAmBA;AAM3B,MAAM,SAAS,EAAE,UAAU,WAAW,GAAG,YAAmB;CAC1D,OACE,oBAAC,gBAAD;EACE,WAAW,GAAG,iCAAiC,SAAS;EACxD,GAAI;EAEH;CACa,CAAA;AAEpB"}
@@ -1,7 +1,5 @@
1
1
  import { ResizablePanelGroup as ResizablePanelGroup$1 } from "../../../core/resizable.mjs";
2
2
  import "../../../core.mjs";
3
- import * as react_jsx_runtime0 from "react/jsx-runtime";
4
-
5
3
  //#region src/components/molecules/splitter/splitter.d.ts
6
4
  declare const ResizablePanelGroup: typeof ResizablePanelGroup$1;
7
5
  type SplitterLayout = Parameters<NonNullable<React.ComponentProps<typeof ResizablePanelGroup>['onLayoutChanged']>>[0];
@@ -14,17 +12,7 @@ interface Props extends Omit<React.ComponentProps<typeof ResizablePanelGroup>, '
14
12
  onResize?: (layout: SplitterLayout) => void;
15
13
  onResizeEnd?: (layout: SplitterLayout) => void;
16
14
  }
17
- declare const Splitter: ({
18
- children,
19
- className,
20
- orientation,
21
- withHandle,
22
- handle,
23
- handleClassName,
24
- onResize,
25
- onResizeEnd,
26
- ...props
27
- }: Props) => react_jsx_runtime0.JSX.Element;
15
+ declare const Splitter: ({ children, className, orientation, withHandle, handle, handleClassName, onResize, onResizeEnd, ...props }: Props) => import("react").JSX.Element;
28
16
  //#endregion
29
- export { Props, Splitter };
17
+ export { Props, Splitter as default };
30
18
  //# sourceMappingURL=splitter.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"splitter.d.mts","names":[],"sources":["../../../../src/components/molecules/splitter/splitter.tsx"],"mappings":";;;;;cAOyB,mBAAA,SAAmB,qBAAA;AAAA,KAEvC,cAAA,GAAiB,UAAA,CACpB,WAAA,CACE,KAAA,CAAM,cAAA,QAAsB,mBAAA;AAAA,UAIf,KAAA,SAAc,IAAA,CAC7B,KAAA,CAAM,cAAA,QAAsB,mBAAA;EAG5B,QAAA,EAAU,KAAA,CAAM,SAAA;EAChB,WAAA;EACA,UAAA;EACA,MAAA,GAAS,KAAA,CAAM,SAAA;EACf,eAAA;EACA,QAAA,IAAY,MAAA,EAAQ,cAAA;EACpB,WAAA,IAAe,MAAA,EAAQ,cAAA;AAAA;AAAA,cAGnB,QAAA;EAAY,QAAA;EAAA,SAAA;EAAA,WAAA;EAAA,UAAA;EAAA,MAAA;EAAA,eAAA;EAAA,QAAA;EAAA,WAAA;EAAA,GAAA;AAAA,GAUf,KAAA,KAAK,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"splitter.d.mts","names":[],"sources":["../../../../src/components/molecules/splitter/splitter.tsx"],"mappings":";;;cAOyB,4BAAmB;KAEvC,iBAAiB,WACpB,YACE,MAAM,sBAAsB;UAIf,cAAc,KAC7B,MAAM,sBAAsB;EAG5B,UAAU,MAAM;EAChB;EACA;EACA,SAAS,MAAM;EACf;EACA,YAAY,QAAQ;EACpB,eAAe,QAAQ;;cAGnB,aAAY,UAAA,WAAA,aAAA,YAAA,QAAA,iBAAA,UAAA,gBAAA,SAUf,0BAAK,IAAA"}
@@ -1,10 +1,8 @@
1
- 'use client';
2
-
1
+ "use client";
3
2
  import { cn } from "../../../utils.mjs";
4
3
  import { resizable_exports } from "../../../core/resizable.mjs";
5
4
  import { Children, Fragment, isValidElement } from "react";
6
5
  import { jsx, jsxs } from "react/jsx-runtime";
7
-
8
6
  //#region src/components/molecules/splitter/splitter.tsx
9
7
  const { ResizableHandle, ResizablePanelGroup } = resizable_exports;
10
8
  const Splitter = ({ children, className, orientation = "horizontal", withHandle = true, handle, handleClassName, onResize, onResizeEnd, ...props }) => {
@@ -23,7 +21,7 @@ const Splitter = ({ children, className, orientation = "horizontal", withHandle
23
21
  })] }, isValidElement(panel) && panel.key != null ? panel.key : index))
24
22
  });
25
23
  };
26
-
27
24
  //#endregion
28
25
  export { Splitter as default };
26
+
29
27
  //# sourceMappingURL=splitter.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"splitter.mjs","names":["resizable"],"sources":["../../../../src/components/molecules/splitter/splitter.tsx"],"sourcesContent":["'use client';\n\nimport { Children, Fragment, isValidElement } from 'react';\n\nimport { resizable } from '@repo/ui/core';\nimport { cn } from '@repo/ui/utils';\n\nconst { ResizableHandle, ResizablePanelGroup } = resizable;\n\ntype SplitterLayout = Parameters<\n NonNullable<\n React.ComponentProps<typeof ResizablePanelGroup>['onLayoutChanged']\n >\n>[0];\n\nexport interface Props extends Omit<\n React.ComponentProps<typeof ResizablePanelGroup>,\n 'children' | 'orientation' | 'onLayoutChange' | 'onLayoutChanged' | 'onResize'\n> {\n children: React.ReactNode;\n orientation?: 'horizontal' | 'vertical';\n withHandle?: boolean;\n handle?: React.ReactNode;\n handleClassName?: string;\n onResize?: (layout: SplitterLayout) => void;\n onResizeEnd?: (layout: SplitterLayout) => void;\n}\n\nconst Splitter = ({\n children,\n className,\n orientation = 'horizontal',\n withHandle = true,\n handle,\n handleClassName,\n onResize,\n onResizeEnd,\n ...props\n}: Props) => {\n const panels = Children.toArray(children);\n\n return (\n <ResizablePanelGroup\n className={cn(\n 'border-border/60 h-full w-full rounded-lg border',\n className,\n )}\n orientation={orientation}\n onLayoutChange={onResize}\n onLayoutChanged={onResizeEnd}\n {...props}\n >\n {panels.map((panel, index) => (\n <Fragment\n key={isValidElement(panel) && panel.key != null ? panel.key : index}\n >\n {panel}\n {index < panels.length - 1 && (\n <ResizableHandle\n className={cn(\n `hover:bg-border/80 data-separator-active:bg-border\n transition-colors`,\n handleClassName,\n )}\n withHandle={withHandle && handle === undefined}\n >\n {handle}\n </ResizableHandle>\n )}\n </Fragment>\n ))}\n </ResizablePanelGroup>\n );\n};\n\nexport default Splitter;\n"],"mappings":";;;;;;;;AAOA,MAAM,EAAE,iBAAiB,wBAAwBA;AAqBjD,MAAM,YAAY,EAChB,UACA,WACA,cAAc,cACd,aAAa,MACb,QACA,iBACA,UACA,aACA,GAAG,YACQ;CACX,MAAM,SAAS,SAAS,QAAQ,SAAS;AAEzC,QACE,oBAAC;EACC,WAAW,GACT,oDACA,UACD;EACY;EACb,gBAAgB;EAChB,iBAAiB;EACjB,GAAI;YAEH,OAAO,KAAK,OAAO,UAClB,qBAAC,uBAGE,OACA,QAAQ,OAAO,SAAS,KACvB,oBAAC;GACC,WAAW,GACT;oCAEA,gBACD;GACD,YAAY,cAAc,WAAW;aAEpC;IACe,KAbf,eAAe,MAAM,IAAI,MAAM,OAAO,OAAO,MAAM,MAAM,MAerD,CACX;GACkB"}
1
+ {"version":3,"file":"splitter.mjs","names":["resizable"],"sources":["../../../../src/components/molecules/splitter/splitter.tsx"],"sourcesContent":["'use client';\n\nimport { Children, Fragment, isValidElement } from 'react';\n\nimport { resizable } from '@repo/ui/core';\nimport { cn } from '@repo/ui/utils';\n\nconst { ResizableHandle, ResizablePanelGroup } = resizable;\n\ntype SplitterLayout = Parameters<\n NonNullable<\n React.ComponentProps<typeof ResizablePanelGroup>['onLayoutChanged']\n >\n>[0];\n\nexport interface Props extends Omit<\n React.ComponentProps<typeof ResizablePanelGroup>,\n 'children' | 'orientation' | 'onLayoutChange' | 'onLayoutChanged' | 'onResize'\n> {\n children: React.ReactNode;\n orientation?: 'horizontal' | 'vertical';\n withHandle?: boolean;\n handle?: React.ReactNode;\n handleClassName?: string;\n onResize?: (layout: SplitterLayout) => void;\n onResizeEnd?: (layout: SplitterLayout) => void;\n}\n\nconst Splitter = ({\n children,\n className,\n orientation = 'horizontal',\n withHandle = true,\n handle,\n handleClassName,\n onResize,\n onResizeEnd,\n ...props\n}: Props) => {\n const panels = Children.toArray(children);\n\n return (\n <ResizablePanelGroup\n className={cn(\n 'border-border/60 h-full w-full rounded-lg border',\n className,\n )}\n orientation={orientation}\n onLayoutChange={onResize}\n onLayoutChanged={onResizeEnd}\n {...props}\n >\n {panels.map((panel, index) => (\n <Fragment\n key={isValidElement(panel) && panel.key != null ? panel.key : index}\n >\n {panel}\n {index < panels.length - 1 && (\n <ResizableHandle\n className={cn(\n `hover:bg-border/80 data-separator-active:bg-border\n transition-colors`,\n handleClassName,\n )}\n withHandle={withHandle && handle === undefined}\n >\n {handle}\n </ResizableHandle>\n )}\n </Fragment>\n ))}\n </ResizablePanelGroup>\n );\n};\n\nexport default Splitter;\n"],"mappings":";;;;;;AAOA,MAAM,EAAE,iBAAiB,wBAAwBA;AAqBjD,MAAM,YAAY,EAChB,UACA,WACA,cAAc,cACd,aAAa,MACb,QACA,iBACA,UACA,aACA,GAAG,YACQ;CACX,MAAM,SAAS,SAAS,QAAQ,QAAQ;CAExC,OACE,oBAAC,qBAAD;EACE,WAAW,GACT,oDACA,SACF;EACa;EACb,gBAAgB;EAChB,iBAAiB;EACjB,GAAI;EAEH,UAAA,OAAO,KAAK,OAAO,UAClB,qBAAC,UAAD,EAAA,UAAA,CAGG,OACA,QAAQ,OAAO,SAAS,KACvB,oBAAC,iBAAD;GACE,WAAW,GACT;oCAEA,eACF;GACA,YAAY,cAAc,WAAW,KAAA;GAEpC,UAAA;EACc,CAAA,CAEX,EAAA,GAfH,eAAe,KAAK,KAAK,MAAM,OAAO,OAAO,MAAM,MAAM,KAetD,CACX;CACkB,CAAA;AAEzB"}
@@ -1,5 +1,3 @@
1
- import * as react_jsx_runtime0 from "react/jsx-runtime";
2
-
3
1
  //#region src/components/molecules/upload.d.ts
4
2
  interface UploadFile {
5
3
  uid: string;
@@ -29,18 +27,7 @@ interface Props {
29
27
  reason: 'max-count' | 'read-error';
30
28
  }) => void;
31
29
  }
32
- declare const Upload: ({
33
- defaultValue,
34
- value: _value,
35
- multiple,
36
- accept,
37
- maxCount,
38
- disabled,
39
- className,
40
- classNames,
41
- onChange: _onChange,
42
- onReject
43
- }: Props) => react_jsx_runtime0.JSX.Element;
30
+ declare const Upload: ({ defaultValue, value: _value, multiple, accept, maxCount, disabled, className, classNames, onChange: _onChange, onReject }: Props) => import("react").JSX.Element;
44
31
  //#endregion
45
- export { Props, Upload, UploadFile };
32
+ export { Props, UploadFile, Upload as default };
46
33
  //# sourceMappingURL=upload.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"upload.d.mts","names":[],"sources":["../../../src/components/molecules/upload.tsx"],"mappings":";;;UAgBiB,UAAA;EACf,GAAA;EACA,IAAA;EACA,GAAA;AAAA;AAAA,UAGe,KAAA;EACf,YAAA,GAAe,UAAA;EACf,KAAA,GAAQ,UAAA;EACR,QAAA;EACA,MAAA;EACA,QAAA;EACA,QAAA;EACA,SAAA;EACA,UAAA;IACE,QAAA;IACA,IAAA;IACA,IAAA;EAAA;EAEF,QAAA,IAAY,KAAA,EAAO,UAAA;EAKW;;;;EAA9B,QAAA,IAAY,IAAA;IAAQ,IAAA,EAAM,IAAA;IAAM,MAAA;EAAA;AAAA;AAAA,cAO5B,MAAA;EAAU,YAAA;EAAA,KAAA,EAAA,MAAA;EAAA,QAAA;EAAA,MAAA;EAAA,QAAA;EAAA,QAAA;EAAA,SAAA;EAAA,UAAA;EAAA,QAAA,EAAA,SAAA;EAAA;AAAA,GAWb,KAAA,KAAK,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"upload.d.mts","names":[],"sources":["../../../src/components/molecules/upload.tsx"],"mappings":";UAgBiB;EACf;EACA;EACA;;UAGe;EACf,eAAe;EACf,QAAQ;EACR;EACA;EACA;EACA;EACA;EACA;IACE;IACA;IACA;;EAEF,YAAY,OAAO;;;;;EAKnB,YAAY;IAAQ,MAAM;IAAM;;;cAO5B,WAAU,cAAA,OAAA,QAAA,UAAA,QAAA,UAAA,UAAA,WAAA,YAAA,UAAA,WAAA,YAWb,0BAAK,IAAA"}
@@ -1,5 +1,4 @@
1
- 'use client';
2
-
1
+ "use client";
3
2
  import { cn } from "../../utils.mjs";
4
3
  import Button from "../../Button.mjs";
5
4
  import { Upload, X } from "lucide-react";
@@ -7,7 +6,6 @@ import { useId } from "react";
7
6
  import { jsx, jsxs } from "react/jsx-runtime";
8
7
  import { useControllableState, useFileDrop, useFileToDataUrl } from "@jbpark/use-hooks";
9
8
  import { v4 } from "uuid";
10
-
11
9
  //#region src/components/molecules/upload.tsx
12
10
  const isImage = (file) => /^data:image\//.test(file.url) || /\.(png|jpe?g|gif|webp|svg)$/i.test(file.name);
13
11
  const Upload$1 = ({ defaultValue = [], value: _value, multiple = true, accept = "image/*", maxCount, disabled, className, classNames, onChange: _onChange = () => {}, onReject }) => {
@@ -107,7 +105,7 @@ const Upload$1 = ({ defaultValue = [], value: _value, multiple = true, accept =
107
105
  })]
108
106
  });
109
107
  };
110
-
111
108
  //#endregion
112
109
  export { Upload$1 as default };
110
+
113
111
  //# sourceMappingURL=upload.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"upload.mjs","names":["Upload","uuid","UploadIcon"],"sources":["../../../src/components/molecules/upload.tsx"],"sourcesContent":["'use client';\n\nimport { useId } from 'react';\n\nimport {\n useControllableState,\n useFileDrop,\n useFileToDataUrl,\n} from '@jbpark/use-hooks';\nimport { Upload as UploadIcon, X } from 'lucide-react';\nimport { v4 as uuid } from 'uuid';\n\nimport { cn } from '@repo/ui/utils';\n\nimport Button from '../atoms/button';\n\nexport interface UploadFile {\n uid: string;\n name: string;\n url: string;\n}\n\nexport interface Props {\n defaultValue?: UploadFile[];\n value?: UploadFile[];\n multiple?: boolean;\n accept?: string;\n maxCount?: number;\n disabled?: boolean;\n className?: string;\n classNames?: {\n dropzone?: string;\n list?: string;\n item?: string;\n };\n onChange?: (files: UploadFile[]) => void;\n /**\n * Called once per file that didn't make it in — either bumped by\n * `maxCount` or failed to read.\n */\n onReject?: (info: { file: File; reason: 'max-count' | 'read-error' }) => void;\n}\n\nconst isImage = (file: UploadFile) =>\n /^data:image\\//.test(file.url) ||\n /\\.(png|jpe?g|gif|webp|svg)$/i.test(file.name);\n\nconst Upload = ({\n defaultValue = [],\n value: _value,\n multiple = true,\n accept = 'image/*',\n maxCount,\n disabled,\n className,\n classNames,\n onChange: _onChange = () => {},\n onReject,\n}: Props) => {\n const inputId = useId();\n const readAsDataUrl = useFileToDataUrl();\n const [files, setFiles] = useControllableState<UploadFile[]>({\n value: _value,\n defaultValue,\n onChange: _onChange,\n });\n\n const addFiles = async (incoming: File[]) => {\n const remaining =\n typeof maxCount === 'number'\n ? Math.max(0, maxCount - files.length)\n : incoming.length;\n\n const accepted = incoming.slice(0, remaining);\n const rejected = incoming.slice(remaining);\n\n rejected.forEach(file => onReject?.({ file, reason: 'max-count' }));\n\n if (accepted.length === 0) {\n return;\n }\n\n const uploaded = (\n await Promise.all(\n accepted.map(async file => {\n try {\n return {\n // `uuid()` guarantees uniqueness even for the same file\n // added twice (identical name/lastModified/size), which\n // name+lastModified+size alone can't — a collision there\n // corrupted React's item keys and made removeFile's\n // uid-based filter delete both copies at once.\n uid: `${file.name}-${file.lastModified}-${file.size}-${uuid()}`,\n name: file.name,\n url: await readAsDataUrl(file),\n };\n } catch {\n onReject?.({ file, reason: 'read-error' });\n return null;\n }\n }),\n )\n ).filter((file): file is UploadFile => file !== null);\n\n if (uploaded.length === 0) {\n return;\n }\n\n setFiles([...files, ...uploaded]);\n };\n\n const removeFile = (uid: string) => {\n setFiles(files.filter(file => file.uid !== uid));\n };\n\n const { dropRef, isDragging } = useFileDrop<HTMLLabelElement>({\n accept,\n multiple,\n disabled,\n onDrop: addFiles,\n });\n\n return (\n <div\n className={cn(\n 'flex flex-col gap-3',\n className,\n //\n )}\n >\n <label\n ref={dropRef}\n htmlFor={inputId}\n className={cn(\n 'flex cursor-pointer flex-col items-center justify-center gap-2',\n 'rounded-md border border-dashed p-6 text-center',\n 'text-muted-foreground text-sm',\n 'transition-colors',\n isDragging && 'border-primary bg-accent',\n disabled && 'pointer-events-none cursor-not-allowed opacity-50',\n classNames?.dropzone,\n //\n )}\n >\n <UploadIcon className=\"size-6\" />\n <span>Click or drag file{multiple ? 's' : ''} to upload</span>\n <input\n id={inputId}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n className=\"hidden\"\n onChange={e => {\n if (e.target.files?.length) {\n addFiles(Array.from(e.target.files));\n }\n e.target.value = '';\n }}\n />\n </label>\n\n {files.length > 0 && (\n <ul\n className={cn(\n 'flex flex-col gap-2',\n classNames?.list,\n //\n )}\n >\n {files.map(file => (\n <li\n key={file.uid}\n className={cn(\n 'flex items-center gap-2 rounded-md border p-2',\n classNames?.item,\n //\n )}\n >\n {isImage(file) && (\n <img\n src={file.url}\n alt=\"\"\n className=\"size-10 shrink-0 rounded object-cover\"\n />\n )}\n <span className=\"flex-1 truncate text-sm\">{file.name}</span>\n <Button\n type=\"text\"\n shape=\"circle\"\n size=\"small\"\n icon={<X className=\"size-4\" />}\n onClick={() => removeFile(file.uid)}\n className=\"text-muted-foreground hover:text-foreground shrink-0\"\n aria-label={`Remove ${file.name}`}\n />\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n};\n\nexport default Upload;\n"],"mappings":";;;;;;;;;;;AA2CA,MAAM,WAAW,SACf,gBAAgB,KAAK,KAAK,IAAI,IAC9B,+BAA+B,KAAK,KAAK,KAAK;AAEhD,MAAMA,YAAU,EACd,eAAe,EAAE,EACjB,OAAO,QACP,WAAW,MACX,SAAS,WACT,UACA,UACA,WACA,YACA,UAAU,kBAAkB,IAC5B,eACW;CACX,MAAM,UAAU,OAAO;CACvB,MAAM,gBAAgB,kBAAkB;CACxC,MAAM,CAAC,OAAO,YAAY,qBAAmC;EAC3D,OAAO;EACP;EACA,UAAU;EACX,CAAC;CAEF,MAAM,WAAW,OAAO,aAAqB;EAC3C,MAAM,YACJ,OAAO,aAAa,WAChB,KAAK,IAAI,GAAG,WAAW,MAAM,OAAO,GACpC,SAAS;EAEf,MAAM,WAAW,SAAS,MAAM,GAAG,UAAU;AAG7C,EAFiB,SAAS,MAAM,UAAU,CAEjC,SAAQ,SAAQ,WAAW;GAAE;GAAM,QAAQ;GAAa,CAAC,CAAC;AAEnE,MAAI,SAAS,WAAW,EACtB;EAGF,MAAM,YACJ,MAAM,QAAQ,IACZ,SAAS,IAAI,OAAM,SAAQ;AACzB,OAAI;AACF,WAAO;KAML,KAAK,GAAG,KAAK,KAAK,GAAG,KAAK,aAAa,GAAG,KAAK,KAAK,GAAGC,IAAM;KAC7D,MAAM,KAAK;KACX,KAAK,MAAM,cAAc,KAAK;KAC/B;WACK;AACN,eAAW;KAAE;KAAM,QAAQ;KAAc,CAAC;AAC1C,WAAO;;IAET,CACH,EACD,QAAQ,SAA6B,SAAS,KAAK;AAErD,MAAI,SAAS,WAAW,EACtB;AAGF,WAAS,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC;;CAGnC,MAAM,cAAc,QAAgB;AAClC,WAAS,MAAM,QAAO,SAAQ,KAAK,QAAQ,IAAI,CAAC;;CAGlD,MAAM,EAAE,SAAS,eAAe,YAA8B;EAC5D;EACA;EACA;EACA,QAAQ;EACT,CAAC;AAEF,QACE,qBAAC;EACC,WAAW,GACT,uBACA,UAED;aAED,qBAAC;GACC,KAAK;GACL,SAAS;GACT,WAAW,GACT,kEACA,mDACA,iCACA,qBACA,cAAc,4BACd,YAAY,qDACZ,YAAY,SAEb;;IAED,oBAACC,UAAW,WAAU,WAAW;IACjC,qBAAC;KAAK;KAAmB,WAAW,MAAM;KAAG;QAAiB;IAC9D,oBAAC;KACC,IAAI;KACJ,MAAK;KACG;KACE;KACA;KACV,WAAU;KACV,WAAU,MAAK;AACb,UAAI,EAAE,OAAO,OAAO,OAClB,UAAS,MAAM,KAAK,EAAE,OAAO,MAAM,CAAC;AAEtC,QAAE,OAAO,QAAQ;;MAEnB;;IACI,EAEP,MAAM,SAAS,KACd,oBAAC;GACC,WAAW,GACT,uBACA,YAAY,KAEb;aAEA,MAAM,KAAI,SACT,qBAAC;IAEC,WAAW,GACT,iDACA,YAAY,KAEb;;KAEA,QAAQ,KAAK,IACZ,oBAAC;MACC,KAAK,KAAK;MACV,KAAI;MACJ,WAAU;OACV;KAEJ,oBAAC;MAAK,WAAU;gBAA2B,KAAK;OAAY;KAC5D,oBAAC;MACC,MAAK;MACL,OAAM;MACN,MAAK;MACL,MAAM,oBAAC,KAAE,WAAU,WAAW;MAC9B,eAAe,WAAW,KAAK,IAAI;MACnC,WAAU;MACV,cAAY,UAAU,KAAK;OAC3B;;MAvBG,KAAK,IAwBP,CACL;IACC;GAEH"}
1
+ {"version":3,"file":"upload.mjs","names":["Upload","uuid","UploadIcon"],"sources":["../../../src/components/molecules/upload.tsx"],"sourcesContent":["'use client';\n\nimport { useId } from 'react';\n\nimport {\n useControllableState,\n useFileDrop,\n useFileToDataUrl,\n} from '@jbpark/use-hooks';\nimport { Upload as UploadIcon, X } from 'lucide-react';\nimport { v4 as uuid } from 'uuid';\n\nimport { cn } from '@repo/ui/utils';\n\nimport Button from '../atoms/button';\n\nexport interface UploadFile {\n uid: string;\n name: string;\n url: string;\n}\n\nexport interface Props {\n defaultValue?: UploadFile[];\n value?: UploadFile[];\n multiple?: boolean;\n accept?: string;\n maxCount?: number;\n disabled?: boolean;\n className?: string;\n classNames?: {\n dropzone?: string;\n list?: string;\n item?: string;\n };\n onChange?: (files: UploadFile[]) => void;\n /**\n * Called once per file that didn't make it in — either bumped by\n * `maxCount` or failed to read.\n */\n onReject?: (info: { file: File; reason: 'max-count' | 'read-error' }) => void;\n}\n\nconst isImage = (file: UploadFile) =>\n /^data:image\\//.test(file.url) ||\n /\\.(png|jpe?g|gif|webp|svg)$/i.test(file.name);\n\nconst Upload = ({\n defaultValue = [],\n value: _value,\n multiple = true,\n accept = 'image/*',\n maxCount,\n disabled,\n className,\n classNames,\n onChange: _onChange = () => {},\n onReject,\n}: Props) => {\n const inputId = useId();\n const readAsDataUrl = useFileToDataUrl();\n const [files, setFiles] = useControllableState<UploadFile[]>({\n value: _value,\n defaultValue,\n onChange: _onChange,\n });\n\n const addFiles = async (incoming: File[]) => {\n const remaining =\n typeof maxCount === 'number'\n ? Math.max(0, maxCount - files.length)\n : incoming.length;\n\n const accepted = incoming.slice(0, remaining);\n const rejected = incoming.slice(remaining);\n\n rejected.forEach(file => onReject?.({ file, reason: 'max-count' }));\n\n if (accepted.length === 0) {\n return;\n }\n\n const uploaded = (\n await Promise.all(\n accepted.map(async file => {\n try {\n return {\n // `uuid()` guarantees uniqueness even for the same file\n // added twice (identical name/lastModified/size), which\n // name+lastModified+size alone can't — a collision there\n // corrupted React's item keys and made removeFile's\n // uid-based filter delete both copies at once.\n uid: `${file.name}-${file.lastModified}-${file.size}-${uuid()}`,\n name: file.name,\n url: await readAsDataUrl(file),\n };\n } catch {\n onReject?.({ file, reason: 'read-error' });\n return null;\n }\n }),\n )\n ).filter((file): file is UploadFile => file !== null);\n\n if (uploaded.length === 0) {\n return;\n }\n\n setFiles([...files, ...uploaded]);\n };\n\n const removeFile = (uid: string) => {\n setFiles(files.filter(file => file.uid !== uid));\n };\n\n const { dropRef, isDragging } = useFileDrop<HTMLLabelElement>({\n accept,\n multiple,\n disabled,\n onDrop: addFiles,\n });\n\n return (\n <div\n className={cn(\n 'flex flex-col gap-3',\n className,\n //\n )}\n >\n <label\n ref={dropRef}\n htmlFor={inputId}\n className={cn(\n 'flex cursor-pointer flex-col items-center justify-center gap-2',\n 'rounded-md border border-dashed p-6 text-center',\n 'text-muted-foreground text-sm',\n 'transition-colors',\n isDragging && 'border-primary bg-accent',\n disabled && 'pointer-events-none cursor-not-allowed opacity-50',\n classNames?.dropzone,\n //\n )}\n >\n <UploadIcon className=\"size-6\" />\n <span>Click or drag file{multiple ? 's' : ''} to upload</span>\n <input\n id={inputId}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n className=\"hidden\"\n onChange={e => {\n if (e.target.files?.length) {\n addFiles(Array.from(e.target.files));\n }\n e.target.value = '';\n }}\n />\n </label>\n\n {files.length > 0 && (\n <ul\n className={cn(\n 'flex flex-col gap-2',\n classNames?.list,\n //\n )}\n >\n {files.map(file => (\n <li\n key={file.uid}\n className={cn(\n 'flex items-center gap-2 rounded-md border p-2',\n classNames?.item,\n //\n )}\n >\n {isImage(file) && (\n <img\n src={file.url}\n alt=\"\"\n className=\"size-10 shrink-0 rounded object-cover\"\n />\n )}\n <span className=\"flex-1 truncate text-sm\">{file.name}</span>\n <Button\n type=\"text\"\n shape=\"circle\"\n size=\"small\"\n icon={<X className=\"size-4\" />}\n onClick={() => removeFile(file.uid)}\n className=\"text-muted-foreground hover:text-foreground shrink-0\"\n aria-label={`Remove ${file.name}`}\n />\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n};\n\nexport default Upload;\n"],"mappings":"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"}