@jbpark/ui-kit 10.2.0 → 10.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 (505) hide show
  1. package/README.ko.md +97 -76
  2. package/README.md +91 -70
  3. package/dist/Alert.d.mts +2 -2
  4. package/dist/Alert.d.mts.map +1 -1
  5. package/dist/Alert.mjs +1 -1
  6. package/dist/Anchor.d.mts +29 -0
  7. package/dist/Anchor.d.mts.map +1 -0
  8. package/dist/Anchor.mjs +120 -0
  9. package/dist/Anchor.mjs.map +1 -0
  10. package/dist/AutoComplete.d.mts +34 -0
  11. package/dist/AutoComplete.d.mts.map +1 -0
  12. package/dist/AutoComplete.mjs +82 -0
  13. package/dist/AutoComplete.mjs.map +1 -0
  14. package/dist/Avatar.d.mts +2 -2
  15. package/dist/Avatar.d.mts.map +1 -1
  16. package/dist/Avatar.mjs +2 -2
  17. package/dist/Badge.d.mts +2 -2
  18. package/dist/Badge.d.mts.map +1 -1
  19. package/dist/Breadcrumb.d.mts +3 -3
  20. package/dist/Breadcrumb.d.mts.map +1 -1
  21. package/dist/Breadcrumb.mjs +2 -2
  22. package/dist/Breadcrumb.mjs.map +1 -1
  23. package/dist/Button.d.mts +3 -3
  24. package/dist/Button.d.mts.map +1 -1
  25. package/dist/Button.mjs +1 -1
  26. package/dist/Calendar.d.mts +28 -0
  27. package/dist/Calendar.d.mts.map +1 -0
  28. package/dist/Calendar.mjs +64 -0
  29. package/dist/Calendar.mjs.map +1 -0
  30. package/dist/Card.d.mts +2 -2
  31. package/dist/Card.d.mts.map +1 -1
  32. package/dist/Cascader.d.mts +34 -0
  33. package/dist/Cascader.d.mts.map +1 -0
  34. package/dist/Cascader.mjs +144 -0
  35. package/dist/Cascader.mjs.map +1 -0
  36. package/dist/Checkbox.d.mts +10 -0
  37. package/dist/Checkbox.d.mts.map +1 -0
  38. package/dist/Checkbox.mjs +9 -0
  39. package/dist/Checkbox.mjs.map +1 -0
  40. package/dist/CodeEditor.d.mts +10 -4
  41. package/dist/CodeEditor.d.mts.map +1 -1
  42. package/dist/CodeEditor.mjs +9 -4
  43. package/dist/CodeEditor.mjs.map +1 -1
  44. package/dist/{components/molecules/collapse.d.mts → Collapse.d.mts} +3 -3
  45. package/dist/Collapse.d.mts.map +1 -0
  46. package/dist/{components/molecules/collapse.mjs → Collapse.mjs} +3 -3
  47. package/dist/Collapse.mjs.map +1 -0
  48. package/dist/{components/atoms/color-picker.d.mts → ColorPicker.d.mts} +3 -3
  49. package/dist/ColorPicker.d.mts.map +1 -0
  50. package/dist/{components/atoms/color-picker.mjs → ColorPicker.mjs} +3 -3
  51. package/dist/ColorPicker.mjs.map +1 -0
  52. package/dist/{components/templates/container.d.mts → Container.d.mts} +3 -3
  53. package/dist/Container.d.mts.map +1 -0
  54. package/dist/{components/templates/container.mjs → Container.mjs} +2 -2
  55. package/dist/Container.mjs.map +1 -0
  56. package/dist/ContextMenu.d.mts +33 -0
  57. package/dist/ContextMenu.d.mts.map +1 -0
  58. package/dist/ContextMenu.mjs +92 -0
  59. package/dist/ContextMenu.mjs.map +1 -0
  60. package/dist/{components/atoms/date-picker.d.mts → DatePicker.d.mts} +6 -2
  61. package/dist/DatePicker.d.mts.map +1 -0
  62. package/dist/DatePicker.mjs +88 -0
  63. package/dist/DatePicker.mjs.map +1 -0
  64. package/dist/Descriptions.d.mts +31 -0
  65. package/dist/Descriptions.d.mts.map +1 -0
  66. package/dist/Descriptions.mjs +67 -0
  67. package/dist/Descriptions.mjs.map +1 -0
  68. package/dist/Divider.d.mts +18 -0
  69. package/dist/Divider.d.mts.map +1 -0
  70. package/dist/Divider.mjs +44 -0
  71. package/dist/Divider.mjs.map +1 -0
  72. package/dist/{components/organisms/drawer.d.mts → Drawer.d.mts} +3 -3
  73. package/dist/Drawer.d.mts.map +1 -0
  74. package/dist/{components/organisms/drawer.mjs → Drawer.mjs} +6 -6
  75. package/dist/Drawer.mjs.map +1 -0
  76. package/dist/{components/molecules/dropdown.d.mts → Dropdown.d.mts} +4 -4
  77. package/dist/Dropdown.d.mts.map +1 -0
  78. package/dist/{components/molecules/dropdown.mjs → Dropdown.mjs} +4 -4
  79. package/dist/Dropdown.mjs.map +1 -0
  80. package/dist/{components/templates/empty.d.mts → Empty.d.mts} +4 -4
  81. package/dist/Empty.d.mts.map +1 -0
  82. package/dist/{components/templates/empty.mjs → Empty.mjs} +4 -4
  83. package/dist/Empty.mjs.map +1 -0
  84. package/dist/FloatButton.d.mts +10 -0
  85. package/dist/FloatButton.d.mts.map +1 -0
  86. package/dist/FloatButton.mjs +9 -0
  87. package/dist/FloatButton.mjs.map +1 -0
  88. package/dist/Form.d.mts +12 -0
  89. package/dist/Form.d.mts.map +1 -0
  90. package/dist/Form.mjs +11 -0
  91. package/dist/Form.mjs.map +1 -0
  92. package/dist/Input.d.mts +16 -0
  93. package/dist/Input.d.mts.map +1 -0
  94. package/dist/Input.mjs +15 -0
  95. package/dist/Input.mjs.map +1 -0
  96. package/dist/Layout.d.mts.map +1 -1
  97. package/dist/{components/organisms/list/index.d.mts → List.d.mts} +3 -3
  98. package/dist/List.d.mts.map +1 -0
  99. package/dist/List.mjs +9 -0
  100. package/dist/List.mjs.map +1 -0
  101. package/dist/Marquees.d.mts +10 -0
  102. package/dist/Marquees.d.mts.map +1 -0
  103. package/dist/Marquees.mjs +9 -0
  104. package/dist/Marquees.mjs.map +1 -0
  105. package/dist/Mentions.d.mts +34 -0
  106. package/dist/Mentions.d.mts.map +1 -0
  107. package/dist/Mentions.mjs +208 -0
  108. package/dist/Mentions.mjs.map +1 -0
  109. package/dist/Menu.mjs +1 -2
  110. package/dist/{components/organisms/modal.d.mts → Modal.d.mts} +7 -4
  111. package/dist/Modal.d.mts.map +1 -0
  112. package/dist/{components/organisms/modal.mjs → Modal.mjs} +30 -23
  113. package/dist/Modal.mjs.map +1 -0
  114. package/dist/{components/templates/page-header.d.mts → PageHeader.d.mts} +3 -3
  115. package/dist/PageHeader.d.mts.map +1 -0
  116. package/dist/{components/templates/page-header.mjs → PageHeader.mjs} +5 -5
  117. package/dist/PageHeader.mjs.map +1 -0
  118. package/dist/Pagination.d.mts +2 -2
  119. package/dist/Pagination.d.mts.map +1 -1
  120. package/dist/Pagination.mjs +3 -3
  121. package/dist/Popconfirm.d.mts +33 -0
  122. package/dist/Popconfirm.d.mts.map +1 -0
  123. package/dist/Popconfirm.mjs +119 -0
  124. package/dist/Popconfirm.mjs.map +1 -0
  125. package/dist/{components/atoms/popover.d.mts → Popover.d.mts} +3 -3
  126. package/dist/Popover.d.mts.map +1 -0
  127. package/dist/{components/atoms/popover.mjs → Popover.mjs} +4 -4
  128. package/dist/Popover.mjs.map +1 -0
  129. package/dist/{components/atoms/progress.d.mts → Progress.d.mts} +3 -3
  130. package/dist/Progress.d.mts.map +1 -0
  131. package/dist/{components/atoms/progress.mjs → Progress.mjs} +3 -3
  132. package/dist/Progress.mjs.map +1 -0
  133. package/dist/Radio.d.mts +10 -0
  134. package/dist/Radio.d.mts.map +1 -0
  135. package/dist/Radio.mjs +9 -0
  136. package/dist/Radio.mjs.map +1 -0
  137. package/dist/Rate.d.mts +27 -0
  138. package/dist/Rate.d.mts.map +1 -0
  139. package/dist/Rate.mjs +81 -0
  140. package/dist/Rate.mjs.map +1 -0
  141. package/dist/{components/templates/result.d.mts → Result.d.mts} +3 -3
  142. package/dist/Result.d.mts.map +1 -0
  143. package/dist/{components/templates/result.mjs → Result.mjs} +3 -3
  144. package/dist/Result.mjs.map +1 -0
  145. package/dist/Reveals.d.mts.map +1 -1
  146. package/dist/RichTextEditor.d.mts +3 -0
  147. package/dist/RichTextEditor.mjs +1 -0
  148. package/dist/ScrollArea.d.mts +8 -0
  149. package/dist/ScrollArea.d.mts.map +1 -0
  150. package/dist/ScrollArea.mjs +11 -0
  151. package/dist/ScrollArea.mjs.map +1 -0
  152. package/dist/Segmented.d.mts +3 -3
  153. package/dist/Segmented.d.mts.map +1 -1
  154. package/dist/{components/atoms/select.d.mts → Select.d.mts} +7 -7
  155. package/dist/Select.d.mts.map +1 -0
  156. package/dist/{components/atoms/select.mjs → Select.mjs} +5 -5
  157. package/dist/Select.mjs.map +1 -0
  158. package/dist/Skeleton.d.mts +12 -0
  159. package/dist/Skeleton.d.mts.map +1 -0
  160. package/dist/Skeleton.mjs +11 -0
  161. package/dist/Skeleton.mjs.map +1 -0
  162. package/dist/Slider.d.mts +2 -0
  163. package/dist/{components/atoms/slider/index.mjs → Slider.mjs} +2 -2
  164. package/dist/Slider.mjs.map +1 -0
  165. package/dist/Space.d.mts +5 -4
  166. package/dist/Space.d.mts.map +1 -1
  167. package/dist/Space.mjs +13 -4
  168. package/dist/Space.mjs.map +1 -1
  169. package/dist/{components/atoms/spin.d.mts → Spin.d.mts} +3 -3
  170. package/dist/Spin.d.mts.map +1 -0
  171. package/dist/{components/atoms/spin.mjs → Spin.mjs} +4 -4
  172. package/dist/Spin.mjs.map +1 -0
  173. package/dist/Splitter.d.mts +10 -0
  174. package/dist/Splitter.d.mts.map +1 -0
  175. package/dist/Splitter.mjs +9 -0
  176. package/dist/Splitter.mjs.map +1 -0
  177. package/dist/Statistic.d.mts +22 -0
  178. package/dist/Statistic.d.mts.map +1 -0
  179. package/dist/Statistic.mjs +53 -0
  180. package/dist/Statistic.mjs.map +1 -0
  181. package/dist/Steps.d.mts +3 -3
  182. package/dist/Steps.d.mts.map +1 -1
  183. package/dist/Steps.mjs +1 -1
  184. package/dist/Swiper.d.mts +10 -0
  185. package/dist/Swiper.d.mts.map +1 -0
  186. package/dist/Swiper.mjs +9 -0
  187. package/dist/Swiper.mjs.map +1 -0
  188. package/dist/{components/atoms/switch.d.mts → Switch.d.mts} +4 -4
  189. package/dist/Switch.d.mts.map +1 -0
  190. package/dist/{components/atoms/switch.mjs → Switch.mjs} +4 -4
  191. package/dist/Switch.mjs.map +1 -0
  192. package/dist/Table.d.mts +4 -4
  193. package/dist/Table.d.mts.map +1 -1
  194. package/dist/Table.mjs +2 -2
  195. package/dist/Table.mjs.map +1 -1
  196. package/dist/{components/molecules/tabs.d.mts → Tabs.d.mts} +6 -6
  197. package/dist/Tabs.d.mts.map +1 -0
  198. package/dist/{components/molecules/tabs.mjs → Tabs.mjs} +3 -3
  199. package/dist/Tabs.mjs.map +1 -0
  200. package/dist/Tag.d.mts +3 -3
  201. package/dist/Tag.d.mts.map +1 -1
  202. package/dist/TimePicker.d.mts +26 -0
  203. package/dist/TimePicker.d.mts.map +1 -0
  204. package/dist/TimePicker.mjs +77 -0
  205. package/dist/TimePicker.mjs.map +1 -0
  206. package/dist/Timeline.d.mts +35 -0
  207. package/dist/Timeline.d.mts.map +1 -0
  208. package/dist/Timeline.mjs +59 -0
  209. package/dist/Timeline.mjs.map +1 -0
  210. package/dist/{components/organisms/toast.d.mts → Toast.d.mts} +14 -4
  211. package/dist/Toast.d.mts.map +1 -0
  212. package/dist/Toast.mjs +198 -0
  213. package/dist/Toast.mjs.map +1 -0
  214. package/dist/ToggleGroup.d.mts +28 -0
  215. package/dist/ToggleGroup.d.mts.map +1 -0
  216. package/dist/ToggleGroup.mjs +58 -0
  217. package/dist/ToggleGroup.mjs.map +1 -0
  218. package/dist/{components/atoms/tooltip.d.mts → Tooltip.d.mts} +3 -3
  219. package/dist/Tooltip.d.mts.map +1 -0
  220. package/dist/{components/atoms/tooltip.mjs → Tooltip.mjs} +2 -2
  221. package/dist/Tooltip.mjs.map +1 -0
  222. package/dist/Tour.d.mts +37 -0
  223. package/dist/Tour.d.mts.map +1 -0
  224. package/dist/Tour.mjs +175 -0
  225. package/dist/Tour.mjs.map +1 -0
  226. package/dist/Transfer.d.mts +36 -0
  227. package/dist/Transfer.d.mts.map +1 -0
  228. package/dist/Transfer.mjs +147 -0
  229. package/dist/Transfer.mjs.map +1 -0
  230. package/dist/Tree.d.mts +62 -0
  231. package/dist/Tree.d.mts.map +1 -0
  232. package/dist/Tree.mjs +462 -0
  233. package/dist/Tree.mjs.map +1 -0
  234. package/dist/TreeSelect.d.mts +34 -0
  235. package/dist/TreeSelect.d.mts.map +1 -0
  236. package/dist/TreeSelect.mjs +135 -0
  237. package/dist/TreeSelect.mjs.map +1 -0
  238. package/dist/Typography.d.mts.map +1 -1
  239. package/dist/{components/molecules/upload.d.mts → Upload.d.mts} +4 -4
  240. package/dist/Upload.d.mts.map +1 -0
  241. package/dist/{components/molecules/upload.mjs → Upload.mjs} +7 -7
  242. package/dist/Upload.mjs.map +1 -0
  243. package/dist/components/atoms/checkbox/checkbox.d.mts +5 -3
  244. package/dist/components/atoms/checkbox/checkbox.d.mts.map +1 -1
  245. package/dist/components/atoms/checkbox/checkbox.mjs +8 -4
  246. package/dist/components/atoms/checkbox/checkbox.mjs.map +1 -1
  247. package/dist/components/atoms/checkbox/group.d.mts +2 -2
  248. package/dist/components/atoms/checkbox/group.d.mts.map +1 -1
  249. package/dist/components/atoms/float-button/back-top.d.mts +2 -2
  250. package/dist/components/atoms/float-button/back-top.d.mts.map +1 -1
  251. package/dist/components/atoms/float-button/back-top.mjs +1 -1
  252. package/dist/components/atoms/float-button/float-button.d.mts +2 -2
  253. package/dist/components/atoms/float-button/float-button.d.mts.map +1 -1
  254. package/dist/components/atoms/index.d.mts +37 -23
  255. package/dist/components/atoms/input/input.d.mts +2 -1
  256. package/dist/components/atoms/input/input.d.mts.map +1 -1
  257. package/dist/components/atoms/input/input.mjs.map +1 -1
  258. package/dist/components/atoms/input/number.d.mts +2 -2
  259. package/dist/components/atoms/input/number.d.mts.map +1 -1
  260. package/dist/components/atoms/input/number.mjs +1 -1
  261. package/dist/components/atoms/input/otp.d.mts +26 -0
  262. package/dist/components/atoms/input/otp.d.mts.map +1 -0
  263. package/dist/components/atoms/input/otp.mjs +52 -0
  264. package/dist/components/atoms/input/otp.mjs.map +1 -0
  265. package/dist/components/atoms/input/search.d.mts +2 -2
  266. package/dist/components/atoms/input/search.d.mts.map +1 -1
  267. package/dist/components/atoms/input/search.mjs +2 -2
  268. package/dist/components/atoms/mentions-token.mjs +31 -0
  269. package/dist/components/atoms/mentions-token.mjs.map +1 -0
  270. package/dist/components/atoms/option-group.d.mts +4 -5
  271. package/dist/components/atoms/option-group.d.mts.map +1 -1
  272. package/dist/components/atoms/radio/group.d.mts +2 -2
  273. package/dist/components/atoms/radio/group.d.mts.map +1 -1
  274. package/dist/components/atoms/radio/group.mjs +1 -1
  275. package/dist/components/atoms/radio/radio.d.mts +2 -2
  276. package/dist/components/atoms/radio/radio.d.mts.map +1 -1
  277. package/dist/components/atoms/radio/radio.mjs +1 -1
  278. package/dist/components/atoms/rich-text-editor/rich-text-editor.d.mts +2 -2
  279. package/dist/components/atoms/rich-text-editor/rich-text-editor.d.mts.map +1 -1
  280. package/dist/components/atoms/rich-text-editor/toolbar-presets.mjs +5 -5
  281. package/dist/components/atoms/rich-text-editor/types.d.mts +2 -3
  282. package/dist/components/atoms/rich-text-editor/types.d.mts.map +1 -1
  283. package/dist/components/atoms/select-multiple.d.mts +2 -3
  284. package/dist/components/atoms/select-multiple.d.mts.map +1 -1
  285. package/dist/components/atoms/select-multiple.mjs +5 -4
  286. package/dist/components/atoms/select-multiple.mjs.map +1 -1
  287. package/dist/components/atoms/select-searchable-options.d.mts +3 -4
  288. package/dist/components/atoms/select-searchable-options.d.mts.map +1 -1
  289. package/dist/components/atoms/select-searchable.d.mts +2 -3
  290. package/dist/components/atoms/select-searchable.d.mts.map +1 -1
  291. package/dist/components/atoms/select-searchable.mjs +5 -4
  292. package/dist/components/atoms/select-searchable.mjs.map +1 -1
  293. package/dist/components/atoms/skeleton/button.d.mts.map +1 -1
  294. package/dist/components/atoms/skeleton/node.d.mts.map +1 -1
  295. package/dist/components/atoms/skeleton/skeleton.d.mts +2 -2
  296. package/dist/components/atoms/skeleton/skeleton.d.mts.map +1 -1
  297. package/dist/components/atoms/slider/slider.d.mts +3 -3
  298. package/dist/components/atoms/slider/slider.d.mts.map +1 -1
  299. package/dist/components/atoms/typography/link.d.mts +2 -2
  300. package/dist/components/atoms/typography/link.d.mts.map +1 -1
  301. package/dist/components/atoms/typography/paragraph.d.mts +2 -2
  302. package/dist/components/atoms/typography/paragraph.d.mts.map +1 -1
  303. package/dist/components/atoms/typography/text.d.mts +2 -2
  304. package/dist/components/atoms/typography/text.d.mts.map +1 -1
  305. package/dist/components/atoms/typography/title.d.mts +2 -2
  306. package/dist/components/atoms/typography/title.d.mts.map +1 -1
  307. package/dist/components/atoms/typography/typography.d.mts +2 -2
  308. package/dist/components/atoms/typography/typography.d.mts.map +1 -1
  309. package/dist/components/molecules/index.d.mts +25 -16
  310. package/dist/components/molecules/marquees/item.d.mts +4 -4
  311. package/dist/components/molecules/marquees/item.d.mts.map +1 -1
  312. package/dist/components/molecules/marquees/item.mjs +5 -5
  313. package/dist/components/molecules/marquees/item.mjs.map +1 -1
  314. package/dist/components/molecules/marquees/marquees.d.mts +2 -2
  315. package/dist/components/molecules/marquees/marquees.d.mts.map +1 -1
  316. package/dist/components/molecules/marquees/marquees.mjs +4 -5
  317. package/dist/components/molecules/marquees/marquees.mjs.map +1 -1
  318. package/dist/components/molecules/menu/item/item.mjs +1 -1
  319. package/dist/components/molecules/menu/menu.d.mts +9 -9
  320. package/dist/components/molecules/menu/menu.d.mts.map +1 -1
  321. package/dist/components/molecules/reveals/item.d.mts +2 -2
  322. package/dist/components/molecules/reveals/item.d.mts.map +1 -1
  323. package/dist/components/molecules/reveals/reveals.d.mts +5 -5
  324. package/dist/components/molecules/reveals/reveals.d.mts.map +1 -1
  325. package/dist/components/molecules/splitter/panel.d.mts +3 -3
  326. package/dist/components/molecules/splitter/panel.d.mts.map +1 -1
  327. package/dist/components/molecules/splitter/splitter.d.mts +3 -3
  328. package/dist/components/molecules/splitter/splitter.d.mts.map +1 -1
  329. package/dist/components/organisms/form/context.d.mts +4 -0
  330. package/dist/components/organisms/form/context.d.mts.map +1 -0
  331. package/dist/components/organisms/form/context.mjs +9 -0
  332. package/dist/components/organisms/form/context.mjs.map +1 -0
  333. package/dist/components/organisms/form/control.d.mts +11 -0
  334. package/dist/components/organisms/form/control.d.mts.map +1 -0
  335. package/dist/components/organisms/form/control.mjs +19 -0
  336. package/dist/components/organisms/form/control.mjs.map +1 -0
  337. package/dist/components/organisms/form/field.d.mts +25 -0
  338. package/dist/components/organisms/form/field.d.mts.map +1 -0
  339. package/dist/components/organisms/form/field.mjs +54 -0
  340. package/dist/components/organisms/form/field.mjs.map +1 -0
  341. package/dist/components/organisms/form/form.d.mts +14 -0
  342. package/dist/components/organisms/form/form.d.mts.map +1 -0
  343. package/dist/components/organisms/form/form.mjs +23 -0
  344. package/dist/components/organisms/form/form.mjs.map +1 -0
  345. package/dist/components/organisms/imperative-stack.mjs +16 -1
  346. package/dist/components/organisms/imperative-stack.mjs.map +1 -1
  347. package/dist/components/organisms/index.d.mts +17 -9
  348. package/dist/components/organisms/list/list.d.mts +3 -3
  349. package/dist/components/organisms/list/list.d.mts.map +1 -1
  350. package/dist/components/organisms/list/list.mjs +1 -1
  351. package/dist/components/organisms/swiper/swiper.d.mts +8 -2
  352. package/dist/components/organisms/swiper/swiper.d.mts.map +1 -1
  353. package/dist/components/organisms/swiper/swiper.mjs +1 -1
  354. package/dist/components/templates/grid/col.d.mts +2 -2
  355. package/dist/components/templates/grid/col.d.mts.map +1 -1
  356. package/dist/components/templates/grid/row.d.mts +2 -2
  357. package/dist/components/templates/grid/row.d.mts.map +1 -1
  358. package/dist/components/templates/index.d.mts +11 -12
  359. package/dist/components/templates/layout/content.d.mts +2 -2
  360. package/dist/components/templates/layout/content.d.mts.map +1 -1
  361. package/dist/components/templates/layout/footer.d.mts +2 -2
  362. package/dist/components/templates/layout/footer.d.mts.map +1 -1
  363. package/dist/components/templates/layout/header.d.mts +2 -2
  364. package/dist/components/templates/layout/header.d.mts.map +1 -1
  365. package/dist/components/templates/layout/layout.d.mts +2 -2
  366. package/dist/components/templates/layout/layout.d.mts.map +1 -1
  367. package/dist/components/templates/layout/sider.d.mts +2 -2
  368. package/dist/components/templates/layout/sider.d.mts.map +1 -1
  369. package/dist/components/templates/layout/sider.mjs +5 -7
  370. package/dist/components/templates/layout/sider.mjs.map +1 -1
  371. package/dist/core/accordion.mjs +1 -1
  372. package/dist/core/autocomplete.d.mts +2 -0
  373. package/dist/core/autocomplete.mjs +48 -0
  374. package/dist/core/autocomplete.mjs.map +1 -0
  375. package/dist/core/badge.d.mts +5 -3
  376. package/dist/core/badge.d.mts.map +1 -1
  377. package/dist/core/button.d.mts +5 -3
  378. package/dist/core/button.d.mts.map +1 -1
  379. package/dist/core/calendar.d.mts +13 -3
  380. package/dist/core/calendar.d.mts.map +1 -0
  381. package/dist/core/calendar.mjs +1 -1
  382. package/dist/core/checkbox.mjs +11 -8
  383. package/dist/core/checkbox.mjs.map +1 -1
  384. package/dist/core/combobox.d.mts +26 -4
  385. package/dist/core/combobox.d.mts.map +1 -1
  386. package/dist/core/combobox.mjs +2 -2
  387. package/dist/core/combobox.mjs.map +1 -1
  388. package/dist/core/dialog.mjs +2 -2
  389. package/dist/core/dialog.mjs.map +1 -1
  390. package/dist/core/form.d.mts +8 -0
  391. package/dist/core/form.d.mts.map +1 -0
  392. package/dist/core/form.mjs +3 -0
  393. package/dist/core/index.d.mts +13 -9
  394. package/dist/core/popover.mjs +10 -2
  395. package/dist/core/popover.mjs.map +1 -1
  396. package/dist/core/radio-group.mjs +1 -1
  397. package/dist/core/resizable.d.mts +7 -2
  398. package/dist/core/resizable.d.mts.map +1 -1
  399. package/dist/core/resizable.mjs +1 -1
  400. package/dist/core/scroll-area.d.mts +20 -0
  401. package/dist/core/scroll-area.d.mts.map +1 -0
  402. package/dist/core/scroll-area.mjs +57 -0
  403. package/dist/core/scroll-area.mjs.map +1 -0
  404. package/dist/core/select.d.mts +24 -2
  405. package/dist/core/select.d.mts.map +1 -1
  406. package/dist/core/select.mjs +1 -1
  407. package/dist/core/separator.d.mts +13 -2
  408. package/dist/core/separator.d.mts.map +1 -0
  409. package/dist/core/tabs.d.mts +16 -2
  410. package/dist/core/tabs.d.mts.map +1 -1
  411. package/dist/index.d.mts +87 -57
  412. package/dist/index.mjs +53 -33
  413. package/dist/lib/colors.d.mts +2 -3
  414. package/dist/lib/colors.d.mts.map +1 -1
  415. package/dist/providers/config/context.d.mts +2 -3
  416. package/dist/providers/config/context.d.mts.map +1 -1
  417. package/dist/providers/config/context.mjs +3 -1
  418. package/dist/providers/config/context.mjs.map +1 -1
  419. package/dist/providers/config/registry.d.mts +2 -3
  420. package/dist/providers/config/registry.d.mts.map +1 -1
  421. package/dist/providers/config/types.d.mts +8 -7
  422. package/dist/providers/config/types.d.mts.map +1 -1
  423. package/dist/style.css +710 -332
  424. package/dist/utils.d.mts +2 -3
  425. package/dist/utils.d.mts.map +1 -1
  426. package/package.json +277 -26
  427. package/dist/components/atoms/checkbox/index.d.mts +0 -10
  428. package/dist/components/atoms/checkbox/index.d.mts.map +0 -1
  429. package/dist/components/atoms/checkbox/index.mjs +0 -9
  430. package/dist/components/atoms/checkbox/index.mjs.map +0 -1
  431. package/dist/components/atoms/color-picker.d.mts.map +0 -1
  432. package/dist/components/atoms/color-picker.mjs.map +0 -1
  433. package/dist/components/atoms/date-picker.d.mts.map +0 -1
  434. package/dist/components/atoms/date-picker.mjs +0 -44
  435. package/dist/components/atoms/date-picker.mjs.map +0 -1
  436. package/dist/components/atoms/float-button/index.d.mts +0 -10
  437. package/dist/components/atoms/float-button/index.d.mts.map +0 -1
  438. package/dist/components/atoms/float-button/index.mjs +0 -9
  439. package/dist/components/atoms/float-button/index.mjs.map +0 -1
  440. package/dist/components/atoms/input/index.d.mts +0 -14
  441. package/dist/components/atoms/input/index.d.mts.map +0 -1
  442. package/dist/components/atoms/input/index.mjs +0 -13
  443. package/dist/components/atoms/input/index.mjs.map +0 -1
  444. package/dist/components/atoms/popover.d.mts.map +0 -1
  445. package/dist/components/atoms/popover.mjs.map +0 -1
  446. package/dist/components/atoms/progress.d.mts.map +0 -1
  447. package/dist/components/atoms/progress.mjs.map +0 -1
  448. package/dist/components/atoms/radio/index.d.mts +0 -10
  449. package/dist/components/atoms/radio/index.d.mts.map +0 -1
  450. package/dist/components/atoms/radio/index.mjs +0 -9
  451. package/dist/components/atoms/radio/index.mjs.map +0 -1
  452. package/dist/components/atoms/rich-text-editor/index.d.mts +0 -3
  453. package/dist/components/atoms/select.d.mts.map +0 -1
  454. package/dist/components/atoms/select.mjs.map +0 -1
  455. package/dist/components/atoms/skeleton/index.d.mts +0 -12
  456. package/dist/components/atoms/skeleton/index.d.mts.map +0 -1
  457. package/dist/components/atoms/skeleton/index.mjs +0 -11
  458. package/dist/components/atoms/skeleton/index.mjs.map +0 -1
  459. package/dist/components/atoms/slider/index.mjs.map +0 -1
  460. package/dist/components/atoms/spin.d.mts.map +0 -1
  461. package/dist/components/atoms/spin.mjs.map +0 -1
  462. package/dist/components/atoms/switch.d.mts.map +0 -1
  463. package/dist/components/atoms/switch.mjs.map +0 -1
  464. package/dist/components/atoms/tooltip.d.mts.map +0 -1
  465. package/dist/components/atoms/tooltip.mjs.map +0 -1
  466. package/dist/components/molecules/collapse.d.mts.map +0 -1
  467. package/dist/components/molecules/collapse.mjs.map +0 -1
  468. package/dist/components/molecules/dropdown.d.mts.map +0 -1
  469. package/dist/components/molecules/dropdown.mjs.map +0 -1
  470. package/dist/components/molecules/marquees/index.d.mts +0 -10
  471. package/dist/components/molecules/marquees/index.d.mts.map +0 -1
  472. package/dist/components/molecules/marquees/index.mjs +0 -9
  473. package/dist/components/molecules/marquees/index.mjs.map +0 -1
  474. package/dist/components/molecules/marquees/use-pause-on-hover.mjs +0 -26
  475. package/dist/components/molecules/marquees/use-pause-on-hover.mjs.map +0 -1
  476. package/dist/components/molecules/splitter/index.d.mts +0 -10
  477. package/dist/components/molecules/splitter/index.d.mts.map +0 -1
  478. package/dist/components/molecules/splitter/index.mjs +0 -9
  479. package/dist/components/molecules/splitter/index.mjs.map +0 -1
  480. package/dist/components/molecules/tabs.d.mts.map +0 -1
  481. package/dist/components/molecules/tabs.mjs.map +0 -1
  482. package/dist/components/molecules/upload.d.mts.map +0 -1
  483. package/dist/components/molecules/upload.mjs.map +0 -1
  484. package/dist/components/organisms/drawer.d.mts.map +0 -1
  485. package/dist/components/organisms/drawer.mjs.map +0 -1
  486. package/dist/components/organisms/list/index.d.mts.map +0 -1
  487. package/dist/components/organisms/list/index.mjs +0 -9
  488. package/dist/components/organisms/list/index.mjs.map +0 -1
  489. package/dist/components/organisms/modal.d.mts.map +0 -1
  490. package/dist/components/organisms/modal.mjs.map +0 -1
  491. package/dist/components/organisms/swiper/index.d.mts +0 -10
  492. package/dist/components/organisms/swiper/index.d.mts.map +0 -1
  493. package/dist/components/organisms/swiper/index.mjs +0 -9
  494. package/dist/components/organisms/swiper/index.mjs.map +0 -1
  495. package/dist/components/organisms/toast.d.mts.map +0 -1
  496. package/dist/components/organisms/toast.mjs +0 -126
  497. package/dist/components/organisms/toast.mjs.map +0 -1
  498. package/dist/components/templates/container.d.mts.map +0 -1
  499. package/dist/components/templates/container.mjs.map +0 -1
  500. package/dist/components/templates/empty.d.mts.map +0 -1
  501. package/dist/components/templates/empty.mjs.map +0 -1
  502. package/dist/components/templates/page-header.d.mts.map +0 -1
  503. package/dist/components/templates/page-header.mjs.map +0 -1
  504. package/dist/components/templates/result.d.mts.map +0 -1
  505. package/dist/components/templates/result.mjs.map +0 -1
