@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 @@
1
+ {"version":3,"file":"Modal.mjs","names":["dialog"],"sources":["../src/components/organisms/modal.tsx"],"sourcesContent":["'use client';\n\nimport React, { useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport {\n Check,\n CircleQuestionMark,\n Info,\n OctagonAlert,\n OctagonX,\n} from 'lucide-react';\n\nimport { DEFAULT_LOCALE, useConfig } from '@repo/ui/providers';\nimport { cn } from '@repo/ui/utils';\n\nimport { dialog } from '../../core';\nimport Button from '../atoms/button';\nimport {\n type ImperativeStack,\n createImperativeStack,\n isBrowser,\n} from './imperative-stack';\n\nconst {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} = dialog;\n\nexport interface Props {\n open?: boolean;\n maskClosable?: boolean;\n closable?:\n | boolean\n | {\n closeIcon?: React.ReactNode;\n disabled?: boolean;\n };\n closeIcon?: React.ReactNode;\n title?: React.ReactNode;\n content?: React.ReactNode;\n footer?: React.ReactNode;\n className?: string;\n classNames?: {\n mask?: string;\n header?: string;\n body?: string;\n footer?: string;\n };\n style?: React.CSSProperties;\n okText?: string;\n cancelText?: string;\n container?: HTMLElement;\n children?: React.ReactNode;\n onOk?: () => void;\n onCancel?: () => void;\n /** Called after the opening or closing animations finish. */\n onOpenChangeComplete?: (open: boolean) => void;\n}\n\ntype ModalStatus = 'info' | 'success' | 'error' | 'warning';\n\ninterface StaticProps extends Props {\n status?: ModalStatus;\n /**\n * Interaction mode set by `Modal.confirm()` to request the two-button\n * footer. `confirm` is a mode, not a status, so it rides its own axis rather\n * than `status` — call `Modal.confirm()` rather than setting this directly.\n */\n mode?: 'confirm';\n id?: string;\n icon?: React.ReactNode;\n container?: HTMLElement;\n}\n\nconst Modal = ({\n open = false,\n maskClosable,\n closable = false,\n closeIcon,\n className,\n classNames,\n style,\n title,\n content,\n footer,\n container,\n children,\n okText,\n cancelText,\n onOk,\n onCancel,\n onOpenChangeComplete,\n ...props\n}: Props) => {\n const { locale, defaultProps } = useConfig();\n const modalDefaults = defaultProps?.modal as\n Partial<Pick<Props, 'maskClosable'>> | undefined;\n // Explicit prop > `Config` default > built-in, matching Button/Tag.\n const resolvedMaskClosable =\n maskClosable ?? modalDefaults?.maskClosable ?? false;\n\n if (typeof window === 'undefined') {\n return null;\n }\n\n return (\n <Dialog\n open={open}\n onOpenChangeComplete={onOpenChangeComplete}\n onOpenChange={(open: boolean) => {\n if (!open) {\n onCancel?.();\n }\n }}\n // antd's `maskClosable` is a root-level dismissal concern in Base UI:\n // blocking the outside (mask) press keeps the dialog open on backdrop\n // click while Escape still closes it, matching the previous behaviour.\n disablePointerDismissal={!resolvedMaskClosable}\n {...props}\n >\n <DialogContent\n className={cn(\n 'rounded-lg p-4 max-sm:max-w-[80%]',\n 'border-none outline-none',\n className,\n )}\n classNames={{\n ...classNames,\n mask: cn('bg-black/60', classNames?.mask),\n }}\n style={style}\n closable={closable}\n closeIcon={closeIcon}\n container={container}\n >\n {/**\n * @todo [Dialog & AlertDialog] fix: can't get id correctly in shadow dom\n *\n * Filed while `core/dialog` was still Radix-based; the linked fix is\n * Radix's, and the repo no longer depends on it. Revalidate against\n * Base UI's Dialog before acting on this — the bug may already be gone.\n * @see https://github.com/radix-ui/primitives/pull/3384\n **/}\n <DialogHeader\n className={cn(\n classNames?.header,\n !title && 'hidden',\n //\n )}\n >\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription className=\"hidden\" />\n </DialogHeader>\n <div className={cn('break-all', classNames?.body)}>\n {children ?? content}\n </div>\n {footer !== null && (\n <DialogFooter\n className={cn('flex-row justify-end gap-x-2', classNames?.footer)}\n >\n {footer || (\n <>\n <Button variant=\"outlined\" onClick={onCancel}>\n {cancelText ?? locale.cancel ?? DEFAULT_LOCALE.cancel}\n </Button>\n <Button type=\"primary\" onClick={onOk}>\n {okText ?? locale.ok ?? DEFAULT_LOCALE.ok}\n </Button>\n </>\n )}\n </DialogFooter>\n )}\n </DialogContent>\n </Dialog>\n );\n};\n\nconst STATIC_ICONS = {\n info: <Info className=\"text-blue-400\" />,\n success: <Check className=\"text-green-400\" />,\n error: <OctagonX className=\"text-red-400\" />,\n warning: <OctagonAlert className=\"text-yellow-400\" />,\n confirm: <CircleQuestionMark />,\n};\n\nconst StaticModal = ({\n id,\n status,\n mode,\n title,\n content,\n okText,\n cancelText,\n container,\n icon,\n onOk,\n onCancel,\n onOpenChangeComplete,\n ...props\n}: StaticProps & { id: string }): React.ReactPortal | null => {\n const { locale } = useConfig();\n const [open, setOpen] = useState(true);\n const closing = useRef(false);\n const resolvedOkText = okText ?? locale.ok ?? DEFAULT_LOCALE.ok;\n const resolvedCancelText =\n cancelText ?? locale.cancel ?? DEFAULT_LOCALE.cancel;\n // `confirm` is an interaction mode (two-button footer), not a status; the\n // semantic state comes from `status`.\n const isConfirm = mode === 'confirm';\n\n const closeModal = (callback?: () => void) => {\n if (closing.current) {\n return;\n }\n\n closing.current = true;\n setOpen(false);\n callback?.();\n };\n\n const footer = isConfirm ? (\n <div className=\"grid w-full grid-cols-5 gap-x-2\">\n <Button\n variant=\"outlined\"\n className=\"col-span-2\"\n onClick={() => closeModal(onCancel)}\n >\n {resolvedCancelText}\n </Button>\n <Button\n type=\"primary\"\n className=\"col-span-3\"\n onClick={() => closeModal(onOk)}\n >\n {resolvedOkText}\n </Button>\n </div>\n ) : (\n <Button\n type=\"primary\"\n className={cn(\n 'grow',\n //\n )}\n onClick={() => closeModal(onOk)}\n >\n {resolvedOkText}\n </Button>\n );\n\n if (!isBrowser) {\n return null;\n }\n\n return createPortal(\n <Modal\n open={open}\n footer={footer}\n className={cn(\n 'z-10000',\n 'box-content w-100',\n 'rounded-3xl p-4',\n 'gap-y-0',\n )}\n classNames={{\n mask: 'z-10000 bg-black/[.6]',\n body: cn(\n 'text-black-70 whitespace-pre-wrap text-center',\n content && 'mt-3',\n ),\n footer: 'mt-9',\n }}\n title={\n <p\n className={cn(\n 'text-center text-lg leading-normal whitespace-pre-wrap',\n 'flex items-center justify-center gap-x-2',\n //\n )}\n >\n {icon ||\n (isConfirm ? STATIC_ICONS.confirm : status && STATIC_ICONS[status])}\n {title}\n </p>\n }\n container={container}\n onCancel={() => closeModal(onCancel)}\n {...props}\n onOpenChangeComplete={open => {\n if (!open) {\n modalStack.destroy(id);\n }\n\n onOpenChangeComplete?.(open);\n }}\n >\n {content}\n </Modal>,\n modalStack.getRootElement(container)!,\n );\n};\n\n// No `role`/`aria-modal` here — this element is only a mount point for the\n// imperative stack, not the dialog itself. Base UI already renders its own\n// `role=\"dialog\"`/`aria-modal=\"true\"` on the actual `DialogContent` via\n// portal once a modal is open. Setting it here as well would (a) leave\n// `aria-modal=\"true\"` on the page permanently, even with zero modals open,\n// hiding the rest of the document from screen readers, and (b) duplicate\n// Base UI's own dialog role once one is open.\nconst modalStack: ImperativeStack<StaticProps> =\n createImperativeStack<StaticProps>({\n createRootElement: () => {\n const el = document.createElement('div');\n el.style.zIndex = '10000';\n el.style.position = 'absolute';\n return el;\n },\n StackItem: StaticModal,\n });\n\n/** Immediately removes a modal without waiting for its closing animation. */\nModal.destroy = modalStack.destroy;\n\n/** Immediately removes all modals, including those currently closing. */\nModal.destroyAll = () => {\n modalStack.destroy();\n};\n\nModal.info = (props: StaticProps) =>\n modalStack.render({ status: 'info', ...props });\nModal.success = (props: StaticProps) =>\n modalStack.render({ status: 'success', ...props });\nModal.error = (props: StaticProps) =>\n modalStack.render({ status: 'error', ...props });\nModal.warning = (props: StaticProps) =>\n modalStack.render({ status: 'warning', ...props });\n// `confirm` is a mode, not a status, so it rides its own `mode` axis rather\n// than `status`.\nModal.confirm = (props: StaticProps) =>\n modalStack.render({ mode: 'confirm', ...props });\n\nexport default Modal;\n"],"mappings":";;;;;;;;;;;AAwBA,MAAM,EACJ,QACA,eACA,mBACA,cACA,cACA,gBACEA;AAgDJ,MAAM,SAAS,EACb,OAAO,OACP,cACA,WAAW,OACX,WACA,WACA,YACA,OACA,OACA,SACA,QACA,WACA,UACA,QACA,YACA,MACA,UACA,sBACA,GAAG,YACQ;CACX,MAAM,EAAE,QAAQ,iBAAiB,UAAU;CAC3C,MAAM,gBAAgB,cAAc;CAGpC,MAAM,uBACJ,gBAAgB,eAAe,gBAAgB;CAEjD,IAAI,OAAO,WAAW,aACpB,OAAO;CAGT,OACE,oBAAC,QAAD;EACQ;EACgB;EACtB,eAAe,SAAkB;GAC/B,IAAI,CAAC,MACH,WAAW;EAEf;EAIA,yBAAyB,CAAC;EAC1B,GAAI;EAEJ,UAAA,qBAAC,eAAD;GACE,WAAW,GACT,qCACA,4BACA,SACF;GACA,YAAY;IACV,GAAG;IACH,MAAM,GAAG,eAAe,YAAY,IAAI;GAC1C;GACO;GACG;GACC;GACA;GAbb,UAAA;IAuBE,qBAAC,cAAD;KACE,WAAW,GACT,YAAY,QACZ,CAAC,SAAS,QAEZ;KALF,UAAA,CAOE,oBAAC,aAAD,EAAA,UAAc,MAAmB,CAAA,GACjC,oBAAC,mBAAD,EAAmB,WAAU,SAAU,CAAA,CAC3B;;IACd,oBAAC,OAAD;KAAK,WAAW,GAAG,aAAa,YAAY,IAAI;KAC7C,UAAA,YAAY;IACV,CAAA;IACJ,WAAW,QACV,oBAAC,cAAD;KACE,WAAW,GAAG,gCAAgC,YAAY,MAAM;KAE/D,UAAA,UACC,qBAAA,YAAA,EAAA,UAAA,CACE,oBAAC,QAAD;MAAQ,SAAQ;MAAW,SAAS;MACjC,UAAA,cAAc,OAAO,UAAU,eAAe;KACzC,CAAA,GACR,oBAAC,QAAD;MAAQ,MAAK;MAAU,SAAS;MAC7B,UAAA,UAAU,OAAO,MAAM,eAAe;KACjC,CAAA,CACR,EAAA,CAAA;IAEQ,CAAA;GAEH;;CACT,CAAA;AAEZ;AAEA,MAAM,eAAe;CACnB,MAAM,oBAAC,MAAD,EAAM,WAAU,gBAAiB,CAAA;CACvC,SAAS,oBAAC,OAAD,EAAO,WAAU,iBAAkB,CAAA;CAC5C,OAAO,oBAAC,UAAD,EAAU,WAAU,eAAgB,CAAA;CAC3C,SAAS,oBAAC,cAAD,EAAc,WAAU,kBAAmB,CAAA;CACpD,SAAS,oBAAC,oBAAD,CAAqB,CAAA;AAChC;AAEA,MAAM,eAAe,EACnB,IACA,QACA,MACA,OACA,SACA,QACA,YACA,WACA,MACA,MACA,UACA,sBACA,GAAG,YACyD;CAC5D,MAAM,EAAE,WAAW,UAAU;CAC7B,MAAM,CAAC,MAAM,WAAW,SAAS,IAAI;CACrC,MAAM,UAAU,OAAO,KAAK;CAC5B,MAAM,iBAAiB,UAAU,OAAO,MAAM,eAAe;CAC7D,MAAM,qBACJ,cAAc,OAAO,UAAU,eAAe;CAGhD,MAAM,YAAY,SAAS;CAE3B,MAAM,cAAc,aAA0B;EAC5C,IAAI,QAAQ,SACV;EAGF,QAAQ,UAAU;EAClB,QAAQ,KAAK;EACb,WAAW;CACb;CAEA,MAAM,SAAS,YACb,qBAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACE,oBAAC,QAAD;GACE,SAAQ;GACR,WAAU;GACV,eAAe,WAAW,QAAQ;GAEjC,UAAA;EACK,CAAA,GACR,oBAAC,QAAD;GACE,MAAK;GACL,WAAU;GACV,eAAe,WAAW,IAAI;GAE7B,UAAA;EACK,CAAA,CACL;CAEL,CAAA,IAAA,oBAAC,QAAD;EACE,MAAK;EACL,WAAW,GACT,MAEF;EACA,eAAe,WAAW,IAAI;EAE7B,UAAA;CACK,CAAA;CAGV,IAAI,CAAC,WACH,OAAO;CAGT,OAAO,aACL,oBAAC,OAAD;EACQ;EACE;EACR,WAAW,GACT,WACA,qBACA,mBACA,SACF;EACA,YAAY;GACV,MAAM;GACN,MAAM,GACJ,iDACA,WAAW,MACb;GACA,QAAQ;EACV;EACA,OACE,qBAAC,KAAD;GACE,WAAW,GACT,0DACA,0CAEF;GALF,UAAA,CAOG,SACE,YAAY,aAAa,UAAU,UAAU,aAAa,UAC5D,KACA;;EAEM;EACX,gBAAgB,WAAW,QAAQ;EACnC,GAAI;EACJ,uBAAsB,SAAQ;GAC5B,IAAI,CAAC,MACH,WAAW,QAAQ,EAAE;GAGvB,uBAAuB,IAAI;EAC7B;EAEC,UAAA;CACI,CAAA,GACP,WAAW,eAAe,SAAS,CACrC;AACF;AASA,MAAM,aACJ,sBAAmC;CACjC,yBAAyB;EACvB,MAAM,KAAK,SAAS,cAAc,KAAK;EACvC,GAAG,MAAM,SAAS;EAClB,GAAG,MAAM,WAAW;EACpB,OAAO;CACT;CACA,WAAW;AACb,CAAC;;AAGH,MAAM,UAAU,WAAW;;AAG3B,MAAM,mBAAmB;CACvB,WAAW,QAAQ;AACrB;AAEA,MAAM,QAAQ,UACZ,WAAW,OAAO;CAAE,QAAQ;CAAQ,GAAG;AAAM,CAAC;AAChD,MAAM,WAAW,UACf,WAAW,OAAO;CAAE,QAAQ;CAAW,GAAG;AAAM,CAAC;AACnD,MAAM,SAAS,UACb,WAAW,OAAO;CAAE,QAAQ;CAAS,GAAG;AAAM,CAAC;AACjD,MAAM,WAAW,UACf,WAAW,OAAO;CAAE,QAAQ;CAAW,GAAG;AAAM,CAAC;AAGnD,MAAM,WAAW,UACf,WAAW,OAAO;CAAE,MAAM;CAAW,GAAG;AAAM,CAAC"}
@@ -1,5 +1,5 @@
1
1
  //#region src/components/templates/page-header.d.ts
