@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":"field.mjs","names":[],"sources":["../../../../src/components/organisms/form/field.tsx"],"sourcesContent":["'use client';\n\nimport { type ComponentPropsWithRef, type ReactNode, useContext } from 'react';\n\nimport { cn } from '@repo/ui/utils';\n\nimport { form } from '../../../core';\nimport { type Layout, LayoutContext, RequiredContext } from './context';\n\nexport interface Props extends Omit<\n ComponentPropsWithRef<typeof form.Field.Root>,\n 'className' | 'render' | 'children'\n> {\n label?: ReactNode;\n description?: ReactNode;\n error?: ReactNode;\n children?: ReactNode;\n required?: boolean;\n layout?: Layout;\n className?: string;\n classNames?: {\n label?: string;\n required?: string;\n content?: string;\n description?: string;\n error?: string;\n };\n}\n\nconst Field = ({\n label,\n description,\n error,\n children,\n required = false,\n layout,\n invalid,\n className,\n classNames,\n ...props\n}: Props) => {\n const inheritedLayout = useContext(LayoutContext);\n const resolvedLayout = layout ?? inheritedLayout;\n const hasError =\n error !== undefined && error !== null && error !== false && error !== '';\n\n return (\n <RequiredContext.Provider value={required}>\n <form.Field.Root\n {...props}\n data-slot=\"form-field\"\n invalid={invalid || hasError}\n className={cn(\n 'grid min-w-0 gap-2',\n resolvedLayout === 'horizontal' &&\n `@md/form:grid-cols-[minmax(0,1fr)_minmax(0,3fr)]\n @md/form:items-start`,\n className, //\n )}\n >\n {label != null && (\n <form.Field.Label\n data-slot=\"form-label\"\n className={cn(\n `flex min-w-0 items-center gap-1 text-sm font-medium\n data-disabled:opacity-50`,\n resolvedLayout === 'horizontal' && '@md/form:pt-2',\n classNames?.label, //\n )}\n >\n {label}\n {required && (\n <span\n aria-hidden=\"true\"\n className={cn(\n 'text-destructive',\n classNames?.required, //\n )}\n >\n *\n </span>\n )}\n </form.Field.Label>\n )}\n <div\n data-slot=\"form-field-content\"\n className={cn(\n 'flex min-w-0 flex-col gap-1.5',\n classNames?.content, //\n )}\n >\n {children}\n {description != null && (\n <form.Field.Description\n data-slot=\"form-description\"\n className={cn(\n 'text-muted-foreground text-sm [overflow-wrap:anywhere]',\n classNames?.description, //\n )}\n >\n {description}\n </form.Field.Description>\n )}\n <form.Field.Error\n {...(hasError ? { children: error } : {})}\n data-slot=\"form-error\"\n role=\"alert\"\n match={hasError ? true : undefined}\n className={cn(\n 'text-destructive text-sm [overflow-wrap:anywhere]',\n classNames?.error, //\n )}\n />\n </div>\n </form.Field.Root>\n </RequiredContext.Provider>\n );\n};\n\nexport default Field;\n"],"mappings":";;;;;;;AA6BA,MAAM,SAAS,EACb,OACA,aACA,OACA,UACA,WAAW,OACX,QACA,SACA,WACA,YACA,GAAG,YACQ;CACX,MAAM,kBAAkB,WAAW,aAAa;CAChD,MAAM,iBAAiB,UAAU;CACjC,MAAM,WACJ,UAAU,KAAA,KAAa,UAAU,QAAQ,UAAU,SAAS,UAAU;CAExE,OACE,oBAAC,gBAAgB,UAAjB;EAA0B,OAAO;EAC/B,UAAA,qBAAA,QAAY,MAAZ;GACE,GAAI;GACJ,aAAU;GACV,SAAS,WAAW;GACpB,WAAW,GACT,sBACA,mBAAmB,gBACjB;mCAEF,SACF;GAVF,UAAA,CAYG,SAAS,QACR,qBAAA,QAAY,OAAZ;IACE,aAAU;IACV,WAAW,GACT;yCAEA,mBAAmB,gBAAgB,iBACnC,YAAY,KACd;IAPF,UAAA,CASG,OACA,YACC,oBAAC,QAAD;KACE,eAAY;KACZ,WAAW,GACT,oBACA,YAAY,QACd;KACD,UAAA;IAEK,CAAA,CAEQ;GAEpB,CAAA,GAAA,qBAAC,OAAD;IACE,aAAU;IACV,WAAW,GACT,iCACA,YAAY,OACd;IALF,UAAA;KAOG;KACA,eAAe,QACd,oBAAA,QAAY,aAAZ;MACE,aAAU;MACV,WAAW,GACT,0DACA,YAAY,WACd;MAEC,UAAA;KACqB,CAAA;KAE1B,oBAAA,QAAY,OAAZ;MACE,GAAK,WAAW,EAAE,UAAU,MAAM,IAAI,CAAC;MACvC,aAAU;MACV,MAAK;MACL,OAAO,WAAW,OAAO,KAAA;MACzB,WAAW,GACT,qDACA,YAAY,KACd;KACD,CAAA;IACE;GACU,CAAA,CAAA;;CACO,CAAA;AAE9B"}
@@ -0,0 +1,14 @@
1
+ import { Form as Form$1, form_d_exports } from "../../../core/form.mjs";
2
+ import "../../../core/index.mjs";
3
+ import { Layout } from "./context.mjs";
4
+ import { ComponentPropsWithRef } from "react";
5
+ //#region src/components/organisms/form/form.d.ts
6
+ type Values = Record<string, unknown>;
7
+ export interface Props<T extends Values = Values> extends Omit<ComponentPropsWithRef<typeof Form$1<T>>, 'className' | 'render'> {
8
+ layout?: Layout;
9
+ className?: string;
10
+ }
11
+ declare const Form: <T extends Values = Values>({ layout, className, dir, ...props }: Props<T>) => import("react").JSX.Element;
12
+ //#endregion
13
+ export { Form as default };
14
+ //# sourceMappingURL=form.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form.d.mts","names":["form","form.Form"],"sources":["../../../../src/components/organisms/form/form.tsx"],"mappings":";;;;;KAUK,SAAS;iBAEG,MAAM,UAAU,SAAS,gBAAgB,KACxD,6BAA6BC,OAAU;EAGvC,SAAS;EACT;;cAGI,OAAQ,UAAU,SAAS,UAAQ,QAAA,WAAA,QAAA,SAKtC,MAAM,uBAAE,IAAA"}
@@ -0,0 +1,23 @@
1
+ "use client";
2
+ import { cn } from "../../../utils.mjs";
3
+ import { useConfig } from "../../../providers/config/context.mjs";
4
+ import { Form as Form$1 } from "../../../core/form.mjs";
5
+ import { LayoutContext } from "./context.mjs";
6
+ import { jsx } from "react/jsx-runtime";
7
+ //#region src/components/organisms/form/form.tsx
8
+ const Form = ({ layout = "vertical", className, dir, ...props }) => {
9
+ const { direction } = useConfig();
10
+ return /* @__PURE__ */ jsx(LayoutContext.Provider, {
11
+ value: layout,
12
+ children: /* @__PURE__ */ jsx(Form$1, {
13
+ "data-slot": "form",
14
+ dir: dir ?? direction,
15
+ className: cn("@container/form flex w-full min-w-0 flex-col gap-5", className),
16
+ ...props
17
+ })
18
+ });
19
+ };
20
+ //#endregion
21
+ export { Form as default };
22
+
23
+ //# sourceMappingURL=form.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form.mjs","names":["form.Form"],"sources":["../../../../src/components/organisms/form/form.tsx"],"sourcesContent":["'use client';\n\nimport type { ComponentPropsWithRef } from 'react';\n\nimport { useConfig } from '@repo/ui/providers';\nimport { cn } from '@repo/ui/utils';\n\nimport { form } from '../../../core';\nimport { type Layout, LayoutContext } from './context';\n\ntype Values = Record<string, unknown>;\n\nexport interface Props<T extends Values = Values> extends Omit<\n ComponentPropsWithRef<typeof form.Form<T>>,\n 'className' | 'render'\n> {\n layout?: Layout;\n className?: string;\n}\n\nconst Form = <T extends Values = Values>({\n layout = 'vertical',\n className,\n dir,\n ...props\n}: Props<T>) => {\n const { direction } = useConfig();\n\n return (\n <LayoutContext.Provider value={layout}>\n <form.Form<T>\n data-slot=\"form\"\n dir={dir ?? direction}\n className={cn(\n '@container/form flex w-full min-w-0 flex-col gap-5',\n className, //\n )}\n {...props}\n />\n </LayoutContext.Provider>\n );\n};\n\nexport default Form;\n"],"mappings":";;;;;;;AAoBA,MAAM,QAAmC,EACvC,SAAS,YACT,WACA,KACA,GAAG,YACW;CACd,MAAM,EAAE,cAAc,UAAU;CAEhC,OACE,oBAAC,cAAc,UAAf;EAAwB,OAAO;EAC7B,UAAA,oBAACA,QAAD;GACE,aAAU;GACV,KAAK,OAAO;GACZ,WAAW,GACT,sDACA,SACF;GACA,GAAI;EACL,CAAA;CACqB,CAAA;AAE5B"}
@@ -44,8 +44,9 @@ function createImperativeStack({ createRootElement, StackItem }) {
44
44
  }, [container]);
45
45
  const getSnapshot = useCallback(() => getContainerState(container).stack, [container]);
46
46
  const stack = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