@@ -0,0 +1,92 @@
1
+ "use client";
2
+ import { cn } from "./utils.mjs";
3
+ import { useConfig } from "./providers/config/context.mjs";
4
+ import { OVERLAY_LAYER } from "./lib/z-layers.mjs";
5
+ import Button from "./Button.mjs";
6
+ import * as React$1 from "react";
7
+ import { DirectionProvider } from "@base-ui/react/direction-provider";
8
+ import { jsx, jsxs } from "react/jsx-runtime";
9
+ import { ContextMenu as ContextMenu$1 } from "@base-ui/react/context-menu";
10
+ import { Menu } from "@base-ui/react/menu";
11
+ //#region src/components/molecules/context-menu.tsx
12
+ const ContextMenu = ({ children, items, onSelect, actionLabel, triggerProps, classNames, disabled = false, open, defaultOpen = false, onOpenChange, ...props }) => {
13
+ const { getContainer, direction } = useConfig();
14
+ const triggerRef = React$1.useRef(null);
15
+ const actionRef = React$1.useRef(null);
16
+ const [isOpen, setIsOpen] = React$1.useState(defaultOpen);
17
+ const [source, setSource] = React$1.useState("context");
18
+ const hasActions = items.some((item) => item.type !== "separator");
19
+ const isInactive = disabled || !hasActions;
20
+ const resolvedOpen = open ?? isOpen;
21
+ const resolvedDirection = triggerProps?.dir === "rtl" || triggerProps?.dir === "ltr" ? triggerProps.dir : direction;
22
+ const handleOpenChange = (nextOpen, details, nextSource) => {
23
+ onOpenChange?.(nextOpen, details);
24
+ if (details.isCanceled) return;
25
+ if (nextOpen) setSource(nextSource);
26
+ setIsOpen(nextOpen);
27
+ };
28
+ const popup = /* @__PURE__ */ jsx(Menu.Portal, {
29
+ container: getContainer(),
30
+ children: /* @__PURE__ */ jsx(Menu.Positioner, {
31
+ sideOffset: 4,
32
+ className: OVERLAY_LAYER,
33
+ children: /* @__PURE__ */ jsx(Menu.Popup, {
34
+ "data-slot": "context-menu",
35
+ dir: resolvedDirection,
36
+ finalFocus: source === "context" ? triggerRef : actionRef,
37
+ className: cn(`bg-popover text-popover-foreground border-border
38
+ max-h-[var(--available-height)] max-w-[var(--available-width)]
39
+ min-w-40 overflow-auto rounded-md border p-1 shadow-md outline-none`, classNames?.popup),
40
+ children: items.map((item) => item.type === "separator" ? /* @__PURE__ */ jsx(Menu.Separator, { className: cn("bg-border my-1 h-px", classNames?.separator) }, item.key) : /* @__PURE__ */ jsx(Menu.Item, {
41
+ disabled: item.disabled,
42
+ className: cn(`data-highlighted:bg-accent
43
+ data-highlighted:text-accent-foreground cursor-default
44
+ rounded-sm px-3 py-2 text-sm break-words outline-none
45
+ data-disabled:opacity-50`, classNames?.item),
46
+ onClick: () => {
47
+ item.onSelect?.();
48
+ onSelect?.(item.key, item);
49
+ },
50
+ children: item.label
51
+ }, item.key))
52
+ })
53
+ })
54
+ });
55
+ return /* @__PURE__ */ jsxs(DirectionProvider, {
56
+ direction: resolvedDirection,
57
+ children: [/* @__PURE__ */ jsxs(ContextMenu$1.Root, {
58
+ ...props,
59
+ actionsRef: source === "context" ? props.actionsRef : void 0,
60
+ disabled: isInactive,
61
+ open: resolvedOpen && source === "context",
62
+ onOpenChange: (nextOpen, details) => handleOpenChange(nextOpen, details, "context"),
63
+ children: [/* @__PURE__ */ jsx(ContextMenu$1.Trigger, {
64
+ ...triggerProps,
65
+ ref: triggerRef,
66
+ "data-slot": "context-menu-trigger",
67
+ dir: triggerProps?.dir ?? resolvedDirection,
68
+ tabIndex: actionLabel ? -1 : triggerProps?.tabIndex ?? 0,
69
+ className: cn("focus-visible:ring-ring outline-none focus-visible:ring-2", classNames?.trigger, triggerProps?.className),
70
+ children
71
+ }), popup]
72
+ }), actionLabel && /* @__PURE__ */ jsxs(Menu.Root, {
73
+ ...props,
74
+ actionsRef: source === "action" ? props.actionsRef : void 0,
75
+ disabled: isInactive,
76
+ open: resolvedOpen && source === "action",
77
+ onOpenChange: (nextOpen, details) => handleOpenChange(nextOpen, details, "action"),
78
+ children: [/* @__PURE__ */ jsx(Menu.Trigger, {
79
+ ref: actionRef,
80
+ render: /* @__PURE__ */ jsx(Button, {
81
+ size: "small",
82
+ variant: "text"
83
+ }),
84
+ children: actionLabel
85
+ }), popup]
86
+ })]
87
+ });
88
+ };
89
+ //#endregion
90
+ export { ContextMenu as default };
91
+
92
+ //# sourceMappingURL=ContextMenu.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextMenu.mjs","names":["React","BaseMenu","BaseContextMenu"],"sources":["../src/components/molecules/context-menu.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n\nimport { ContextMenu as BaseContextMenu } from '@base-ui/react/context-menu';\nimport { DirectionProvider } from '@base-ui/react/direction-provider';\nimport { Menu as BaseMenu } from '@base-ui/react/menu';\n\nimport { useConfig } from '@repo/ui/providers';\nimport { cn } from '@repo/ui/utils';\n\nimport { OVERLAY_LAYER } from '../../lib/z-layers';\nimport Button from '../atoms/button';\n\nexport type Item =\n | {\n key: React.Key;\n label: React.ReactNode;\n disabled?: boolean;\n type?: 'action';\n onSelect?: () => void;\n }\n | { key: React.Key; type: 'separator' };\n\nexport interface Props extends Omit<\n React.ComponentProps<typeof BaseContextMenu.Root>,\n 'children'\n> {\n children: React.ReactNode;\n items: Item[];\n onSelect?: (\n key: React.Key,\n item: Extract<Item, { label: React.ReactNode }>,\n ) => void;\n /** Visible action button for touch and discoverability; omit to hide it. */\n actionLabel?: string;\n triggerProps?: Omit<\n React.ComponentProps<typeof BaseContextMenu.Trigger>,\n 'children' | 'render' | 'ref'\n >;\n classNames?: {\n trigger?: string;\n popup?: string;\n item?: string;\n separator?: string;\n };\n}\n\nconst ContextMenu = ({\n children,\n items,\n onSelect,\n actionLabel,\n triggerProps,\n classNames,\n disabled = false,\n open,\n defaultOpen = false,\n onOpenChange,\n ...props\n}: Props) => {\n const { getContainer, direction } = useConfig();\n const triggerRef = React.useRef<HTMLDivElement>(null);\n const actionRef = React.useRef<HTMLButtonElement>(null);\n const [isOpen, setIsOpen] = React.useState(defaultOpen);\n const [source, setSource] = React.useState<'context' | 'action'>('context');\n const hasActions = items.some(item => item.type !== 'separator');\n const isInactive = disabled || !hasActions;\n const resolvedOpen = open ?? isOpen;\n const resolvedDirection =\n triggerProps?.dir === 'rtl' || triggerProps?.dir === 'ltr'\n ? triggerProps.dir\n : direction;\n const handleOpenChange = (\n nextOpen: boolean,\n details: Parameters<NonNullable<Props['onOpenChange']>>[1],\n nextSource: typeof source,\n ) => {\n onOpenChange?.(nextOpen, details);\n\n if (details.isCanceled) {\n return;\n }\n\n if (nextOpen) {\n setSource(nextSource);\n }\n\n setIsOpen(nextOpen);\n };\n\n const popup = (\n <BaseMenu.Portal container={getContainer()}>\n <BaseMenu.Positioner sideOffset={4} className={OVERLAY_LAYER}>\n <BaseMenu.Popup\n data-slot=\"context-menu\"\n dir={resolvedDirection}\n finalFocus={source === 'context' ? triggerRef : actionRef}\n className={cn(\n `bg-popover text-popover-foreground border-border\n max-h-[var(--available-height)] max-w-[var(--available-width)]\n min-w-40 overflow-auto rounded-md border p-1 shadow-md outline-none`,\n classNames?.popup,\n //\n )}\n >\n {items.map(item =>\n item.type === 'separator' ? (\n <BaseMenu.Separator\n key={item.key}\n className={cn(\n 'bg-border my-1 h-px',\n classNames?.separator,\n //\n )}\n />\n ) : (\n <BaseMenu.Item\n key={item.key}\n disabled={item.disabled}\n className={cn(\n `data-highlighted:bg-accent\n data-highlighted:text-accent-foreground cursor-default\n rounded-sm px-3 py-2 text-sm break-words outline-none\n data-disabled:opacity-50`,\n classNames?.item,\n //\n )}\n onClick={() => {\n item.onSelect?.();\n onSelect?.(item.key, item);\n }}\n >\n {item.label}\n </BaseMenu.Item>\n ),\n )}\n </BaseMenu.Popup>\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n );\n\n return (\n <DirectionProvider direction={resolvedDirection}>\n <BaseContextMenu.Root\n {...props}\n actionsRef={source === 'context' ? props.actionsRef : undefined}\n disabled={isInactive}\n open={resolvedOpen && source === 'context'}\n onOpenChange={(nextOpen, details) =>\n handleOpenChange(nextOpen, details, 'context')\n }\n >\n <BaseContextMenu.Trigger\n {...triggerProps}\n ref={triggerRef}\n data-slot=\"context-menu-trigger\"\n dir={triggerProps?.dir ?? resolvedDirection}\n tabIndex={actionLabel ? -1 : (triggerProps?.tabIndex ?? 0)}\n className={cn(\n 'focus-visible:ring-ring outline-none focus-visible:ring-2',\n classNames?.trigger,\n triggerProps?.className,\n //\n )}\n >\n {children}\n </BaseContextMenu.Trigger>\n {popup}\n </BaseContextMenu.Root>\n {actionLabel && (\n <BaseMenu.Root\n {...props}\n actionsRef={source === 'action' ? props.actionsRef : undefined}\n disabled={isInactive}\n open={resolvedOpen && source === 'action'}\n onOpenChange={(nextOpen, details) =>\n handleOpenChange(nextOpen, details, 'action')\n }\n >\n <BaseMenu.Trigger\n ref={actionRef}\n render={<Button size=\"small\" variant=\"text\" />}\n >\n {actionLabel}\n </BaseMenu.Trigger>\n {popup}\n </BaseMenu.Root>\n )}\n </DirectionProvider>\n );\n};\nexport default ContextMenu;\n"],"mappings":";;;;;;;;;;;AAgDA,MAAM,eAAe,EACnB,UACA,OACA,UACA,aACA,cACA,YACA,WAAW,OACX,MACA,cAAc,OACd,cACA,GAAG,YACQ;CACX,MAAM,EAAE,cAAc,cAAc,UAAU;CAC9C,MAAM,aAAaA,QAAM,OAAuB,IAAI;CACpD,MAAM,YAAYA,QAAM,OAA0B,IAAI;CACtD,MAAM,CAAC,QAAQ,aAAaA,QAAM,SAAS,WAAW;CACtD,MAAM,CAAC,QAAQ,aAAaA,QAAM,SAA+B,SAAS;CAC1E,MAAM,aAAa,MAAM,MAAK,SAAQ,KAAK,SAAS,WAAW;CAC/D,MAAM,aAAa,YAAY,CAAC;CAChC,MAAM,eAAe,QAAQ;CAC7B,MAAM,oBACJ,cAAc,QAAQ,SAAS,cAAc,QAAQ,QACjD,aAAa,MACb;CACN,MAAM,oBACJ,UACA,SACA,eACG;EACH,eAAe,UAAU,OAAO;EAEhC,IAAI,QAAQ,YACV;EAGF,IAAI,UACF,UAAU,UAAU;EAGtB,UAAU,QAAQ;CACpB;CAEA,MAAM,QACJ,oBAACC,KAAS,QAAV;EAAiB,WAAW,aAAa;EACvC,UAAA,oBAACA,KAAS,YAAV;GAAqB,YAAY;GAAG,WAAW;GAC7C,UAAA,oBAACA,KAAS,OAAV;IACE,aAAU;IACV,KAAK;IACL,YAAY,WAAW,YAAY,aAAa;IAChD,WAAW,GACT;;kFAGA,YAAY,KAEd;IAEC,UAAA,MAAM,KAAI,SACT,KAAK,SAAS,cACZ,oBAACA,KAAS,WAAV,EAEE,WAAW,GACT,uBACA,YAAY,SAEd,EACD,GANM,KAAK,GAMX,IAED,oBAACA,KAAS,MAAV;KAEE,UAAU,KAAK;KACf,WAAW,GACT;;;+CAIA,YAAY,IAEd;KACA,eAAe;MACb,KAAK,WAAW;MAChB,WAAW,KAAK,KAAK,IAAI;KAC3B;KAEC,UAAA,KAAK;IACO,GAhBR,KAAK,GAgBG,CAEnB;GACc,CAAA;EACG,CAAA;CACN,CAAA;CAGnB,OACE,qBAAC,mBAAD;EAAmB,WAAW;EAA9B,UAAA,CACE,qBAACC,cAAgB,MAAjB;GACE,GAAI;GACJ,YAAY,WAAW,YAAY,MAAM,aAAa,KAAA;GACtD,UAAU;GACV,MAAM,gBAAgB,WAAW;GACjC,eAAe,UAAU,YACvB,iBAAiB,UAAU,SAAS,SAAS;GANjD,UAAA,CASE,oBAACA,cAAgB,SAAjB;IACE,GAAI;IACJ,KAAK;IACL,aAAU;IACV,KAAK,cAAc,OAAO;IAC1B,UAAU,cAAc,KAAM,cAAc,YAAY;IACxD,WAAW,GACT,6DACA,YAAY,SACZ,cAAc,SAEhB;IAEC;GACsB,CAAA,GACxB,KACmB;EACrB,CAAA,GAAA,eACC,qBAACD,KAAS,MAAV;GACE,GAAI;GACJ,YAAY,WAAW,WAAW,MAAM,aAAa,KAAA;GACrD,UAAU;GACV,MAAM,gBAAgB,WAAW;GACjC,eAAe,UAAU,YACvB,iBAAiB,UAAU,SAAS,QAAQ;GANhD,UAAA,CASE,oBAACA,KAAS,SAAV;IACE,KAAK;IACL,QAAQ,oBAAC,QAAD;KAAQ,MAAK;KAAQ,SAAQ;IAAQ,CAAA;IAE5C,UAAA;GACe,CAAA,GACjB,KACY;EAEA,CAAA,CAAA;;AAEvB"}
@@ -5,9 +5,13 @@ interface Props {
5
5
  placeholder?: string;
6
6
  className?: string;
7
7
  disabled?: boolean;
8
+ /** Pick a local date and time together. Optionally configure the minute interval. */
9
+ showTime?: boolean | {
10
+ minuteStep?: number;
11
+ };
8
12
  onChange?: (date: Date | undefined) => void;
9
13
  }
