@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,34 @@
1
+ import { ComponentPropsWithRef } from "react";
2
+ //#region src/components/atoms/cascader.d.ts
3
+ export interface Option {
4
+ /** Unique among siblings. Values can repeat under different parents. */
5
+ value: string;
6
+ label: string;
7
+ disabled?: boolean;
8
+ /** Missing or empty children make this option a selectable leaf. */
9
+ children?: readonly Option[];
10
+ }
11
+ export interface Props extends Omit<ComponentPropsWithRef<'div'>, 'children' | 'value' | 'defaultValue' | 'onChange'> {
12
+ options: readonly Option[];
13
+ value?: readonly string[];
14
+ defaultValue?: readonly string[];
15
+ onChange?: (path: string[]) => void;
16
+ disabled?: boolean;
17
+ allowClear?: boolean;
18
+ placeholder?: string;
19
+ backLabel?: string;
20
+ clearLabel?: string;
21
+ emptyText?: string;
22
+ getLevelLabel?: (level: number) => string;
23
+ classNames?: {
24
+ trigger?: string;
25
+ popup?: string;
26
+ breadcrumb?: string;
27
+ select?: string;
28
+ clear?: string;
29
+ };
30
+ }
31
+ declare const Cascader: ({ options, value, defaultValue, onChange, disabled, allowClear, placeholder, backLabel, clearLabel, emptyText, getLevelLabel, className, classNames, dir, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, ...props }: Props) => import("react").JSX.Element;
32
+ //#endregion
33
+ export { Cascader as default };
34
+ //# sourceMappingURL=Cascader.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Cascader.d.mts","names":[],"sources":["../src/components/atoms/cascader.tsx"],"mappings":";;iBAciB;;EAEf;EACA;EACA;;EAEA,oBAAoB;;iBAGL,cAAc,KAC7B;EAGA,kBAAkB;EAClB;EACA;EACA,YAAY;EACZ;EACA;EACA;EACA;EACA;EACA;EACA,iBAAiB;EACjB;IACE;IACA;IACA;IACA;IACA;;;cAwBE,aAAY,SAAA,OAAA,cAAA,UAAA,UAAA,YAAA,aAAA,WAAA,YAAA,WAAA,eAAA,WAAA,YAAA,mBAAA,8BAAA,oCAAA,oBAAA,SAmBf,0BAAK,IAAA"}
@@ -0,0 +1,144 @@
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 Popover from "./Popover.mjs";
6
+ import Select from "./Select.mjs";
7
+ import { useId, useState } from "react";
8
+ import { DirectionProvider } from "@base-ui/react/direction-provider";
9
+ import { jsx, jsxs } from "react/jsx-runtime";
10
+ import { ChevronDown, X } from "lucide-react";
11
+ //#region src/components/atoms/cascader.tsx
12
+ const resolvePath = (options, path) => {
13
+ const result = [];
14
+ let siblings = options;
15
+ for (const value of path) {
16
+ const option = siblings.find((item) => item.value === value && !item.disabled);
17
+ if (!option) break;
18
+ result.push(option);
19
+ siblings = option.children ?? [];
20
+ }
21
+ return result;
22
+ };
23
+ const Cascader = ({ options, value, defaultValue = [], onChange, disabled = false, allowClear = true, placeholder = "Choose a path", backLabel = "Back", clearLabel = "Clear selection", emptyText = "No options", getLevelLabel = (level) => `Level ${level}`, className, classNames, dir, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, ...props }) => {
24
+ const [internalValue, setInternalValue] = useState(defaultValue);
25
+ const [isOpen, setIsOpen] = useState(false);
26
+ const [browsePath, setBrowsePath] = useState([]);
27
+ const selectedPath = value ?? internalValue;
28
+ const selectedNodes = resolvePath(options, selectedPath);
29
+ const lastSelected = selectedNodes.at(-1);
30
+ const hasSelection = selectedPath.length > 0 && selectedNodes.length === selectedPath.length && !lastSelected?.children?.length;
31
+ const selectedText = hasSelection ? selectedNodes.map((node) => node.label).join(" / ") : placeholder;
32
+ const resolvedBrowse = resolvePath(options, browsePath);
33
+ const activeNodes = resolvedBrowse.length === browsePath.length && (browsePath.length === 0 || resolvedBrowse.at(-1)?.children?.length) ? resolvedBrowse : [];
34
+ const activePath = activeNodes.map((node) => node.value);
35
+ const currentOptions = activeNodes.at(-1)?.children ?? options;
36
+ const level = activePath.length + 1;
37
+ const { direction } = useConfig();
38
+ const resolvedDirection = dir === "ltr" || dir === "rtl" ? dir : direction;
39
+ const statusId = useId();
40
+ const commit = (path) => {
41
+ if (disabled) return;
42
+ if (value === void 0) setInternalValue(path);
43
+ if (path.length !== selectedPath.length || path.some((part, index) => part !== selectedPath[index])) onChange?.(path);
44
+ setIsOpen(false);
45
+ };
46
+ const changeOpen = (open) => {
47
+ if (open && disabled) return;
48
+ if (open) setBrowsePath(hasSelection ? [...selectedPath.slice(0, -1)] : []);
49
+ setIsOpen(open);
50
+ };
51
+ return /* @__PURE__ */ jsx(DirectionProvider, {
52
+ direction: resolvedDirection,
53
+ children: /* @__PURE__ */ jsxs("div", {
54
+ ...props,
55
+ "data-slot": "cascader",
56
+ dir: dir ?? resolvedDirection,
57
+ className: cn("flex w-full min-w-0 items-center gap-1", className),
58
+ children: [
59
+ /* @__PURE__ */ jsx(Popover, {
60
+ open: isOpen && !disabled,
61
+ onOpenChange: changeOpen,
62
+ placement: "bottomLeft",
63
+ title: ariaLabel ?? placeholder,
64
+ dir: resolvedDirection,
65
+ className: cn("w-72 max-w-[calc(100vw-2rem)] p-3", classNames?.popup),
66
+ content: /* @__PURE__ */ jsxs("div", {
67
+ "data-slot": "cascader-panel",
68
+ className: "min-w-0 space-y-3",
69
+ children: [
70
+ /* @__PURE__ */ jsx("div", {
71
+ "data-slot": "cascader-breadcrumb",
72
+ "aria-live": "polite",
73
+ className: cn("text-muted-foreground text-sm [overflow-wrap:anywhere]", classNames?.breadcrumb),
74
+ children: activeNodes.length ? activeNodes.map((node) => node.label).join(" / ") : getLevelLabel(1)
75
+ }),
76
+ activePath.length > 0 && /* @__PURE__ */ jsx(Button, {
77
+ variant: "text",
78
+ size: "small",
79
+ onClick: () => setBrowsePath(activePath.slice(0, -1)),
80
+ children: backLabel
81
+ }),
82
+ currentOptions.length ? /* @__PURE__ */ jsx(Select, {
83
+ value: null,
84
+ dir: resolvedDirection,
85
+ "aria-label": getLevelLabel(level),
86
+ placeholder: getLevelLabel(level),
87
+ className: cn("w-full max-w-full", classNames?.select),
88
+ options: currentOptions.map((option) => ({
89
+ label: option.label,
90
+ value: option.value,
91
+ disabled: option.disabled
92
+ })),
93
+ onChange: (next) => {
94
+ const option = currentOptions.find((item) => item.value === next && !item.disabled);
95
+ if (!option) return;
96
+ const path = [...activePath, option.value];
97
+ if (option.children?.length) setBrowsePath(path);
98
+ else commit(path);
99
+ }
100
+ }) : /* @__PURE__ */ jsx("p", {
101
+ className: "text-muted-foreground m-0 text-sm",
102
+ children: emptyText
103
+ })
104
+ ]
105
+ }),
106
+ children: /* @__PURE__ */ jsxs(Button, {
107
+ disabled,
108
+ "aria-label": ariaLabel,
109
+ "aria-labelledby": ariaLabelledBy,
110
+ "aria-describedby": [ariaDescribedBy, statusId].filter(Boolean).join(" "),
111
+ className: cn("min-w-0 flex-1 justify-between", classNames?.trigger),
112
+ children: [/* @__PURE__ */ jsx("span", {
113
+ className: "truncate",
114
+ children: selectedText
115
+ }), /* @__PURE__ */ jsx(ChevronDown, {
116
+ "aria-hidden": "true",
117
+ className: "size-4 shrink-0"
118
+ })]
119
+ })
120
+ }),
121
+ allowClear && selectedPath.length > 0 && /* @__PURE__ */ jsx(Button, {
122
+ variant: "text",
123
+ size: "small",
124
+ disabled,
125
+ "aria-label": clearLabel,
126
+ icon: /* @__PURE__ */ jsx(X, {}),
127
+ onClick: () => commit([]),
128
+ className: cn("shrink-0", classNames?.clear)
129
+ }),
130
+ /* @__PURE__ */ jsx("span", {
131
+ id: statusId,
132
+ "data-slot": "cascader-status",
133
+ className: "sr-only",
134
+ "aria-live": "polite",
135
+ children: selectedText
136
+ })
137
+ ]
138
+ })
139
+ });
140
+ };
141
+ //#endregion
142
+ export { Cascader as default };
143
+
144
+ //# sourceMappingURL=Cascader.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Cascader.mjs","names":[],"sources":["../src/components/atoms/cascader.tsx"],"sourcesContent":["'use client';\n\nimport { type ComponentPropsWithRef, useId, useState } from 'react';\n\nimport { DirectionProvider } from '@base-ui/react/direction-provider';\nimport { ChevronDown, X } from 'lucide-react';\n\nimport { useConfig } from '@repo/ui/providers';\nimport { cn } from '@repo/ui/utils';\n\nimport Button from './button';\nimport Popover from './popover';\nimport Select from './select';\n\nexport interface Option {\n /** Unique among siblings. Values can repeat under different parents. */\n value: string;\n label: string;\n disabled?: boolean;\n /** Missing or empty children make this option a selectable leaf. */\n children?: readonly Option[];\n}\n\nexport interface Props extends Omit<\n ComponentPropsWithRef<'div'>,\n 'children' | 'value' | 'defaultValue' | 'onChange'\n> {\n options: readonly Option[];\n value?: readonly string[];\n defaultValue?: readonly string[];\n onChange?: (path: string[]) => void;\n disabled?: boolean;\n allowClear?: boolean;\n placeholder?: string;\n backLabel?: string;\n clearLabel?: string;\n emptyText?: string;\n getLevelLabel?: (level: number) => string;\n classNames?: {\n trigger?: string;\n popup?: string;\n breadcrumb?: string;\n select?: string;\n clear?: string;\n };\n}\n\nconst resolvePath = (options: readonly Option[], path: readonly string[]) => {\n const result: Option[] = [];\n let siblings = options;\n\n for (const value of path) {\n const option = siblings.find(\n item => item.value === value && !item.disabled,\n );\n\n if (!option) {\n break;\n }\n\n result.push(option);\n siblings = option.children ?? [];\n }\n\n return result;\n};\n\nconst Cascader = ({\n options,\n value,\n defaultValue = [],\n onChange,\n disabled = false,\n allowClear = true,\n placeholder = 'Choose a path',\n backLabel = 'Back',\n clearLabel = 'Clear selection',\n emptyText = 'No options',\n getLevelLabel = level => `Level ${level}`,\n className,\n classNames,\n dir,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n ...props\n}: Props) => {\n const [internalValue, setInternalValue] =\n useState<readonly string[]>(defaultValue);\n const [isOpen, setIsOpen] = useState(false);\n const [browsePath, setBrowsePath] = useState<string[]>([]);\n const selectedPath = value ?? internalValue;\n const selectedNodes = resolvePath(options, selectedPath);\n const lastSelected = selectedNodes.at(-1);\n const hasSelection =\n selectedPath.length > 0 &&\n selectedNodes.length === selectedPath.length &&\n !lastSelected?.children?.length;\n const selectedText = hasSelection\n ? selectedNodes.map(node => node.label).join(' / ')\n : placeholder;\n const resolvedBrowse = resolvePath(options, browsePath);\n const activeNodes =\n resolvedBrowse.length === browsePath.length &&\n (browsePath.length === 0 || resolvedBrowse.at(-1)?.children?.length)\n ? resolvedBrowse\n : [];\n const activePath = activeNodes.map(node => node.value);\n const currentOptions = activeNodes.at(-1)?.children ?? options;\n const level = activePath.length + 1;\n const { direction } = useConfig();\n const resolvedDirection = dir === 'ltr' || dir === 'rtl' ? dir : direction;\n const statusId = useId();\n\n const commit = (path: string[]) => {\n if (disabled) {\n return;\n }\n\n if (value === undefined) {\n setInternalValue(path);\n }\n\n if (\n path.length !== selectedPath.length ||\n path.some((part, index) => part !== selectedPath[index])\n ) {\n onChange?.(path);\n }\n\n setIsOpen(false);\n };\n\n const changeOpen = (open: boolean) => {\n if (open && disabled) {\n return;\n }\n\n if (open) {\n setBrowsePath(hasSelection ? [...selectedPath.slice(0, -1)] : []);\n }\n\n setIsOpen(open);\n };\n\n return (\n <DirectionProvider direction={resolvedDirection}>\n <div\n {...props}\n data-slot=\"cascader\"\n dir={dir ?? resolvedDirection}\n className={cn(\n 'flex w-full min-w-0 items-center gap-1',\n className, //\n )}\n >\n <Popover\n open={isOpen && !disabled}\n onOpenChange={changeOpen}\n placement=\"bottomLeft\"\n title={ariaLabel ?? placeholder}\n dir={resolvedDirection}\n className={cn(\n 'w-72 max-w-[calc(100vw-2rem)] p-3',\n classNames?.popup, //\n )}\n content={\n <div data-slot=\"cascader-panel\" className=\"min-w-0 space-y-3\">\n <div\n data-slot=\"cascader-breadcrumb\"\n aria-live=\"polite\"\n className={cn(\n 'text-muted-foreground text-sm [overflow-wrap:anywhere]',\n classNames?.breadcrumb, //\n )}\n >\n {activeNodes.length\n ? activeNodes.map(node => node.label).join(' / ')\n : getLevelLabel(1)}\n </div>\n {activePath.length > 0 && (\n <Button\n variant=\"text\"\n size=\"small\"\n onClick={() => setBrowsePath(activePath.slice(0, -1))}\n >\n {backLabel}\n </Button>\n )}\n {currentOptions.length ? (\n <Select\n value={null}\n dir={resolvedDirection}\n aria-label={getLevelLabel(level)}\n placeholder={getLevelLabel(level)}\n className={cn(\n 'w-full max-w-full',\n classNames?.select, //\n )}\n options={currentOptions.map(option => ({\n label: option.label,\n value: option.value,\n disabled: option.disabled,\n }))}\n onChange={next => {\n const option = currentOptions.find(\n item => item.value === next && !item.disabled,\n );\n\n if (!option) {\n return;\n }\n\n const path = [...activePath, option.value];\n\n if (option.children?.length) {\n setBrowsePath(path);\n } else {\n commit(path);\n }\n }}\n />\n ) : (\n <p className=\"text-muted-foreground m-0 text-sm\">{emptyText}</p>\n )}\n </div>\n }\n >\n <Button\n disabled={disabled}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={[ariaDescribedBy, statusId]\n .filter(Boolean)\n .join(' ')}\n className={cn(\n 'min-w-0 flex-1 justify-between',\n classNames?.trigger, //\n )}\n >\n <span className=\"truncate\">{selectedText}</span>\n <ChevronDown aria-hidden=\"true\" className=\"size-4 shrink-0\" />\n </Button>\n </Popover>\n {allowClear && selectedPath.length > 0 && (\n <Button\n variant=\"text\"\n size=\"small\"\n disabled={disabled}\n aria-label={clearLabel}\n icon={<X />}\n onClick={() => commit([])}\n className={cn(\n 'shrink-0',\n classNames?.clear, //\n )}\n />\n )}\n <span\n id={statusId}\n data-slot=\"cascader-status\"\n className=\"sr-only\"\n aria-live=\"polite\"\n >\n {selectedText}\n </span>\n </div>\n </DirectionProvider>\n );\n};\n\nexport default Cascader;\n"],"mappings":";;;;;;;;;;;AA+CA,MAAM,eAAe,SAA4B,SAA4B;CAC3E,MAAM,SAAmB,CAAC;CAC1B,IAAI,WAAW;CAEf,KAAK,MAAM,SAAS,MAAM;EACxB,MAAM,SAAS,SAAS,MACtB,SAAQ,KAAK,UAAU,SAAS,CAAC,KAAK,QACxC;EAEA,IAAI,CAAC,QACH;EAGF,OAAO,KAAK,MAAM;EAClB,WAAW,OAAO,YAAY,CAAC;CACjC;CAEA,OAAO;AACT;AAEA,MAAM,YAAY,EAChB,SACA,OACA,eAAe,CAAC,GAChB,UACA,WAAW,OACX,aAAa,MACb,cAAc,iBACd,YAAY,QACZ,aAAa,mBACb,YAAY,cACZ,iBAAgB,UAAS,SAAS,SAClC,WACA,YACA,KACA,cAAc,WACd,mBAAmB,gBACnB,oBAAoB,iBACpB,GAAG,YACQ;CACX,MAAM,CAAC,eAAe,oBACpB,SAA4B,YAAY;CAC1C,MAAM,CAAC,QAAQ,aAAa,SAAS,KAAK;CAC1C,MAAM,CAAC,YAAY,iBAAiB,SAAmB,CAAC,CAAC;CACzD,MAAM,eAAe,SAAS;CAC9B,MAAM,gBAAgB,YAAY,SAAS,YAAY;CACvD,MAAM,eAAe,cAAc,GAAG,EAAE;CACxC,MAAM,eACJ,aAAa,SAAS,KACtB,cAAc,WAAW,aAAa,UACtC,CAAC,cAAc,UAAU;CAC3B,MAAM,eAAe,eACjB,cAAc,KAAI,SAAQ,KAAK,KAAK,CAAC,CAAC,KAAK,KAAK,IAChD;CACJ,MAAM,iBAAiB,YAAY,SAAS,UAAU;CACtD,MAAM,cACJ,eAAe,WAAW,WAAW,WACpC,WAAW,WAAW,KAAK,eAAe,GAAG,EAAE,CAAC,EAAE,UAAU,UACzD,iBACA,CAAC;CACP,MAAM,aAAa,YAAY,KAAI,SAAQ,KAAK,KAAK;CACrD,MAAM,iBAAiB,YAAY,GAAG,EAAE,CAAC,EAAE,YAAY;CACvD,MAAM,QAAQ,WAAW,SAAS;CAClC,MAAM,EAAE,cAAc,UAAU;CAChC,MAAM,oBAAoB,QAAQ,SAAS,QAAQ,QAAQ,MAAM;CACjE,MAAM,WAAW,MAAM;CAEvB,MAAM,UAAU,SAAmB;EACjC,IAAI,UACF;EAGF,IAAI,UAAU,KAAA,GACZ,iBAAiB,IAAI;EAGvB,IACE,KAAK,WAAW,aAAa,UAC7B,KAAK,MAAM,MAAM,UAAU,SAAS,aAAa,MAAM,GAEvD,WAAW,IAAI;EAGjB,UAAU,KAAK;CACjB;CAEA,MAAM,cAAc,SAAkB;EACpC,IAAI,QAAQ,UACV;EAGF,IAAI,MACF,cAAc,eAAe,CAAC,GAAG,aAAa,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;EAGlE,UAAU,IAAI;CAChB;CAEA,OACE,oBAAC,mBAAD;EAAmB,WAAW;EAC5B,UAAA,qBAAC,OAAD;GACE,GAAI;GACJ,aAAU;GACV,KAAK,OAAO;GACZ,WAAW,GACT,0CACA,SACF;GAPF,UAAA;IASE,oBAAC,SAAD;KACE,MAAM,UAAU,CAAC;KACjB,cAAc;KACd,WAAU;KACV,OAAO,aAAa;KACpB,KAAK;KACL,WAAW,GACT,qCACA,YAAY,KACd;KACA,SACE,qBAAC,OAAD;MAAK,aAAU;MAAiB,WAAU;MAA1C,UAAA;OACE,oBAAC,OAAD;QACE,aAAU;QACV,aAAU;QACV,WAAW,GACT,0DACA,YAAY,UACd;QAEC,UAAA,YAAY,SACT,YAAY,KAAI,SAAQ,KAAK,KAAK,CAAC,CAAC,KAAK,KAAK,IAC9C,cAAc,CAAC;OAChB,CAAA;OACJ,WAAW,SAAS,KACnB,oBAAC,QAAD;QACE,SAAQ;QACR,MAAK;QACL,eAAe,cAAc,WAAW,MAAM,GAAG,EAAE,CAAC;QAEnD,UAAA;OACK,CAAA;OAET,eAAe,SACd,oBAAC,QAAD;QACE,OAAO;QACP,KAAK;QACL,cAAY,cAAc,KAAK;QAC/B,aAAa,cAAc,KAAK;QAChC,WAAW,GACT,qBACA,YAAY,MACd;QACA,SAAS,eAAe,KAAI,YAAW;SACrC,OAAO,OAAO;SACd,OAAO,OAAO;SACd,UAAU,OAAO;QACnB,EAAE;QACF,WAAU,SAAQ;SAChB,MAAM,SAAS,eAAe,MAC5B,SAAQ,KAAK,UAAU,QAAQ,CAAC,KAAK,QACvC;SAEA,IAAI,CAAC,QACH;SAGF,MAAM,OAAO,CAAC,GAAG,YAAY,OAAO,KAAK;SAEzC,IAAI,OAAO,UAAU,QACnB,cAAc,IAAI;cAElB,OAAO,IAAI;QAEf;OACD,CAAA,IAED,oBAAC,KAAD;QAAG,WAAU;QAAqC,UAAA;OAAa,CAAA;MAE9D;;KAGP,UAAA,qBAAC,QAAD;MACY;MACV,cAAY;MACZ,mBAAiB;MACjB,oBAAkB,CAAC,iBAAiB,QAAQ,CAAC,CAC1C,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;MACX,WAAW,GACT,kCACA,YAAY,OACd;MAVF,UAAA,CAYE,oBAAC,QAAD;OAAM,WAAU;OAAY,UAAA;MAAmB,CAAA,GAC/C,oBAAC,aAAD;OAAa,eAAY;OAAO,WAAU;MAAmB,CAAA,CACvD;;IACD,CAAA;IACR,cAAc,aAAa,SAAS,KACnC,oBAAC,QAAD;KACE,SAAQ;KACR,MAAK;KACK;KACV,cAAY;KACZ,MAAM,oBAAC,GAAD,CAAI,CAAA;KACV,eAAe,OAAO,CAAC,CAAC;KACxB,WAAW,GACT,YACA,YAAY,KACd;IACD,CAAA;IAEH,oBAAC,QAAD;KACE,IAAI;KACJ,aAAU;KACV,WAAU;KACV,aAAU;KAET,UAAA;IACG,CAAA;GACH;;CACY,CAAA;AAEvB"}
@@ -0,0 +1,10 @@
1
+ import Group from "./components/atoms/checkbox/group.mjs";
2
+ import Checkbox$1, { Props } from "./components/atoms/checkbox/checkbox.mjs";
3
+ //#region src/components/atoms/checkbox/index.d.ts
4
+ type CheckboxComponent = typeof Checkbox$1 & {
5
+ Group: typeof Group;
6
+ };
7
+ declare const Checkbox: CheckboxComponent;
8
+ //#endregion
9
+ export { type Props, Checkbox as default };
10
+ //# sourceMappingURL=Checkbox.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Checkbox.d.mts","names":["CheckboxImpl"],"sources":["../src/components/atoms/checkbox/index.ts"],"mappings":";;;KAGK,2BAA2BA;EAAiB,cAAc;;cAEzD,UAA2B"}
@@ -0,0 +1,9 @@
1
+ import Checkbox$1 from "./components/atoms/checkbox/checkbox.mjs";
2
+ import Group from "./components/atoms/checkbox/group.mjs";
3
+ //#region src/components/atoms/checkbox/index.ts
4
+ const Checkbox = Checkbox$1;
5
+ Checkbox.Group = Group;
6
+ //#endregion
7
+ export { Checkbox as default };
8
+
9
+ //# sourceMappingURL=Checkbox.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Checkbox.mjs","names":["CheckboxImpl"],"sources":["../src/components/atoms/checkbox/index.ts"],"sourcesContent":["import CheckboxImpl, { type Props } from './checkbox';\nimport Group from './group';\n\ntype CheckboxComponent = typeof CheckboxImpl & { Group: typeof Group };\n\nconst Checkbox = CheckboxImpl as CheckboxComponent;\n\nCheckbox.Group = Group;\n\nexport default Checkbox;\nexport type { Props };\n"],"mappings":";;;AAKA,MAAM,WAAWA;AAEjB,SAAS,QAAQ"}
@@ -1,6 +1,6 @@
1
1
  import CodeMirror, { Extension } from "@uiw/react-codemirror";