47
- return /* @__PURE__ */ jsx(ConfigSnapshotProvider, { children: stack.map(({ id, ...props }) => /* @__PURE__ */ jsx(StackItem, {
47
+ return /* @__PURE__ */ jsx(ConfigSnapshotProvider, { children: stack.map(({ id, ...props }, index) => /* @__PURE__ */ jsx(StackItem, {
48
48
  id,
49
+ index,
49
50
  ...props
50
51
  }, id)) });
51
52
  };
@@ -67,6 +68,19 @@ function createImperativeStack({ createRootElement, StackItem }) {
67
68
  state.update?.();
68
69
  return id;
69
70
  };
71
+ const update = (id, next) => {
72
+ for (const state of containerStates.values()) {
73
+ const index = state.stack.findIndex((item) => item.id === id);
74
+ if (index === -1) continue;
75
+ state.stack = state.stack.map((item, position) => position === index ? {
76
+ ...next(item),
77
+ id
78
+ } : item);
79
+ state.update?.();
80
+ return true;
81
+ }
82
+ return false;
83
+ };
70
84
  const destroy = (id) => {
71
85
  if (!id) {
72
86
  containerStates.forEach((state) => {
@@ -97,6 +111,7 @@ function createImperativeStack({ createRootElement, StackItem }) {
97
111
  };
98
112
  return {
99
113
  render,
114
+ update,
100
115
  destroy,
101
116
  getRootElement
102
117
  };
@@ -1 +1 @@
1
- {"version":3,"file":"imperative-stack.mjs","names":[],"sources":["../../../src/components/organisms/imperative-stack.tsx"],"sourcesContent":["'use client';\n\nimport { useCallback, useSyncExternalStore } from 'react';\nimport { Root, createRoot } from 'react-dom/client';\n\nimport { ConfigSnapshotProvider, getRootConfigValue } from '@repo/ui/providers';\n\n// Monotonic per-session counter for stack item ids. These ids are internal\n// handles (React keys + destroy(id) lookups), not cryptographic, so a plain\n// counter is enough and avoids a runtime `uuid` dependency.\nlet idCounter = 0;\nconst nextId = () => `stack-${(idCounter += 1)}`;\n\n// Shared machinery behind Modal.info/success/error/warning/confirm and\n// Toast.info/success/error/warning — both used to independently\n// reimplement ~120 near-identical lines of this (container-scoped stack,\n// a React root per container, imperative render/destroy). The only parts\n// that actually differ between the two are the DOM node their stack\n// mounts into (position/ARIA) and which component renders each stack\n// entry — everything else here is generic over that.\n\nexport const isBrowser =\n typeof window !== 'undefined' && typeof document !== 'undefined';\n\ntype ContainerState<TProps> = {\n stack: (TProps & { id: string })[];\n update: (() => void) | null;\n};\n\nexport interface ImperativeStack<\n TProps extends { id?: string; container?: HTMLElement },\n> {\n render: (props: TProps) => string | undefined;\n destroy: (id?: string) => void;\n getRootElement: (container?: HTMLElement) => HTMLElement | null;\n}\n\nexport interface ImperativeStackOptions<\n TProps extends { id?: string; container?: HTMLElement },\n> {\n /** Creates the DOM node this stack's React root mounts into — not yet\n * attached to the document; the factory appends it to the target\n * container itself. Called once per distinct container. */\n createRootElement: () => HTMLElement;\n /** Renders one stack entry — typically each caller's \"Static<Thing>\"\n * component, which owns its own createPortal(..., getRootElement()). */\n StackItem: React.ComponentType<TProps & { id: string }>;\n}\n\nexport function createImperativeStack<\n TProps extends { id?: string; container?: HTMLElement },\n>({\n createRootElement,\n StackItem,\n}: ImperativeStackOptions<TProps>): ImperativeStack<TProps> {\n const containerStates = new Map<HTMLElement, ContainerState<TProps>>();\n const rootElements = new WeakMap<HTMLElement, HTMLElement>();\n const reactRoots = new Map<HTMLElement, Root>();\n\n const getContainerState = (\n container: HTMLElement,\n ): ContainerState<TProps> => {\n let state = containerStates.get(container);\n\n if (!state) {\n state = { stack: [], update: null };\n containerStates.set(container, state);\n }\n\n return state;\n };\n\n // Shared by `render` and `getRootElement` so both agree on the same\n // target container whenever the caller doesn't pass one explicitly — the\n // stack's React root (created once, in `render`) and the DOM node a\n // `StackItem` (e.g. StaticToast) later portals into (calling\n // `getRootElement` again with the same, possibly-undefined `container`)\n // would otherwise resolve two different containers here, splitting the\n // React tree (correctly under the root Config, via ConfigSnapshotProvider\n // above) from the actual visible DOM (silently back under `document.body`,\n // outside the Config's themed wrapper — undoing this fix's whole point).\n const resolveContainer = (container?: HTMLElement): HTMLElement =>\n container || getRootConfigValue()?.getContainer() || document.body;\n\n const getRootElement = (container?: HTMLElement): HTMLElement | null => {\n if (!isBrowser) {\n return null;\n }\n\n const targetContainer = resolveContainer(container);\n let rootEl = rootElements.get(targetContainer);\n\n if (!rootEl) {\n rootEl = createRootElement();\n targetContainer.appendChild(rootEl);\n rootElements.set(targetContainer, rootEl);\n }\n\n return rootEl;\n };\n\n const StackRenderer = ({ container }: { container: HTMLElement }) => {\n const subscribe = useCallback(\n (onStoreChange: () => void) => {\n const state = getContainerState(container);\n state.update = onStoreChange;\n return () => {\n state.update = null;\n };\n },\n [container],\n );\n\n const getSnapshot = useCallback(\n () => getContainerState(container).stack,\n [container],\n );\n\n const stack = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n return (\n <ConfigSnapshotProvider>\n {stack.map(({ id, ...props }) => (\n <StackItem key={id} id={id} {...(props as TProps)} />\n ))}\n </ConfigSnapshotProvider>\n );\n };\n\n const render = (props: TProps): string | undefined => {\n if (!isBrowser) {\n return;\n }\n\n // An explicit `container` prop always wins (it may be chosen for\n // layout reasons unrelated to theming); otherwise mount into the root\n // Config's own themed wrapper element (if one renders — see\n // `needsWrapper` in config.tsx) so CSS custom properties and the\n // `.dark` class cascade to this stack via normal DOM inheritance, not\n // just `document.body` sitting as an unthemed sibling of it.\n const targetContainer = resolveContainer(props.container);\n const rootElement = getRootElement(targetContainer)!;\n\n if (!reactRoots.has(targetContainer)) {\n const root = createRoot(rootElement);\n reactRoots.set(targetContainer, root);\n root.render(<StackRenderer container={targetContainer} />);\n }\n\n const state = getContainerState(targetContainer);\n const id = props.id || nextId();\n state.stack = [...state.stack, { ...props, id }];\n state.update?.();\n\n return id;\n };\n\n const destroy = (id?: string) => {\n if (!id) {\n containerStates.forEach(state => {\n state.stack = [];\n state.update?.();\n });\n reactRoots.forEach((root, container) => {\n root.unmount();\n rootElements.get(container)?.remove();\n rootElements.delete(container);\n });\n reactRoots.clear();\n containerStates.clear();\n return;\n }\n\n containerStates.forEach((state, container) => {\n if (!state.stack.some(item => item.id === id)) {\n return;\n }\n\n state.stack = state.stack.filter(item => item.id !== id);\n state.update?.();\n\n if (!state.stack.length) {\n reactRoots.get(container)?.unmount();\n reactRoots.delete(container);\n containerStates.delete(container);\n rootElements.get(container)?.remove();\n rootElements.delete(container);\n }\n });\n };\n\n return { render, destroy, getRootElement };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"imperative-stack.mjs","names":[],"sources":["../../../src/components/organisms/imperative-stack.tsx"],"sourcesContent":["'use client';\n\nimport { useCallback, useSyncExternalStore } from 'react';\nimport { Root, createRoot } from 'react-dom/client';\n\nimport { ConfigSnapshotProvider, getRootConfigValue } from '@repo/ui/providers';\n\n// Monotonic per-session counter for stack item ids. These ids are internal\n// handles (React keys + destroy(id) lookups), not cryptographic, so a plain\n// counter is enough and avoids a runtime `uuid` dependency.\nlet idCounter = 0;\nconst nextId = () => `stack-${(idCounter += 1)}`;\n\n// Shared machinery behind Modal.info/success/error/warning/confirm and\n// Toast.info/success/error/warning — both used to independently\n// reimplement ~120 near-identical lines of this (container-scoped stack,\n// a React root per container, imperative render/destroy). The only parts\n// that actually differ between the two are the DOM node their stack\n// mounts into (position/ARIA) and which component renders each stack\n// entry — everything else here is generic over that.\n\nexport const isBrowser =\n typeof window !== 'undefined' && typeof document !== 'undefined';\n\ntype ContainerState<TProps> = {\n stack: (TProps & { id: string })[];\n update: (() => void) | null;\n};\n\nexport interface ImperativeStack<\n TProps extends { id?: string; container?: HTMLElement },\n> {\n render: (props: TProps) => string | undefined;\n // Replaces an existing entry's props in place, keeping its position in the\n // stack; returns false when no container holds `id`.\n update: (id: string, next: (current: TProps) => TProps) => boolean;\n destroy: (id?: string) => void;\n getRootElement: (container?: HTMLElement) => HTMLElement | null;\n}\n\nexport interface ImperativeStackOptions<\n TProps extends { id?: string; container?: HTMLElement },\n> {\n /** Creates the DOM node this stack's React root mounts into — not yet\n * attached to the document; the factory appends it to the target\n * container itself. Called once per distinct container. */\n createRootElement: () => HTMLElement;\n /** Renders one stack entry — typically each caller's \"Static<Thing>\"\n * component, which owns its own createPortal(..., getRootElement()).\n * `index` is the entry's position in its container's stack, oldest first. */\n StackItem: React.ComponentType<TProps & { id: string; index: number }>;\n}\n\nexport function createImperativeStack<\n TProps extends { id?: string; container?: HTMLElement },\n>({\n createRootElement,\n StackItem,\n}: ImperativeStackOptions<TProps>): ImperativeStack<TProps> {\n const containerStates = new Map<HTMLElement, ContainerState<TProps>>();\n const rootElements = new WeakMap<HTMLElement, HTMLElement>();\n const reactRoots = new Map<HTMLElement, Root>();\n\n const getContainerState = (\n container: HTMLElement,\n ): ContainerState<TProps> => {\n let state = containerStates.get(container);\n\n if (!state) {\n state = { stack: [], update: null };\n containerStates.set(container, state);\n }\n\n return state;\n };\n\n // Shared by `render` and `getRootElement` so both agree on the same\n // target container whenever the caller doesn't pass one explicitly — the\n // stack's React root (created once, in `render`) and the DOM node a\n // `StackItem` (e.g. StaticToast) later portals into (calling\n // `getRootElement` again with the same, possibly-undefined `container`)\n // would otherwise resolve two different containers here, splitting the\n // React tree (correctly under the root Config, via ConfigSnapshotProvider\n // above) from the actual visible DOM (silently back under `document.body`,\n // outside the Config's themed wrapper — undoing this fix's whole point).\n const resolveContainer = (container?: HTMLElement): HTMLElement =>\n container || getRootConfigValue()?.getContainer() || document.body;\n\n const getRootElement = (container?: HTMLElement): HTMLElement | null => {\n if (!isBrowser) {\n return null;\n }\n\n const targetContainer = resolveContainer(container);\n let rootEl = rootElements.get(targetContainer);\n\n if (!rootEl) {\n rootEl = createRootElement();\n targetContainer.appendChild(rootEl);\n rootElements.set(targetContainer, rootEl);\n }\n\n return rootEl;\n };\n\n const StackRenderer = ({ container }: { container: HTMLElement }) => {\n const subscribe = useCallback(\n (onStoreChange: () => void) => {\n const state = getContainerState(container);\n state.update = onStoreChange;\n return () => {\n state.update = null;\n };\n },\n [container],\n );\n\n const getSnapshot = useCallback(\n () => getContainerState(container).stack,\n [container],\n );\n\n const stack = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n return (\n <ConfigSnapshotProvider>\n {stack.map(({ id, ...props }, index) => (\n <StackItem key={id} id={id} index={index} {...(props as TProps)} />\n ))}\n </ConfigSnapshotProvider>\n );\n };\n\n const render = (props: TProps): string | undefined => {\n if (!isBrowser) {\n return;\n }\n\n // An explicit `container` prop always wins (it may be chosen for\n // layout reasons unrelated to theming); otherwise mount into the root\n // Config's own themed wrapper element (if one renders — see\n // `needsWrapper` in config.tsx) so CSS custom properties and the\n // `.dark` class cascade to this stack via normal DOM inheritance, not\n // just `document.body` sitting as an unthemed sibling of it.\n const targetContainer = resolveContainer(props.container);\n const rootElement = getRootElement(targetContainer)!;\n\n if (!reactRoots.has(targetContainer)) {\n const root = createRoot(rootElement);\n reactRoots.set(targetContainer, root);\n root.render(<StackRenderer container={targetContainer} />);\n }\n\n const state = getContainerState(targetContainer);\n const id = props.id || nextId();\n state.stack = [...state.stack, { ...props, id }];\n state.update?.();\n\n return id;\n };\n\n const update = (id: string, next: (current: TProps) => TProps): boolean => {\n for (const state of containerStates.values()) {\n const index = state.stack.findIndex(item => item.id === id);\n\n if (index === -1) {\n continue;\n }\n\n state.stack = state.stack.map((item, position) =>\n position === index ? { ...next(item), id } : item,\n );\n state.update?.();\n\n return true;\n }\n\n return false;\n };\n\n const destroy = (id?: string) => {\n if (!id) {\n containerStates.forEach(state => {\n state.stack = [];\n state.update?.();\n });\n reactRoots.forEach((root, container) => {\n root.unmount();\n rootElements.get(container)?.remove();\n rootElements.delete(container);\n });\n reactRoots.clear();\n containerStates.clear();\n return;\n }\n\n containerStates.forEach((state, container) => {\n if (!state.stack.some(item => item.id === id)) {\n return;\n }\n\n state.stack = state.stack.filter(item => item.id !== id);\n state.update?.();\n\n if (!state.stack.length) {\n reactRoots.get(container)?.unmount();\n reactRoots.delete(container);\n containerStates.delete(container);\n rootElements.get(container)?.remove();\n rootElements.delete(container);\n }\n });\n };\n\n return { render, update, destroy, getRootElement };\n}\n"],"mappings":"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"}
@@ -1,9 +1,17 @@
1
- import Table, { Column, PaginationOptions, Props } from "../../Table.mjs";
2
- import Drawer, { Props as Props$1 } from "./drawer.mjs";
3
- import { Props as Props$2 } from "./list/list.mjs";
4
- import List from "./list/index.mjs";
5
- import Modal, { Props as Props$3 } from "./modal.mjs";
6
- import { Props as Props$4 } from "./swiper/swiper.mjs";
7
- import Swiper from "./swiper/index.mjs";
8
- import Toast, { ToastOptions as StaticProps } from "./toast.mjs";
9
- export { Drawer, type Props$1 as DrawerProps, List, type Props$2 as ListProps, Modal, type Props$3 as ModalProps, Swiper, type Props$4 as SwiperProps, Table, type Column as TableColumn, type PaginationOptions as TablePaginationOptions, type Props as TableProps, Toast, type StaticProps as ToastOptions };
1
+ import Calendar, { Props } from "../../Calendar.mjs";
2
+ import Drawer, { Props as Props$1 } from "../../Drawer.mjs";
3
+ import { Props as Props$2 } from "./form/control.mjs";
4
+ import { Props as Props$3 } from "./form/field.mjs";
5
+ import { Props as Props$4 } from "./form/form.mjs";
6
+ import Form from "../../Form.mjs";
7
+ import { Props as Props$5 } from "./list/list.mjs";
8
+ import List from "../../List.mjs";
9
+ import Modal, { Props as Props$6 } from "../../Modal.mjs";
10
+ import { Props as Props$7 } from "./swiper/swiper.mjs";
11
+ import Swiper from "../../Swiper.mjs";
12
+ import Table, { Column, PaginationOptions, Props as Props$8 } from "../../Table.mjs";
13
+ import Toast, { GlobalConfig, Placement, ToastOptions as StaticProps } from "../../Toast.mjs";
14
+ import Tour, { Props as Props$9, Step } from "../../Tour.mjs";
15
+ import Tree, { Actions, ExpandInfo, LoadOptions, Node, Props as Props$10, ScrollOptions } from "../../Tree.mjs";
16
+ import TreeSelect, { Props as Props$11 } from "../../TreeSelect.mjs";
17
+ export { Calendar, type Props as CalendarProps, Drawer, type Props$1 as DrawerProps, Form, type Props$2 as FormControlProps, type Props$3 as FormFieldProps, type Props$4 as FormProps, List, type Props$5 as ListProps, Modal, type Props$6 as ModalProps, Swiper, type Props$7 as SwiperProps, Table, type Column as TableColumn, type PaginationOptions as TablePaginationOptions, type Props$8 as TableProps, Toast, type GlobalConfig as ToastConfig, type StaticProps as ToastOptions, type Placement as ToastPlacement, Tour, type Props$9 as TourProps, type Step as TourStep, Tree, type Actions as TreeActions, type ExpandInfo as TreeExpandInfo, type LoadOptions as TreeLoadOptions, type Node as TreeNode, type Props$10 as TreeProps, type ScrollOptions as TreeScrollOptions, TreeSelect, type Node as TreeSelectNode, type Props$11 as TreeSelectProps };
@@ -1,7 +1,7 @@
1
- import Skeleton from "../../atoms/skeleton/index.mjs";
1
+ import Skeleton from "../../../Skeleton.mjs";
2
2
  import React from "react";
3
3
  //#region src/components/organisms/list/list.d.ts
4
- interface Props<T> extends Omit<React.ComponentPropsWithoutRef<'div'>, 'title'> {
4
+ export interface Props<T> extends Omit<React.ComponentPropsWithoutRef<'div'>, 'title'> {
5
5
  loading?: boolean;
6
6
  loaderProps?: React.ComponentProps<typeof Skeleton>;
7
7
  loader?: React.ReactNode;
@@ -34,5 +34,5 @@ interface Props<T> extends Omit<React.ComponentPropsWithoutRef<'div'>, 'title'>
34
34
  }
35
35
  declare const List: <T>({ loading, loaderProps, loader, header, title, titleLevel, empty, scroll, data, className, classNames, renderItem, itemKey, ...props }: Props<T>) => React.JSX.Element;
36
36
  //#endregion
37
- export { Props, List as default };
37
+ export { List as default };
38
38
  //# sourceMappingURL=list.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.mts","names":[],"sources":["../../../../src/components/organisms/list/list.tsx"],"mappings":";;;UAWiB,MAAM,WAAW,KAChC,MAAM;EAGN;EACA,cAAc,MAAM,sBAAsB;EAC1C,SAAS,MAAM;EACf,QAAQ,MAAM;EACd;EACA,SAAS,MAAM;EACf,QAAQ,MAAM;EACd;IACE;IACA;IACA;;EAEF;IACE;IACA;IACA,SAAS,MAAM;IACf,UAAU;;;;;;;;IAQV;;EAEF,OAAO;EACP,cAAc,MAAM,GAAG,kBAAkB,MAAM;EAC/C,WAAW,MAAM,GAAG,kBAAkB,MAAM;;cAGxC,OAAQ,KAAI,SAAA,aAAA,QAAA,QAAA,OAAA,YAAA,OAAA,QAAA,MAAA,WAAA,YAAA,YAAA,YAAA,SAef,MAAM,OAAE,MAAA,IAAA"}
1
+ {"version":3,"file":"list.d.mts","names":[],"sources":["../../../../src/components/organisms/list/list.tsx"],"mappings":";;;iBAWiB,MAAM,WAAW,KAChC,MAAM;EAGN;EACA,cAAc,MAAM,sBAAsB;EAC1C,SAAS,MAAM;EACf,QAAQ,MAAM;EACd;EACA,SAAS,MAAM;EACf,QAAQ,MAAM;EACd;IACE;IACA;IACA;;EAEF;IACE;IACA;IACA,SAAS,MAAM;IACf,UAAU;;;;;;;;IAQV;;EAEF,OAAO;EACP,cAAc,MAAM,GAAG,kBAAkB,MAAM;EAC/C,WAAW,MAAM,GAAG,kBAAkB,MAAM;;cAGxC,OAAQ,KAAI,SAAA,aAAA,QAAA,QAAA,OAAA,YAAA,OAAA,QAAA,MAAA,WAAA,YAAA,YAAA,YAAA,SAef,MAAM,OAAE,MAAA,IAAA"}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { cn, renderConditional } from "../../../utils.mjs";
3
3
  import Title from "../../atoms/typography/title.mjs";
4
- import Skeleton from "../../atoms/skeleton/index.mjs";
4
+ import Skeleton from "../../../Skeleton.mjs";
5
5
  import { useEffect, useRef } from "react";
6
6
  import { useIntersectionObserver } from "@jbpark/use-hooks";
7
7
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -2,7 +2,13 @@ import { SwiperProps } from "swiper/react";
2
2
  import "swiper/css";
3
3
  import { SwiperModule, SwiperOptions } from "swiper/types";
4
4
  //#region src/components/organisms/swiper/swiper.d.ts
5
- interface Props<T> extends SwiperProps {
5
+ /**
6
+ * Baseline Swiper options. `navigation` / `autoplay` are inert unless the
7
+ * matching modules are passed through the `modules` prop — see the README next
8
+ * to this file.
9
+ */
10
+ export declare const initialOptions: SwiperOptions;
11
+ export interface Props<T> extends SwiperProps {
6
12
  loading?: boolean;
7
13
  loader?: React.ReactNode;
8
14
  loadingClassName?: string;
@@ -27,5 +33,5 @@ interface Props<T> extends SwiperProps {
27
33
  }
28
34
  declare const Swiper$1: <T>({ loading, loader, options, modules, data, style, className, renderItem, loadingClassName, ...props }: Props<T>) => import("react").JSX.Element;
29
35
  //#endregion
30
- export { Props, Swiper$1 as default };
36
+ export { Swiper$1 as default };
31
37
  //# sourceMappingURL=swiper.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"swiper.d.mts","names":[],"sources":["../../../../src/components/organisms/swiper/swiper.tsx"],"mappings":";;;;UA+BiB,MAAM,WAAW;EAChC;EACA,SAAS,MAAM;EACf;EACA,UAAU;;;;;;;;;;;;;;;EAeV,UAAU;EACV,MAAM;EACN,WAAW,MAAM,GAAG,cAAc,MAAM;;cAGpC,WAAU,KAAI,SAAA,QAAA,SAAA,SAAA,MAAA,OAAA,WAAA,YAAA,qBAAA,SAWjB,MAAM,uBAAE,IAAA"}
1
+ {"version":3,"file":"swiper.d.mts","names":["Swiper"],"sources":["../../../../src/components/organisms/swiper/swiper.tsx"],"mappings":";;;;;;;;;qBAkBa,gBAAgB;iBAaZ,MAAM,WAAW;EAChC;EACA,SAAS,MAAM;EACf;EACA,UAAU;;;;;;;;;;;;;;;EAeV,UAAU;EACV,MAAM;EACN,WAAW,MAAM,GAAG,cAAc,MAAM;;cAGpCA,WAAU,KAAI,SAAA,QAAA,SAAA,SAAA,MAAA,OAAA,WAAA,YAAA,qBAAA,SAWjB,MAAM,uBAAE,IAAA"}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { cn } from "../../../utils.mjs";
3
- import Spin from "../../atoms/spin.mjs";
3
+ import Spin from "../../../Spin.mjs";
4
4
  import { cloneElement, isValidElement } from "react";
5
5
  import { jsx } from "react/jsx-runtime";
6
6
  import { Swiper } from "swiper/react";
@@ -4,7 +4,7 @@ interface ResponsiveColSpan {
4
4
  offset?: number;
5
5
  }
6
6
  type ColSpanProp = number | ResponsiveColSpan;
7
- interface Props extends React.ComponentProps<'div'> {
7
+ export interface Props extends React.ComponentProps<'div'> {
8
8
  span?: number;
9
9
  offset?: number;
10
10
  xs?: ColSpanProp;
@@ -16,5 +16,5 @@ interface Props extends React.ComponentProps<'div'> {
16
16
  }
17
17
  declare const Col: ({ span, offset, xs, sm, md, lg, xl, "2xl": xxl, className, style, children, ...props }: Props) => import("react").JSX.Element;
18
18
  //#endregion
19
- export { Props, Col as default };
19
+ export { Col as default };
20
20
  //# sourceMappingURL=col.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"col.d.mts","names":[],"sources":["../../../../src/components/templates/grid/col.tsx"],"mappings":";UAUU;EACR;EACA;;KAGG,uBAAuB;UAEX,cAAc,MAAM;EACnC;EACA;EACA,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,QAAQ;;cAsDJ,QAAO,MAAA,QAAA,IAAA,IAAA,IAAA,IAAA,WAAA,KAAA,WAAA,OAAA,aAAA,SAaV,0BAAK,IAAA"}
1
+ {"version":3,"file":"col.d.mts","names":[],"sources":["../../../../src/components/templates/grid/col.tsx"],"mappings":";UAUU;EACR;EACA;;KAGG,uBAAuB;iBAEX,cAAc,MAAM;EACnC;EACA;EACA,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,QAAQ;;cAsDJ,QAAO,MAAA,QAAA,IAAA,IAAA,IAAA,IAAA,WAAA,KAAA,WAAA,OAAA,aAAA,SAaV,0BAAK,IAAA"}
@@ -13,7 +13,7 @@ declare const JUSTIFY_CLASSES: {
13
13
  'space-between': string;
14
14
  'space-evenly': string;
15
15
  };
16
- interface Props extends React.ComponentProps<'div'> {
16
+ export interface Props extends React.ComponentProps<'div'> {
17
17
  gutter?: number | [number, number];
18
18
  align?: keyof typeof ALIGN_CLASSES;
19
19
  justify?: keyof typeof JUSTIFY_CLASSES;
@@ -21,5 +21,5 @@ interface Props extends React.ComponentProps<'div'> {
21
21
  }
22
22
  declare const Row: ({ gutter, align, justify, wrap, className, style, children, ...props }: Props) => import("react").JSX.Element;
23
23
  //#endregion
24
- export { Props, Row as default };
24
+ export { Row as default };
25
25
  //# sourceMappingURL=row.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"row.d.mts","names":[],"sources":["../../../../src/components/templates/grid/row.tsx"],"mappings":";cAQM;;;;;;cAOA;;;;;;;;UASW,cAAc,MAAM;EACnC;EACA,qBAAqB;EACrB,uBAAuB;EACvB;;cAGI,QAAO,QAAA,OAAA,SAAA,MAAA,WAAA,OAAA,aAAA,SASV,0BAAK,IAAA"}
1
+ {"version":3,"file":"row.d.mts","names":[],"sources":["../../../../src/components/templates/grid/row.tsx"],"mappings":";cAQM;;;;;;cAOA;;;;;;;;iBASW,cAAc,MAAM;EACnC;EACA,qBAAqB;EACrB,uBAAuB;EACvB;;cAGI,QAAO,QAAA,OAAA,SAAA,MAAA,WAAA,OAAA,aAAA,SASV,0BAAK,IAAA"}
@@ -1,13 +1,12 @@
1
- import { Props } from "./layout/content.mjs";
2
- import { Props as Props$1 } from "./layout/footer.mjs";
3
- import { Props as Props$2 } from "./layout/header.mjs";
4
- import { Props as Props$3 } from "./layout/layout.mjs";
5
- import { Props as Props$4 } from "./layout/sider.mjs";
1
+ import Container, { Props } from "../../Container.mjs";
2
+ import { Props as Props$1 } from "./layout/content.mjs";
3
+ import { Props as Props$2 } from "./layout/footer.mjs";
4
+ import { Props as Props$3 } from "./layout/header.mjs";
5
+ import { Props as Props$4 } from "./layout/layout.mjs";
6
+ import { Props as Props$5 } from "./layout/sider.mjs";
6
7
  import Layout from "../../Layout.mjs";
7
- import Container, { Props as Props$5 } from "./container.mjs";
8
- import Empty, { Props as Props$6 } from "./empty.mjs";
9
- import Result, { Props as Props$7 } from "./result.mjs";
10
- import PageHeader, { Props as Props$8 } from "./page-header.mjs";
11
- import Row, { Props as Props$9 } from "./grid/row.mjs";
12
- import Col, { Props as Props$10 } from "./grid/col.mjs";
13
- export { Col, type Props$10 as ColProps, Container, type Props$5 as ContainerProps, type Props as ContentProps, Empty, type Props$6 as EmptyProps, type Props$1 as FooterProps, type Props$2 as HeaderProps, Layout, type Props$3 as LayoutProps, PageHeader, type Props$8 as PageHeaderProps, Result, type Props$7 as ResultProps, Row, type Props$9 as RowProps, type Props$4 as SiderProps };
8
+ import PageHeader, { Props as Props$6 } from "../../PageHeader.mjs";
9
+ import Result, { Props as Props$7 } from "../../Result.mjs";
10
+ import Row, { Props as Props$8 } from "./grid/row.mjs";
11
+ import Col, { Props as Props$9 } from "./grid/col.mjs";
12
+ export { Col, type Props$9 as ColProps, Container, type Props as ContainerProps, type Props$1 as ContentProps, type Props$2 as FooterProps, type Props$3 as HeaderProps, Layout, type Props$4 as LayoutProps, PageHeader, type Props$6 as PageHeaderProps, Result, type Props$7 as ResultProps, Row, type Props$8 as RowProps, type Props$5 as SiderProps };
@@ -1,9 +1,9 @@
1
1
  import { useRender } from "@base-ui/react/use-render";
2
2
  //#region src/components/templates/layout/content.d.ts
3
- interface Props extends Omit<useRender.ComponentProps<'main'>, 'className'> {
3
+ export interface Props extends Omit<useRender.ComponentProps<'main'>, 'className'> {
4
4
  className?: string;
5
5
  }
6
6
  declare const Content: ({ children, className, render, ...props }: Props) => import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
7
7
  //#endregion
8
- export { Props, Content as default };
8
+ export { Content as default };
9
9
  //# sourceMappingURL=content.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"content.d.mts","names":[],"sources":["../../../../src/components/templates/layout/content.tsx"],"mappings":";;UAQiB,cAAc,KAC7B,UAAU;EAGV;;cAGI,YAAW,UAAA,WAAA,WAAA,SAA2C,0BAAK,+CAAA"}
1
+ {"version":3,"file":"content.d.mts","names":[],"sources":["../../../../src/components/templates/layout/content.tsx"],"mappings":";;iBAQiB,cAAc,KAC7B,UAAU;EAGV;;cAGI,YAAW,UAAA,WAAA,WAAA,SAA2C,0BAAK,+CAAA"}
@@ -1,6 +1,6 @@
1
1
  //#region src/components/templates/layout/footer.d.ts
2
- interface Props extends React.ComponentProps<'footer'> {}
2
+ export interface Props extends React.ComponentProps<'footer'> {}
3
3
  declare const Footer: ({ children, className, ...props }: Props) => import("react").JSX.Element;
4
4
  //#endregion
5
- export { Props, Footer as default };
5
+ export { Footer as default };
6
6
  //# sourceMappingURL=footer.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"footer.d.mts","names":[],"sources":["../../../../src/components/templates/layout/footer.tsx"],"mappings":";UAEiB,cAAc,MAAM;cAE/B,WAAU,UAAA,cAAA,SAAmC,0BAAK,IAAA"}
1
+ {"version":3,"file":"footer.d.mts","names":[],"sources":["../../../../src/components/templates/layout/footer.tsx"],"mappings":";iBAEiB,cAAc,MAAM;cAE/B,WAAU,UAAA,cAAA,SAAmC,0BAAK,IAAA"}
@@ -1,8 +1,8 @@
1
1
  //#region src/components/templates/layout/header.d.ts
2
- interface Props extends React.ComponentProps<'header'> {
2
+ export interface Props extends React.ComponentProps<'header'> {
3
3
  position?: 'sticky' | 'static' | 'fixed';
4
4
  }
5
5
  declare const Header: ({ children, className, position, ...props }: Props) => import("react").JSX.Element;
6
6
  //#endregion
7
- export { Props, Header as default };
7
+ export { Header as default };
8
8
  //# sourceMappingURL=header.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"header.d.mts","names":[],"sources":["../../../../src/components/templates/layout/header.tsx"],"mappings":";UAIiB,cAAc,MAAM;EACnC;;cAGI,WAAU,UAAA,WAAA,aAAA,SAKb,0BAAK,IAAA"}
1
+ {"version":3,"file":"header.d.mts","names":[],"sources":["../../../../src/components/templates/layout/header.tsx"],"mappings":";iBAIiB,cAAc,MAAM;EACnC;;cAGI,WAAU,UAAA,WAAA,aAAA,SAKb,0BAAK,IAAA"}
@@ -1,6 +1,6 @@
1
1
  //#region src/components/templates/layout/layout.d.ts
2
- interface Props extends React.ComponentProps<'div'> {}
2
+ export interface Props extends React.ComponentProps<'div'> {}
3
3
  declare const Layout: ({ children, className, ...props }: Props) => import("react").JSX.Element;
4
4
  //#endregion
5
- export { Props, Layout as default };
5
+ export { Layout as default };
6
6
  //# sourceMappingURL=layout.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"layout.d.mts","names":[],"sources":["../../../../src/components/templates/layout/layout.tsx"],"mappings":";UAciB,cAAc,MAAM;cAgB/B,WAAU,UAAA,cAAA,SAAmC,0BAAK,IAAA"}
1
+ {"version":3,"file":"layout.d.mts","names":[],"sources":["../../../../src/components/templates/layout/layout.tsx"],"mappings":";iBAciB,cAAc,MAAM;cAgB/B,WAAU,UAAA,cAAA,SAAmC,0BAAK,IAAA"}
@@ -1,6 +1,6 @@
1
1
  //#region src/components/templates/layout/sider.d.ts
2
2
  type Breakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
3
- interface Props extends Omit<React.ComponentProps<'aside'>, 'onCollapse'> {
3
+ export interface Props extends Omit<React.ComponentProps<'aside'>, 'onCollapse'> {
4
4
  width?: number | string;
5
5
  collapsedWidth?: number | string;
6
6
  collapsible?: boolean;
@@ -18,5 +18,5 @@ interface Props extends Omit<React.ComponentProps<'aside'>, 'onCollapse'> {
18
18
  }
19
19
  declare const Sider: ({ children, className, classNames, style, width, collapsedWidth, collapsible, defaultCollapsed, collapsed: _collapsed, placement, reverseArrow, trigger, breakpoint, onCollapse, onBreakpoint, ...props }: Props) => import("react").JSX.Element;
20
20
  //#endregion
21
- export { Props, Sider as default };
21
+ export { Sider as default };
22
22
  //# sourceMappingURL=sider.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sider.d.mts","names":[],"sources":["../../../../src/components/templates/layout/sider.tsx"],"mappings":";KAYK;UAQY,cAAc,KAC7B,MAAM;EAGN;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,MAAM;EAChB;IACE;;EAEF,aAAa;EACb,cAAc;EACd,gBAAgB;;cAMZ,UAAS,UAAA,WAAA,YAAA,OAAA,OAAA,gBAAA,aAAA,kBAAA,WAAA,YAAA,WAAA,cAAA,SAAA,YAAA,YAAA,iBAAA,SAiBZ,0BAAK,IAAA"}
1
+ {"version":3,"file":"sider.d.mts","names":[],"sources":["../../../../src/components/templates/layout/sider.tsx"],"mappings":";KAgBK;iBAQY,cAAc,KAC7B,MAAM;EAGN;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,MAAM;EAChB;IACE;;EAEF,aAAa;EACb,cAAc;EACd,gBAAgB;;cAMZ,UAAS,UAAA,WAAA,YAAA,OAAA,OAAA,gBAAA,aAAA,kBAAA,WAAA,YAAA,WAAA,cAAA,SAAA,YAAA,YAAA,iBAAA,SAiBZ,0BAAK,IAAA"}
@@ -2,10 +2,10 @@
2
2
  import { cn } from "../../../utils.mjs";
3
3
  import { DEFAULT_LOCALE, useConfig } from "../../../providers/config/context.mjs";
4
4
  import { useRegisterSider } from "./sider-context.mjs";
5
- import { PanelLeftClose, PanelLeftOpen } from "lucide-react";
6
5
  import { useEffect, useId, useRef } from "react";
7
- import { useControllableState, useResponsiveSize } from "@jbpark/use-hooks";
6
+ import { useControllableState, useLatest, useResponsiveSize } from "@jbpark/use-hooks";
8
7
  import { jsx, jsxs } from "react/jsx-runtime";
8
+ import { PanelLeftClose, PanelLeftOpen } from "lucide-react";
9
9
  //#region src/components/templates/layout/sider.tsx
10
10
  const BREAKPOINT_ORDER = [
11
11
  "xs",
@@ -30,10 +30,7 @@ const Sider = ({ children, className, classNames, style, width = 200, collapsedW
30
30
  const latestBrokenRef = useRef(broken);
31
31
  const previousBrokenRef = useRef(null);
32
32
  const microtaskScheduledRef = useRef(false);
33
- const onBreakpointRef = useRef(onBreakpoint);
34
- useEffect(() => {
35
- onBreakpointRef.current = onBreakpoint;
36
- });
33
+ const onBreakpointRef = useLatest(onBreakpoint);
37
34
  useEffect(() => {
38
35
  if (!breakpoint) return;
39
36
  latestBrokenRef.current = broken;
@@ -50,7 +47,8 @@ const Sider = ({ children, className, classNames, style, width = 200, collapsedW
50
47
  }, [
51
48
  broken,
52
49
  breakpoint,
53
- setCollapsed
50
+ setCollapsed,
51
+ onBreakpointRef
54
52
  ]);
55
53
  const onTriggerClick = () => {
56
54
  setCollapsed(!collapsed);
@@ -1 +1 @@
1
- {"version":3,"file":"sider.mjs","names":[],"sources":["../../../../src/components/templates/layout/sider.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useId, useRef } from 'react';\n\nimport { useControllableState, useResponsiveSize } from '@jbpark/use-hooks';\nimport { PanelLeftClose, PanelLeftOpen } from 'lucide-react';\n\nimport { DEFAULT_LOCALE, useConfig } from '@repo/ui/providers';\nimport { cn } from '@repo/ui/utils';\n\nimport { useRegisterSider } from './sider-context';\n\ntype Breakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n\n// Order matters here, not the values — used to compare the current\n// viewport tier against the configured `breakpoint` ordinally, since\n// `useResponsiveSize` reports which named tier the viewport is currently\n// in rather than a raw pixel width.\nconst BREAKPOINT_ORDER: Breakpoint[] = ['xs', 'sm', 'md', 'lg', 'xl', '2xl'];\n\nexport interface Props extends Omit<\n React.ComponentProps<'aside'>,\n 'onCollapse'\n> {\n width?: number | string;\n collapsedWidth?: number | string;\n collapsible?: boolean;\n defaultCollapsed?: boolean;\n collapsed?: boolean;\n placement?: 'left' | 'right';\n reverseArrow?: boolean;\n trigger?: React.ReactNode;\n classNames?: {\n trigger?: string;\n };\n breakpoint?: Breakpoint;\n onCollapse?: (collapsed: boolean) => void;\n onBreakpoint?: (broken: boolean) => void;\n}\n\nconst toCssSize = (value: number | string) =>\n typeof value === 'number' ? `${value}px` : value;\n\nconst Sider = ({\n children,\n className,\n classNames,\n style,\n width = 200,\n collapsedWidth = 80,\n collapsible = false,\n defaultCollapsed = false,\n collapsed: _collapsed,\n placement = 'left',\n reverseArrow = false,\n trigger,\n breakpoint,\n onCollapse,\n onBreakpoint,\n ...props\n}: Props) => {\n useRegisterSider();\n\n const { locale } = useConfig();\n const contentId = useId();\n const [collapsed, setCollapsed] = useControllableState<boolean>({\n value: _collapsed,\n defaultValue: defaultCollapsed,\n onChange: onCollapse,\n });\n\n const { breakpoint: viewportBreakpoint } = useResponsiveSize({\n viewport: true,\n });\n const broken = breakpoint\n ? BREAKPOINT_ORDER.indexOf(viewportBreakpoint.current) <\n BREAKPOINT_ORDER.indexOf(breakpoint)\n : false;\n\n const latestBrokenRef = useRef(broken);\n const previousBrokenRef = useRef<boolean | null>(null);\n const microtaskScheduledRef = useRef(false);\n const onBreakpointRef = useRef(onBreakpoint);\n\n useEffect(() => {\n onBreakpointRef.current = onBreakpoint;\n });\n\n // `useResponsiveSize`'s own initial measurement resolves through its own\n // layout effect, which (since it's called earlier in this component)\n // commits and — if the real viewport differs from its SSR-safe 'xs'\n // placeholder default — triggers a synchronous corrective re-render, all\n // before the browser paints. Both the placeholder-derived render and the\n // corrected one get their own effect pass (React doesn't coalesce\n // same-tick synchronous re-commits into a single effect flush), so\n // reacting to `broken` directly — in a layout or passive effect either\n // way — fires once with the wrong placeholder value, then again with the\n // corrected one.\n //\n // Coalescing through a microtask sidesteps that: every effect pass just\n // records its `broken` into a ref and schedules (at most once) a\n // microtask that reads whatever ended up latest once the synchronous\n // cascade has fully settled, and acts on that single, correct value.\n //\n // The `previousBrokenRef` guard is the separate fix for #227 point 3:\n // without it, an inline `onCollapse`/`onBreakpoint` (a fresh identity\n // every render) would change `setCollapsed`'s own identity and re-run\n // this effect on every unrelated parent re-render, reapplying `broken`\n // and undoing a user's manual toggle. Only a genuine change should act.\n useEffect(() => {\n if (!breakpoint) {\n return;\n }\n\n latestBrokenRef.current = broken;\n\n if (microtaskScheduledRef.current) {\n return;\n }\n microtaskScheduledRef.current = true;\n\n queueMicrotask(() => {\n microtaskScheduledRef.current = false;\n\n const settledBroken = latestBrokenRef.current;\n\n if (previousBrokenRef.current === settledBroken) {\n return;\n }\n\n previousBrokenRef.current = settledBroken;\n setCollapsed(settledBroken);\n onBreakpointRef.current?.(settledBroken);\n });\n }, [broken, breakpoint, setCollapsed]);\n\n const onTriggerClick = () => {\n setCollapsed(!collapsed);\n };\n\n // A right-placed Sider's collapse icon should default to pointing the\n // opposite way from a left-placed one (it's opening/closing a panel on\n // the other side of the content), so `placement` flips the effective\n // direction on top of whatever `reverseArrow` already requests —\n // `reverseArrow` still layers on as a manual override either way.\n const effectiveReverseArrow = reverseArrow !== (placement === 'right');\n const TriggerIcon =\n collapsed !== effectiveReverseArrow ? PanelLeftOpen : PanelLeftClose;\n\n return (\n <aside\n data-slot=\"layout-sider\"\n className={cn(\n // Below Header — and below every other floating/overlay primitive\n // in this library, which all share OVERLAY_LAYER (lib/z-layers.ts).\n // Sider is a static layout column, not floating chrome, and\n // previously outranked Header with an arbitrary z-100, covering it\n // once Header stuck to the viewport top on scroll. Kept as a small\n // absolute value rather than tracking OVERLAY_LAYER: it only has to\n // stay under that layer, and raising it in step would defeat this.\n 'z-10 flex h-full shrink-0 flex-col overflow-hidden',\n 'transition-[width] duration-200',\n // Lets a Sider visually sit on the right without needing to\n // reorder JSX/children — useful since Sider's presence is\n // detected via context (sider-context.ts) rather than requiring\n // it to be a specific direct child in a specific position.\n placement === 'right' && 'order-last',\n className,\n //\n )}\n style={{\n width: toCssSize(collapsed ? collapsedWidth : width),\n ...style,\n }}\n {...props}\n >\n <div id={contentId} className=\"min-h-0 flex-1 overflow-auto\">\n {children}\n </div>\n {collapsible && trigger !== null && (\n <button\n type=\"button\"\n data-slot=\"layout-sider-trigger\"\n aria-label={\n collapsed\n ? (locale.expand ?? DEFAULT_LOCALE.expand)\n : (locale.collapse ?? DEFAULT_LOCALE.collapse)\n }\n aria-expanded={!collapsed}\n aria-controls={contentId}\n onClick={onTriggerClick}\n className={cn(\n 'flex w-full shrink-0 items-center justify-center py-2',\n 'cursor-pointer transition-colors hover:bg-black/5',\n classNames?.trigger,\n //\n )}\n >\n {trigger === undefined ? <TriggerIcon className=\"size-4\" /> : trigger}\n </button>\n )}\n </aside>\n );\n};\n\nexport default Sider;\n"],"mappings":";;;;;;;;;AAkBA,MAAM,mBAAiC;CAAC;CAAM;CAAM;CAAM;CAAM;CAAM;AAAK;AAsB3E,MAAM,aAAa,UACjB,OAAO,UAAU,WAAW,GAAG,MAAM,MAAM;AAE7C,MAAM,SAAS,EACb,UACA,WACA,YACA,OACA,QAAQ,KACR,iBAAiB,IACjB,cAAc,OACd,mBAAmB,OACnB,WAAW,YACX,YAAY,QACZ,eAAe,OACf,SACA,YACA,YACA,cACA,GAAG,YACQ;CACX,iBAAiB;CAEjB,MAAM,EAAE,WAAW,UAAU;CAC7B,MAAM,YAAY,MAAM;CACxB,MAAM,CAAC,WAAW,gBAAgB,qBAA8B;EAC9D,OAAO;EACP,cAAc;EACd,UAAU;CACZ,CAAC;CAED,MAAM,EAAE,YAAY,uBAAuB,kBAAkB,EAC3D,UAAU,KACZ,CAAC;CACD,MAAM,SAAS,aACX,iBAAiB,QAAQ,mBAAmB,OAAO,IACnD,iBAAiB,QAAQ,UAAU,IACnC;CAEJ,MAAM,kBAAkB,OAAO,MAAM;CACrC,MAAM,oBAAoB,OAAuB,IAAI;CACrD,MAAM,wBAAwB,OAAO,KAAK;CAC1C,MAAM,kBAAkB,OAAO,YAAY;CAE3C,gBAAgB;EACd,gBAAgB,UAAU;CAC5B,CAAC;CAuBD,gBAAgB;EACd,IAAI,CAAC,YACH;EAGF,gBAAgB,UAAU;EAE1B,IAAI,sBAAsB,SACxB;EAEF,sBAAsB,UAAU;EAEhC,qBAAqB;GACnB,sBAAsB,UAAU;GAEhC,MAAM,gBAAgB,gBAAgB;GAEtC,IAAI,kBAAkB,YAAY,eAChC;GAGF,kBAAkB,UAAU;GAC5B,aAAa,aAAa;GAC1B,gBAAgB,UAAU,aAAa;EACzC,CAAC;CACH,GAAG;EAAC;EAAQ;EAAY;CAAY,CAAC;CAErC,MAAM,uBAAuB;EAC3B,aAAa,CAAC,SAAS;CACzB;CAQA,MAAM,cACJ,eAF4B,kBAAkB,cAAc,YAEtB,gBAAgB;CAExD,OACE,qBAAC,SAAD;EACE,aAAU;EACV,WAAW,GAQT,sDACA,mCAKA,cAAc,WAAW,cACzB,SAEF;EACA,OAAO;GACL,OAAO,UAAU,YAAY,iBAAiB,KAAK;GACnD,GAAG;EACL;EACA,GAAI;EAxBN,UAAA,CA0BE,oBAAC,OAAD;GAAK,IAAI;GAAW,WAAU;GAC3B;EACE,CAAA,GACJ,eAAe,YAAY,QAC1B,oBAAC,UAAD;GACE,MAAK;GACL,aAAU;GACV,cACE,YACK,OAAO,UAAU,eAAe,SAChC,OAAO,YAAY,eAAe;GAEzC,iBAAe,CAAC;GAChB,iBAAe;GACf,SAAS;GACT,WAAW,GACT,yDACA,qDACA,YAAY,OAEd;GAEC,UAAA,YAAY,KAAA,IAAY,oBAAC,aAAD,EAAa,WAAU,SAAU,CAAA,IAAI;EACxD,CAAA,CAEL;;AAEX"}
1
+ {"version":3,"file":"sider.mjs","names":[],"sources":["../../../../src/components/templates/layout/sider.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useId, useRef } from 'react';\n\nimport {\n useControllableState,\n useLatest,\n useResponsiveSize,\n} from '@jbpark/use-hooks';\nimport { PanelLeftClose, PanelLeftOpen } from 'lucide-react';\n\nimport { DEFAULT_LOCALE, useConfig } from '@repo/ui/providers';\nimport { cn } from '@repo/ui/utils';\n\nimport { useRegisterSider } from './sider-context';\n\ntype Breakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n\n// Order matters here, not the values — used to compare the current\n// viewport tier against the configured `breakpoint` ordinally, since\n// `useResponsiveSize` reports which named tier the viewport is currently\n// in rather than a raw pixel width.\nconst BREAKPOINT_ORDER: Breakpoint[] = ['xs', 'sm', 'md', 'lg', 'xl', '2xl'];\n\nexport interface Props extends Omit<\n React.ComponentProps<'aside'>,\n 'onCollapse'\n> {\n width?: number | string;\n collapsedWidth?: number | string;\n collapsible?: boolean;\n defaultCollapsed?: boolean;\n collapsed?: boolean;\n placement?: 'left' | 'right';\n reverseArrow?: boolean;\n trigger?: React.ReactNode;\n classNames?: {\n trigger?: string;\n };\n breakpoint?: Breakpoint;\n onCollapse?: (collapsed: boolean) => void;\n onBreakpoint?: (broken: boolean) => void;\n}\n\nconst toCssSize = (value: number | string) =>\n typeof value === 'number' ? `${value}px` : value;\n\nconst Sider = ({\n children,\n className,\n classNames,\n style,\n width = 200,\n collapsedWidth = 80,\n collapsible = false,\n defaultCollapsed = false,\n collapsed: _collapsed,\n placement = 'left',\n reverseArrow = false,\n trigger,\n breakpoint,\n onCollapse,\n onBreakpoint,\n ...props\n}: Props) => {\n useRegisterSider();\n\n const { locale } = useConfig();\n const contentId = useId();\n const [collapsed, setCollapsed] = useControllableState<boolean>({\n value: _collapsed,\n defaultValue: defaultCollapsed,\n onChange: onCollapse,\n });\n\n const { breakpoint: viewportBreakpoint } = useResponsiveSize({\n viewport: true,\n });\n const broken = breakpoint\n ? BREAKPOINT_ORDER.indexOf(viewportBreakpoint.current) <\n BREAKPOINT_ORDER.indexOf(breakpoint)\n : false;\n\n const latestBrokenRef = useRef(broken);\n const previousBrokenRef = useRef<boolean | null>(null);\n const microtaskScheduledRef = useRef(false);\n const onBreakpointRef = useLatest(onBreakpoint);\n\n // `useResponsiveSize`'s own initial measurement resolves through its own\n // layout effect, which (since it's called earlier in this component)\n // commits and — if the real viewport differs from its SSR-safe 'xs'\n // placeholder default — triggers a synchronous corrective re-render, all\n // before the browser paints. Both the placeholder-derived render and the\n // corrected one get their own effect pass (React doesn't coalesce\n // same-tick synchronous re-commits into a single effect flush), so\n // reacting to `broken` directly — in a layout or passive effect either\n // way — fires once with the wrong placeholder value, then again with the\n // corrected one.\n //\n // Coalescing through a microtask sidesteps that: every effect pass just\n // records its `broken` into a ref and schedules (at most once) a\n // microtask that reads whatever ended up latest once the synchronous\n // cascade has fully settled, and acts on that single, correct value.\n //\n // The `previousBrokenRef` guard is the separate fix for #227 point 3:\n // without it, an inline `onCollapse`/`onBreakpoint` (a fresh identity\n // every render) would change `setCollapsed`'s own identity and re-run\n // this effect on every unrelated parent re-render, reapplying `broken`\n // and undoing a user's manual toggle. Only a genuine change should act.\n useEffect(() => {\n if (!breakpoint) {\n return;\n }\n\n latestBrokenRef.current = broken;\n\n if (microtaskScheduledRef.current) {\n return;\n }\n microtaskScheduledRef.current = true;\n\n queueMicrotask(() => {\n microtaskScheduledRef.current = false;\n\n const settledBroken = latestBrokenRef.current;\n\n if (previousBrokenRef.current === settledBroken) {\n return;\n }\n\n previousBrokenRef.current = settledBroken;\n setCollapsed(settledBroken);\n onBreakpointRef.current?.(settledBroken);\n });\n }, [broken, breakpoint, setCollapsed, onBreakpointRef]);\n\n const onTriggerClick = () => {\n setCollapsed(!collapsed);\n };\n\n // A right-placed Sider's collapse icon should default to pointing the\n // opposite way from a left-placed one (it's opening/closing a panel on\n // the other side of the content), so `placement` flips the effective\n // direction on top of whatever `reverseArrow` already requests —\n // `reverseArrow` still layers on as a manual override either way.\n const effectiveReverseArrow = reverseArrow !== (placement === 'right');\n const TriggerIcon =\n collapsed !== effectiveReverseArrow ? PanelLeftOpen : PanelLeftClose;\n\n return (\n <aside\n data-slot=\"layout-sider\"\n className={cn(\n // Below Header — and below every other floating/overlay primitive\n // in this library, which all share OVERLAY_LAYER (lib/z-layers.ts).\n // Sider is a static layout column, not floating chrome, and\n // previously outranked Header with an arbitrary z-100, covering it\n // once Header stuck to the viewport top on scroll. Kept as a small\n // absolute value rather than tracking OVERLAY_LAYER: it only has to\n // stay under that layer, and raising it in step would defeat this.\n 'z-10 flex h-full shrink-0 flex-col overflow-hidden',\n 'transition-[width] duration-200',\n // Lets a Sider visually sit on the right without needing to\n // reorder JSX/children — useful since Sider's presence is\n // detected via context (sider-context.ts) rather than requiring\n // it to be a specific direct child in a specific position.\n placement === 'right' && 'order-last',\n className,\n //\n )}\n style={{\n width: toCssSize(collapsed ? collapsedWidth : width),\n ...style,\n }}\n {...props}\n >\n <div id={contentId} className=\"min-h-0 flex-1 overflow-auto\">\n {children}\n </div>\n {collapsible && trigger !== null && (\n <button\n type=\"button\"\n data-slot=\"layout-sider-trigger\"\n aria-label={\n collapsed\n ? (locale.expand ?? DEFAULT_LOCALE.expand)\n : (locale.collapse ?? DEFAULT_LOCALE.collapse)\n }\n aria-expanded={!collapsed}\n aria-controls={contentId}\n onClick={onTriggerClick}\n className={cn(\n 'flex w-full shrink-0 items-center justify-center py-2',\n 'cursor-pointer transition-colors hover:bg-black/5',\n classNames?.trigger,\n //\n )}\n >\n {trigger === undefined ? <TriggerIcon className=\"size-4\" /> : trigger}\n </button>\n )}\n </aside>\n );\n};\n\nexport default Sider;\n"],"mappings":";;;;;;;;;AAsBA,MAAM,mBAAiC;CAAC;CAAM;CAAM;CAAM;CAAM;CAAM;AAAK;AAsB3E,MAAM,aAAa,UACjB,OAAO,UAAU,WAAW,GAAG,MAAM,MAAM;AAE7C,MAAM,SAAS,EACb,UACA,WACA,YACA,OACA,QAAQ,KACR,iBAAiB,IACjB,cAAc,OACd,mBAAmB,OACnB,WAAW,YACX,YAAY,QACZ,eAAe,OACf,SACA,YACA,YACA,cACA,GAAG,YACQ;CACX,iBAAiB;CAEjB,MAAM,EAAE,WAAW,UAAU;CAC7B,MAAM,YAAY,MAAM;CACxB,MAAM,CAAC,WAAW,gBAAgB,qBAA8B;EAC9D,OAAO;EACP,cAAc;EACd,UAAU;CACZ,CAAC;CAED,MAAM,EAAE,YAAY,uBAAuB,kBAAkB,EAC3D,UAAU,KACZ,CAAC;CACD,MAAM,SAAS,aACX,iBAAiB,QAAQ,mBAAmB,OAAO,IACnD,iBAAiB,QAAQ,UAAU,IACnC;CAEJ,MAAM,kBAAkB,OAAO,MAAM;CACrC,MAAM,oBAAoB,OAAuB,IAAI;CACrD,MAAM,wBAAwB,OAAO,KAAK;CAC1C,MAAM,kBAAkB,UAAU,YAAY;CAuB9C,gBAAgB;EACd,IAAI,CAAC,YACH;EAGF,gBAAgB,UAAU;EAE1B,IAAI,sBAAsB,SACxB;EAEF,sBAAsB,UAAU;EAEhC,qBAAqB;GACnB,sBAAsB,UAAU;GAEhC,MAAM,gBAAgB,gBAAgB;GAEtC,IAAI,kBAAkB,YAAY,eAChC;GAGF,kBAAkB,UAAU;GAC5B,aAAa,aAAa;GAC1B,gBAAgB,UAAU,aAAa;EACzC,CAAC;CACH,GAAG;EAAC;EAAQ;EAAY;EAAc;CAAe,CAAC;CAEtD,MAAM,uBAAuB;EAC3B,aAAa,CAAC,SAAS;CACzB;CAQA,MAAM,cACJ,eAF4B,kBAAkB,cAAc,YAEtB,gBAAgB;CAExD,OACE,qBAAC,SAAD;EACE,aAAU;EACV,WAAW,GAQT,sDACA,mCAKA,cAAc,WAAW,cACzB,SAEF;EACA,OAAO;GACL,OAAO,UAAU,YAAY,iBAAiB,KAAK;GACnD,GAAG;EACL;EACA,GAAI;EAxBN,UAAA,CA0BE,oBAAC,OAAD;GAAK,IAAI;GAAW,WAAU;GAC3B;EACE,CAAA,GACJ,eAAe,YAAY,QAC1B,oBAAC,UAAD;GACE,MAAK;GACL,aAAU;GACV,cACE,YACK,OAAO,UAAU,eAAe,SAChC,OAAO,YAAY,eAAe;GAEzC,iBAAe,CAAC;GAChB,iBAAe;GACf,SAAS;GACT,WAAW,GACT,yDACA,qDACA,YAAY,OAEd;GAEC,UAAA,YAAY,KAAA,IAAY,oBAAC,aAAD,EAAa,WAAU,SAAU,CAAA,IAAI;EACxD,CAAA,CAEL;;AAEX"}
@@ -1,10 +1,10 @@
1
1
  "use client";
2
2
  import { __exportAll } from "../_virtual/_rolldown/runtime.mjs";
3
3
  import { cn } from "../utils.mjs";
4
- import { ChevronDownIcon } from "lucide-react";
5
4
  import "react";
6
5
  import { jsx, jsxs } from "react/jsx-runtime";
7
6
  import { Accordion } from "@base-ui/react/accordion";
7
+ import { ChevronDownIcon } from "lucide-react";
8
8
  //#region src/core/accordion.tsx
9
9
  var accordion_exports = /* @__PURE__ */ __exportAll({
10
10
  Accordion: () => Accordion$1,
@@ -0,0 +1,2 @@
1
+ import { ComponentProps } from "react";
2
+ import { Autocomplete } from "@base-ui/react/autocomplete";
@@ -0,0 +1,48 @@
1
+ "use client";
2
+ import { __exportAll } from "../_virtual/_rolldown/runtime.mjs";
3
+ import { cn } from "../utils.mjs";
4
+ import { useConfig } from "../providers/config/context.mjs";
5
+ import { OVERLAY_LAYER } from "../lib/z-layers.mjs";
6
+ import { jsx } from "react/jsx-runtime";
7
+ import { Autocomplete } from "@base-ui/react/autocomplete";
8
+ //#region src/core/autocomplete.tsx
9
+ var autocomplete_exports = /* @__PURE__ */ __exportAll({
10
+ Autocomplete: () => Autocomplete$1,
11
+ AutocompleteClear: () => AutocompleteClear,
12
+ AutocompleteContent: () => AutocompleteContent,
13
+ AutocompleteEmpty: () => AutocompleteEmpty,
14
+ AutocompleteInput: () => AutocompleteInput,
15
+ AutocompleteItem: () => AutocompleteItem,
16
+ AutocompleteList: () => AutocompleteList
17
+ });
18
+ const Autocomplete$1 = Autocomplete.Root;
19
+ const AutocompleteInput = Autocomplete.Input;
20
+ const AutocompleteClear = Autocomplete.Clear;
21
+ const AutocompleteList = Autocomplete.List;
22
+ const AutocompleteItem = Autocomplete.Item;
23
+ const AutocompleteEmpty = Autocomplete.Empty;
24
+ function AutocompleteContent({ container, className, ...props }) {
25
+ const { getContainer } = useConfig();
26
+ return /* @__PURE__ */ jsx(Autocomplete.Portal, {
27
+ container: container ?? getContainer(),
28
+ children: /* @__PURE__ */ jsx(Autocomplete.Positioner, {
29
+ side: "bottom",
30
+ align: "start",
31
+ sideOffset: 4,
32
+ className: cn(OVERLAY_LAYER, "w-(--anchor-width) max-w-(--available-width)"),
33
+ children: /* @__PURE__ */ jsx(Autocomplete.Popup, {
34
+ "data-slot": "autocomplete-content",
35
+ className: cn(`bg-popover text-popover-foreground max-h-(--available-height)
36
+ origin-(--transform-origin) overflow-hidden rounded-md border
37
+ shadow-md transition-[opacity,transform] duration-150
38
+ data-ending-style:scale-95 data-ending-style:opacity-0
39
+ data-starting-style:scale-95 data-starting-style:opacity-0`, className),
40
+ ...props
41
+ })
42
+ })
43
+ });
44
+ }
45
+ //#endregion
46
+ export { Autocomplete$1 as Autocomplete, AutocompleteClear, AutocompleteContent, AutocompleteEmpty, AutocompleteInput, AutocompleteItem, AutocompleteList, autocomplete_exports };
47
+
48
+ //# sourceMappingURL=autocomplete.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autocomplete.mjs","names":["Autocomplete","Primitive"],"sources":["../../src/core/autocomplete.tsx"],"sourcesContent":["'use client';\n\nimport type { ComponentProps } from 'react';\n\nimport { Autocomplete as Primitive } from '@base-ui/react/autocomplete';\n\nimport { useConfig } from '@repo/ui/providers';\nimport { cn } from '@repo/ui/utils';\n\nimport { OVERLAY_LAYER } from '../lib/z-layers';\n\nexport const Autocomplete = Primitive.Root;\nexport const AutocompleteInput = Primitive.Input;\nexport const AutocompleteClear = Primitive.Clear;\nexport const AutocompleteList = Primitive.List;\nexport const AutocompleteItem = Primitive.Item;\nexport const AutocompleteEmpty = Primitive.Empty;\n\nexport function AutocompleteContent({\n container,\n className,\n ...props\n}: ComponentProps<typeof Primitive.Popup> & { container?: HTMLElement }) {\n const { getContainer } = useConfig();\n\n return (\n <Primitive.Portal container={container ?? getContainer()}>\n <Primitive.Positioner\n side=\"bottom\"\n align=\"start\"\n sideOffset={4}\n className={cn(\n OVERLAY_LAYER,\n 'w-(--anchor-width) max-w-(--available-width)', //\n )}\n >\n <Primitive.Popup\n data-slot=\"autocomplete-content\"\n className={cn(\n `bg-popover text-popover-foreground max-h-(--available-height)\n origin-(--transform-origin) overflow-hidden rounded-md border\n shadow-md transition-[opacity,transform] duration-150\n data-ending-style:scale-95 data-ending-style:opacity-0\n data-starting-style:scale-95 data-starting-style:opacity-0`,\n className, //\n )}\n {...props}\n />\n </Primitive.Positioner>\n </Primitive.Portal>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAWA,MAAaA,iBAAeC,aAAU;AACtC,MAAa,oBAAoBA,aAAU;AAC3C,MAAa,oBAAoBA,aAAU;AAC3C,MAAa,mBAAmBA,aAAU;AAC1C,MAAa,mBAAmBA,aAAU;AAC1C,MAAa,oBAAoBA,aAAU;AAE3C,SAAgB,oBAAoB,EAClC,WACA,WACA,GAAG,SACoE;CACvE,MAAM,EAAE,iBAAiB,UAAU;CAEnC,OACE,oBAACA,aAAU,QAAX;EAAkB,WAAW,aAAa,aAAa;EACrD,UAAA,oBAACA,aAAU,YAAX;GACE,MAAK;GACL,OAAM;GACN,YAAY;GACZ,WAAW,GACT,eACA,8CACF;GAEA,UAAA,oBAACA,aAAU,OAAX;IACE,aAAU;IACV,WAAW,GACT;;;;yEAKA,SACF;IACA,GAAI;GACL,CAAA;EACmB,CAAA;CACN,CAAA;AAEtB"}
@@ -1,13 +1,15 @@
1
1
  import { useRender } from "@base-ui/react/use-render";
2
2
  import { VariantProps } from "class-variance-authority";
3
- //#region src/core/badge.d.ts
3
+ declare namespace badge_d_exports {
4
+ export { Badge, Props, badgeVariants };
5
+ }
4
6
  declare const badgeVariants: (props?: ({
5
- variant?: "link" | "outline" | "default" | "secondary" | "destructive" | "ghost" | null | undefined;
7
+ variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
6
8
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
9
  type Props = Omit<useRender.ComponentProps<'span'>, 'className'> & VariantProps<typeof badgeVariants> & {
8
10
  className?: string;
9
11
  };
10
12
  declare function Badge({ className, variant, render, ...props }: Props): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
11
13
  //#endregion
12
- export { Badge, type Props, badgeVariants };
14
+ export { Badge, type Props, badgeVariants, badge_d_exports };
13
15
  //# sourceMappingURL=badge.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"badge.d.mts","names":[],"sources":["../../src/core/badge.tsx"],"mappings":";;;cAUM,gBAAa;;6CA0BlB;KAEI,QAAQ,KAAK,UAAU,uCAC1B,oBAAoB;EAClB;;iBAGK,QAAQ,WAAW,SAAqB,WAAW,SAAS,wBAAK,+CAAA"}
1
+ {"version":3,"file":"badge.d.mts","names":[],"sources":["../../src/core/badge.tsx"],"mappings":";;;;;cAUM,gBAAa;;6CA0BlB;KAEI,QAAQ,KAAK,UAAU,uCAC1B,oBAAoB;EAClB;;iBAGK,QAAQ,WAAW,SAAqB,WAAW,SAAS,wBAAK,+CAAA"}