10
- declare const DatePicker: ({ defaultValue, value: _value, placeholder, className, disabled, onChange: _onChange }: Props) => import("react").JSX.Element;
14
+ declare const DatePicker: ({ defaultValue, value: _value, placeholder, className, disabled, showTime, onChange: _onChange }: Props) => import("react").JSX.Element;
11
15
  //#endregion
12
16
  export { type Props, DatePicker as default };
13
- //# sourceMappingURL=date-picker.d.mts.map
17
+ //# sourceMappingURL=DatePicker.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatePicker.d.mts","names":[],"sources":["../src/components/atoms/date-picker.tsx"],"mappings":";UAiBU;EACR,eAAe;EACf,QAAQ;EACR;EACA;EACA;;EAEA;IAAuB;;EACvB,YAAY,MAAM;;cAQd,eAAc,cAAA,OAAA,QAAA,aAAA,WAAA,UAAA,UAAA,UAAA,aAQjB,0BAAK,IAAA"}
@@ -0,0 +1,88 @@
1
+ "use client";
2
+ import { cn } from "./utils.mjs";
3
+ import { calendar_exports } from "./core/calendar.mjs";
4
+ import Button from "./Button.mjs";
5
+ import Popover from "./Popover.mjs";
6
+ import TimePicker from "./TimePicker.mjs";
7
+ import { useState } from "react";
8
+ import { useControllableState } from "@jbpark/use-hooks";
9
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
10
+ import { CalendarIcon } from "lucide-react";
11
+ import { format } from "date-fns";
12
+ //#region src/components/atoms/date-picker.tsx
13
+ const { Calendar } = calendar_exports;
14
+ const toTimeValue = (date) => date ? `${String(date.getHours()).padStart(2, "0")}:${String(date.getMinutes()).padStart(2, "0")}` : "00:00";
15
+ const DatePicker = ({ defaultValue, value: _value, placeholder = "Pick a date", className, disabled, showTime = false, onChange: _onChange = () => {} }) => {
16
+ const [value, onChange] = useControllableState({
17
+ value: _value,
18
+ defaultValue,
19
+ onChange: _onChange
20
+ });
21
+ const [open, setOpen] = useState(false);
22
+ const [draftDate, setDraftDate] = useState(value);
23
+ const [draftTime, setDraftTime] = useState(toTimeValue(value));
24
+ const minuteStep = typeof showTime === "object" ? showTime.minuteStep : void 0;
25
+ const handleOpenChange = (nextOpen) => {
26
+ if (nextOpen && showTime) {
27
+ setDraftDate(value);
28
+ setDraftTime(toTimeValue(value));
29
+ }
30
+ setOpen(nextOpen);
31
+ };
32
+ const handleConfirm = () => {
33
+ if (!draftDate || !draftTime) return;
34
+ const [hours, minutes] = draftTime.split(":").map(Number);
35
+ onChange(new Date(draftDate.getFullYear(), draftDate.getMonth(), draftDate.getDate(), hours, minutes));
36
+ setOpen(false);
37
+ };
38
+ return /* @__PURE__ */ jsx(Popover, {
39
+ placement: "bottomLeft",
40
+ open,
41
+ onOpenChange: handleOpenChange,
42
+ content: /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Calendar, {
43
+ mode: "single",
44
+ selected: showTime ? draftDate : value,
45
+ onSelect: (date) => {
46
+ if (showTime) setDraftDate(date);
47
+ else {
48
+ onChange(date);
49
+ setOpen(false);
50
+ }
51
+ }
52
+ }), showTime && /* @__PURE__ */ jsxs("div", {
53
+ className: "border-border flex flex-col gap-3 border-t p-3",
54
+ children: [/* @__PURE__ */ jsx(TimePicker, {
55
+ label: "Time",
56
+ value: draftTime,
57
+ onChange: (time) => setDraftTime(time ?? ""),
58
+ minuteStep,
59
+ allowClear: false,
60
+ size: "small"
61
+ }), /* @__PURE__ */ jsxs("div", {
62
+ className: "flex justify-end gap-2",
63
+ children: [/* @__PURE__ */ jsx(Button, {
64
+ size: "small",
65
+ onClick: () => setOpen(false),
66
+ children: "Cancel"
67
+ }), /* @__PURE__ */ jsx(Button, {
68
+ type: "primary",
69
+ size: "small",
70
+ disabled: !draftDate || !draftTime,
71
+ onClick: handleConfirm,
72
+ children: "OK"
73
+ })]
74
+ })]
75
+ })] }),
76
+ children: /* @__PURE__ */ jsx(Button, {
77
+ icon: /* @__PURE__ */ jsx(CalendarIcon, {}),
78
+ "data-empty": !value,
79
+ disabled,
80
+ className: cn("w-full justify-start text-left font-normal", "data-[empty=true]:text-muted-foreground", className),
81
+ children: value ? format(value, showTime ? "PPP HH:mm" : "PPP") : placeholder
82
+ })
83
+ });
84
+ };
85
+ //#endregion
86
+ export { DatePicker as default };
87
+
88
+ //# sourceMappingURL=DatePicker.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatePicker.mjs","names":["calendar"],"sources":["../src/components/atoms/date-picker.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\n\nimport { useControllableState } from '@jbpark/use-hooks';\nimport { format } from 'date-fns';\nimport { CalendarIcon } from 'lucide-react';\n\nimport { cn } from '@repo/ui/utils';\n\nimport { calendar } from '../../core';\nimport Button from './button';\nimport Popover from './popover';\nimport TimePicker from './time-picker';\n\nconst { Calendar } = calendar;\n\ninterface Props {\n defaultValue?: Date;\n value?: Date;\n placeholder?: string;\n className?: string;\n disabled?: boolean;\n /** Pick a local date and time together. Optionally configure the minute interval. */\n showTime?: boolean | { minuteStep?: number };\n onChange?: (date: Date | undefined) => void;\n}\n\nconst toTimeValue = (date?: Date) =>\n date\n ? `${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}`\n : '00:00';\n\nconst DatePicker = ({\n defaultValue,\n value: _value,\n placeholder = 'Pick a date',\n className,\n disabled,\n showTime = false,\n onChange: _onChange = () => {},\n}: Props) => {\n const [value, onChange] = useControllableState<Date | undefined>({\n value: _value,\n defaultValue,\n onChange: _onChange,\n });\n const [open, setOpen] = useState(false);\n const [draftDate, setDraftDate] = useState<Date | undefined>(value);\n const [draftTime, setDraftTime] = useState(toTimeValue(value));\n const minuteStep =\n typeof showTime === 'object' ? showTime.minuteStep : undefined;\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (nextOpen && showTime) {\n setDraftDate(value);\n setDraftTime(toTimeValue(value));\n }\n\n setOpen(nextOpen);\n };\n\n const handleConfirm = () => {\n if (!draftDate || !draftTime) return;\n\n const [hours, minutes] = draftTime.split(':').map(Number);\n\n onChange(\n new Date(\n draftDate.getFullYear(),\n draftDate.getMonth(),\n draftDate.getDate(),\n hours,\n minutes,\n ),\n );\n setOpen(false);\n };\n\n return (\n <Popover\n placement=\"bottomLeft\"\n open={open}\n onOpenChange={handleOpenChange}\n content={\n <>\n <Calendar\n mode=\"single\"\n selected={showTime ? draftDate : value}\n onSelect={date => {\n if (showTime) {\n setDraftDate(date);\n } else {\n onChange(date);\n setOpen(false);\n }\n }}\n />\n {showTime && (\n <div className=\"border-border flex flex-col gap-3 border-t p-3\">\n <TimePicker\n label=\"Time\"\n value={draftTime}\n onChange={time => setDraftTime(time ?? '')}\n minuteStep={minuteStep}\n allowClear={false}\n size=\"small\"\n />\n <div className=\"flex justify-end gap-2\">\n <Button size=\"small\" onClick={() => setOpen(false)}>\n Cancel\n </Button>\n <Button\n type=\"primary\"\n size=\"small\"\n disabled={!draftDate || !draftTime}\n onClick={handleConfirm}\n >\n OK\n </Button>\n </div>\n </div>\n )}\n </>\n }\n >\n <Button\n icon={<CalendarIcon />}\n data-empty={!value}\n disabled={disabled}\n className={cn(\n 'w-full justify-start text-left font-normal',\n 'data-[empty=true]:text-muted-foreground',\n className,\n //\n )}\n >\n {value ? format(value, showTime ? 'PPP HH:mm' : 'PPP') : placeholder}\n </Button>\n </Popover>\n );\n};\n\nexport default DatePicker;\nexport type { Props };\n"],"mappings":";;;;;;;;;;;;AAeA,MAAM,EAAE,aAAaA;AAarB,MAAM,eAAe,SACnB,OACI,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,EAAE,GAAG,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,MACxF;AAEN,MAAM,cAAc,EAClB,cACA,OAAO,QACP,cAAc,eACd,WACA,UACA,WAAW,OACX,UAAU,kBAAkB,CAAC,QAClB;CACX,MAAM,CAAC,OAAO,YAAY,qBAAuC;EAC/D,OAAO;EACP;EACA,UAAU;CACZ,CAAC;CACD,MAAM,CAAC,MAAM,WAAW,SAAS,KAAK;CACtC,MAAM,CAAC,WAAW,gBAAgB,SAA2B,KAAK;CAClE,MAAM,CAAC,WAAW,gBAAgB,SAAS,YAAY,KAAK,CAAC;CAC7D,MAAM,aACJ,OAAO,aAAa,WAAW,SAAS,aAAa,KAAA;CAEvD,MAAM,oBAAoB,aAAsB;EAC9C,IAAI,YAAY,UAAU;GACxB,aAAa,KAAK;GAClB,aAAa,YAAY,KAAK,CAAC;EACjC;EAEA,QAAQ,QAAQ;CAClB;CAEA,MAAM,sBAAsB;EAC1B,IAAI,CAAC,aAAa,CAAC,WAAW;EAE9B,MAAM,CAAC,OAAO,WAAW,UAAU,MAAM,GAAG,CAAC,CAAC,IAAI,MAAM;EAExD,SACE,IAAI,KACF,UAAU,YAAY,GACtB,UAAU,SAAS,GACnB,UAAU,QAAQ,GAClB,OACA,OACF,CACF;EACA,QAAQ,KAAK;CACf;CAEA,OACE,oBAAC,SAAD;EACE,WAAU;EACJ;EACN,cAAc;EACd,SACE,qBAAA,YAAA,EAAA,UAAA,CACE,oBAAC,UAAD;GACE,MAAK;GACL,UAAU,WAAW,YAAY;GACjC,WAAU,SAAQ;IAChB,IAAI,UACF,aAAa,IAAI;SACZ;KACL,SAAS,IAAI;KACb,QAAQ,KAAK;IACf;GACF;EACD,CAAA,GACA,YACC,qBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACE,oBAAC,YAAD;IACE,OAAM;IACN,OAAO;IACP,WAAU,SAAQ,aAAa,QAAQ,EAAE;IAC7B;IACZ,YAAY;IACZ,MAAK;GACN,CAAA,GACD,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,oBAAC,QAAD;KAAQ,MAAK;KAAQ,eAAe,QAAQ,KAAK;KAAG,UAAA;IAE5C,CAAA,GACR,oBAAC,QAAD;KACE,MAAK;KACL,MAAK;KACL,UAAU,CAAC,aAAa,CAAC;KACzB,SAAS;KACV,UAAA;IAEO,CAAA,CACL;GACF,CAAA,CAAA;EAEP,CAAA,CAAA,EAAA,CAAA;EAGJ,UAAA,oBAAC,QAAD;GACE,MAAM,oBAAC,cAAD,CAAe,CAAA;GACrB,cAAY,CAAC;GACH;GACV,WAAW,GACT,8CACA,2CACA,SAEF;GAEC,UAAA,QAAQ,OAAO,OAAO,WAAW,cAAc,KAAK,IAAI;EACnD,CAAA;CACD,CAAA;AAEb"}
@@ -0,0 +1,31 @@
1
+ import { ComponentPropsWithRef, Key, ReactNode } from "react";
2
+ //#region src/components/molecules/descriptions.d.ts
3
+ type ColumnCount = 1 | 2 | 3 | 4;
4
+ type Breakpoint = 'base' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
5
+ export type Columns = ColumnCount | Partial<Record<Breakpoint, ColumnCount>>;
6
+ export interface Item {
7
+ /** Stable key for the label/value pair. */
8
+ key: Key;
9
+ label: ReactNode;
10
+ /** Missing or null values render empty; zero is preserved. */
11
+ value?: ReactNode;
12
+ }
13
+ export interface Props extends Omit<ComponentPropsWithRef<'div'>, 'children' | 'title'> {
14
+ items: readonly Item[];
15
+ title?: ReactNode;
16
+ /** Defaults to one column, two at md, and three at lg. Omitted breakpoints inherit the previous count. */
17
+ columns?: Columns;
18
+ /** Label placement relative to the value. Defaults to horizontal. */
19
+ orientation?: 'horizontal' | 'vertical';
20
+ classNames?: {
21
+ title?: string;
22
+ list?: string;
23
+ item?: string;
24
+ label?: string;
25
+ value?: string;
26
+ };
27
+ }
28
+ declare const Descriptions: ({ items, title, columns, orientation, className, classNames, style, ...props }: Props) => import("react").JSX.Element;
29
+ //#endregion
30
+ export { Descriptions as default };
31
+ //# sourceMappingURL=Descriptions.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Descriptions.d.mts","names":[],"sources":["../src/components/molecules/descriptions.tsx"],"mappings":";;KASK;KACA;YAEO,UAAU,cAAc,QAAQ,OAAO,YAAY;iBAE9C;;EAEf,KAAK;EACL,OAAO;;EAEP,QAAQ;;iBAGO,cAAc,KAC7B;EAGA,gBAAgB;EAChB,QAAQ;;EAER,UAAU;;EAEV;EACA;IACE;IACA;IACA;IACA;IACA;;;cAME,iBAAgB,OAAA,OAAA,SAAA,aAAA,WAAA,YAAA,UAAA,SASnB,0BAAK,IAAA"}
@@ -0,0 +1,67 @@
1
+ import { cn } from "./utils.mjs";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ //#region src/components/molecules/descriptions.tsx
4
+ const BREAKPOINTS = [
5
+ "base",
6
+ "sm",
7
+ "md",
8
+ "lg",
9
+ "xl",
10
+ "2xl"
11
+ ];
12
+ const Descriptions = ({ items, title, columns = {
13
+ base: 1,
14
+ md: 2,
15
+ lg: 3
16
+ }, orientation = "horizontal", className, classNames, style, ...props }) => {
17
+ const columnStyles = {};
18
+ let count = 1;
19
+ for (const breakpoint of BREAKPOINTS) {
20
+ const requested = typeof columns === "number" ? columns : columns[breakpoint];
21
+ if (requested !== void 0 && Number.isFinite(requested)) count = Math.min(4, Math.max(1, Math.floor(requested)));
22
+ columnStyles[`--descriptions-columns-${breakpoint}`] = count;
23
+ }
24
+ return /* @__PURE__ */ jsxs("div", {
25
+ ...props,
26
+ "data-slot": "descriptions",
27
+ "data-orientation": orientation,
28
+ className: cn("text-foreground w-full min-w-0", className),
29
+ style: {
30
+ ...columnStyles,
31
+ ...style
32
+ },
33
+ children: [title != null && /* @__PURE__ */ jsx("div", {
34
+ "data-slot": "descriptions-title",
35
+ className: cn("mb-4 text-base font-semibold", classNames?.title),
36
+ children: title
37
+ }), /* @__PURE__ */ jsx("dl", {
38
+ "data-slot": "descriptions-list",
39
+ className: cn(`m-0 grid
40
+ grid-cols-[repeat(var(--descriptions-columns-base),minmax(0,1fr))]
41
+ gap-x-6 gap-y-4
42
+ sm:grid-cols-[repeat(var(--descriptions-columns-sm),minmax(0,1fr))]
43
+ md:grid-cols-[repeat(var(--descriptions-columns-md),minmax(0,1fr))]
44
+ lg:grid-cols-[repeat(var(--descriptions-columns-lg),minmax(0,1fr))]
45
+ xl:grid-cols-[repeat(var(--descriptions-columns-xl),minmax(0,1fr))]
46
+ 2xl:grid-cols-[repeat(var(--descriptions-columns-2xl),minmax(0,1fr))]`, classNames?.list),
47
+ children: items.map((item) => /* @__PURE__ */ jsxs("div", {
48
+ "data-slot": "descriptions-item",
49
+ className: cn("grid min-w-0 gap-2 text-sm", orientation === "horizontal" ? "grid-cols-[minmax(0,1fr)_minmax(0,2fr)] items-start" : "grid-cols-1 content-start", classNames?.item),
50
+ children: [/* @__PURE__ */ jsx("dt", {
51
+ "data-slot": "descriptions-label",
52
+ className: cn(`text-muted-foreground min-w-0 font-medium
53
+ [overflow-wrap:anywhere]`, classNames?.label),
54
+ children: item.label
55
+ }), /* @__PURE__ */ jsx("dd", {
56
+ "data-slot": "descriptions-value",
57
+ className: cn("m-0 min-w-0 [overflow-wrap:anywhere]", classNames?.value),
58
+ children: item.value
59
+ })]
60
+ }, item.key))
61
+ })]
62
+ });
63
+ };
64
+ //#endregion
65
+ export { Descriptions as default };
66
+
67
+ //# sourceMappingURL=Descriptions.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Descriptions.mjs","names":[],"sources":["../src/components/molecules/descriptions.tsx"],"sourcesContent":["import type {\n CSSProperties,\n ComponentPropsWithRef,\n Key,\n ReactNode,\n} from 'react';\n\nimport { cn } from '@repo/ui/utils';\n\ntype ColumnCount = 1 | 2 | 3 | 4;\ntype Breakpoint = 'base' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n\nexport type Columns = ColumnCount | Partial<Record<Breakpoint, ColumnCount>>;\n\nexport interface Item {\n /** Stable key for the label/value pair. */\n key: Key;\n label: ReactNode;\n /** Missing or null values render empty; zero is preserved. */\n value?: ReactNode;\n}\n\nexport interface Props extends Omit<\n ComponentPropsWithRef<'div'>,\n 'children' | 'title'\n> {\n items: readonly Item[];\n title?: ReactNode;\n /** Defaults to one column, two at md, and three at lg. Omitted breakpoints inherit the previous count. */\n columns?: Columns;\n /** Label placement relative to the value. Defaults to horizontal. */\n orientation?: 'horizontal' | 'vertical';\n classNames?: {\n title?: string;\n list?: string;\n item?: string;\n label?: string;\n value?: string;\n };\n}\n\nconst BREAKPOINTS: Breakpoint[] = ['base', 'sm', 'md', 'lg', 'xl', '2xl'];\n\nconst Descriptions = ({\n items,\n title,\n columns = { base: 1, md: 2, lg: 3 },\n orientation = 'horizontal',\n className,\n classNames,\n style,\n ...props\n}: Props) => {\n const columnStyles: Record<string, number> = {};\n let count = 1;\n\n for (const breakpoint of BREAKPOINTS) {\n const requested =\n typeof columns === 'number' ? columns : columns[breakpoint];\n\n if (requested !== undefined && Number.isFinite(requested)) {\n count = Math.min(4, Math.max(1, Math.floor(requested)));\n }\n\n columnStyles[`--descriptions-columns-${breakpoint}`] = count;\n }\n\n return (\n <div\n {...props}\n data-slot=\"descriptions\"\n data-orientation={orientation}\n className={cn(\n 'text-foreground w-full min-w-0',\n className, //\n )}\n style={{ ...columnStyles, ...style } as CSSProperties}\n >\n {title != null && (\n <div\n data-slot=\"descriptions-title\"\n className={cn(\n 'mb-4 text-base font-semibold',\n classNames?.title, //\n )}\n >\n {title}\n </div>\n )}\n <dl\n data-slot=\"descriptions-list\"\n className={cn(\n `m-0 grid\n grid-cols-[repeat(var(--descriptions-columns-base),minmax(0,1fr))]\n gap-x-6 gap-y-4\n sm:grid-cols-[repeat(var(--descriptions-columns-sm),minmax(0,1fr))]\n md:grid-cols-[repeat(var(--descriptions-columns-md),minmax(0,1fr))]\n lg:grid-cols-[repeat(var(--descriptions-columns-lg),minmax(0,1fr))]\n xl:grid-cols-[repeat(var(--descriptions-columns-xl),minmax(0,1fr))]\n 2xl:grid-cols-[repeat(var(--descriptions-columns-2xl),minmax(0,1fr))]`,\n classNames?.list,\n //\n )}\n >\n {items.map(item => (\n <div\n key={item.key}\n data-slot=\"descriptions-item\"\n className={cn(\n 'grid min-w-0 gap-2 text-sm',\n orientation === 'horizontal'\n ? 'grid-cols-[minmax(0,1fr)_minmax(0,2fr)] items-start'\n : 'grid-cols-1 content-start',\n classNames?.item,\n //\n )}\n >\n <dt\n data-slot=\"descriptions-label\"\n className={cn(\n `text-muted-foreground min-w-0 font-medium\n [overflow-wrap:anywhere]`,\n classNames?.label, //\n )}\n >\n {item.label}\n </dt>\n <dd\n data-slot=\"descriptions-value\"\n className={cn(\n 'm-0 min-w-0 [overflow-wrap:anywhere]',\n classNames?.value, //\n )}\n >\n {item.value}\n </dd>\n </div>\n ))}\n </dl>\n </div>\n );\n};\n\nexport default Descriptions;\n"],"mappings":";;;AAyCA,MAAM,cAA4B;CAAC;CAAQ;CAAM;CAAM;CAAM;CAAM;AAAK;AAExE,MAAM,gBAAgB,EACpB,OACA,OACA,UAAU;CAAE,MAAM;CAAG,IAAI;CAAG,IAAI;AAAE,GAClC,cAAc,cACd,WACA,YACA,OACA,GAAG,YACQ;CACX,MAAM,eAAuC,CAAC;CAC9C,IAAI,QAAQ;CAEZ,KAAK,MAAM,cAAc,aAAa;EACpC,MAAM,YACJ,OAAO,YAAY,WAAW,UAAU,QAAQ;EAElD,IAAI,cAAc,KAAA,KAAa,OAAO,SAAS,SAAS,GACtD,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,MAAM,SAAS,CAAC,CAAC;EAGxD,aAAa,0BAA0B,gBAAgB;CACzD;CAEA,OACE,qBAAC,OAAD;EACE,GAAI;EACJ,aAAU;EACV,oBAAkB;EAClB,WAAW,GACT,kCACA,SACF;EACA,OAAO;GAAE,GAAG;GAAc,GAAG;EAAM;EARrC,UAAA,CAUG,SAAS,QACR,oBAAC,OAAD;GACE,aAAU;GACV,WAAW,GACT,gCACA,YAAY,KACd;GAEC,UAAA;EACE,CAAA,GAEP,oBAAC,MAAD;GACE,aAAU;GACV,WAAW,GACT;;;;;;;kFAQA,YAAY,IAEd;GAEC,UAAA,MAAM,KAAI,SACT,qBAAC,OAAD;IAEE,aAAU;IACV,WAAW,GACT,8BACA,gBAAgB,eACZ,wDACA,6BACJ,YAAY,IAEd;IAVF,UAAA,CAYE,oBAAC,MAAD;KACE,aAAU;KACV,WAAW,GACT;2CAEA,YAAY,KACd;KAEC,UAAA,KAAK;IACJ,CAAA,GACJ,oBAAC,MAAD;KACE,aAAU;KACV,WAAW,GACT,wCACA,YAAY,KACd;KAEC,UAAA,KAAK;IACJ,CAAA,CACD;GA9BE,GAAA,KAAK,GA8BP,CACN;EACC,CAAA,CACD;;AAET"}
@@ -0,0 +1,18 @@
1
+ import { Separator, separator_d_exports } from "./core/separator.mjs";
2
+ import "./core/index.mjs";
3
+ import { ComponentProps, ReactNode } from "react";
4
+ //#region src/components/atoms/divider.d.ts
5
+ export interface Props extends Omit<ComponentProps<typeof Separator>, 'children' | 'className'> {
6
+ children?: ReactNode;
7
+ variant?: 'solid' | 'dashed' | 'dotted';
8
+ titlePlacement?: 'start' | 'center' | 'end';
9
+ className?: string;
10
+ classNames?: {
11
+ line?: string;
12
+ label?: string;
13
+ };
14
+ }
15
+ declare const Divider: ({ children, orientation, decorative, variant, titlePlacement, className, classNames, dir, "aria-label": ariaLabel, ...props }: Props) => import("react").JSX.Element;
16
+ //#endregion
17
+ export { Divider as default };
18
+ //# sourceMappingURL=Divider.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Divider.d.mts","names":["separator","separator.Separator"],"sources":["../src/components/atoms/divider.tsx"],"mappings":";;;;iBASiB,cAAc,KAC7B,sBAAsBC;EAGtB,WAAW;EACX;EACA;EACA;EACA;IACE;IACA;;;cAUE,YAAW,UAAA,aAAA,YAAA,SAAA,gBAAA,WAAA,YAAA,mBAAA,cAAA,SAWd,0BAAK,IAAA"}
@@ -0,0 +1,44 @@
1
+ "use client";
2
+ import { cn } from "./utils.mjs";
3
+ import { useConfig } from "./providers/config/context.mjs";
4
+ import { Separator } from "./core/separator.mjs";
5
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
+ //#region src/components/atoms/divider.tsx
7
+ const variants = {
8
+ solid: "border-solid",
9
+ dashed: "border-dashed",
10
+ dotted: "border-dotted"
11
+ };
12
+ const Divider = ({ children, orientation = "horizontal", decorative = true, variant = "solid", titlePlacement = "center", className, classNames, dir, "aria-label": ariaLabel, ...props }) => {
13
+ const { direction } = useConfig();
14
+ const hasLabel = children !== void 0 && children !== null && children !== false;
15
+ const isVertical = orientation === "vertical";
16
+ const label = typeof children === "string" || typeof children === "number" ? String(children) : void 0;
17
+ const lineClassName = cn("border-border min-w-0 flex-1", isVertical ? "min-h-0 border-s" : "border-t", variants[variant], classNames?.line);
18
+ return /* @__PURE__ */ jsxs(Separator, {
19
+ ...props,
20
+ "data-slot": "divider",
21
+ dir: dir ?? direction,
22
+ orientation,
23
+ decorative,
24
+ "aria-label": decorative ? ariaLabel : ariaLabel ?? label,
25
+ className: cn(`text-foreground flex bg-transparent
26
+ data-[orientation=horizontal]:h-auto data-[orientation=vertical]:h-auto
27
+ data-[orientation=vertical]:w-auto`, isVertical ? "mx-2 h-auto w-auto flex-col items-center self-stretch" : "my-4 h-auto w-full items-center", hasLabel && "gap-3", className),
28
+ children: [/* @__PURE__ */ jsx("span", {
29
+ "aria-hidden": "true",
30
+ className: cn(lineClassName, hasLabel && titlePlacement === "start" && "flex-[0.1]")
31
+ }), hasLabel && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
32
+ "data-slot": "divider-label",
33
+ className: cn("min-w-0 shrink text-sm font-medium [overflow-wrap:anywhere]", classNames?.label),
34
+ children
35
+ }), /* @__PURE__ */ jsx("span", {
36
+ "aria-hidden": "true",
37
+ className: cn(lineClassName, titlePlacement === "end" && "flex-[0.1]")
38
+ })] })]
39
+ });
40
+ };
41
+ //#endregion
42
+ export { Divider as default };
43
+
44
+ //# sourceMappingURL=Divider.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Divider.mjs","names":["separator.Separator"],"sources":["../src/components/atoms/divider.tsx"],"sourcesContent":["'use client';\n\nimport type { ComponentProps, ReactNode } from 'react';\n\nimport { useConfig } from '@repo/ui/providers';\nimport { cn } from '@repo/ui/utils';\n\nimport { separator } from '../../core';\n\nexport interface Props extends Omit<\n ComponentProps<typeof separator.Separator>,\n 'children' | 'className'\n> {\n children?: ReactNode;\n variant?: 'solid' | 'dashed' | 'dotted';\n titlePlacement?: 'start' | 'center' | 'end';\n className?: string;\n classNames?: {\n line?: string;\n label?: string;\n };\n}\n\nconst variants = {\n solid: 'border-solid',\n dashed: 'border-dashed',\n dotted: 'border-dotted',\n};\n\nconst Divider = ({\n children,\n orientation = 'horizontal',\n decorative = true,\n variant = 'solid',\n titlePlacement = 'center',\n className,\n classNames,\n dir,\n 'aria-label': ariaLabel,\n ...props\n}: Props) => {\n const { direction } = useConfig();\n const hasLabel =\n children !== undefined && children !== null && children !== false;\n const isVertical = orientation === 'vertical';\n const label =\n typeof children === 'string' || typeof children === 'number'\n ? String(children)\n : undefined;\n const lineClassName = cn(\n 'border-border min-w-0 flex-1',\n isVertical ? 'min-h-0 border-s' : 'border-t',\n variants[variant],\n classNames?.line,\n //\n );\n\n return (\n <separator.Separator\n {...props}\n data-slot=\"divider\"\n dir={dir ?? direction}\n orientation={orientation}\n decorative={decorative}\n aria-label={decorative ? ariaLabel : (ariaLabel ?? label)}\n className={cn(\n `text-foreground flex bg-transparent\n data-[orientation=horizontal]:h-auto data-[orientation=vertical]:h-auto\n data-[orientation=vertical]:w-auto`,\n isVertical\n ? 'mx-2 h-auto w-auto flex-col items-center self-stretch'\n : 'my-4 h-auto w-full items-center',\n hasLabel && 'gap-3',\n className,\n //\n )}\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n lineClassName,\n hasLabel && titlePlacement === 'start' && 'flex-[0.1]',\n //\n )}\n />\n {hasLabel && (\n <>\n <span\n data-slot=\"divider-label\"\n className={cn(\n 'min-w-0 shrink text-sm font-medium [overflow-wrap:anywhere]',\n classNames?.label,\n //\n )}\n >\n {children}\n </span>\n <span\n aria-hidden=\"true\"\n className={cn(\n lineClassName,\n titlePlacement === 'end' && 'flex-[0.1]',\n //\n )}\n />\n </>\n )}\n </separator.Separator>\n );\n};\n\nexport default Divider;\n"],"mappings":";;;;;;AAuBA,MAAM,WAAW;CACf,OAAO;CACP,QAAQ;CACR,QAAQ;AACV;AAEA,MAAM,WAAW,EACf,UACA,cAAc,cACd,aAAa,MACb,UAAU,SACV,iBAAiB,UACjB,WACA,YACA,KACA,cAAc,WACd,GAAG,YACQ;CACX,MAAM,EAAE,cAAc,UAAU;CAChC,MAAM,WACJ,aAAa,KAAA,KAAa,aAAa,QAAQ,aAAa;CAC9D,MAAM,aAAa,gBAAgB;CACnC,MAAM,QACJ,OAAO,aAAa,YAAY,OAAO,aAAa,WAChD,OAAO,QAAQ,IACf,KAAA;CACN,MAAM,gBAAgB,GACpB,gCACA,aAAa,qBAAqB,YAClC,SAAS,UACT,YAAY,IAEd;CAEA,OACE,qBAACA,WAAD;EACE,GAAI;EACJ,aAAU;EACV,KAAK,OAAO;EACC;EACD;EACZ,cAAY,aAAa,YAAa,aAAa;EACnD,WAAW,GACT;;6CAGA,aACI,0DACA,mCACJ,YAAY,SACZ,SAEF;EAjBF,UAAA,CAmBE,oBAAC,QAAD;GACE,eAAY;GACZ,WAAW,GACT,eACA,YAAY,mBAAmB,WAAW,YAE5C;EACD,CAAA,GACA,YACC,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,QAAD;GACE,aAAU;GACV,WAAW,GACT,+DACA,YAAY,KAEd;GAEC;EACG,CAAA,GACN,oBAAC,QAAD;GACE,eAAY;GACZ,WAAW,GACT,eACA,mBAAmB,SAAS,YAE9B;EACD,CAAA,CACD,EAAA,CAAA,CAEe;;AAEzB"}
@@ -1,5 +1,5 @@
1
1
  //#region src/components/organisms/drawer.d.ts