2
- interface Props extends Omit<React.ComponentProps<'div'>, 'title'> {
2
+ export interface Props extends Omit<React.ComponentProps<'div'>, 'title'> {
3
3
  title?: React.ReactNode;
4
4
  subTitle?: React.ReactNode;
5
5
  extra?: React.ReactNode;
@@ -14,5 +14,5 @@ interface Props extends Omit<React.ComponentProps<'div'>, 'title'> {
14
14
  }
15
15
  declare const PageHeader: ({ title, subTitle, extra, backIcon, onBack, className, classNames, children, ...props }: Props) => import("react").JSX.Element;
16
16
  //#endregion
17
- export { Props, PageHeader as default };
18
- //# sourceMappingURL=page-header.d.mts.map
17
+ export { PageHeader as default };
18
+ //# sourceMappingURL=PageHeader.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PageHeader.d.mts","names":[],"sources":["../src/components/templates/page-header.tsx"],"mappings":";iBASiB,cAAc,KAAK,MAAM;EACxC,QAAQ,MAAM;EACd,WAAW,MAAM;EACjB,QAAQ,MAAM;EACd,WAAW,MAAM;EACjB;EACA;IACE;IACA;IACA;IACA;;;cAOE,eAAc,OAAA,UAAA,OAAA,UAAA,QAAA,WAAA,YAAA,aAAA,SAUjB,0BAAK,IAAA"}
@@ -1,9 +1,9 @@
1
1
  "use client";
2
- import { cn } from "../../utils.mjs";
3
- import { DEFAULT_LOCALE, useConfig } from "../../providers/config/context.mjs";
4
- import Button from "../../Button.mjs";
5
- import { ArrowLeft } 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";
6
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
+ import { ArrowLeft } from "lucide-react";
7
7
  //#region src/components/templates/page-header.tsx
8
8
  const PageHeader = ({ title, subTitle, extra, backIcon, onBack, className, classNames, children, ...props }) => {
9
9
  const { locale } = useConfig();
@@ -43,4 +43,4 @@ const PageHeader = ({ title, subTitle, extra, backIcon, onBack, className, class
43
43
  //#endregion
44
44
  export { PageHeader as default };
45
45
 
46
- //# sourceMappingURL=page-header.mjs.map
46
+ //# sourceMappingURL=PageHeader.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PageHeader.mjs","names":[],"sources":["../src/components/templates/page-header.tsx"],"sourcesContent":["'use client';\n\nimport { ArrowLeft } from 'lucide-react';\n\nimport { DEFAULT_LOCALE, useConfig } from '@repo/ui/providers';\nimport { cn } from '@repo/ui/utils';\n\nimport Button from '../atoms/button';\n\nexport interface Props extends Omit<React.ComponentProps<'div'>, 'title'> {\n title?: React.ReactNode;\n subTitle?: React.ReactNode;\n extra?: React.ReactNode;\n backIcon?: React.ReactNode;\n onBack?: () => void;\n classNames?: {\n back?: string;\n title?: string;\n subTitle?: string;\n extra?: string;\n };\n}\n\n// Title + back button + extra action area — same shape as Drawer's header\n// (title/extra/closable), which this borrows the layout from wholesale;\n// PageHeader just swaps Drawer's close button for a back button.\nconst PageHeader = ({\n title,\n subTitle,\n extra,\n backIcon,\n onBack,\n className,\n classNames,\n children,\n ...props\n}: Props) => {\n const { locale } = useConfig();\n\n return (\n <div\n data-slot=\"page-header\"\n className={cn('flex flex-col gap-2', className)}\n {...props}\n >\n <div className=\"flex items-start gap-2\">\n {onBack && (\n <Button\n variant=\"text\"\n shape=\"circle\"\n size=\"small\"\n aria-label={locale.back ?? DEFAULT_LOCALE.back}\n icon={backIcon || <ArrowLeft />}\n onClick={onBack}\n className={cn(classNames?.back)}\n />\n )}\n <div className=\"flex flex-1 items-start justify-between gap-2\">\n <div className=\"flex flex-col gap-0.5\">\n {title && (\n <p className={cn('text-lg font-medium', classNames?.title)}>\n {title}\n </p>\n )}\n {subTitle && (\n <p\n className={cn(\n 'text-muted-foreground text-sm',\n classNames?.subTitle,\n )}\n >\n {subTitle}\n </p>\n )}\n </div>\n {extra != null && (\n <div className={cn('shrink-0', classNames?.extra)}>{extra}</div>\n )}\n </div>\n </div>\n {children}\n </div>\n );\n};\n\nexport default PageHeader;\n"],"mappings":";;;;;;;AA0BA,MAAM,cAAc,EAClB,OACA,UACA,OACA,UACA,QACA,WACA,YACA,UACA,GAAG,YACQ;CACX,MAAM,EAAE,WAAW,UAAU;CAE7B,OACE,qBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,uBAAuB,SAAS;EAC9C,GAAI;EAHN,UAAA,CAKE,qBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACG,UACC,oBAAC,QAAD;IACE,SAAQ;IACR,OAAM;IACN,MAAK;IACL,cAAY,OAAO,QAAQ,eAAe;IAC1C,MAAM,YAAY,oBAAC,WAAD,CAAY,CAAA;IAC9B,SAAS;IACT,WAAW,GAAG,YAAY,IAAI;GAC/B,CAAA,GAEH,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,qBAAC,OAAD;KAAK,WAAU;KAAf,UAAA,CACG,SACC,oBAAC,KAAD;MAAG,WAAW,GAAG,uBAAuB,YAAY,KAAK;MACtD,UAAA;KACA,CAAA,GAEJ,YACC,oBAAC,KAAD;MACE,WAAW,GACT,iCACA,YAAY,QACd;MAEC,UAAA;KACA,CAAA,CAEF;IACJ,CAAA,GAAA,SAAS,QACR,oBAAC,OAAD;KAAK,WAAW,GAAG,YAAY,YAAY,KAAK;KAAI,UAAA;IAAW,CAAA,CAE9D;GACF,CAAA,CAAA;EACJ,CAAA,GAAA,QACE;;AAET"}
@@ -1,5 +1,5 @@
1
1
  //#region src/components/molecules/pagination.d.ts
2
- interface Props extends Omit<React.ComponentPropsWithoutRef<'nav'>, 'children' | 'onChange'> {
2
+ export interface Props extends Omit<React.ComponentPropsWithoutRef<'nav'>, 'children' | 'onChange'> {
3
3
  /** Total number of items, not pages. */
4
4
  total: number;
5
5
  /** Controlled number of items per page. */
@@ -49,5 +49,5 @@ interface Props extends Omit<React.ComponentPropsWithoutRef<'nav'>, 'children' |
49
49
  }
50
50
  declare const Pagination: ({ total, pageSize, defaultPageSize, onPageSizeChange, pageSizeOptions, showSizeChanger, showTotal, showQuickJumper, page, defaultPage, onChange, siblingCount, boundaryCount, showFirstLast, hideOnSinglePage, getPageHref, disabled, size, labels, className, classNames, "aria-label": ariaLabel, ...props }: Props) => import("react").JSX.Element | null;
51
51
  //#endregion
52
- export { Props, Pagination as default };
52
+ export { Pagination as default };
53
53
  //# sourceMappingURL=Pagination.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Pagination.d.mts","names":[],"sources":["../src/components/molecules/pagination.tsx"],"mappings":";UAoBiB,cAAc,KAC7B,MAAM;;EAIN;;EAEA;EACA;EACA,oBAAoB;EACpB;EACA;;EAEA,aAAa,eAAe,4BAA4B,MAAM;EAC9D;;EAEA;EACA;EACA,YAAY;EACZ;EACA;EACA;EACA;;EAEA,eAAe;EACf;EACA;EACA;IACE;IACA,QAAQ;IACR;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;;cAkEE,eAAc,OAAA,UAAA,iBAAA,kBAAA,iBAAA,iBAAA,WAAA,iBAAA,MAAA,aAAA,UAAA,cAAA,eAAA,eAAA,kBAAA,aAAA,UAAA,MAAA,QAAA,WAAA,0BAAA,cAAA,SAwBjB,0BAAK,IAAA"}
1
+ {"version":3,"file":"Pagination.d.mts","names":[],"sources":["../src/components/molecules/pagination.tsx"],"mappings":";iBAoBiB,cAAc,KAC7B,MAAM;;EAIN;;EAEA;EACA;EACA,oBAAoB;EACpB;EACA;;EAEA,aAAa,eAAe,4BAA4B,MAAM;EAC9D;;EAEA;EACA;EACA,YAAY;EACZ;EACA;EACA;EACA;;EAEA,eAAe;EACf;EACA;EACA;IACE;IACA,QAAQ;IACR;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;;cAkEE,eAAc,OAAA,UAAA,iBAAA,kBAAA,iBAAA,iBAAA,WAAA,iBAAA,MAAA,aAAA,UAAA,cAAA,eAAA,eAAA,kBAAA,aAAA,UAAA,MAAA,QAAA,WAAA,0BAAA,cAAA,SAwBjB,0BAAK,IAAA"}
@@ -2,11 +2,11 @@
2
2
  import { cn } from "./utils.mjs";
3
3
  import { useConfig } from "./providers/config/context.mjs";
4
4
  import Button from "./Button.mjs";
5
- import Input from "./components/atoms/input/index.mjs";
6
- import Select from "./components/atoms/select.mjs";
7
- import { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from "lucide-react";
5
+ import Input from "./Input.mjs";
6
+ import Select from "./Select.mjs";
8
7
  import { useState } from "react";
9
8
  import { jsx, jsxs } from "react/jsx-runtime";
9
+ import { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from "lucide-react";
10
10
  //#region src/components/molecules/pagination.tsx
11
11
  const clampPage = (page, pageCount) => Math.min(Math.max(1, Number.isFinite(page) ? Math.floor(page) : 1), Math.max(1, pageCount));
12
12
  const normalizePageSize = (value) => Number.isFinite(value) && value >= 1 ? Math.floor(value) : 10;
@@ -0,0 +1,33 @@
1
+ import { Props as Props$1 } from "./Button.mjs";
2
+ import { Props as Props$2 } from "./Popover.mjs";
3
+ import * as React$1 from "react";
4
+ //#region src/components/molecules/popconfirm.d.ts
5
+ type ActionProps = Omit<Props$1, 'children' | 'onClick' | 'loading' | 'disabled'>;
6
+ export interface Props extends Omit<Props$2, 'content' | 'title' | 'children'> {
7
+ children: React$1.ReactElement;
8
+ title: React$1.ReactNode;
9
+ description?: React$1.ReactNode;
10
+ /** A fulfilled promise closes the popup; a thrown error keeps it open. */
11
+ onConfirm?: () => void | Promise<void>;
12
+ /** Only the Cancel button invokes this callback. */
13
+ onCancel?: () => void;
14
+ onConfirmError?: (error: unknown) => void;
15
+ errorMessage?: React$1.ReactNode;
16
+ confirmText?: React$1.ReactNode;
17
+ cancelText?: React$1.ReactNode;
18
+ disabled?: boolean;
19
+ confirmButtonProps?: ActionProps;
20
+ cancelButtonProps?: ActionProps;
21
+ classNames?: {
22
+ title?: string;
23
+ description?: string;
24
+ actions?: string;
25
+ confirm?: string;
26
+ cancel?: string;
27
+ error?: string;
28
+ };
29
+ }
30
+ declare const Popconfirm: ({ children, title, description, onConfirm, onCancel, onConfirmError, errorMessage, confirmText, cancelText, disabled, confirmButtonProps, cancelButtonProps, className, classNames, open: controlledOpen, defaultOpen, onOpenChange, ...props }: Props) => React$1.JSX.Element;
31
+ //#endregion
32
+ export { Popconfirm as default };
33
+ //# sourceMappingURL=Popconfirm.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Popconfirm.d.mts","names":["ButtonProps","PopoverProps","React"],"sources":["../src/components/molecules/popconfirm.tsx"],"mappings":";;;;KAYK,cAAc,KACjBA;iBAIe,cAAc,KAC7BC;EAGA,UAAUC,QAAM;EAChB,OAAOA,QAAM;EACb,cAAcA,QAAM;;EAEpB,yBAAyB;;EAEzB;EACA,kBAAkB;EAClB,eAAeA,QAAM;EACrB,cAAcA,QAAM;EACpB,aAAaA,QAAM;EACnB;EACA,qBAAqB;EACrB,oBAAoB;EACpB;IACE;IACA;IACA;IACA;IACA;IACA;;;cAIE,eAAc,UAAA,OAAA,aAAA,WAAA,UAAA,gBAAA,cAAA,aAAA,YAAA,UAAA,oBAAA,mBAAA,WAAA,YAAA,MAAA,gBAAA,aAAA,iBAAA,SAmBjB,UAAKA,QAAA,IAAA"}
@@ -0,0 +1,119 @@
1
+ "use client";
2
+ import { cn } from "./utils.mjs";
3
+ import Button from "./Button.mjs";
4
+ import Typography from "./Typography.mjs";
5
+ import Popover from "./Popover.mjs";
6
+ import * as React$1 from "react";
7
+ import { useControllableState } from "@jbpark/use-hooks";
8
+ import { jsx, jsxs } from "react/jsx-runtime";
9
+ //#region src/components/molecules/popconfirm.tsx
10
+ const Popconfirm = ({ children, title, description, onConfirm, onCancel, onConfirmError, errorMessage = "Unable to complete the action. Please try again.", confirmText = "Confirm", cancelText = "Cancel", disabled = false, confirmButtonProps, cancelButtonProps, className, classNames, open: controlledOpen, defaultOpen, onOpenChange, ...props }) => {
11
+ const [open, setOpen] = useControllableState({
12
+ value: controlledOpen,
13
+ defaultValue: defaultOpen ?? false,
14
+ onChange: onOpenChange
15
+ });
16
+ const [pending, setPending] = React$1.useState(false);
17
+ const [failed, setFailed] = React$1.useState(false);
18
+ const busy = React$1.useRef(false);
19
+ const mounted = React$1.useRef(false);
20
+ const generation = React$1.useRef(0);
21
+ const descriptionId = React$1.useId();
22
+ const titleId = React$1.useId();
23
+ React$1.useEffect(() => {
24
+ mounted.current = true;
25
+ return () => {
26
+ mounted.current = false;
27
+ generation.current += 1;
28
+ };
29
+ }, []);
30
+ React$1.useEffect(() => {
31
+ if (!open || disabled) generation.current += 1;
32
+ }, [open, disabled]);
33
+ const handleOpenChange = (nextOpen) => {
34
+ if (busy.current || disabled && nextOpen) return;
35
+ setFailed(false);
36
+ setOpen(nextOpen);
37
+ };
38
+ const handleConfirm = async () => {
39
+ if (busy.current || disabled) return;
40
+ busy.current = true;
41
+ setPending(true);
42
+ setFailed(false);
43
+ const request = generation.current;
44
+ try {
45
+ await onConfirm?.();
46
+ if (mounted.current && request === generation.current) setOpen(false);
47
+ } catch (error) {
48
+ if (mounted.current && request === generation.current) {
49
+ setFailed(true);
50
+ onConfirmError?.(error);
51
+ }
52
+ } finally {
53
+ busy.current = false;
54
+ if (mounted.current) setPending(false);
55
+ }
56
+ };
57
+ return /* @__PURE__ */ jsx(Popover, {
58
+ ...props,
59
+ open: open && !disabled,
60
+ onOpenChange: handleOpenChange,
61
+ className: cn("max-w-[calc(100vw-2rem)]", className),
62
+ "aria-labelledby": titleId,
63
+ "aria-describedby": description ? descriptionId : void 0,
64
+ content: /* @__PURE__ */ jsxs("div", {
65
+ "data-slot": "popconfirm",
66
+ "aria-busy": pending,
67
+ className: "space-y-3",
68
+ children: [
69
+ /* @__PURE__ */ jsx(Typography.Title, {
70
+ level: 6,
71
+ id: titleId,
72
+ className: classNames?.title,
73
+ children: title
74
+ }),
75
+ description && /* @__PURE__ */ jsx("div", {
76
+ id: descriptionId,
77
+ className: cn("text-muted-foreground text-sm", classNames?.description),
78
+ children: description
79
+ }),
80
+ failed && /* @__PURE__ */ jsx("div", {
81
+ role: "alert",
82
+ className: cn("text-destructive text-sm", classNames?.error),
83
+ children: errorMessage
84
+ }),
85
+ /* @__PURE__ */ jsxs("div", {
86
+ className: cn("flex justify-end gap-2", classNames?.actions),
87
+ children: [/* @__PURE__ */ jsx(Button, {
88
+ size: "small",
89
+ ...cancelButtonProps,
90
+ htmlType: "button",
91
+ disabled: pending,
92
+ className: cn(cancelButtonProps?.className, classNames?.cancel),
93
+ onClick: () => {
94
+ if (busy.current) return;
95
+ setFailed(false);
96
+ setOpen(false);
97
+ onCancel?.();
98
+ },
99
+ children: cancelText
100
+ }), /* @__PURE__ */ jsx(Button, {
101
+ size: "small",
102
+ type: "primary",
103
+ ...confirmButtonProps,
104
+ htmlType: "button",
105
+ loading: pending,
106
+ className: cn(confirmButtonProps?.className, classNames?.confirm),
107
+ onClick: () => void handleConfirm(),
108
+ children: confirmText
109
+ })]
110
+ })
111
+ ]
112
+ }),
113
+ children
114
+ });
115
+ };
116
+ //#endregion
117
+ export { Popconfirm as default };
118
+
119
+ //# sourceMappingURL=Popconfirm.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Popconfirm.mjs","names":["React"],"sources":["../src/components/molecules/popconfirm.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n\nimport { useControllableState } from '@jbpark/use-hooks';\n\nimport { cn } from '@repo/ui/utils';\n\nimport Button, { type Props as ButtonProps } from '../atoms/button';\nimport Popover, { type Props as PopoverProps } from '../atoms/popover';\nimport Typography from '../atoms/typography';\n\ntype ActionProps = Omit<\n ButtonProps,\n 'children' | 'onClick' | 'loading' | 'disabled'\n>;\n\nexport interface Props extends Omit<\n PopoverProps,\n 'content' | 'title' | 'children'\n> {\n children: React.ReactElement;\n title: React.ReactNode;\n description?: React.ReactNode;\n /** A fulfilled promise closes the popup; a thrown error keeps it open. */\n onConfirm?: () => void | Promise<void>;\n /** Only the Cancel button invokes this callback. */\n onCancel?: () => void;\n onConfirmError?: (error: unknown) => void;\n errorMessage?: React.ReactNode;\n confirmText?: React.ReactNode;\n cancelText?: React.ReactNode;\n disabled?: boolean;\n confirmButtonProps?: ActionProps;\n cancelButtonProps?: ActionProps;\n classNames?: {\n title?: string;\n description?: string;\n actions?: string;\n confirm?: string;\n cancel?: string;\n error?: string;\n };\n}\n\nconst Popconfirm = ({\n children,\n title,\n description,\n onConfirm,\n onCancel,\n onConfirmError,\n errorMessage = 'Unable to complete the action. Please try again.',\n confirmText = 'Confirm',\n cancelText = 'Cancel',\n disabled = false,\n confirmButtonProps,\n cancelButtonProps,\n className,\n classNames,\n open: controlledOpen,\n defaultOpen,\n onOpenChange,\n ...props\n}: Props) => {\n const [open, setOpen] = useControllableState<boolean>({\n value: controlledOpen,\n defaultValue: defaultOpen ?? false,\n onChange: onOpenChange,\n });\n const [pending, setPending] = React.useState(false);\n const [failed, setFailed] = React.useState(false);\n const busy = React.useRef(false);\n const mounted = React.useRef(false);\n const generation = React.useRef(0);\n const descriptionId = React.useId();\n const titleId = React.useId();\n\n React.useEffect(() => {\n mounted.current = true;\n\n return () => {\n mounted.current = false;\n generation.current += 1;\n };\n }, []);\n\n React.useEffect(() => {\n if (!open || disabled) {\n generation.current += 1;\n }\n }, [open, disabled]);\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (busy.current || (disabled && nextOpen)) {\n return;\n }\n\n setFailed(false);\n setOpen(nextOpen);\n };\n\n const handleConfirm = async () => {\n if (busy.current || disabled) {\n return;\n }\n\n busy.current = true;\n setPending(true);\n setFailed(false);\n const request = generation.current;\n\n try {\n await onConfirm?.();\n\n if (mounted.current && request === generation.current) {\n setOpen(false);\n }\n } catch (error) {\n if (mounted.current && request === generation.current) {\n setFailed(true);\n onConfirmError?.(error);\n }\n } finally {\n busy.current = false;\n\n if (mounted.current) {\n setPending(false);\n }\n }\n };\n\n return (\n <Popover\n {...props}\n open={open && !disabled}\n onOpenChange={handleOpenChange}\n className={cn(\n 'max-w-[calc(100vw-2rem)]',\n className, //\n )}\n aria-labelledby={titleId}\n aria-describedby={description ? descriptionId : undefined}\n content={\n <div data-slot=\"popconfirm\" aria-busy={pending} className=\"space-y-3\">\n <Typography.Title\n level={6}\n id={titleId}\n className={classNames?.title}\n >\n {title}\n </Typography.Title>\n {description && (\n <div\n id={descriptionId}\n className={cn(\n 'text-muted-foreground text-sm',\n classNames?.description, //\n )}\n >\n {description}\n </div>\n )}\n {failed && (\n <div\n role=\"alert\"\n className={cn(\n 'text-destructive text-sm',\n classNames?.error, //\n )}\n >\n {errorMessage}\n </div>\n )}\n <div\n className={cn(\n 'flex justify-end gap-2',\n classNames?.actions, //\n )}\n >\n <Button\n size=\"small\"\n {...cancelButtonProps}\n htmlType=\"button\"\n disabled={pending}\n className={cn(\n cancelButtonProps?.className,\n classNames?.cancel, //\n )}\n onClick={() => {\n if (busy.current) {\n return;\n }\n\n setFailed(false);\n setOpen(false);\n onCancel?.();\n }}\n >\n {cancelText}\n </Button>\n <Button\n size=\"small\"\n type=\"primary\"\n {...confirmButtonProps}\n htmlType=\"button\"\n loading={pending}\n className={cn(\n confirmButtonProps?.className,\n classNames?.confirm, //\n )}\n onClick={() => void handleConfirm()}\n >\n {confirmText}\n </Button>\n </div>\n </div>\n }\n >\n {children}\n </Popover>\n );\n};\n\nexport default Popconfirm;\n"],"mappings":";;;;;;;;;AA6CA,MAAM,cAAc,EAClB,UACA,OACA,aACA,WACA,UACA,gBACA,eAAe,oDACf,cAAc,WACd,aAAa,UACb,WAAW,OACX,oBACA,mBACA,WACA,YACA,MAAM,gBACN,aACA,cACA,GAAG,YACQ;CACX,MAAM,CAAC,MAAM,WAAW,qBAA8B;EACpD,OAAO;EACP,cAAc,eAAe;EAC7B,UAAU;CACZ,CAAC;CACD,MAAM,CAAC,SAAS,cAAcA,QAAM,SAAS,KAAK;CAClD,MAAM,CAAC,QAAQ,aAAaA,QAAM,SAAS,KAAK;CAChD,MAAM,OAAOA,QAAM,OAAO,KAAK;CAC/B,MAAM,UAAUA,QAAM,OAAO,KAAK;CAClC,MAAM,aAAaA,QAAM,OAAO,CAAC;CACjC,MAAM,gBAAgBA,QAAM,MAAM;CAClC,MAAM,UAAUA,QAAM,MAAM;CAE5B,QAAM,gBAAgB;EACpB,QAAQ,UAAU;EAElB,aAAa;GACX,QAAQ,UAAU;GAClB,WAAW,WAAW;EACxB;CACF,GAAG,CAAC,CAAC;CAEL,QAAM,gBAAgB;EACpB,IAAI,CAAC,QAAQ,UACX,WAAW,WAAW;CAE1B,GAAG,CAAC,MAAM,QAAQ,CAAC;CAEnB,MAAM,oBAAoB,aAAsB;EAC9C,IAAI,KAAK,WAAY,YAAY,UAC/B;EAGF,UAAU,KAAK;EACf,QAAQ,QAAQ;CAClB;CAEA,MAAM,gBAAgB,YAAY;EAChC,IAAI,KAAK,WAAW,UAClB;EAGF,KAAK,UAAU;EACf,WAAW,IAAI;EACf,UAAU,KAAK;EACf,MAAM,UAAU,WAAW;EAE3B,IAAI;GACF,MAAM,YAAY;GAElB,IAAI,QAAQ,WAAW,YAAY,WAAW,SAC5C,QAAQ,KAAK;EAEjB,SAAS,OAAO;GACd,IAAI,QAAQ,WAAW,YAAY,WAAW,SAAS;IACrD,UAAU,IAAI;IACd,iBAAiB,KAAK;GACxB;EACF,UAAU;GACR,KAAK,UAAU;GAEf,IAAI,QAAQ,SACV,WAAW,KAAK;EAEpB;CACF;CAEA,OACE,oBAAC,SAAD;EACE,GAAI;EACJ,MAAM,QAAQ,CAAC;EACf,cAAc;EACd,WAAW,GACT,4BACA,SACF;EACA,mBAAiB;EACjB,oBAAkB,cAAc,gBAAgB,KAAA;EAChD,SACE,qBAAC,OAAD;GAAK,aAAU;GAAa,aAAW;GAAS,WAAU;GAA1D,UAAA;IACE,oBAAC,WAAW,OAAZ;KACE,OAAO;KACP,IAAI;KACJ,WAAW,YAAY;KAEtB,UAAA;IACe,CAAA;IACjB,eACC,oBAAC,OAAD;KACE,IAAI;KACJ,WAAW,GACT,iCACA,YAAY,WACd;KAEC,UAAA;IACE,CAAA;IAEN,UACC,oBAAC,OAAD;KACE,MAAK;KACL,WAAW,GACT,4BACA,YAAY,KACd;KAEC,UAAA;IACE,CAAA;IAEP,qBAAC,OAAD;KACE,WAAW,GACT,0BACA,YAAY,OACd;KAJF,UAAA,CAME,oBAAC,QAAD;MACE,MAAK;MACL,GAAI;MACJ,UAAS;MACT,UAAU;MACV,WAAW,GACT,mBAAmB,WACnB,YAAY,MACd;MACA,eAAe;OACb,IAAI,KAAK,SACP;OAGF,UAAU,KAAK;OACf,QAAQ,KAAK;OACb,WAAW;MACb;MAEC,UAAA;KACK,CAAA,GACR,oBAAC,QAAD;MACE,MAAK;MACL,MAAK;MACL,GAAI;MACJ,UAAS;MACT,SAAS;MACT,WAAW,GACT,oBAAoB,WACpB,YAAY,OACd;MACA,eAAe,KAAK,cAAc;MAEjC,UAAA;KACK,CAAA,CACL;;GACF;;EAGN;CACM,CAAA;AAEb"}
@@ -1,6 +1,6 @@
1
1
  //#region src/components/atoms/popover.d.ts
2
2
  type Placement = 'top' | 'left' | 'right' | 'bottom' | 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight' | 'leftTop' | 'leftBottom' | 'rightTop' | 'rightBottom';
3
- interface Props extends Omit<React.ComponentPropsWithoutRef<'div'>, 'title' | 'content'> {
3
+ export interface Props extends Omit<React.ComponentPropsWithoutRef<'div'>, 'title' | 'content'> {
4
4
  title?: React.ReactNode;
5
5
  /** Set to false when a custom trigger component renders a non-button element. */
6
6
  nativeButton?: boolean;
@@ -12,5 +12,5 @@ interface Props extends Omit<React.ComponentPropsWithoutRef<'div'>, 'title' | 'c
12
12
  }
13
13
  declare const Popover: ({ title, nativeButton, placement, className, content, children, open: _open, defaultOpen, onOpenChange, ...props }: Props) => import("react").JSX.Element;
14
14
  //#endregion
15
- export { Props, Popover as default };
16
- //# sourceMappingURL=popover.d.mts.map
15
+ export { Popover as default };
16
+ //# sourceMappingURL=Popover.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Popover.d.mts","names":[],"sources":["../src/components/atoms/popover.tsx"],"mappings":";KAmBK;iBAcY,cAAc,KAC7B,MAAM;EAGN,QAAQ,MAAM;;EAEd;EACA,YAAY;EACZ,SAAS,MAAM;EACf;EACA;EACA,gBAAgB;;cAqBZ,YAAW,OAAA,cAAA,WAAA,WAAA,SAAA,UAAA,MAAA,OAAA,aAAA,iBAAA,SAWd,0BAAK,IAAA"}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
- import { cn, renderConditional } from "../../utils.mjs";
3
- import { popover_exports } from "../../core/popover.mjs";
4
- import Typography from "../../Typography.mjs";
2
+ import { cn, renderConditional } from "./utils.mjs";
3
+ import { popover_exports } from "./core/popover.mjs";
4
+ import Typography from "./Typography.mjs";
5
5
  import { Children } from "react";
6
6
  import { useControllableState } from "@jbpark/use-hooks";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -91,4 +91,4 @@ const Popover = ({ title, nativeButton, placement = "top", className, content, c
91
91
  //#endregion
92
92
  export { Popover as default };
93
93
 
94
- //# sourceMappingURL=popover.mjs.map
94
+ //# sourceMappingURL=Popover.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Popover.mjs","names":["popover"],"sources":["../src/components/atoms/popover.tsx"],"sourcesContent":["'use client';\n\nimport { Children, type ReactElement } from 'react';\n\nimport { useControllableState } from '@jbpark/use-hooks';\n\nimport { cn, renderConditional } from '@repo/ui/utils';\n\nimport { popover } from '../../core';\nimport Typography from './typography';\n\nconst {\n Popover: CorePopover,\n PopoverContent,\n PopoverTrigger,\n PopoverArrow,\n PopoverTitle,\n} = popover;\n\ntype Placement =\n | 'top'\n | 'left'\n | 'right'\n | 'bottom'\n | 'topLeft'\n | 'topRight'\n | 'bottomLeft'\n | 'bottomRight'\n | 'leftTop'\n | 'leftBottom'\n | 'rightTop'\n | 'rightBottom';\n\nexport interface Props extends Omit<\n React.ComponentPropsWithoutRef<'div'>,\n 'title' | 'content'\n> {\n title?: React.ReactNode;\n /** Set to false when a custom trigger component renders a non-button element. */\n nativeButton?: boolean;\n placement?: Placement;\n content: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\ntype Side = 'top' | 'bottom' | 'left' | 'right';\ntype Align = 'start' | 'center' | 'end';\n\nconst placementMap: Record<Placement, { side: Side; align: Align }> = {\n top: { side: 'top', align: 'center' },\n left: { side: 'left', align: 'center' },\n right: { side: 'right', align: 'center' },\n bottom: { side: 'bottom', align: 'center' },\n topLeft: { side: 'top', align: 'start' },\n topRight: { side: 'top', align: 'end' },\n bottomLeft: { side: 'bottom', align: 'start' },\n bottomRight: { side: 'bottom', align: 'end' },\n leftTop: { side: 'left', align: 'start' },\n leftBottom: { side: 'left', align: 'end' },\n rightTop: { side: 'right', align: 'start' },\n rightBottom: { side: 'right', align: 'end' },\n};\n\nconst Popover = ({\n title,\n nativeButton,\n placement = 'top',\n className,\n content,\n children,\n open: _open,\n defaultOpen,\n onOpenChange,\n ...props\n}: Props) => {\n const [open, setOpen] = useControllableState<boolean>({\n value: _open,\n defaultValue: defaultOpen ?? false,\n onChange: onOpenChange,\n });\n\n const { side, align } = placementMap[placement];\n\n const trigger = Children.only(children) as ReactElement;\n\n return (\n <CorePopover open={open} onOpenChange={setOpen}>\n {/* Deliberately no `data-slot` here: Base UI merges the trigger's own\n props over the rendered element's, so a `data-slot` set here replaces\n the child's. A `Button` trigger would lose `data-slot=\"button\"` and\n with it every `--btn-*` token rule in globals.css. */}\n <PopoverTrigger\n render={trigger}\n nativeButton={\n nativeButton ??\n (typeof trigger.type !== 'string' || trigger.type === 'button')\n }\n />\n <PopoverContent\n {...props}\n align={align}\n side={side}\n sideOffset={16}\n className={cn('relative w-auto', className)}\n >\n {renderConditional(title, v => (\n <PopoverTitle render={<Typography.Title level={6} />}>\n {v}\n </PopoverTitle>\n ))}\n {content}\n <PopoverArrow />\n </PopoverContent>\n </CorePopover>\n );\n};\n\nexport default Popover;\n"],"mappings":";;;;;;;;AAWA,MAAM,EACJ,SAAS,aACT,gBACA,gBACA,cACA,iBACEA;AAiCJ,MAAM,eAAgE;CACpE,KAAK;EAAE,MAAM;EAAO,OAAO;CAAS;CACpC,MAAM;EAAE,MAAM;EAAQ,OAAO;CAAS;CACtC,OAAO;EAAE,MAAM;EAAS,OAAO;CAAS;CACxC,QAAQ;EAAE,MAAM;EAAU,OAAO;CAAS;CAC1C,SAAS;EAAE,MAAM;EAAO,OAAO;CAAQ;CACvC,UAAU;EAAE,MAAM;EAAO,OAAO;CAAM;CACtC,YAAY;EAAE,MAAM;EAAU,OAAO;CAAQ;CAC7C,aAAa;EAAE,MAAM;EAAU,OAAO;CAAM;CAC5C,SAAS;EAAE,MAAM;EAAQ,OAAO;CAAQ;CACxC,YAAY;EAAE,MAAM;EAAQ,OAAO;CAAM;CACzC,UAAU;EAAE,MAAM;EAAS,OAAO;CAAQ;CAC1C,aAAa;EAAE,MAAM;EAAS,OAAO;CAAM;AAC7C;AAEA,MAAM,WAAW,EACf,OACA,cACA,YAAY,OACZ,WACA,SACA,UACA,MAAM,OACN,aACA,cACA,GAAG,YACQ;CACX,MAAM,CAAC,MAAM,WAAW,qBAA8B;EACpD,OAAO;EACP,cAAc,eAAe;EAC7B,UAAU;CACZ,CAAC;CAED,MAAM,EAAE,MAAM,UAAU,aAAa;CAErC,MAAM,UAAU,SAAS,KAAK,QAAQ;CAEtC,OACE,qBAAC,aAAD;EAAmB;EAAM,cAAc;EAAvC,UAAA,CAKE,oBAAC,gBAAD;GACE,QAAQ;GACR,cACE,iBACC,OAAO,QAAQ,SAAS,YAAY,QAAQ,SAAS;EAEzD,CAAA,GACD,qBAAC,gBAAD;GACE,GAAI;GACG;GACD;GACN,YAAY;GACZ,WAAW,GAAG,mBAAmB,SAAS;GAL5C,UAAA;IAOG,kBAAkB,QAAO,MACxB,oBAAC,cAAD;KAAc,QAAQ,oBAAC,WAAW,OAAZ,EAAkB,OAAO,EAAI,CAAA;KAChD,UAAA;IACW,CAAA,CACf;IACA;IACD,oBAAC,cAAD,CAAe,CAAA;GACD;EACL,CAAA,CAAA;;AAEjB"}
@@ -1,5 +1,5 @@
1
1
  //#region src/components/atoms/progress.d.ts
2
- interface Props extends React.ComponentPropsWithoutRef<'div'> {
2
+ export interface Props extends React.ComponentPropsWithoutRef<'div'> {
3
3
  value: number;
4
4
  orientation?: 'horizontal' | 'vertical';
5
5
  /** @deprecated Use `orientation`. */
@@ -11,5 +11,5 @@ interface Props extends React.ComponentPropsWithoutRef<'div'> {
11
11
  }
12
12
  declare const Progress: ({ value, className, orientation, direction, classNames, ...props }: Props) => import("react").JSX.Element;
13
13
  //#endregion
14
- export { Props, Progress as default };
15
- //# sourceMappingURL=progress.d.mts.map
14
+ export { Progress as default };
15
+ //# sourceMappingURL=Progress.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Progress.d.mts","names":[],"sources":["../src/components/atoms/progress.tsx"],"mappings":";iBAMiB,cAAc,MAAM;EACnC;EACA;;EAEA;EACA;IACE;IACA;;;cAIE,aAAY,OAAA,WAAA,aAAA,WAAA,eAAA,SAOf,0BAAK,IAAA"}
@@ -1,5 +1,5 @@
1
- import { cn } from "../../utils.mjs";
2
- import { progress_exports } from "../../core/progress.mjs";
1
+ import { cn } from "./utils.mjs";
2
+ import { progress_exports } from "./core/progress.mjs";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  //#region src/components/atoms/progress.tsx
5
5
  const { Progress: Core } = progress_exports;
@@ -20,4 +20,4 @@ const Progress = ({ value, className, orientation, direction = "horizontal", cla
20
20
  //#endregion
21
21
  export { Progress as default };
22
22
 
23
- //# sourceMappingURL=progress.mjs.map
23
+ //# sourceMappingURL=Progress.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Progress.mjs","names":["progress"],"sources":["../src/components/atoms/progress.tsx"],"sourcesContent":["import { cn } from '@repo/ui/utils';\n\nimport { progress } from '../../core';\n\nconst { Progress: Core } = progress;\n\nexport interface Props extends React.ComponentPropsWithoutRef<'div'> {\n value: number;\n orientation?: 'horizontal' | 'vertical';\n /** @deprecated Use `orientation`. */\n direction?: 'horizontal' | 'vertical';\n classNames?: {\n background?: string;\n bar?: string;\n };\n}\n\nconst Progress = ({\n value,\n className,\n orientation,\n direction = 'horizontal',\n classNames,\n ...props\n}: Props) => {\n const isHorizontal = (orientation ?? direction) === 'horizontal';\n const normalizedValue = Number.isFinite(value)\n ? Math.min(100, Math.max(0, value))\n : 0;\n\n return (\n <Core\n {...props}\n value={normalizedValue}\n className={cn(\n isHorizontal ? 'h-4 w-full' : 'flex h-full w-4 flex-col justify-end',\n className,\n classNames?.background,\n //\n )}\n barClassName={cn('flex-none', classNames?.bar)}\n barStyle={\n isHorizontal\n ? { width: `${normalizedValue}%` }\n : { width: '100%', height: `${normalizedValue}%` }\n }\n />\n );\n};\n\nexport default Progress;\n"],"mappings":";;;;AAIA,MAAM,EAAE,UAAU,SAASA;AAa3B,MAAM,YAAY,EAChB,OACA,WACA,aACA,YAAY,cACZ,YACA,GAAG,YACQ;CACX,MAAM,gBAAgB,eAAe,eAAe;CACpD,MAAM,kBAAkB,OAAO,SAAS,KAAK,IACzC,KAAK,IAAI,KAAK,KAAK,IAAI,GAAG,KAAK,CAAC,IAChC;CAEJ,OACE,oBAAC,MAAD;EACE,GAAI;EACJ,OAAO;EACP,WAAW,GACT,eAAe,eAAe,wCAC9B,WACA,YAAY,UAEd;EACA,cAAc,GAAG,aAAa,YAAY,GAAG;EAC7C,UACE,eACI,EAAE,OAAO,GAAG,gBAAgB,GAAG,IAC/B;GAAE,OAAO;GAAQ,QAAQ,GAAG,gBAAgB;EAAG;CAEtD,CAAA;AAEL"}
@@ -0,0 +1,10 @@
1
+ import RadioGroup from "./components/atoms/radio/group.mjs";
2
+ import Radio$1, { Props } from "./components/atoms/radio/radio.mjs";
3
+ //#region src/components/atoms/radio/index.d.ts
4
+ type RadioComponent = typeof Radio$1 & {
5
+ Group: typeof RadioGroup;
6
+ };
7
+ declare const Radio: RadioComponent;
8
+ //#endregion
9
+ export { type Props, Radio as default };
10
+ //# sourceMappingURL=Radio.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Radio.d.mts","names":["RadioImpl","Group"],"sources":["../src/components/atoms/radio/index.ts"],"mappings":";;;KAGK,wBAAwBA;EAAc,cAAcC;;cAEnD,OAAqB"}
package/dist/Radio.mjs ADDED
@@ -0,0 +1,9 @@
1
+ import Radio$1 from "./components/atoms/radio/radio.mjs";
2
+ import RadioGroup from "./components/atoms/radio/group.mjs";
3
+ //#region src/components/atoms/radio/index.ts
4
+ const Radio = Radio$1;
5
+ Radio.Group = RadioGroup;
6
+ //#endregion
7
+ export { Radio as default };
8
+
9
+ //# sourceMappingURL=Radio.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Radio.mjs","names":["RadioImpl","Group"],"sources":["../src/components/atoms/radio/index.ts"],"sourcesContent":["import Group from './group';\nimport RadioImpl, { type Props } from './radio';\n\ntype RadioComponent = typeof RadioImpl & { Group: typeof Group };\n\nconst Radio = RadioImpl as RadioComponent;\n\nRadio.Group = Group;\n\nexport default Radio;\nexport type { Props };\n"],"mappings":";;;AAKA,MAAM,QAAQA;AAEd,MAAM,QAAQC"}
@@ -0,0 +1,27 @@
1
+ import { ComponentPropsWithRef, ReactNode } from "react";
2
+ //#region src/components/atoms/rate.d.ts
3
+ export interface Props extends Omit<ComponentPropsWithRef<'div'>, 'children' | 'value' | 'defaultValue' | 'onChange'> {
4
+ /** Positive whole-step count. Defaults to five. */
5
+ count?: number;
6
+ /** Zero means no rating. Values are rounded down and clamped to 0–count. */
7
+ value?: number;
8
+ defaultValue?: number;
9
+ onChange?: (value: number) => void;
10
+ /** Activating the selected score clears it to zero. Defaults to true. */
11
+ allowClear?: boolean;
12
+ disabled?: boolean;
13
+ readOnly?: boolean;
14
+ name?: string;
15
+ icon?: ReactNode;
16
+ getItemLabel?: (score: number, count: number) => string;
17
+ getValueText?: (value: number, count: number) => string;
18
+ classNames?: {
19
+ item?: string;
20
+ filledItem?: string;
21
+ icon?: string;
22
+ };
23
+ }
24
+ declare const Rate: ({ count, value, defaultValue, onChange, allowClear, disabled, readOnly, name, icon, getItemLabel, getValueText, className, classNames, dir, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, ...props }: Props) => import("react").JSX.Element;
25
+ //#endregion
26
+ export { Rate as default };
27
+ //# sourceMappingURL=Rate.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rate.d.mts","names":[],"sources":["../src/components/atoms/rate.tsx"],"mappings":";;iBAmBiB,cAAc,KAC7B;;EAIA;;EAEA;EACA;EACA,YAAY;;EAEZ;EACA;EACA;EACA;EACA,OAAO;EACP,gBAAgB,eAAe;EAC/B,gBAAgB,eAAe;EAC/B;IAAe;IAAe;IAAqB;;;cAG/C,SAAQ,OAAA,OAAA,cAAA,UAAA,YAAA,UAAA,UAAA,MAAA,MAAA,cAAA,cAAA,WAAA,YAAA,mBAAA,8BAAA,oCAAA,oBAAA,SAoBX,0BAAK,IAAA"}
package/dist/Rate.mjs ADDED
@@ -0,0 +1,81 @@
1
+ "use client";
2
+ import { cn } from "./utils.mjs";
3
+ import { useConfig } from "./providers/config/context.mjs";
4
+ import Button from "./Button.mjs";
5
+ import { useId, useState } from "react";
6
+ import { DirectionProvider } from "@base-ui/react/direction-provider";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ import { Star } from "lucide-react";
9
+ import { Radio } from "@base-ui/react/radio";
10
+ import { RadioGroup } from "@base-ui/react/radio-group";
11
+ //#region src/components/atoms/rate.tsx
12
+ const Rate = ({ count = 5, value, defaultValue = 0, onChange, allowClear = true, disabled = false, readOnly = false, name, icon, getItemLabel = (score, total) => `${score} of ${total} stars`, getValueText = (score, total) => score === 0 ? "No rating" : `${score} of ${total} stars`, className, classNames, dir, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, ...props }) => {
13
+ const total = Number.isFinite(count) ? Math.max(1, Math.floor(count)) : 5;
14
+ const [internalValue, setInternalValue] = useState(defaultValue);
15
+ const rawValue = value ?? internalValue;
16
+ const score = Number.isFinite(rawValue) ? Math.min(total, Math.max(0, Math.floor(rawValue))) : 0;
17
+ const { direction } = useConfig();
18
+ const resolvedDirection = dir === "ltr" || dir === "rtl" ? dir : direction;
19
+ const statusId = useId();
20
+ const changeValue = (next) => {
21
+ if (disabled || readOnly || next === score) return;
22
+ if (value === void 0) setInternalValue(next);
23
+ onChange?.(next);
24
+ };
25
+ return /* @__PURE__ */ jsx(DirectionProvider, {
26
+ direction: resolvedDirection,
27
+ children: /* @__PURE__ */ jsxs(RadioGroup, {
28
+ ...props,
29
+ "data-slot": "rate",
30
+ dir: dir ?? resolvedDirection,
31
+ "aria-label": ariaLabel ?? (ariaLabelledBy ? void 0 : "Rating"),
32
+ "aria-labelledby": ariaLabelledBy,
33
+ "aria-describedby": [ariaDescribedBy, statusId].filter(Boolean).join(" "),
34
+ disabled,
35
+ readOnly,
36
+ name,
37
+ value: score === 0 ? "" : String(score),
38
+ onValueChange: (next) => changeValue(Number(next)),
39
+ className: cn("inline-flex w-fit max-w-full flex-wrap items-center gap-1", className),
40
+ children: [Array.from({ length: total }, (_, index) => {
41
+ const itemScore = index + 1;
42
+ const isFilled = itemScore <= score;
43
+ return /* @__PURE__ */ jsx(Radio.Root, {
44
+ value: String(itemScore),
45
+ nativeButton: true,
46
+ "data-slot": "rate-item",
47
+ "data-filled": isFilled ? "" : void 0,
48
+ "aria-label": getItemLabel(itemScore, total),
49
+ onClick: (event) => {
50
+ if (allowClear && itemScore === score && !disabled && !readOnly) {
51
+ event.preventDefault();
52
+ changeValue(0);
53
+ }
54
+ },
55
+ render: /* @__PURE__ */ jsx(Button, {
56
+ variant: "text",
57
+ size: "small",
58
+ disabled,
59
+ className: cn("text-muted-foreground size-8 shrink-0 p-1", readOnly && "cursor-default", isFilled && "text-primary", classNames?.item, isFilled && classNames?.filledItem)
60
+ }),
61
+ children: /* @__PURE__ */ jsx("span", {
62
+ "data-slot": "rate-icon",
63
+ "aria-hidden": "true",
64
+ className: cn("flex size-5 items-center justify-center [&>svg]:size-full", isFilled && "[&>svg]:fill-current", classNames?.icon),
65
+ children: icon ?? /* @__PURE__ */ jsx(Star, {})
66
+ })
67
+ }, itemScore);
68
+ }), /* @__PURE__ */ jsx("span", {
69
+ id: statusId,
70
+ "data-slot": "rate-status",
71
+ className: "sr-only",
72
+ "aria-live": "polite",
73
+ children: getValueText(score, total)
74
+ })]
75
+ })
76
+ });
77
+ };
78
+ //#endregion
79
+ export { Rate as default };
80
+
81
+ //# sourceMappingURL=Rate.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rate.mjs","names":[],"sources":["../src/components/atoms/rate.tsx"],"sourcesContent":["'use client';\n\nimport {\n type ComponentPropsWithRef,\n type ReactNode,\n useId,\n useState,\n} from 'react';\n\nimport { DirectionProvider } from '@base-ui/react/direction-provider';\nimport { Radio } from '@base-ui/react/radio';\nimport { RadioGroup } from '@base-ui/react/radio-group';\nimport { Star } from 'lucide-react';\n\nimport { useConfig } from '@repo/ui/providers';\nimport { cn } from '@repo/ui/utils';\n\nimport Button from './button';\n\nexport interface Props extends Omit<\n ComponentPropsWithRef<'div'>,\n 'children' | 'value' | 'defaultValue' | 'onChange'\n> {\n /** Positive whole-step count. Defaults to five. */\n count?: number;\n /** Zero means no rating. Values are rounded down and clamped to 0–count. */\n value?: number;\n defaultValue?: number;\n onChange?: (value: number) => void;\n /** Activating the selected score clears it to zero. Defaults to true. */\n allowClear?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n name?: string;\n icon?: ReactNode;\n getItemLabel?: (score: number, count: number) => string;\n getValueText?: (value: number, count: number) => string;\n classNames?: { item?: string; filledItem?: string; icon?: string };\n}\n\nconst Rate = ({\n count = 5,\n value,\n defaultValue = 0,\n onChange,\n allowClear = true,\n disabled = false,\n readOnly = false,\n name,\n icon,\n getItemLabel = (score, total) => `${score} of ${total} stars`,\n getValueText = (score, total) =>\n score === 0 ? 'No rating' : `${score} of ${total} stars`,\n className,\n classNames,\n dir,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n ...props\n}: Props) => {\n const total = Number.isFinite(count) ? Math.max(1, Math.floor(count)) : 5;\n const [internalValue, setInternalValue] = useState(defaultValue);\n const rawValue = value ?? internalValue;\n const score = Number.isFinite(rawValue)\n ? Math.min(total, Math.max(0, Math.floor(rawValue)))\n : 0;\n const { direction } = useConfig();\n const resolvedDirection = dir === 'ltr' || dir === 'rtl' ? dir : direction;\n const statusId = useId();\n\n const changeValue = (next: number) => {\n if (disabled || readOnly || next === score) {\n return;\n }\n\n if (value === undefined) {\n setInternalValue(next);\n }\n\n onChange?.(next);\n };\n\n return (\n <DirectionProvider direction={resolvedDirection}>\n <RadioGroup\n {...props}\n data-slot=\"rate\"\n dir={dir ?? resolvedDirection}\n aria-label={ariaLabel ?? (ariaLabelledBy ? undefined : 'Rating')}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={[ariaDescribedBy, statusId].filter(Boolean).join(' ')}\n disabled={disabled}\n readOnly={readOnly}\n name={name}\n value={score === 0 ? '' : String(score)}\n onValueChange={next => changeValue(Number(next))}\n className={cn(\n 'inline-flex w-fit max-w-full flex-wrap items-center gap-1',\n className, //\n )}\n >\n {Array.from({ length: total }, (_, index) => {\n const itemScore = index + 1;\n const isFilled = itemScore <= score;\n\n return (\n <Radio.Root\n key={itemScore}\n value={String(itemScore)}\n nativeButton\n data-slot=\"rate-item\"\n data-filled={isFilled ? '' : undefined}\n aria-label={getItemLabel(itemScore, total)}\n onClick={event => {\n if (\n allowClear &&\n itemScore === score &&\n !disabled &&\n !readOnly\n ) {\n event.preventDefault();\n changeValue(0);\n }\n }}\n render={\n <Button\n variant=\"text\"\n size=\"small\"\n disabled={disabled}\n className={cn(\n 'text-muted-foreground size-8 shrink-0 p-1',\n readOnly && 'cursor-default',\n isFilled && 'text-primary',\n classNames?.item,\n isFilled && classNames?.filledItem, //\n )}\n />\n }\n >\n <span\n data-slot=\"rate-icon\"\n aria-hidden=\"true\"\n className={cn(\n 'flex size-5 items-center justify-center [&>svg]:size-full',\n isFilled && '[&>svg]:fill-current',\n classNames?.icon, //\n )}\n >\n {icon ?? <Star />}\n </span>\n </Radio.Root>\n );\n })}\n <span\n id={statusId}\n data-slot=\"rate-status\"\n className=\"sr-only\"\n aria-live=\"polite\"\n >\n {getValueText(score, total)}\n </span>\n </RadioGroup>\n </DirectionProvider>\n );\n};\n\nexport default Rate;\n"],"mappings":";;;;;;;;;;;AAwCA,MAAM,QAAQ,EACZ,QAAQ,GACR,OACA,eAAe,GACf,UACA,aAAa,MACb,WAAW,OACX,WAAW,OACX,MACA,MACA,gBAAgB,OAAO,UAAU,GAAG,MAAM,MAAM,MAAM,SACtD,gBAAgB,OAAO,UACrB,UAAU,IAAI,cAAc,GAAG,MAAM,MAAM,MAAM,SACnD,WACA,YACA,KACA,cAAc,WACd,mBAAmB,gBACnB,oBAAoB,iBACpB,GAAG,YACQ;CACX,MAAM,QAAQ,OAAO,SAAS,KAAK,IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,CAAC,IAAI;CACxE,MAAM,CAAC,eAAe,oBAAoB,SAAS,YAAY;CAC/D,MAAM,WAAW,SAAS;CAC1B,MAAM,QAAQ,OAAO,SAAS,QAAQ,IAClC,KAAK,IAAI,OAAO,KAAK,IAAI,GAAG,KAAK,MAAM,QAAQ,CAAC,CAAC,IACjD;CACJ,MAAM,EAAE,cAAc,UAAU;CAChC,MAAM,oBAAoB,QAAQ,SAAS,QAAQ,QAAQ,MAAM;CACjE,MAAM,WAAW,MAAM;CAEvB,MAAM,eAAe,SAAiB;EACpC,IAAI,YAAY,YAAY,SAAS,OACnC;EAGF,IAAI,UAAU,KAAA,GACZ,iBAAiB,IAAI;EAGvB,WAAW,IAAI;CACjB;CAEA,OACE,oBAAC,mBAAD;EAAmB,WAAW;EAC5B,UAAA,qBAAC,YAAD;GACE,GAAI;GACJ,aAAU;GACV,KAAK,OAAO;GACZ,cAAY,cAAc,iBAAiB,KAAA,IAAY;GACvD,mBAAiB;GACjB,oBAAkB,CAAC,iBAAiB,QAAQ,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;GAC5D;GACA;GACJ;GACN,OAAO,UAAU,IAAI,KAAK,OAAO,KAAK;GACtC,gBAAe,SAAQ,YAAY,OAAO,IAAI,CAAC;GAC/C,WAAW,GACT,6DACA,SACF;GAfF,UAAA,CAiBG,MAAM,KAAK,EAAE,QAAQ,MAAM,IAAI,GAAG,UAAU;IAC3C,MAAM,YAAY,QAAQ;IAC1B,MAAM,WAAW,aAAa;IAE9B,OACE,oBAAC,MAAM,MAAP;KAEE,OAAO,OAAO,SAAS;KACvB,cAAA;KACA,aAAU;KACV,eAAa,WAAW,KAAK,KAAA;KAC7B,cAAY,aAAa,WAAW,KAAK;KACzC,UAAS,UAAS;MAChB,IACE,cACA,cAAc,SACd,CAAC,YACD,CAAC,UACD;OACA,MAAM,eAAe;OACrB,YAAY,CAAC;MACf;KACF;KACA,QACE,oBAAC,QAAD;MACE,SAAQ;MACR,MAAK;MACK;MACV,WAAW,GACT,6CACA,YAAY,kBACZ,YAAY,gBACZ,YAAY,MACZ,YAAY,YAAY,UAC1B;KACD,CAAA;KAGH,UAAA,oBAAC,QAAD;MACE,aAAU;MACV,eAAY;MACZ,WAAW,GACT,6DACA,YAAY,wBACZ,YAAY,IACd;MAEC,UAAA,QAAQ,oBAAC,MAAD,CAAO,CAAA;KACZ,CAAA;IACI,GA3CL,SA2CK;GAEhB,CAAC,GACD,oBAAC,QAAD;IACE,IAAI;IACJ,aAAU;IACV,WAAU;IACV,aAAU;IAET,UAAA,aAAa,OAAO,KAAK;GACtB,CAAA,CACI;;CACK,CAAA;AAEvB"}
@@ -1,6 +1,6 @@
1
1
  //#region src/components/templates/result.d.ts
2
2
  type Status = 'success' | 'error' | 'info' | 'warning' | '404' | '403' | '500';
3
- interface Props extends Omit<React.ComponentProps<'div'>, 'title'> {
3
+ export interface Props extends Omit<React.ComponentProps<'div'>, 'title'> {
4
4
  status?: Status;
5
5
  icon?: React.ReactNode;
6
6
  title?: React.ReactNode;
@@ -9,5 +9,5 @@ interface Props extends Omit<React.ComponentProps<'div'>, 'title'> {
9
9
  }
10
10
  declare const Result: ({ status, icon, title, subTitle, extra, className, children, ...props }: Props) => import("react").JSX.Element;
11
11
  //#endregion
12
- export { Props, Result as default };
13
- //# sourceMappingURL=result.d.mts.map
12
+ export { Result as default };
13
+ //# sourceMappingURL=Result.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Result.d.mts","names":[],"sources":["../src/components/templates/result.tsx"],"mappings":";KAYK;iBAeY,cAAc,KAAK,MAAM;EACxC,SAAS;EACT,OAAO,MAAM;EACb,QAAQ,MAAM;EACd,WAAW,MAAM;EACjB,QAAQ,MAAM;;cAMV,WAAU,QAAA,MAAA,OAAA,UAAA,OAAA,WAAA,aAAA,SASb,0BAAK,IAAA"}
@@ -1,6 +1,6 @@
1
- import { cn } from "../../utils.mjs";
2
- import { Check, FileQuestion, Info, OctagonAlert, OctagonX, ServerCrash, ShieldAlert } from "lucide-react";
1
+ import { cn } from "./utils.mjs";
3
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { Check, FileQuestion, Info, OctagonAlert, OctagonX, ServerCrash, ShieldAlert } from "lucide-react";
4
4
  //#region src/components/templates/result.tsx
5
5
  const STATUS_ICONS = {
6
6
  success: /* @__PURE__ */ jsx(Check, { className: "text-green-400" }),
@@ -43,4 +43,4 @@ const Result = ({ status = "info", icon, title, subTitle, extra, className, chil
43
43
  //#endregion
44
44
  export { Result as default };
45
45
 
46
- //# sourceMappingURL=result.mjs.map
46
+ //# sourceMappingURL=Result.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Result.mjs","names":[],"sources":["../src/components/templates/result.tsx"],"sourcesContent":["import {\n Check,\n FileQuestion,\n Info,\n OctagonAlert,\n OctagonX,\n ServerCrash,\n ShieldAlert,\n} from 'lucide-react';\n\nimport { cn } from '@repo/ui/utils';\n\ntype Status = 'success' | 'error' | 'info' | 'warning' | '404' | '403' | '500';\n\n// Reuses Modal's exact STATIC_ICONS set (Check/OctagonX/Info/OctagonAlert,\n// same colors) for the 4 statuses they share, so a Result page matches the\n// tone of a Modal.success()/error()/etc a user may have just seen.\nconst STATUS_ICONS: Record<Status, React.ReactNode> = {\n success: <Check className=\"text-green-400\" />,\n error: <OctagonX className=\"text-red-400\" />,\n info: <Info className=\"text-blue-400\" />,\n warning: <OctagonAlert className=\"text-yellow-400\" />,\n '404': <FileQuestion className=\"text-muted-foreground\" />,\n '403': <ShieldAlert className=\"text-muted-foreground\" />,\n '500': <ServerCrash className=\"text-muted-foreground\" />,\n};\n\nexport interface Props extends Omit<React.ComponentProps<'div'>, 'title'> {\n status?: Status;\n icon?: React.ReactNode;\n title?: React.ReactNode;\n subTitle?: React.ReactNode;\n extra?: React.ReactNode;\n}\n\n// Full-page success/failure/404/403 state screen — Empty's larger,\n// more prominent sibling (Empty says \"nothing here yet\" inline within a\n// list/table; Result says \"here's what happened\" for an entire page/view).\nconst Result = ({\n status = 'info',\n icon,\n title,\n subTitle,\n extra,\n className,\n children,\n ...props\n}: Props) => {\n return (\n <div\n data-slot=\"result\"\n className={cn(\n 'flex flex-col items-center justify-center gap-2 py-16 text-center',\n className,\n //\n )}\n {...props}\n >\n <div className=\"mb-2 [&_svg]:size-16\">{icon ?? STATUS_ICONS[status]}</div>\n {title && <p className=\"text-xl font-medium\">{title}</p>}\n {subTitle && <p className=\"text-muted-foreground text-sm\">{subTitle}</p>}\n {extra && (\n <div className=\"mt-4 flex items-center justify-center gap-2\">\n {extra}\n </div>\n )}\n {children && <div className=\"mt-4 w-full\">{children}</div>}\n </div>\n );\n};\n\nexport default Result;\n"],"mappings":";;;;AAiBA,MAAM,eAAgD;CACpD,SAAS,oBAAC,OAAD,EAAO,WAAU,iBAAkB,CAAA;CAC5C,OAAO,oBAAC,UAAD,EAAU,WAAU,eAAgB,CAAA;CAC3C,MAAM,oBAAC,MAAD,EAAM,WAAU,gBAAiB,CAAA;CACvC,SAAS,oBAAC,cAAD,EAAc,WAAU,kBAAmB,CAAA;CACpD,OAAO,oBAAC,cAAD,EAAc,WAAU,wBAAyB,CAAA;CACxD,OAAO,oBAAC,aAAD,EAAa,WAAU,wBAAyB,CAAA;CACvD,OAAO,oBAAC,aAAD,EAAa,WAAU,wBAAyB,CAAA;AACzD;AAaA,MAAM,UAAU,EACd,SAAS,QACT,MACA,OACA,UACA,OACA,WACA,UACA,GAAG,YACQ;CACX,OACE,qBAAC,OAAD;EACE,aAAU;EACV,WAAW,GACT,qEACA,SAEF;EACA,GAAI;EAPN,UAAA;GASE,oBAAC,OAAD;IAAK,WAAU;IAAwB,UAAA,QAAQ,aAAa;GAAa,CAAA;GACxE,SAAS,oBAAC,KAAD;IAAG,WAAU;IAAuB,UAAA;GAAS,CAAA;GACtD,YAAY,oBAAC,KAAD;IAAG,WAAU;IAAiC,UAAA;GAAY,CAAA;GACtE,SACC,oBAAC,OAAD;IAAK,WAAU;IACZ,UAAA;GACE,CAAA;GAEN,YAAY,oBAAC,OAAD;IAAK,WAAU;IAAe;GAAc,CAAA;EACtD;;AAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"Reveals.d.mts","names":[],"sources":["../src/components/molecules/reveals/index.ts"],"mappings":";;;KAGK,0BAA0B;EAAgB,aAAa;;cAEtD,SAAyB"}
1
+ {"version":3,"file":"Reveals.d.mts","names":["RevealsImpl"],"sources":["../src/components/molecules/reveals/index.ts"],"mappings":";;;KAGK,0BAA0BA;EAAgB,aAAa;;cAEtD,SAAyB"}
@@ -0,0 +1,3 @@
1
+ import { ToolbarItem, ToolbarPreset } from "./components/atoms/rich-text-editor/types.mjs";
2
+ import RichTextEditor, { Props } from "./components/atoms/rich-text-editor/rich-text-editor.mjs";
3
+ export { type Props, type ToolbarItem, type ToolbarPreset, RichTextEditor as default };
@@ -0,0 +1 @@
1
+ export { default } from "./components/atoms/rich-text-editor/rich-text-editor.mjs";