2
2
  //#region src/components/atoms/code-editor.d.ts
3
- interface Props extends Omit<React.ComponentProps<typeof CodeMirror>, 'value' | 'extensions' | 'onChange' | 'ref' | 'theme'> {
3
+ export interface Props extends Omit<React.ComponentProps<typeof CodeMirror>, 'value' | 'extensions' | 'onChange' | 'ref' | 'theme'> {
4
4
  value: string;
5
5
  /** Passed through to CodeMirror; `'100%'` fills the wrapper. */
6
6
  height?: string;
@@ -15,7 +15,13 @@ interface Props extends Omit<React.ComponentProps<typeof CodeMirror>, 'value' |
15
15
  * still means what it does upstream: no theme extension, style it yourself.
16
16
  */
17
17
  theme?: 'light' | 'dark' | 'auto' | 'none' | Extension;
18
- /** Appended after the built-in JS/TS + line-wrapping extensions. */
18
+ /**
19
+ * The language extension. Omitted, it is the built-in JS/TS/JSX mode; an
20
+ * `Extension` replaces it (e.g. `json()` from `@codemirror/lang-json`, which
21
+ * the caller installs), and `null` leaves the document as plain text.
22
+ */
23
+ language?: Extension | null;
24
+ /** Appended after the language and line-wrapping extensions. */
19
25
  extensions?: Extension[];
20
26
  /**
21
27
  * Renders a read-through unified diff against `original` instead of a plain
@@ -45,7 +51,7 @@ interface Props extends Omit<React.ComponentProps<typeof CodeMirror>, 'value' |
45
51
  */
46
52
  onFormatError?: (error: string | null) => void;
47
53
  }
48
- declare const CodeEditor: ({ value, theme, height, className, extensions: extraExtensions, diff, formatCode, onChange, onSave, onFormatError, ...props }: Props) => import("react").JSX.Element;
54
+ declare const CodeEditor: ({ value, theme, height, className, language, extensions: extraExtensions, diff, formatCode, onChange, onSave, onFormatError, ...props }: Props) => import("react").JSX.Element;
49
55
  //#endregion
50
- export { Props, CodeEditor as default };
56
+ export { CodeEditor as default };
51
57
  //# sourceMappingURL=CodeEditor.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CodeEditor.d.mts","names":[],"sources":["../src/components/atoms/code-editor.tsx"],"mappings":";;UA2BiB,cAAc,KAC7B,MAAM,sBAAsB;EAG5B;;EAEA;;;;;;;;;;;EAWA,6CAA6C;;EAE7C,aAAa;;;;;;EAMb;IACE;IACA;;;;;;;;EAQF,cAAc,iBAAiB;EAC/B;EACA,YAAY;;EAEZ,UAAU;;;;;;;EAOV,iBAAiB;;cAGb,eAAc,OAAA,OAAA,QAAA,WAAA,YAAA,iBAAA,MAAA,YAAA,UAAA,QAAA,kBAAA,SAYjB,0BAAK,IAAA"}
1
+ {"version":3,"file":"CodeEditor.d.mts","names":[],"sources":["../src/components/atoms/code-editor.tsx"],"mappings":";;iBA2BiB,cAAc,KAC7B,MAAM,sBAAsB;EAG5B;;EAEA;;;;;;;;;;;EAWA,6CAA6C;;;;;;EAM7C,WAAW;;EAEX,aAAa;;;;;;EAMb;IACE;IACA;;;;;;;;EAQF,cAAc,iBAAiB;EAC/B;EACA,YAAY;;EAEZ,UAAU;;;;;;;EAOV,iBAAiB;;cAGb,eAAc,OAAA,OAAA,QAAA,WAAA,UAAA,YAAA,iBAAA,MAAA,YAAA,UAAA,QAAA,kBAAA,SAajB,0BAAK,IAAA"}
@@ -9,7 +9,7 @@ import { vscodeDark, vscodeLight } from "@uiw/codemirror-theme-vscode";
9
9
  import CodeMirror from "@uiw/react-codemirror";
10
10
  import { EditorView } from "codemirror";
11
11
  //#region src/components/atoms/code-editor.tsx
12
- const CodeEditor = ({ value, theme = "auto", height, className, extensions: extraExtensions, diff, formatCode, onChange, onSave, onFormatError, ...props }) => {
12
+ const CodeEditor = ({ value, theme = "auto", height, className, language, extensions: extraExtensions, diff, formatCode, onChange, onSave, onFormatError, ...props }) => {
13
13
  const editorRef = useRef(null);
14
14
  const isDarkActive = useIsDarkActive();
15
15
  const resolvedTheme = useMemo(() => {
@@ -19,16 +19,21 @@ const CodeEditor = ({ value, theme = "auto", height, className, extensions: extr
19
19
  return theme;
20
20
  }, [theme, isDarkActive]);
21
21
  const extensions = useMemo(() => {
22
- const base = [javascript({
22
+ const languageExtension = language === void 0 ? javascript({
23
23
  jsx: true,
24
24
  typescript: true
25
- }), EditorView.lineWrapping];
25
+ }) : language;
26
+ const base = languageExtension ? [languageExtension, EditorView.lineWrapping] : [EditorView.lineWrapping];
26
27
  if (diff) base.push(unifiedMergeView({
27
28
  original: diff.original,
28
29
  mergeControls: diff.mergeControls ?? false
29
30
  }));
30
31
  return [...base, ...extraExtensions ?? []];
31
- }, [diff, extraExtensions]);
32
+ }, [
33
+ language,
34
+ diff,
35
+ extraExtensions
36
+ ]);
32
37
  const save = useCallback(async (val) => {
33
38
  const view = editorRef.current?.view;
34
39
  if (!view) return;
@@ -1 +1 @@
1
- {"version":3,"file":"CodeEditor.mjs","names":[],"sources":["../src/components/atoms/code-editor.tsx"],"sourcesContent":["'use client';\n\n// Subpath-only component (`@jbpark/ui-kit/CodeEditor`). Deliberately NOT\n// re-exported from `atoms/index.ts` — CodeMirror is an *optional* peer\n// dependency, and an ESM re-export from the root barrel is eager, so\n// `import { Button } from '@jbpark/ui-kit'` would fail to resolve for every\n// consumer that never asked for an editor. Keeping it behind its own subpath\n// is what makes the peer set genuinely opt-in (#346).\nimport { useCallback, useMemo, useRef } from 'react';\n\nimport { javascript } from '@codemirror/lang-javascript';\nimport { unifiedMergeView } from '@codemirror/merge';\nimport { vscodeDark, vscodeLight } from '@uiw/codemirror-theme-vscode';\nimport CodeMirror, {\n type Extension,\n type ReactCodeMirrorRef,\n} from '@uiw/react-codemirror';\nimport { EditorView } from 'codemirror';\n\nimport { cn } from '@repo/ui/utils';\n\n// Relative rather than `@repo/ui/providers`, because this hook is deliberately\n// absent from that barrel — it is a published subpath, and the hook is internal.\n// Both specifiers resolve to the same files, so there is still one Config\n// context.\nimport { useIsDarkActive } from '../../providers/config';\n\nexport interface Props extends Omit<\n React.ComponentProps<typeof CodeMirror>,\n 'value' | 'extensions' | 'onChange' | 'ref' | 'theme'\n> {\n value: string;\n /** Passed through to CodeMirror; `'100%'` fills the wrapper. */\n height?: string;\n /**\n * `'light'`/`'dark'` pick the VSCode theme pair, `'auto'` (the default)\n * follows the nearest `Config`'s `theme.dark`, and an `Extension` is any\n * CodeMirror theme of your own.\n *\n * This narrows CodeMirror's own meaning for two of the strings — upstream,\n * `'light'`/`'dark'` are *its* built-in themes — so that the two named\n * options match what the component actually renders by default. `'none'`\n * still means what it does upstream: no theme extension, style it yourself.\n */\n theme?: 'light' | 'dark' | 'auto' | 'none' | Extension;\n /** Appended after the built-in JS/TS + line-wrapping extensions. */\n extensions?: Extension[];\n /**\n * Renders a read-through unified diff against `original` instead of a plain\n * document. `mergeControls` defaults to `false` (display-only review, no\n * accept/reject gutters).\n */\n diff?: {\n original: string;\n mergeControls?: boolean;\n };\n /**\n * Formatter run on the Cmd/Ctrl+S value before it is written back. Omitted,\n * the shortcut still fires `onSave` — it just doesn't reformat. Kept as an\n * injected function so this package carries no formatter dependency of its\n * own (prettier is ~9.6 MB); pass the one your app already owns.\n */\n formatCode?: (code: string) => Promise<string>;\n className?: string;\n onChange?: (value: string) => void;\n /** Fires on Cmd/Ctrl+S with the value that was written back. */\n onSave?: (value: string) => void;\n /**\n * `null` on a clean save; a string carries the message a failed `formatCode`\n * threw. Named `onFormatError` rather than `onError` because the base props\n * already carry the DOM `onError` handler, and silently shadowing it would\n * be worse than the extra word.\n */\n onFormatError?: (error: string | null) => void;\n}\n\nconst CodeEditor = ({\n value,\n theme = 'auto',\n height,\n className,\n extensions: extraExtensions,\n diff,\n formatCode,\n onChange,\n onSave,\n onFormatError,\n ...props\n}: Props) => {\n const editorRef = useRef<ReactCodeMirrorRef>(null);\n const isDarkActive = useIsDarkActive();\n\n const resolvedTheme = useMemo(() => {\n if (theme === 'auto') {\n return isDarkActive ? vscodeDark : vscodeLight;\n }\n if (theme === 'light') {\n return vscodeLight;\n }\n if (theme === 'dark') {\n return vscodeDark;\n }\n\n // `'none'` and a caller-supplied Extension both mean what they mean\n // upstream, so hand them straight to CodeMirror.\n return theme;\n }, [theme, isDarkActive]);\n\n const extensions = useMemo(() => {\n const base: Extension[] = [\n javascript({ jsx: true, typescript: true }),\n EditorView.lineWrapping,\n ];\n\n if (diff) {\n base.push(\n unifiedMergeView({\n original: diff.original,\n mergeControls: diff.mergeControls ?? false,\n }),\n );\n }\n\n return [...base, ...(extraExtensions ?? [])];\n }, [diff, extraExtensions]);\n\n const save = useCallback(\n async (val: string) => {\n const view = editorRef.current?.view;\n if (!view) {\n return;\n }\n\n try {\n const currentLength = view.state.doc.length;\n const cursorPos = view.state.selection.main.head;\n const next = formatCode ? await formatCode(val) : val;\n\n // Formatting is async, so the document may have moved on while it ran\n // — writing back then would clobber keystrokes typed in the meantime.\n if (currentLength !== view.state.doc.length) {\n onFormatError?.(null);\n return;\n }\n\n // Skip the transaction when the text is unchanged (the common case\n // without a `formatCode`): replacing the doc with itself would push a\n // pointless undo entry. The callbacks still fire, so a save handler\n // sees every Cmd+S.\n if (next !== val) {\n view.dispatch(\n view.state.update({\n changes: { from: 0, to: currentLength, insert: next },\n selection: { anchor: Math.min(cursorPos, next.length) },\n }),\n );\n }\n\n onChange?.(next);\n onSave?.(next);\n onFormatError?.(null);\n } catch (e) {\n onFormatError?.(e instanceof Error ? e.message : String(e));\n }\n },\n [formatCode, onChange, onSave, onFormatError],\n );\n\n const onKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 's') {\n e.preventDefault();\n save(editorRef.current?.view?.state.doc.toString() ?? value);\n }\n },\n [save, value],\n );\n\n return (\n <div\n data-slot=\"code-editor\"\n className={cn(\n className,\n // ...\n )}\n onKeyDown={onKeyDown}\n >\n <CodeMirror\n ref={editorRef}\n theme={resolvedTheme}\n height={height || '100%'}\n value={value}\n extensions={extensions}\n onChange={onChange}\n {...props}\n />\n </div>\n );\n};\n\nexport default CodeEditor;\n"],"mappings":";;;;;;;;;;;AA4EA,MAAM,cAAc,EAClB,OACA,QAAQ,QACR,QACA,WACA,YAAY,iBACZ,MACA,YACA,UACA,QACA,eACA,GAAG,YACQ;CACX,MAAM,YAAY,OAA2B,IAAI;CACjD,MAAM,eAAe,gBAAgB;CAErC,MAAM,gBAAgB,cAAc;EAClC,IAAI,UAAU,QACZ,OAAO,eAAe,aAAa;EAErC,IAAI,UAAU,SACZ,OAAO;EAET,IAAI,UAAU,QACZ,OAAO;EAKT,OAAO;CACT,GAAG,CAAC,OAAO,YAAY,CAAC;CAExB,MAAM,aAAa,cAAc;EAC/B,MAAM,OAAoB,CACxB,WAAW;GAAE,KAAK;GAAM,YAAY;EAAK,CAAC,GAC1C,WAAW,YACb;EAEA,IAAI,MACF,KAAK,KACH,iBAAiB;GACf,UAAU,KAAK;GACf,eAAe,KAAK,iBAAiB;EACvC,CAAC,CACH;EAGF,OAAO,CAAC,GAAG,MAAM,GAAI,mBAAmB,CAAC,CAAE;CAC7C,GAAG,CAAC,MAAM,eAAe,CAAC;CAE1B,MAAM,OAAO,YACX,OAAO,QAAgB;EACrB,MAAM,OAAO,UAAU,SAAS;EAChC,IAAI,CAAC,MACH;EAGF,IAAI;GACF,MAAM,gBAAgB,KAAK,MAAM,IAAI;GACrC,MAAM,YAAY,KAAK,MAAM,UAAU,KAAK;GAC5C,MAAM,OAAO,aAAa,MAAM,WAAW,GAAG,IAAI;GAIlD,IAAI,kBAAkB,KAAK,MAAM,IAAI,QAAQ;IAC3C,gBAAgB,IAAI;IACpB;GACF;GAMA,IAAI,SAAS,KACX,KAAK,SACH,KAAK,MAAM,OAAO;IAChB,SAAS;KAAE,MAAM;KAAG,IAAI;KAAe,QAAQ;IAAK;IACpD,WAAW,EAAE,QAAQ,KAAK,IAAI,WAAW,KAAK,MAAM,EAAE;GACxD,CAAC,CACH;GAGF,WAAW,IAAI;GACf,SAAS,IAAI;GACb,gBAAgB,IAAI;EACtB,SAAS,GAAG;GACV,gBAAgB,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC,CAAC;EAC5D;CACF,GACA;EAAC;EAAY;EAAU;EAAQ;CAAa,CAC9C;CAEA,MAAM,YAAY,aACf,MAA2C;EAC1C,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,KAAK;GAC7C,EAAE,eAAe;GACjB,KAAK,UAAU,SAAS,MAAM,MAAM,IAAI,SAAS,KAAK,KAAK;EAC7D;CACF,GACA,CAAC,MAAM,KAAK,CACd;CAEA,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GACT,SAEF;EACW;EAEX,UAAA,oBAAC,YAAD;GACE,KAAK;GACL,OAAO;GACP,QAAQ,UAAU;GACX;GACK;GACF;GACV,GAAI;EACL,CAAA;CACE,CAAA;AAET"}
1
+ {"version":3,"file":"CodeEditor.mjs","names":[],"sources":["../src/components/atoms/code-editor.tsx"],"sourcesContent":["'use client';\n\n// Subpath-only component (`@jbpark/ui-kit/CodeEditor`). Deliberately NOT\n// re-exported from `atoms/index.ts` — CodeMirror is an *optional* peer\n// dependency, and an ESM re-export from the root barrel is eager, so\n// `import { Button } from '@jbpark/ui-kit'` would fail to resolve for every\n// consumer that never asked for an editor. Keeping it behind its own subpath\n// is what makes the peer set genuinely opt-in (#346).\nimport { useCallback, useMemo, useRef } from 'react';\n\nimport { javascript } from '@codemirror/lang-javascript';\nimport { unifiedMergeView } from '@codemirror/merge';\nimport { vscodeDark, vscodeLight } from '@uiw/codemirror-theme-vscode';\nimport CodeMirror, {\n type Extension,\n type ReactCodeMirrorRef,\n} from '@uiw/react-codemirror';\nimport { EditorView } from 'codemirror';\n\nimport { cn } from '@repo/ui/utils';\n\n// Relative rather than `@repo/ui/providers`, because this hook is deliberately\n// absent from that barrel — it is a published subpath, and the hook is internal.\n// Both specifiers resolve to the same files, so there is still one Config\n// context.\nimport { useIsDarkActive } from '../../providers/config';\n\nexport interface Props extends Omit<\n React.ComponentProps<typeof CodeMirror>,\n 'value' | 'extensions' | 'onChange' | 'ref' | 'theme'\n> {\n value: string;\n /** Passed through to CodeMirror; `'100%'` fills the wrapper. */\n height?: string;\n /**\n * `'light'`/`'dark'` pick the VSCode theme pair, `'auto'` (the default)\n * follows the nearest `Config`'s `theme.dark`, and an `Extension` is any\n * CodeMirror theme of your own.\n *\n * This narrows CodeMirror's own meaning for two of the strings — upstream,\n * `'light'`/`'dark'` are *its* built-in themes — so that the two named\n * options match what the component actually renders by default. `'none'`\n * still means what it does upstream: no theme extension, style it yourself.\n */\n theme?: 'light' | 'dark' | 'auto' | 'none' | Extension;\n /**\n * The language extension. Omitted, it is the built-in JS/TS/JSX mode; an\n * `Extension` replaces it (e.g. `json()` from `@codemirror/lang-json`, which\n * the caller installs), and `null` leaves the document as plain text.\n */\n language?: Extension | null;\n /** Appended after the language and line-wrapping extensions. */\n extensions?: Extension[];\n /**\n * Renders a read-through unified diff against `original` instead of a plain\n * document. `mergeControls` defaults to `false` (display-only review, no\n * accept/reject gutters).\n */\n diff?: {\n original: string;\n mergeControls?: boolean;\n };\n /**\n * Formatter run on the Cmd/Ctrl+S value before it is written back. Omitted,\n * the shortcut still fires `onSave` — it just doesn't reformat. Kept as an\n * injected function so this package carries no formatter dependency of its\n * own (prettier is ~9.6 MB); pass the one your app already owns.\n */\n formatCode?: (code: string) => Promise<string>;\n className?: string;\n onChange?: (value: string) => void;\n /** Fires on Cmd/Ctrl+S with the value that was written back. */\n onSave?: (value: string) => void;\n /**\n * `null` on a clean save; a string carries the message a failed `formatCode`\n * threw. Named `onFormatError` rather than `onError` because the base props\n * already carry the DOM `onError` handler, and silently shadowing it would\n * be worse than the extra word.\n */\n onFormatError?: (error: string | null) => void;\n}\n\nconst CodeEditor = ({\n value,\n theme = 'auto',\n height,\n className,\n language,\n extensions: extraExtensions,\n diff,\n formatCode,\n onChange,\n onSave,\n onFormatError,\n ...props\n}: Props) => {\n const editorRef = useRef<ReactCodeMirrorRef>(null);\n const isDarkActive = useIsDarkActive();\n\n const resolvedTheme = useMemo(() => {\n if (theme === 'auto') {\n return isDarkActive ? vscodeDark : vscodeLight;\n }\n if (theme === 'light') {\n return vscodeLight;\n }\n if (theme === 'dark') {\n return vscodeDark;\n }\n\n // `'none'` and a caller-supplied Extension both mean what they mean\n // upstream, so hand them straight to CodeMirror.\n return theme;\n }, [theme, isDarkActive]);\n\n const extensions = useMemo(() => {\n const languageExtension =\n language === undefined\n ? javascript({ jsx: true, typescript: true })\n : language;\n const base: Extension[] = languageExtension\n ? [languageExtension, EditorView.lineWrapping]\n : [EditorView.lineWrapping];\n\n if (diff) {\n base.push(\n unifiedMergeView({\n original: diff.original,\n mergeControls: diff.mergeControls ?? false,\n }),\n );\n }\n\n return [...base, ...(extraExtensions ?? [])];\n }, [language, diff, extraExtensions]);\n\n const save = useCallback(\n async (val: string) => {\n const view = editorRef.current?.view;\n if (!view) {\n return;\n }\n\n try {\n const currentLength = view.state.doc.length;\n const cursorPos = view.state.selection.main.head;\n const next = formatCode ? await formatCode(val) : val;\n\n // Formatting is async, so the document may have moved on while it ran\n // — writing back then would clobber keystrokes typed in the meantime.\n if (currentLength !== view.state.doc.length) {\n onFormatError?.(null);\n return;\n }\n\n // Skip the transaction when the text is unchanged (the common case\n // without a `formatCode`): replacing the doc with itself would push a\n // pointless undo entry. The callbacks still fire, so a save handler\n // sees every Cmd+S.\n if (next !== val) {\n view.dispatch(\n view.state.update({\n changes: { from: 0, to: currentLength, insert: next },\n selection: { anchor: Math.min(cursorPos, next.length) },\n }),\n );\n }\n\n onChange?.(next);\n onSave?.(next);\n onFormatError?.(null);\n } catch (e) {\n onFormatError?.(e instanceof Error ? e.message : String(e));\n }\n },\n [formatCode, onChange, onSave, onFormatError],\n );\n\n const onKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 's') {\n e.preventDefault();\n save(editorRef.current?.view?.state.doc.toString() ?? value);\n }\n },\n [save, value],\n );\n\n return (\n <div\n data-slot=\"code-editor\"\n className={cn(\n className,\n // ...\n )}\n onKeyDown={onKeyDown}\n >\n <CodeMirror\n ref={editorRef}\n theme={resolvedTheme}\n height={height || '100%'}\n value={value}\n extensions={extensions}\n onChange={onChange}\n {...props}\n />\n </div>\n );\n};\n\nexport default CodeEditor;\n"],"mappings":";;;;;;;;;;;AAkFA,MAAM,cAAc,EAClB,OACA,QAAQ,QACR,QACA,WACA,UACA,YAAY,iBACZ,MACA,YACA,UACA,QACA,eACA,GAAG,YACQ;CACX,MAAM,YAAY,OAA2B,IAAI;CACjD,MAAM,eAAe,gBAAgB;CAErC,MAAM,gBAAgB,cAAc;EAClC,IAAI,UAAU,QACZ,OAAO,eAAe,aAAa;EAErC,IAAI,UAAU,SACZ,OAAO;EAET,IAAI,UAAU,QACZ,OAAO;EAKT,OAAO;CACT,GAAG,CAAC,OAAO,YAAY,CAAC;CAExB,MAAM,aAAa,cAAc;EAC/B,MAAM,oBACJ,aAAa,KAAA,IACT,WAAW;GAAE,KAAK;GAAM,YAAY;EAAK,CAAC,IAC1C;EACN,MAAM,OAAoB,oBACtB,CAAC,mBAAmB,WAAW,YAAY,IAC3C,CAAC,WAAW,YAAY;EAE5B,IAAI,MACF,KAAK,KACH,iBAAiB;GACf,UAAU,KAAK;GACf,eAAe,KAAK,iBAAiB;EACvC,CAAC,CACH;EAGF,OAAO,CAAC,GAAG,MAAM,GAAI,mBAAmB,CAAC,CAAE;CAC7C,GAAG;EAAC;EAAU;EAAM;CAAe,CAAC;CAEpC,MAAM,OAAO,YACX,OAAO,QAAgB;EACrB,MAAM,OAAO,UAAU,SAAS;EAChC,IAAI,CAAC,MACH;EAGF,IAAI;GACF,MAAM,gBAAgB,KAAK,MAAM,IAAI;GACrC,MAAM,YAAY,KAAK,MAAM,UAAU,KAAK;GAC5C,MAAM,OAAO,aAAa,MAAM,WAAW,GAAG,IAAI;GAIlD,IAAI,kBAAkB,KAAK,MAAM,IAAI,QAAQ;IAC3C,gBAAgB,IAAI;IACpB;GACF;GAMA,IAAI,SAAS,KACX,KAAK,SACH,KAAK,MAAM,OAAO;IAChB,SAAS;KAAE,MAAM;KAAG,IAAI;KAAe,QAAQ;IAAK;IACpD,WAAW,EAAE,QAAQ,KAAK,IAAI,WAAW,KAAK,MAAM,EAAE;GACxD,CAAC,CACH;GAGF,WAAW,IAAI;GACf,SAAS,IAAI;GACb,gBAAgB,IAAI;EACtB,SAAS,GAAG;GACV,gBAAgB,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC,CAAC;EAC5D;CACF,GACA;EAAC;EAAY;EAAU;EAAQ;CAAa,CAC9C;CAEA,MAAM,YAAY,aACf,MAA2C;EAC1C,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,KAAK;GAC7C,EAAE,eAAe;GACjB,KAAK,UAAU,SAAS,MAAM,MAAM,IAAI,SAAS,KAAK,KAAK;EAC7D;CACF,GACA,CAAC,MAAM,KAAK,CACd;CAEA,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GACT,SAEF;EACW;EAEX,UAAA,oBAAC,YAAD;GACE,KAAK;GACL,OAAO;GACP,QAAQ,UAAU;GACX;GACK;GACF;GACV,GAAI;EACL,CAAA;CACE,CAAA;AAET"}
@@ -6,7 +6,7 @@ interface Item<Key extends React.Key = string> {
6
6
  disabled?: boolean;
7
7
  children: React.ReactNode;
8
8
  }
9
- interface Props<Key extends React.Key = string> extends Omit<React.ComponentPropsWithoutRef<'div'>, 'onChange' | 'defaultValue' | 'value' | 'dir'> {
9
+ export interface Props<Key extends React.Key = string> extends Omit<React.ComponentPropsWithoutRef<'div'>, 'onChange' | 'defaultValue' | 'value' | 'dir'> {
10
10
  items?: Item<Key>[];
11
11
  accordion?: boolean;
12
12
  expandIcon?: React.ReactNode;
@@ -21,5 +21,5 @@ interface Props<Key extends React.Key = string> extends Omit<React.ComponentProp
21
21
  }
22
22
  declare const Collapse: <Key extends React.Key = string>({ expandIcon, accordion, items, className, classNames, defaultActiveKey, activeKey: _activeKey, onChange: _onChange, ...props }: Props<Key>) => React.JSX.Element;
23
23
  //#endregion
24
- export { Props, Collapse as default };
25
- //# sourceMappingURL=collapse.d.mts.map
24
+ export { Collapse as default };
25
+ //# sourceMappingURL=Collapse.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Collapse.d.mts","names":[],"sources":["../src/components/molecules/collapse.tsx"],"mappings":";;UAWU,KAAK,YAAY,MAAM;EAC/B,KAAK;EACL,OAAO,MAAM;EACb;EACA,UAAU,MAAM;;iBAGD,MAAM,YAAY,MAAM,sBAAsB,KAC7D,MAAM;EAGN,QAAQ,KAAK;EACb;EACA,aAAa,MAAM;EACnB;IACE;IACA;IACA;;EAEF,mBAAmB;EACnB,YAAY;EACZ,YAAY,MAAM;;cAGd,WAAY,YAAY,MAAM,gBAAc,YAAA,WAAA,OAAA,WAAA,YAAA,kBAAA,WAAA,YAAA,UAAA,cAAA,SAU/C,MAAM,SAAI,MAAA,IAAA"}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import { cn } from "../../utils.mjs";
3
- import { accordion_exports } from "../../core/accordion.mjs";
2
+ import { cn } from "./utils.mjs";
3
+ import { accordion_exports } from "./core/accordion.mjs";
4
4
  import "react";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
6
  //#region src/components/molecules/collapse.tsx
@@ -45,4 +45,4 @@ const Collapse = ({ expandIcon, accordion = false, items = [], className, classN
45
45
  //#endregion
46
46
  export { Collapse as default };
47
47
 
48
- //# sourceMappingURL=collapse.mjs.map
48
+ //# sourceMappingURL=Collapse.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Collapse.mjs","names":["accordion"],"sources":["../src/components/molecules/collapse.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport { cn } from '@repo/ui/utils';\n\nimport { accordion } from '../../core';\n\nconst { Accordion, AccordionItem, AccordionTrigger, AccordionContent } =\n accordion;\n\ninterface Item<Key extends React.Key = string> {\n key: Key;\n label: React.ReactNode;\n disabled?: boolean;\n children: React.ReactNode;\n}\n\nexport interface Props<Key extends React.Key = string> extends Omit<\n React.ComponentPropsWithoutRef<'div'>,\n 'onChange' | 'defaultValue' | 'value' | 'dir'\n> {\n items?: Item<Key>[];\n accordion?: boolean;\n expandIcon?: React.ReactNode;\n classNames?: {\n item?: string;\n header?: string;\n body?: string;\n };\n defaultActiveKey?: Key[];\n activeKey?: Key[];\n onChange?: (keys: Key[]) => void;\n}\n\nconst Collapse = <Key extends React.Key = string>({\n expandIcon,\n accordion = false,\n items = [],\n className,\n classNames,\n defaultActiveKey,\n activeKey: _activeKey,\n onChange: _onChange,\n ...props\n}: Props<Key>) => {\n const controlled = _activeKey !== undefined;\n const keysByValue = new Map<string, Key>(\n [\n ...(defaultActiveKey ?? []),\n ...(_activeKey ?? []),\n ...items.map(item => item.key),\n ].map(key => [String(key), key]),\n );\n\n // Base UI's accordion has no `type` and always models the open set as an\n // array; `multiple` (default false) is the only single-vs-multiple switch.\n // `accordion` here means \"one panel open at a time\", so `multiple = !accordion`.\n const accordionProps = {\n multiple: !accordion,\n onValueChange: (values: string[]) => {\n _onChange?.(\n values.flatMap(value => {\n const key = keysByValue.get(value);\n\n return key === undefined ? [] : [key];\n }),\n );\n },\n ...(controlled\n ? { value: (_activeKey ?? []).map(key => String(key)) }\n : { defaultValue: (defaultActiveKey ?? []).map(key => String(key)) }),\n };\n\n return (\n <Accordion {...props} className={className} {...accordionProps}>\n {items.map(({ key, label, children, disabled }) => (\n <AccordionItem\n key={key}\n value={String(key)}\n className={cn(\n 'border-none',\n classNames?.item,\n //\n )}\n disabled={disabled}\n >\n <AccordionTrigger\n className={cn(\n 'hover:no-underline',\n classNames?.header,\n disabled && 'cursor-no-drop opacity-50',\n //\n )}\n expandIcon={expandIcon}\n disabled={disabled}\n >\n {label}\n </AccordionTrigger>\n <AccordionContent\n className={cn(\n classNames?.body,\n //\n )}\n >\n {children}\n </AccordionContent>\n </AccordionItem>\n ))}\n </Accordion>\n );\n};\n\nexport default Collapse;\n"],"mappings":";;;;;;AAQA,MAAM,EAAE,WAAW,eAAe,kBAAkB,qBAClDA;AA0BF,MAAM,YAA4C,EAChD,YACA,YAAY,OACZ,QAAQ,CAAC,GACT,WACA,YACA,kBACA,WAAW,YACX,UAAU,WACV,GAAG,YACa;CAChB,MAAM,aAAa,eAAe,KAAA;CAClC,MAAM,cAAc,IAAI,IACtB;EACE,GAAI,oBAAoB,CAAC;EACzB,GAAI,cAAc,CAAC;EACnB,GAAG,MAAM,KAAI,SAAQ,KAAK,GAAG;CAC/B,CAAC,CAAC,KAAI,QAAO,CAAC,OAAO,GAAG,GAAG,GAAG,CAAC,CACjC;CAKA,MAAM,iBAAiB;EACrB,UAAU,CAAC;EACX,gBAAgB,WAAqB;GACnC,YACE,OAAO,SAAQ,UAAS;IACtB,MAAM,MAAM,YAAY,IAAI,KAAK;IAEjC,OAAO,QAAQ,KAAA,IAAY,CAAC,IAAI,CAAC,GAAG;GACtC,CAAC,CACH;EACF;EACA,GAAI,aACA,EAAE,QAAQ,cAAc,CAAC,EAAA,CAAG,KAAI,QAAO,OAAO,GAAG,CAAC,EAAE,IACpD,EAAE,eAAe,oBAAoB,CAAC,EAAA,CAAG,KAAI,QAAO,OAAO,GAAG,CAAC,EAAE;CACvE;CAEA,OACE,oBAAC,WAAD;EAAW,GAAI;EAAkB;EAAW,GAAI;EAC7C,UAAA,MAAM,KAAK,EAAE,KAAK,OAAO,UAAU,eAClC,qBAAC,eAAD;GAEE,OAAO,OAAO,GAAG;GACjB,WAAW,GACT,eACA,YAAY,IAEd;GACU;GARZ,UAAA,CAUE,oBAAC,kBAAD;IACE,WAAW,GACT,sBACA,YAAY,QACZ,YAAY,2BAEd;IACY;IACF;IAET,UAAA;GACe,CAAA,GAClB,oBAAC,kBAAD;IACE,WAAW,GACT,YAAY,IAEd;IAEC;GACe,CAAA,CACL;EA7BR,GAAA,GA6BQ,CAChB;CACQ,CAAA;AAEf"}
@@ -1,5 +1,5 @@
1
1
  //#region src/components/atoms/color-picker.d.ts
2
- interface Props extends Omit<React.ComponentPropsWithoutRef<'div'>, 'onChange' | 'defaultValue' | 'value' | 'onClick' | 'onKeyDown' | 'open'> {
2
+ export interface Props extends Omit<React.ComponentPropsWithoutRef<'div'>, 'onChange' | 'defaultValue' | 'value' | 'onClick' | 'onKeyDown' | 'open'> {
3
3
  defaultValue?: string;
4
4
  value?: string;
5
5
  showText?: boolean;
@@ -11,5 +11,5 @@ interface Props extends Omit<React.ComponentPropsWithoutRef<'div'>, 'onChange' |
11
11
  }
12
12
  declare const ColorPicker: ({ defaultValue, value: _value, showText, disabled, className, onChange: _onChange, open: _open, defaultOpen, onOpenChange, ...props }: Props) => import("react").JSX.Element;
13
13
  //#endregion
14
- export { Props, ColorPicker as default };
15
- //# sourceMappingURL=color-picker.d.mts.map
14
+ export { ColorPicker as default };
15
+ //# sourceMappingURL=ColorPicker.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColorPicker.d.mts","names":[],"sources":["../src/components/atoms/color-picker.tsx"],"mappings":";iBAUiB,cAAc,KAC7B,MAAM;EAGN;EACA;EACA;EACA;EACA,YAAY;EACZ;EACA;EACA,gBAAgB;;cAGZ,gBAAe,cAAA,OAAA,QAAA,UAAA,UAAA,WAAA,UAAA,WAAA,MAAA,OAAA,aAAA,iBAAA,SAWlB,0BAAK,IAAA"}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import { cn } from "../../utils.mjs";
3
- import Popover from "./popover.mjs";
2
+ import { cn } from "./utils.mjs";
3
+ import Popover from "./Popover.mjs";
4
4
  import { useControllableState } from "@jbpark/use-hooks";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
6
  import { HexColorPicker } from "react-colorful";
@@ -57,4 +57,4 @@ const ColorPicker = ({ defaultValue, value: _value, showText, disabled, classNam
57
57
  //#endregion
58
58
  export { ColorPicker as default };
59
59
 
60
- //# sourceMappingURL=color-picker.mjs.map
60
+ //# sourceMappingURL=ColorPicker.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColorPicker.mjs","names":[],"sources":["../src/components/atoms/color-picker.tsx"],"sourcesContent":["'use client';\n\nimport { HexColorPicker } from 'react-colorful';\n\nimport { useControllableState } from '@jbpark/use-hooks';\n\nimport { cn } from '@repo/ui/utils';\n\nimport Popover from './popover';\n\nexport interface Props extends Omit<\n React.ComponentPropsWithoutRef<'div'>,\n 'onChange' | 'defaultValue' | 'value' | 'onClick' | 'onKeyDown' | 'open'\n> {\n defaultValue?: string;\n value?: string;\n showText?: boolean;\n disabled?: boolean;\n onChange?: (color: string) => void;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nconst ColorPicker = ({\n defaultValue,\n value: _value,\n showText,\n disabled,\n className,\n onChange: _onChange = () => {},\n open: _open,\n defaultOpen,\n onOpenChange,\n ...props\n}: Props) => {\n const [value, setValue] = useControllableState<string>({\n value: _value,\n defaultValue: defaultValue ?? '#fff',\n onChange: _onChange,\n });\n const [open, setOpen] = useControllableState<boolean>({\n value: _open,\n defaultValue: defaultOpen ?? false,\n onChange: onOpenChange,\n });\n\n const onChange = (color: string) => {\n if (disabled) {\n return;\n }\n setValue(color);\n };\n\n return (\n <Popover\n placement=\"bottomLeft\"\n open={open}\n onOpenChange={setOpen}\n content={<HexColorPicker color={value} onChange={onChange} />}\n >\n <div\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled}\n className={cn(\n 'inline-flex items-center',\n 'rounded border p-0.5',\n disabled && 'cursor-not-allowed opacity-50',\n className,\n )}\n {...props}\n onClick={e => {\n if (disabled) {\n e.preventDefault();\n }\n }}\n onKeyDown={e => {\n if (disabled) {\n return;\n }\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.currentTarget.click();\n }\n }}\n >\n <div\n className={cn(\n 'size-6 rounded border',\n 'shadow-sm',\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n )}\n style={{ backgroundColor: value }}\n />\n {showText && (\n <span className=\"px-1 font-mono text-sm font-medium\">\n {value.toUpperCase()}\n </span>\n )}\n </div>\n </Popover>\n );\n};\n\nexport default ColorPicker;\n"],"mappings":";;;;;;;AAwBA,MAAM,eAAe,EACnB,cACA,OAAO,QACP,UACA,UACA,WACA,UAAU,kBAAkB,CAAC,GAC7B,MAAM,OACN,aACA,cACA,GAAG,YACQ;CACX,MAAM,CAAC,OAAO,YAAY,qBAA6B;EACrD,OAAO;EACP,cAAc,gBAAgB;EAC9B,UAAU;CACZ,CAAC;CACD,MAAM,CAAC,MAAM,WAAW,qBAA8B;EACpD,OAAO;EACP,cAAc,eAAe;EAC7B,UAAU;CACZ,CAAC;CAED,MAAM,YAAY,UAAkB;EAClC,IAAI,UACF;EAEF,SAAS,KAAK;CAChB;CAEA,OACE,oBAAC,SAAD;EACE,WAAU;EACJ;EACN,cAAc;EACd,SAAS,oBAAC,gBAAD;GAAgB,OAAO;GAAiB;EAAW,CAAA;EAE5D,UAAA,qBAAC,OAAD;GACE,MAAK;GACL,UAAU,WAAW,KAAK;GAC1B,iBAAe;GACf,WAAW,GACT,4BACA,wBACA,YAAY,iCACZ,SACF;GACA,GAAI;GACJ,UAAS,MAAK;IACZ,IAAI,UACF,EAAE,eAAe;GAErB;GACA,YAAW,MAAK;IACd,IAAI,UACF;IAEF,IAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAK;KACtC,EAAE,eAAe;KACjB,EAAE,cAAc,MAAM;IACxB;GACF;GAxBF,UAAA,CA0BE,oBAAC,OAAD;IACE,WAAW,GACT,yBACA,aACA,WAAW,uBAAuB,gBACpC;IACA,OAAO,EAAE,iBAAiB,MAAM;GACjC,CAAA,GACA,YACC,oBAAC,QAAD;IAAM,WAAU;IACb,UAAA,MAAM,YAAY;GACf,CAAA,CAEL;;CACE,CAAA;AAEb"}
@@ -1,12 +1,12 @@
1
1
  import { useRender } from "@base-ui/react/use-render";
2
2
  //#region src/components/templates/container.d.ts
3
3
  type MaxWidth = '3xs' | '2xs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl' | '6xl' | '7xl' | 'full' | 'none';
4
- interface Props extends Omit<useRender.ComponentProps<'div'>, 'className'> {
4
+ export interface Props extends Omit<useRender.ComponentProps<'div'>, 'className'> {
5
5
  maxWidth?: MaxWidth;
6
6
  padded?: boolean;
7
7
  className?: string;
8
8
  }
9
9
  declare const Container: ({ className, maxWidth, padded, render, ...props }: Props) => import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
10
10
  //#endregion
11
- export { Props, Container as default };
12
- //# sourceMappingURL=container.d.mts.map
11
+ export { Container as default };
12
+ //# sourceMappingURL=Container.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Container.d.mts","names":[],"sources":["../src/components/templates/container.tsx"],"mappings":";;KAMK;iBAmCY,cAAc,KAC7B,UAAU;EAGV,WAAW;EACX;EACA;;cAMI,cAAa,WAAA,UAAA,QAAA,WAAA,SAMhB,0BAAK,+CAAA"}
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { cn } from "../../utils.mjs";
2
+ import { cn } from "./utils.mjs";
3
3
  import { useRender } from "@base-ui/react/use-render";
4
4
  //#region src/components/templates/container.tsx
5
5
  const MAX_WIDTH_CLASSES = {
@@ -32,4 +32,4 @@ const Container = ({ className, maxWidth = "7xl", padded = true, render, ...prop
32
32
  //#endregion
33
33
  export { Container as default };
34
34
 
35
- //# sourceMappingURL=container.mjs.map
35
+ //# sourceMappingURL=Container.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Container.mjs","names":[],"sources":["../src/components/templates/container.tsx"],"sourcesContent":["'use client';\n\nimport { useRender } from '@base-ui/react/use-render';\n\nimport { cn } from '@repo/ui/utils';\n\ntype MaxWidth =\n | '3xs'\n | '2xs'\n | 'xs'\n | 'sm'\n | 'md'\n | 'lg'\n | 'xl'\n | '2xl'\n | '3xl'\n | '4xl'\n | '5xl'\n | '6xl'\n | '7xl'\n | 'full'\n | 'none';\n\nconst MAX_WIDTH_CLASSES: Record<MaxWidth, string> = {\n '3xs': 'max-w-3xs',\n '2xs': 'max-w-2xs',\n xs: 'max-w-xs',\n sm: 'max-w-sm',\n md: 'max-w-md',\n lg: 'max-w-lg',\n xl: 'max-w-xl',\n '2xl': 'max-w-2xl',\n '3xl': 'max-w-3xl',\n '4xl': 'max-w-4xl',\n '5xl': 'max-w-5xl',\n '6xl': 'max-w-6xl',\n '7xl': 'max-w-7xl',\n full: 'max-w-full',\n none: 'max-w-none',\n};\n\nexport interface Props extends Omit<\n useRender.ComponentProps<'div'>,\n 'className'\n> {\n maxWidth?: MaxWidth;\n padded?: boolean;\n className?: string;\n}\n\n// Standardizes the `mx-auto max-w-7xl px-4` wrapper every app in this\n// monorepo was rewriting by hand inside Content — one place to change the\n// page's content width/gutters instead of N call sites.\nconst Container = ({\n className,\n maxWidth = '7xl',\n padded = true,\n render,\n ...props\n}: Props) => {\n return useRender({\n defaultTagName: 'div',\n render,\n props: {\n ...props,\n className: cn(\n 'mx-auto w-full',\n MAX_WIDTH_CLASSES[maxWidth],\n padded && 'px-4 sm:px-6 lg:px-8',\n className,\n //\n ),\n },\n });\n};\n\nexport default Container;\n"],"mappings":";;;;AAuBA,MAAM,oBAA8C;CAClD,OAAO;CACP,OAAO;CACP,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,OAAO;CACP,OAAO;CACP,OAAO;CACP,OAAO;CACP,OAAO;CACP,OAAO;CACP,MAAM;CACN,MAAM;AACR;AAcA,MAAM,aAAa,EACjB,WACA,WAAW,OACX,SAAS,MACT,QACA,GAAG,YACQ;CACX,OAAO,UAAU;EACf,gBAAgB;EAChB;EACA,OAAO;GACL,GAAG;GACH,WAAW,GACT,kBACA,kBAAkB,WAClB,UAAU,wBACV,SAEF;EACF;CACF,CAAC;AACH"}
@@ -0,0 +1,33 @@
1
+ import * as React$1 from "react";
2
+ import { ContextMenu as ContextMenu$1 } from "@base-ui/react/context-menu";
3
+ //#region src/components/molecules/context-menu.d.ts
4
+ export type Item = {
5
+ key: React$1.Key;
6
+ label: React$1.ReactNode;
7
+ disabled?: boolean;
8
+ type?: 'action';
9
+ onSelect?: () => void;
10
+ } | {
11
+ key: React$1.Key;
12
+ type: 'separator';
13
+ };
14
+ export interface Props extends Omit<React$1.ComponentProps<typeof ContextMenu$1.Root>, 'children'> {
15
+ children: React$1.ReactNode;
16
+ items: Item[];
17
+ onSelect?: (key: React$1.Key, item: Extract<Item, {
18
+ label: React$1.ReactNode;
19
+ }>) => void;
20
+ /** Visible action button for touch and discoverability; omit to hide it. */
21
+ actionLabel?: string;
22
+ triggerProps?: Omit<React$1.ComponentProps<typeof ContextMenu$1.Trigger>, 'children' | 'render' | 'ref'>;
23
+ classNames?: {
24
+ trigger?: string;
25
+ popup?: string;
26
+ item?: string;
27
+ separator?: string;
28
+ };
29
+ }
30
+ declare const ContextMenu: ({ children, items, onSelect, actionLabel, triggerProps, classNames, disabled, open, defaultOpen, onOpenChange, ...props }: Props) => React$1.JSX.Element;
31
+ //#endregion
32
+ export { ContextMenu as default };
33
+ //# sourceMappingURL=ContextMenu.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextMenu.d.mts","names":["React","BaseContextMenu"],"sources":["../src/components/molecules/context-menu.tsx"],"mappings":";;;YAcY;EAEN,KAAKA,QAAM;EACX,OAAOA,QAAM;EACb;EACA;EACA;;EAEA,KAAKA,QAAM;EAAK;;iBAEL,cAAc,KAC7BA,QAAM,sBAAsBC,cAAgB;EAG5C,UAAUD,QAAM;EAChB,OAAO;EACP,YACE,KAAKA,QAAM,KACX,MAAM,QAAQ;IAAQ,OAAOA,QAAM;;;EAGrC;EACA,eAAe,KACbA,QAAM,sBAAsBC,cAAgB;EAG9C;IACE;IACA;IACA;IACA;;;cAIE,gBAAe,UAAA,OAAA,UAAA,aAAA,cAAA,YAAA,UAAA,MAAA,aAAA,iBAAA,SAYlB,UAAKD,QAAA,IAAA"}