2
- interface Props {
2
+ export interface Props {
3
3
  open: boolean;
4
4
  children?: React.ReactNode;
5
5
  title?: React.ReactNode;
@@ -31,5 +31,5 @@ interface Props {
31
31
  }
32
32
  declare const Drawer: ({ open, title, extra, footer, closable, closeIcon, direction, size, maskClosable, handlebar, rounded, mask, className, classNames, style, children, container, onClose, ...props }: Props) => import("react").JSX.Element;
33
33
  //#endregion
34
- export { Props, Drawer as default };
35
- //# sourceMappingURL=drawer.d.mts.map
34
+ export { Drawer as default };
35
+ //# sourceMappingURL=Drawer.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Drawer.d.mts","names":[],"sources":["../src/components/organisms/drawer.tsx"],"mappings":";iBA2CiB;EACf;EACA,WAAW,MAAM;EACjB,QAAQ,MAAM;EACd,QAAQ,MAAM;EACd,SAAS,MAAM;EACf;EACA,YAAY,MAAM;EAClB;EACA;EACA;EACA;EACA;EACA;EACA;EACA,QAAQ,MAAM;EACd;IACE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF,YAAY;EACZ;;cA+CI,WAAU,MAAA,OAAA,OAAA,QAAA,UAAA,WAAA,WAAA,MAAA,cAAA,WAAA,SAAA,MAAA,WAAA,YAAA,OAAA,UAAA,WAAA,YAAA,SAoBb,0BAAK,IAAA"}
@@ -1,11 +1,11 @@
1
1
  "use client";
2
- import { cn } from "../../utils.mjs";
3
- import { DEFAULT_LOCALE, useConfig } from "../../providers/config/context.mjs";
4
- import { drawer_exports } from "../../core/drawer.mjs";
5
- import Button from "../../Button.mjs";
6
- import { X } from "lucide-react";
2
+ import { cn } from "./utils.mjs";
3
+ import { DEFAULT_LOCALE, useConfig } from "./providers/config/context.mjs";
4
+ import Button from "./Button.mjs";
5
+ import { drawer_exports } from "./core/drawer.mjs";
7
6
  import { useEffect } from "react";
8
7
  import { jsx, jsxs } from "react/jsx-runtime";
8
+ import { X } from "lucide-react";
9
9
  //#region src/components/organisms/drawer.tsx
10
10
  const { DrawerContent, Drawer: DrawerCore, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle } = drawer_exports;
11
11
  const maskLessStates = /* @__PURE__ */ new WeakMap();
@@ -130,4 +130,4 @@ const Drawer = ({ open, title, extra, footer, closable = true, closeIcon, direct
130
130
  //#endregion
131
131
  export { Drawer as default };
132
132
 
133
- //# sourceMappingURL=drawer.mjs.map
133
+ //# sourceMappingURL=Drawer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Drawer.mjs","names":["drawer"],"sources":["../src/components/organisms/drawer.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect } from 'react';\n\nimport { X } from 'lucide-react';\n\nimport { DEFAULT_LOCALE, useConfig } from '@repo/ui/providers';\nimport { cn } from '@repo/ui/utils';\n\nimport { drawer } from '../../core';\nimport Button from '../atoms/button';\n\nconst {\n DrawerContent,\n Drawer: DrawerCore,\n DrawerDescription,\n DrawerFooter,\n DrawerHeader,\n DrawerTitle,\n} = drawer;\n\n// `body.style.pointerEvents` is global state (per document), so several\n// mask-less overlays opening at once would otherwise race: each instance\n// would capture whatever the previous one had already written and the\n// last cleanup would restore a stale value. Reference counting makes only\n// the first instance capture the original value and only the last one\n// restore it. Keyed by document (not a single module-level counter) so\n// drawers portaled into different documents — e.g. live-editor's iframe\n// Renderer — don't share state with the host document.\ntype MaskLessState = { count: number; originalPointerEvents: string | null };\nconst maskLessStates = new WeakMap<Document, MaskLessState>();\n\nconst getMaskLessState = (doc: Document): MaskLessState => {\n let state = maskLessStates.get(doc);\n\n if (!state) {\n state = { count: 0, originalPointerEvents: null };\n maskLessStates.set(doc, state);\n }\n\n return state;\n};\n\nexport interface Props {\n open: boolean;\n children?: React.ReactNode;\n title?: React.ReactNode;\n extra?: React.ReactNode;\n footer?: React.ReactNode;\n closable?: boolean;\n closeIcon?: React.ReactNode;\n direction?: 'top' | 'bottom' | 'left' | 'right';\n size?: 'small' | 'middle' | 'medium' | 'large' | 'full' | string;\n maskClosable?: boolean;\n handlebar?: boolean;\n rounded?: boolean;\n mask?: boolean;\n className?: string;\n style?: React.CSSProperties;\n classNames?: {\n mask?: string;\n content?: string;\n handlebar?: string;\n header?: string;\n title?: string;\n close?: string;\n extra?: string;\n body?: string;\n footer?: string;\n };\n container?: HTMLElement;\n onClose: () => void;\n}\n\nconst SIZES: Record<string, string> = {\n small: '30%',\n middle: '50%',\n medium: '50%',\n large: '75%',\n full: '90%',\n};\n\n// Rounds the edge facing into the viewport — the opposite edge from\n// whichever side the drawer is anchored to.\nconst ROUNDED_CLASSES: Record<'top' | 'bottom' | 'left' | 'right', string> = {\n top: 'rounded-b-[30px]!',\n bottom: 'rounded-t-[30px]!',\n left: 'rounded-r-[30px]!',\n right: 'rounded-l-[30px]!',\n};\n\n// A side drawer sized by a preset is sized by a percentage of the viewport,\n// which collapses on a phone: `small` is 30%, so it lands at ~112px on a 375px\n// screen — a sliver too narrow to read. Floor the preset widths so they stay\n// usable on small screens. A custom `size` is passed through untouched; an\n// explicit value is the caller's decision, not something to second-guess.\nconst SIDE_MIN_WIDTH = '20rem';\n\nconst getSizeStyles = (\n direction: 'top' | 'bottom' | 'left' | 'right',\n size: string,\n): React.CSSProperties => {\n if (direction === 'top' || direction === 'bottom') {\n return { height: SIZES[size] || size };\n }\n\n const preset = SIZES[size];\n\n return {\n width: preset ? `max(${preset}, ${SIDE_MIN_WIDTH})` : size,\n // Set inline so it beats `core/drawer`'s `sm:max-w-sm`, which would\n // otherwise hold every side drawer at 24rem from the `sm` breakpoint up\n // and leave `size` with no effect on anything wider than a phone. It also\n // keeps the floor above from overflowing a container narrower than it.\n maxWidth: '100%',\n };\n};\n\nconst Drawer = ({\n open,\n title,\n extra,\n footer,\n closable = true,\n closeIcon,\n direction = 'bottom',\n size = 'middle',\n maskClosable = true,\n handlebar = true,\n rounded = false,\n mask = true,\n className,\n classNames,\n style,\n children,\n container,\n onClose,\n ...props\n}: Props) => {\n const { locale } = useConfig();\n\n useEffect(() => {\n if (!open || mask) {\n return;\n }\n\n const targetDocument = container?.ownerDocument ?? document;\n const targetWindow = targetDocument.defaultView ?? window;\n const body = targetDocument.body;\n const state = getMaskLessState(targetDocument);\n\n if (state.count === 0) {\n state.originalPointerEvents = body.style.pointerEvents;\n }\n state.count += 1;\n\n const raf = targetWindow.requestAnimationFrame(() => {\n body.style.pointerEvents = 'auto';\n });\n\n return () => {\n targetWindow.cancelAnimationFrame(raf);\n state.count -= 1;\n\n if (state.count === 0) {\n body.style.pointerEvents = state.originalPointerEvents ?? '';\n state.originalPointerEvents = null;\n }\n };\n }, [open, mask, container]);\n\n return (\n <DrawerCore\n open={open}\n // antd's mask ⇒ Base UI's modal (focus trap + scroll lock); maskClosable\n // gates outside-press dismissal at the root, replacing vaul's\n // Content-level onPointerDownOutside handler.\n modal={mask}\n disablePointerDismissal={!maskClosable}\n onOpenChange={open => {\n if (!open) {\n onClose();\n }\n }}\n {...props}\n >\n <DrawerContent\n direction={direction}\n container={container}\n className={cn(\n 'border-none outline-none',\n rounded ? ROUNDED_CLASSES[direction] : 'rounded-none!',\n classNames?.content,\n className,\n //\n )}\n handlebar={handlebar}\n mask={mask}\n classNames={{\n mask: classNames?.mask || '',\n handlebar: classNames?.handlebar || '',\n }}\n style={{\n ...getSizeStyles(direction, size),\n ...style,\n }}\n >\n <DrawerHeader\n className={cn(\n classNames?.header,\n !title && 'p-0',\n //\n )}\n >\n <div className=\"flex items-start gap-2\">\n {closable && (\n <Button\n variant=\"text\"\n shape=\"circle\"\n size=\"small\"\n aria-label={locale.close ?? DEFAULT_LOCALE.close}\n icon={closeIcon || <X />}\n onClick={onClose}\n className={cn(classNames?.close)}\n />\n )}\n <div className=\"flex flex-1 items-start justify-between gap-2\">\n <DrawerTitle className={cn(classNames?.title)}>\n {title}\n </DrawerTitle>\n {extra != null && (\n <div className={cn('shrink-0', classNames?.extra)}>{extra}</div>\n )}\n </div>\n </div>\n <DrawerDescription className=\"hidden\" />\n </DrawerHeader>\n <div\n className={cn(\n 'overflow-auto p-5',\n classNames?.body,\n //\n )}\n >\n {children}\n </div>\n {footer != null && (\n <DrawerFooter className={cn(classNames?.footer)}>\n {footer}\n </DrawerFooter>\n )}\n </DrawerContent>\n </DrawerCore>\n );\n};\n\nexport default Drawer;\n"],"mappings":";;;;;;;;;AAYA,MAAM,EACJ,eACA,QAAQ,YACR,mBACA,cACA,cACA,gBACEA;AAWJ,MAAM,iCAAiB,IAAI,QAAiC;AAE5D,MAAM,oBAAoB,QAAiC;CACzD,IAAI,QAAQ,eAAe,IAAI,GAAG;CAElC,IAAI,CAAC,OAAO;EACV,QAAQ;GAAE,OAAO;GAAG,uBAAuB;EAAK;EAChD,eAAe,IAAI,KAAK,KAAK;CAC/B;CAEA,OAAO;AACT;AAiCA,MAAM,QAAgC;CACpC,OAAO;CACP,QAAQ;CACR,QAAQ;CACR,OAAO;CACP,MAAM;AACR;AAIA,MAAM,kBAAuE;CAC3E,KAAK;CACL,QAAQ;CACR,MAAM;CACN,OAAO;AACT;AAOA,MAAM,iBAAiB;AAEvB,MAAM,iBACJ,WACA,SACwB;CACxB,IAAI,cAAc,SAAS,cAAc,UACvC,OAAO,EAAE,QAAQ,MAAM,SAAS,KAAK;CAGvC,MAAM,SAAS,MAAM;CAErB,OAAO;EACL,OAAO,SAAS,OAAO,OAAO,IAAI,eAAe,KAAK;EAKtD,UAAU;CACZ;AACF;AAEA,MAAM,UAAU,EACd,MACA,OACA,OACA,QACA,WAAW,MACX,WACA,YAAY,UACZ,OAAO,UACP,eAAe,MACf,YAAY,MACZ,UAAU,OACV,OAAO,MACP,WACA,YACA,OACA,UACA,WACA,SACA,GAAG,YACQ;CACX,MAAM,EAAE,WAAW,UAAU;CAE7B,gBAAgB;EACd,IAAI,CAAC,QAAQ,MACX;EAGF,MAAM,iBAAiB,WAAW,iBAAiB;EACnD,MAAM,eAAe,eAAe,eAAe;EACnD,MAAM,OAAO,eAAe;EAC5B,MAAM,QAAQ,iBAAiB,cAAc;EAE7C,IAAI,MAAM,UAAU,GAClB,MAAM,wBAAwB,KAAK,MAAM;EAE3C,MAAM,SAAS;EAEf,MAAM,MAAM,aAAa,4BAA4B;GACnD,KAAK,MAAM,gBAAgB;EAC7B,CAAC;EAED,aAAa;GACX,aAAa,qBAAqB,GAAG;GACrC,MAAM,SAAS;GAEf,IAAI,MAAM,UAAU,GAAG;IACrB,KAAK,MAAM,gBAAgB,MAAM,yBAAyB;IAC1D,MAAM,wBAAwB;GAChC;EACF;CACF,GAAG;EAAC;EAAM;EAAM;CAAS,CAAC;CAE1B,OACE,oBAAC,YAAD;EACQ;EAIN,OAAO;EACP,yBAAyB,CAAC;EAC1B,eAAc,SAAQ;GACpB,IAAI,CAAC,MACH,QAAQ;EAEZ;EACA,GAAI;EAEJ,UAAA,qBAAC,eAAD;GACa;GACA;GACX,WAAW,GACT,4BACA,UAAU,gBAAgB,aAAa,iBACvC,YAAY,SACZ,SAEF;GACW;GACL;GACN,YAAY;IACV,MAAM,YAAY,QAAQ;IAC1B,WAAW,YAAY,aAAa;GACtC;GACA,OAAO;IACL,GAAG,cAAc,WAAW,IAAI;IAChC,GAAG;GACL;GAnBF,UAAA;IAqBE,qBAAC,cAAD;KACE,WAAW,GACT,YAAY,QACZ,CAAC,SAAS,KAEZ;KALF,UAAA,CAOE,qBAAC,OAAD;MAAK,WAAU;MAAf,UAAA,CACG,YACC,oBAAC,QAAD;OACE,SAAQ;OACR,OAAM;OACN,MAAK;OACL,cAAY,OAAO,SAAS,eAAe;OAC3C,MAAM,aAAa,oBAAC,GAAD,CAAI,CAAA;OACvB,SAAS;OACT,WAAW,GAAG,YAAY,KAAK;MAChC,CAAA,GAEH,qBAAC,OAAD;OAAK,WAAU;OAAf,UAAA,CACE,oBAAC,aAAD;QAAa,WAAW,GAAG,YAAY,KAAK;QACzC,UAAA;OACU,CAAA,GACZ,SAAS,QACR,oBAAC,OAAD;QAAK,WAAW,GAAG,YAAY,YAAY,KAAK;QAAI,UAAA;OAAW,CAAA,CAE9D;MACF,CAAA,CAAA;KACL,CAAA,GAAA,oBAAC,mBAAD,EAAmB,WAAU,SAAU,CAAA,CAC3B;;IACd,oBAAC,OAAD;KACE,WAAW,GACT,qBACA,YAAY,IAEd;KAEC;IACE,CAAA;IACJ,UAAU,QACT,oBAAC,cAAD;KAAc,WAAW,GAAG,YAAY,MAAM;KAC3C,UAAA;IACW,CAAA;GAEH;;CACL,CAAA;AAEhB"}
@@ -1,7 +1,7 @@
1
- import { MenuProps } from "./menu/menu.mjs";
1
+ import { MenuProps } from "./components/molecules/menu/menu.mjs";
2
2
  //#region src/components/molecules/dropdown.d.ts
3
3
  type ChangeEventHandler = (open: boolean) => void;
4
- interface Props extends React.ComponentPropsWithoutRef<'div'> {
4
+ export interface Props extends React.ComponentPropsWithoutRef<'div'> {
5
5
  open?: boolean;
6
6
  trigger?: 'hover' | 'click';
7
7
  menu?: MenuProps;
@@ -9,5 +9,5 @@ interface Props extends React.ComponentPropsWithoutRef<'div'> {
9
9
  }
10
10
  declare const Dropdown: ({ children, menu, trigger, open: _open, onOpenChange: _onOpenChange, className, onMouseEnter, onMouseLeave, ...props }: Props) => import("react").JSX.Element;
11
11
  //#endregion
12
- export { Props, Dropdown as default };
13
- //# sourceMappingURL=dropdown.d.mts.map
12
+ export { Dropdown as default };
13
+ //# sourceMappingURL=Dropdown.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dropdown.d.mts","names":[],"sources":["../src/components/molecules/dropdown.tsx"],"mappings":";;KAYK,sBAAsB;iBAEV,cAAc,MAAM;EACnC;EACA;EACA,OAAO;EACP,eAAe;;cAGX,aAAY,UAAA,MAAA,SAAA,MAAA,OAAA,cAAA,eAAA,WAAA,cAAA,iBAAA,SAUf,0BAAK,IAAA"}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
- import { cn } from "../../utils.mjs";
3
- import "../../lib/z-layers.mjs";
4
- import Menu from "./menu/menu.mjs";
2
+ import { cn } from "./utils.mjs";
3
+ import "./lib/z-layers.mjs";
4
+ import Menu from "./components/molecules/menu/menu.mjs";
5
5
  import { useId, useRef } from "react";
6
6
  import { useControllableState, useKeyPress } from "@jbpark/use-hooks";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -88,4 +88,4 @@ const Dropdown = ({ children, menu, trigger = "hover", open: _open, onOpenChange
88
88
  //#endregion
89
89
  export { Dropdown as default };
90
90
 
91
- //# sourceMappingURL=dropdown.mjs.map
91
+ //# sourceMappingURL=Dropdown.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dropdown.mjs","names":[],"sources":["../src/components/molecules/dropdown.tsx"],"sourcesContent":["'use client';\n\nimport { useId, useRef } from 'react';\n\nimport { useControllableState, useKeyPress } from '@jbpark/use-hooks';\nimport { AnimatePresence, motion } from 'motion/react';\n\nimport { cn } from '@repo/ui/utils';\n\nimport { OVERLAY_LAYER } from '../../lib/z-layers';\nimport Menu, { MenuProps } from './menu';\n\ntype ChangeEventHandler = (open: boolean) => void;\n\nexport interface Props extends React.ComponentPropsWithoutRef<'div'> {\n open?: boolean;\n trigger?: 'hover' | 'click';\n menu?: MenuProps;\n onOpenChange?: ChangeEventHandler;\n}\n\nconst Dropdown = ({\n children,\n menu,\n trigger = 'hover',\n open: _open,\n onOpenChange: _onOpenChange = () => {},\n className,\n onMouseEnter,\n onMouseLeave,\n ...props\n}: Props) => {\n const [open, onOpenChange] = useControllableState<boolean>({\n value: _open,\n defaultValue: false,\n onChange: _onOpenChange,\n });\n\n const isClickTrigger = trigger === 'click';\n const menuId = useId();\n const containerRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n\n useKeyPress(\n 'esc',\n () => {\n onOpenChange(false);\n },\n { target: triggerRef },\n );\n\n useKeyPress(\n ['Enter', 'space'],\n event => {\n event.preventDefault();\n onOpenChange(!open);\n },\n { target: triggerRef, enabled: isClickTrigger },\n );\n\n return (\n <div\n {...props}\n ref={containerRef}\n className={cn(\n 'relative',\n 'inline-block cursor-pointer',\n className,\n //\n )}\n onMouseEnter={event => {\n onMouseEnter?.(event);\n if (isClickTrigger) {\n return;\n }\n onOpenChange(true);\n }}\n onMouseLeave={event => {\n onMouseLeave?.(event);\n if (isClickTrigger) {\n return;\n }\n onOpenChange(false);\n }}\n >\n <div\n ref={triggerRef}\n role={isClickTrigger ? 'button' : undefined}\n tabIndex={isClickTrigger ? 0 : undefined}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-controls={open ? menuId : undefined}\n onClick={() => {\n if (!isClickTrigger) {\n return;\n }\n onOpenChange(!open);\n }}\n onFocus={() => {\n if (isClickTrigger) {\n return;\n }\n onOpenChange(true);\n }}\n onBlur={e => {\n // Without this check, moving focus from the trigger into the\n // menu itself (e.g. via Tab) closed the dropdown before the\n // user could ever reach it — the mouse path avoided the same\n // bug only by way of onMouseDown's preventDefault below, which\n // does nothing for keyboard focus. Mirrors the containment\n // check menu/item/item.tsx already uses for the same reason.\n if (!containerRef.current?.contains(e.relatedTarget as Node)) {\n onOpenChange(false);\n }\n }}\n >\n {children}\n </div>\n <AnimatePresence>\n {open && (\n <motion.div\n className={cn(\n 'absolute top-full pt-2',\n OVERLAY_LAYER,\n //\n )}\n initial={{ opacity: 0, y: -10 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -10 }}\n transition={{ duration: 0.1 }}\n >\n <Menu\n {...menu}\n id={menuId}\n onMouseDown={e => {\n e.preventDefault();\n }}\n />\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n};\n\nexport default Dropdown;\n"],"mappings":";;;;;;;;;AAqBA,MAAM,YAAY,EAChB,UACA,MACA,UAAU,SACV,MAAM,OACN,cAAc,sBAAsB,CAAC,GACrC,WACA,cACA,cACA,GAAG,YACQ;CACX,MAAM,CAAC,MAAM,gBAAgB,qBAA8B;EACzD,OAAO;EACP,cAAc;EACd,UAAU;CACZ,CAAC;CAED,MAAM,iBAAiB,YAAY;CACnC,MAAM,SAAS,MAAM;CACrB,MAAM,eAAe,OAAuB,IAAI;CAChD,MAAM,aAAa,OAAuB,IAAI;CAE9C,YACE,aACM;EACJ,aAAa,KAAK;CACpB,GACA,EAAE,QAAQ,WAAW,CACvB;CAEA,YACE,CAAC,SAAS,OAAO,IACjB,UAAS;EACP,MAAM,eAAe;EACrB,aAAa,CAAC,IAAI;CACpB,GACA;EAAE,QAAQ;EAAY,SAAS;CAAe,CAChD;CAEA,OACE,qBAAC,OAAD;EACE,GAAI;EACJ,KAAK;EACL,WAAW,GACT,YACA,+BACA,SAEF;EACA,eAAc,UAAS;GACrB,eAAe,KAAK;GACpB,IAAI,gBACF;GAEF,aAAa,IAAI;EACnB;EACA,eAAc,UAAS;GACrB,eAAe,KAAK;GACpB,IAAI,gBACF;GAEF,aAAa,KAAK;EACpB;EAtBF,UAAA,CAwBE,oBAAC,OAAD;GACE,KAAK;GACL,MAAM,iBAAiB,WAAW,KAAA;GAClC,UAAU,iBAAiB,IAAI,KAAA;GAC/B,iBAAc;GACd,iBAAe;GACf,iBAAe,OAAO,SAAS,KAAA;GAC/B,eAAe;IACb,IAAI,CAAC,gBACH;IAEF,aAAa,CAAC,IAAI;GACpB;GACA,eAAe;IACb,IAAI,gBACF;IAEF,aAAa,IAAI;GACnB;GACA,SAAQ,MAAK;IAOX,IAAI,CAAC,aAAa,SAAS,SAAS,EAAE,aAAqB,GACzD,aAAa,KAAK;GAEtB;GAEC;EACE,CAAA,GACL,oBAAC,iBAAD,EAAA,UACG,QACC,oBAAC,OAAO,KAAR;GACE,WAAW,GACT,0BAAA,QAGF;GACA,SAAS;IAAE,SAAS;IAAG,GAAG;GAAI;GAC9B,SAAS;IAAE,SAAS;IAAG,GAAG;GAAE;GAC5B,MAAM;IAAE,SAAS;IAAG,GAAG;GAAI;GAC3B,YAAY,EAAE,UAAU,GAAI;GAE5B,UAAA,oBAAC,MAAD;IACE,GAAI;IACJ,IAAI;IACJ,cAAa,MAAK;KAChB,EAAE,eAAe;IACnB;GACD,CAAA;EACS,CAAA,EAEC,CAAA,CACd;;AAET"}
@@ -1,5 +1,5 @@
1
- //#region src/components/templates/empty.d.ts
2
- interface Props extends Omit<React.ComponentProps<'div'>, 'title'> {
1
+ //#region src/components/molecules/empty.d.ts
2
+ export interface Props extends Omit<React.ComponentProps<'div'>, 'title'> {
3
3
  icon?: React.ReactNode;
4
4
  title?: React.ReactNode;
5
5
  description?: React.ReactNode;
@@ -7,5 +7,5 @@ interface Props extends Omit<React.ComponentProps<'div'>, 'title'> {
7
7
  }
8
8
  declare const Empty: ({ icon, title, description, action, className, ...props }: Props) => import("react").JSX.Element;
9
9
  //#endregion
10
- export { Props, Empty as default };
11
- //# sourceMappingURL=empty.d.mts.map
10
+ export { Empty as default };
11
+ //# sourceMappingURL=Empty.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Empty.d.mts","names":[],"sources":["../src/components/molecules/empty.tsx"],"mappings":";iBAIiB,cAAc,KAAK,MAAM;EACxC,OAAO,MAAM;EACb,QAAQ,MAAM;EACd,cAAc,MAAM;EACpB,SAAS,MAAM;;cAQX,UAAS,MAAA,OAAA,aAAA,QAAA,cAAA,SAOZ,0BAAK,IAAA"}
@@ -1,7 +1,7 @@
1
- import { cn } from "../../utils.mjs";
2
- import { Inbox } from "lucide-react";
1
+ import { cn } from "./utils.mjs";
3
2
  import { jsx, jsxs } from "react/jsx-runtime";
4
- //#region src/components/templates/empty.tsx
3
+ import { Inbox } from "lucide-react";
4
+ //#region src/components/molecules/empty.tsx
5
5
  const Empty = ({ icon, title, description = "No data", action, className, ...props }) => {
6
6
  return /* @__PURE__ */ jsxs("div", {
7
7
  "data-slot": "empty",
@@ -31,4 +31,4 @@ const Empty = ({ icon, title, description = "No data", action, className, ...pro
31
31
  //#endregion
32
32
  export { Empty as default };
33
33
 
34
- //# sourceMappingURL=empty.mjs.map
34
+ //# sourceMappingURL=Empty.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Empty.mjs","names":[],"sources":["../src/components/molecules/empty.tsx"],"sourcesContent":["import { Inbox } from 'lucide-react';\n\nimport { cn } from '@repo/ui/utils';\n\nexport interface Props extends Omit<React.ComponentProps<'div'>, 'title'> {\n icon?: React.ReactNode;\n title?: React.ReactNode;\n description?: React.ReactNode;\n action?: React.ReactNode;\n}\n\n// The counterpart List's `empty` prop was asking for — List/Upload/Swiper\n// each render arbitrary content for their empty state today with nothing\n// in the library actually meant to go there. Pairs with Skeleton the same\n// way Skeleton pairs with real content: one placeholder for \"nothing\n// loaded yet\", one for \"loaded, and there's nothing\".\nconst Empty = ({\n icon,\n title,\n description = 'No data',\n action,\n className,\n ...props\n}: Props) => {\n return (\n <div\n data-slot=\"empty\"\n role=\"status\"\n className={cn(\n 'flex flex-col items-center justify-center gap-3 py-12 text-center',\n className,\n //\n )}\n {...props}\n >\n <div className=\"text-muted-foreground [&_svg]:size-12\">\n {icon ?? <Inbox />}\n </div>\n {title && <p className=\"text-sm font-medium\">{title}</p>}\n {description && (\n <p className=\"text-muted-foreground text-sm\">{description}</p>\n )}\n {action && <div className=\"mt-1\">{action}</div>}\n </div>\n );\n};\n\nexport default Empty;\n"],"mappings":";;;;AAgBA,MAAM,SAAS,EACb,MACA,OACA,cAAc,WACd,QACA,WACA,GAAG,YACQ;CACX,OACE,qBAAC,OAAD;EACE,aAAU;EACV,MAAK;EACL,WAAW,GACT,qEACA,SAEF;EACA,GAAI;EARN,UAAA;GAUE,oBAAC,OAAD;IAAK,WAAU;IACZ,UAAA,QAAQ,oBAAC,OAAD,CAAQ,CAAA;GACd,CAAA;GACJ,SAAS,oBAAC,KAAD;IAAG,WAAU;IAAuB,UAAA;GAAS,CAAA;GACtD,eACC,oBAAC,KAAD;IAAG,WAAU;IAAiC,UAAA;GAAe,CAAA;GAE9D,UAAU,oBAAC,OAAD;IAAK,WAAU;IAAQ,UAAA;GAAY,CAAA;EAC3C;;AAET"}
@@ -0,0 +1,10 @@
1
+ import BackTop from "./components/atoms/float-button/back-top.mjs";
2
+ import FloatButton$1, { Props } from "./components/atoms/float-button/float-button.mjs";
3
+ //#region src/components/atoms/float-button/index.d.ts
4
+ type FloatButtonComponent = typeof FloatButton$1 & {
5
+ BackTop: typeof BackTop;
6
+ };
7
+ declare const FloatButton: FloatButtonComponent;
8
+ //#endregion
9
+ export { type Props, FloatButton as default };
10
+ //# sourceMappingURL=FloatButton.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FloatButton.d.mts","names":["FloatButtonImpl"],"sources":["../src/components/atoms/float-button/index.ts"],"mappings":";;;KAGK,8BAA8BA;EACjC,gBAAgB;;cAGZ,aAAiC"}