@jbpark/ui-kit 5.2.0 → 5.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) hide show
  1. package/dist/Button.d.mts +1 -19
  2. package/dist/Button.d.mts.map +1 -1
  3. package/dist/Button.mjs +2 -4
  4. package/dist/Button.mjs.map +1 -1
  5. package/dist/Card.d.mts +1 -10
  6. package/dist/Card.d.mts.map +1 -1
  7. package/dist/Card.mjs +1 -2
  8. package/dist/Card.mjs.map +1 -1
  9. package/dist/Layout.d.mts +5 -6
  10. package/dist/Layout.d.mts.map +1 -1
  11. package/dist/Layout.mjs +1 -2
  12. package/dist/Layout.mjs.map +1 -1
  13. package/dist/Menu.d.mts +1 -1
  14. package/dist/Menu.mjs +1 -2
  15. package/dist/Reveals.d.mts +2 -3
  16. package/dist/Reveals.d.mts.map +1 -1
  17. package/dist/Reveals.mjs +1 -2
  18. package/dist/Reveals.mjs.map +1 -1
  19. package/dist/Space.d.mts +1 -17
  20. package/dist/Space.d.mts.map +1 -1
  21. package/dist/Space.mjs +1 -2
  22. package/dist/Space.mjs.map +1 -1
  23. package/dist/Tag.d.mts +1 -9
  24. package/dist/Tag.d.mts.map +1 -1
  25. package/dist/Tag.mjs +1 -2
  26. package/dist/Tag.mjs.map +1 -1
  27. package/dist/Typography.d.mts +5 -6
  28. package/dist/Typography.d.mts.map +1 -1
  29. package/dist/Typography.mjs +1 -2
  30. package/dist/Typography.mjs.map +1 -1
  31. package/dist/_virtual/_rolldown/runtime.mjs +6 -11
  32. package/dist/components/atoms/checkbox/checkbox.d.mts +2 -17
  33. package/dist/components/atoms/checkbox/checkbox.d.mts.map +1 -1
  34. package/dist/components/atoms/checkbox/checkbox.mjs +2 -4
  35. package/dist/components/atoms/checkbox/checkbox.mjs.map +1 -1
  36. package/dist/components/atoms/checkbox/group.d.mts +2 -16
  37. package/dist/components/atoms/checkbox/group.d.mts.map +1 -1
  38. package/dist/components/atoms/checkbox/group.mjs +4 -5
  39. package/dist/components/atoms/checkbox/group.mjs.map +1 -1
  40. package/dist/components/atoms/checkbox/index.d.mts +3 -4
  41. package/dist/components/atoms/checkbox/index.d.mts.map +1 -1
  42. package/dist/components/atoms/checkbox/index.mjs +1 -2
  43. package/dist/components/atoms/checkbox/index.mjs.map +1 -1
  44. package/dist/components/atoms/color-picker.d.mts +2 -15
  45. package/dist/components/atoms/color-picker.d.mts.map +1 -1
  46. package/dist/components/atoms/color-picker.mjs +2 -4
  47. package/dist/components/atoms/color-picker.mjs.map +1 -1
  48. package/dist/components/atoms/date-picker.d.mts +2 -11
  49. package/dist/components/atoms/date-picker.d.mts.map +1 -1
  50. package/dist/components/atoms/date-picker.mjs +2 -4
  51. package/dist/components/atoms/date-picker.mjs.map +1 -1
  52. package/dist/components/atoms/float-button/back-top.d.mts +2 -10
  53. package/dist/components/atoms/float-button/back-top.d.mts.map +1 -1
  54. package/dist/components/atoms/float-button/back-top.mjs +4 -5
  55. package/dist/components/atoms/float-button/back-top.mjs.map +1 -1
  56. package/dist/components/atoms/float-button/float-button.d.mts +2 -8
  57. package/dist/components/atoms/float-button/float-button.d.mts.map +1 -1
  58. package/dist/components/atoms/float-button/float-button.mjs +1 -2
  59. package/dist/components/atoms/float-button/float-button.mjs.map +1 -1
  60. package/dist/components/atoms/float-button/index.d.mts +3 -4
  61. package/dist/components/atoms/float-button/index.d.mts.map +1 -1
  62. package/dist/components/atoms/float-button/index.mjs +1 -2
  63. package/dist/components/atoms/float-button/index.mjs.map +1 -1
  64. package/dist/components/atoms/index.d.mts +13 -12
  65. package/dist/components/atoms/input/index.d.mts +4 -5
  66. package/dist/components/atoms/input/index.d.mts.map +1 -1
  67. package/dist/components/atoms/input/index.mjs +2 -3
  68. package/dist/components/atoms/input/index.mjs.map +1 -1
  69. package/dist/components/atoms/input/input.d.mts +2 -7
  70. package/dist/components/atoms/input/input.d.mts.map +1 -1
  71. package/dist/components/atoms/input/input.mjs +1 -2
  72. package/dist/components/atoms/input/input.mjs.map +1 -1
  73. package/dist/components/atoms/input/search.d.mts +2 -15
  74. package/dist/components/atoms/input/search.d.mts.map +1 -1
  75. package/dist/components/atoms/input/search.mjs +2 -4
  76. package/dist/components/atoms/input/search.mjs.map +1 -1
  77. package/dist/components/atoms/input/text-area.d.mts +2 -8
  78. package/dist/components/atoms/input/text-area.d.mts.map +1 -1
  79. package/dist/components/atoms/input/text-area.mjs +1 -2
  80. package/dist/components/atoms/input/text-area.mjs.map +1 -1
  81. package/dist/components/atoms/option-group.d.mts +1 -1
  82. package/dist/components/atoms/option-group.d.mts.map +1 -1
  83. package/dist/components/atoms/option-group.mjs +1 -1
  84. package/dist/components/atoms/option-group.mjs.map +1 -1
  85. package/dist/components/atoms/popover.d.mts +2 -14
  86. package/dist/components/atoms/popover.d.mts.map +1 -1
  87. package/dist/components/atoms/popover.mjs +1 -2
  88. package/dist/components/atoms/popover.mjs.map +1 -1
  89. package/dist/components/atoms/progress.d.mts +2 -10
  90. package/dist/components/atoms/progress.d.mts.map +1 -1
  91. package/dist/components/atoms/progress.mjs +1 -2
  92. package/dist/components/atoms/progress.mjs.map +1 -1
  93. package/dist/components/atoms/radio/context.mjs +2 -4
  94. package/dist/components/atoms/radio/context.mjs.map +1 -1
  95. package/dist/components/atoms/radio/group.d.mts +2 -19
  96. package/dist/components/atoms/radio/group.d.mts.map +1 -1
  97. package/dist/components/atoms/radio/group.mjs +2 -4
  98. package/dist/components/atoms/radio/group.mjs.map +1 -1
  99. package/dist/components/atoms/radio/index.d.mts +3 -4
  100. package/dist/components/atoms/radio/index.d.mts.map +1 -1
  101. package/dist/components/atoms/radio/index.mjs +1 -2
  102. package/dist/components/atoms/radio/index.mjs.map +1 -1
  103. package/dist/components/atoms/radio/radio.d.mts +2 -18
  104. package/dist/components/atoms/radio/radio.d.mts.map +1 -1
  105. package/dist/components/atoms/radio/radio.mjs +2 -4
  106. package/dist/components/atoms/radio/radio.mjs.map +1 -1
  107. package/dist/components/atoms/select.d.mts +2 -10
  108. package/dist/components/atoms/select.d.mts.map +1 -1
  109. package/dist/components/atoms/select.mjs +2 -3
  110. package/dist/components/atoms/select.mjs.map +1 -1
  111. package/dist/components/atoms/skeleton/button.d.mts +2 -7
  112. package/dist/components/atoms/skeleton/button.d.mts.map +1 -1
  113. package/dist/components/atoms/skeleton/button.mjs +1 -2
  114. package/dist/components/atoms/skeleton/button.mjs.map +1 -1
  115. package/dist/components/atoms/skeleton/index.d.mts +4 -5
  116. package/dist/components/atoms/skeleton/index.d.mts.map +1 -1
  117. package/dist/components/atoms/skeleton/index.mjs +2 -3
  118. package/dist/components/atoms/skeleton/index.mjs.map +1 -1
  119. package/dist/components/atoms/skeleton/node.d.mts +2 -7
  120. package/dist/components/atoms/skeleton/node.d.mts.map +1 -1
  121. package/dist/components/atoms/skeleton/node.mjs +1 -2
  122. package/dist/components/atoms/skeleton/node.mjs.map +1 -1
  123. package/dist/components/atoms/skeleton/skeleton.d.mts +2 -20
  124. package/dist/components/atoms/skeleton/skeleton.d.mts.map +1 -1
  125. package/dist/components/atoms/skeleton/skeleton.mjs +2 -4
  126. package/dist/components/atoms/skeleton/skeleton.mjs.map +1 -1
  127. package/dist/components/atoms/spin.d.mts +2 -10
  128. package/dist/components/atoms/spin.d.mts.map +1 -1
  129. package/dist/components/atoms/spin.mjs +2 -4
  130. package/dist/components/atoms/spin.mjs.map +1 -1
  131. package/dist/components/atoms/switch.d.mts +2 -14
  132. package/dist/components/atoms/switch.d.mts.map +1 -1
  133. package/dist/components/atoms/switch.mjs +4 -6
  134. package/dist/components/atoms/switch.mjs.map +1 -1
  135. package/dist/components/atoms/typography/link.d.mts +2 -10
  136. package/dist/components/atoms/typography/link.d.mts.map +1 -1
  137. package/dist/components/atoms/typography/link.mjs +1 -2
  138. package/dist/components/atoms/typography/link.mjs.map +1 -1
  139. package/dist/components/atoms/typography/paragraph.d.mts +2 -8
  140. package/dist/components/atoms/typography/paragraph.d.mts.map +1 -1
  141. package/dist/components/atoms/typography/paragraph.mjs +1 -2
  142. package/dist/components/atoms/typography/paragraph.mjs.map +1 -1
  143. package/dist/components/atoms/typography/text.d.mts +2 -10
  144. package/dist/components/atoms/typography/text.d.mts.map +1 -1
  145. package/dist/components/atoms/typography/text.mjs +1 -2
  146. package/dist/components/atoms/typography/text.mjs.map +1 -1
  147. package/dist/components/atoms/typography/title.d.mts +2 -9
  148. package/dist/components/atoms/typography/title.d.mts.map +1 -1
  149. package/dist/components/atoms/typography/title.mjs +1 -2
  150. package/dist/components/atoms/typography/title.mjs.map +1 -1
  151. package/dist/components/atoms/typography/typography.d.mts +2 -7
  152. package/dist/components/atoms/typography/typography.d.mts.map +1 -1
  153. package/dist/components/atoms/typography/typography.mjs +1 -2
  154. package/dist/components/atoms/typography/typography.mjs.map +1 -1
  155. package/dist/components/molecules/collapse.d.mts +2 -14
  156. package/dist/components/molecules/collapse.d.mts.map +1 -1
  157. package/dist/components/molecules/collapse.mjs +4 -6
  158. package/dist/components/molecules/collapse.mjs.map +1 -1
  159. package/dist/components/molecules/dropdown.d.mts +2 -15
  160. package/dist/components/molecules/dropdown.d.mts.map +1 -1
  161. package/dist/components/molecules/dropdown.mjs +2 -4
  162. package/dist/components/molecules/dropdown.mjs.map +1 -1
  163. package/dist/components/molecules/index.d.mts +7 -7
  164. package/dist/components/molecules/marquees/index.d.mts +3 -4
  165. package/dist/components/molecules/marquees/index.d.mts.map +1 -1
  166. package/dist/components/molecules/marquees/index.mjs +2 -3
  167. package/dist/components/molecules/marquees/index.mjs.map +1 -1
  168. package/dist/components/molecules/marquees/item.d.mts +2 -11
  169. package/dist/components/molecules/marquees/item.d.mts.map +1 -1
  170. package/dist/components/molecules/marquees/item.mjs +14 -19
  171. package/dist/components/molecules/marquees/item.mjs.map +1 -1
  172. package/dist/components/molecules/marquees/marquees.d.mts +2 -11
  173. package/dist/components/molecules/marquees/marquees.d.mts.map +1 -1
  174. package/dist/components/molecules/marquees/marquees.mjs +10 -20
  175. package/dist/components/molecules/marquees/marquees.mjs.map +1 -1
  176. package/dist/components/molecules/marquees/use-pause-on-hover.mjs +26 -0
  177. package/dist/components/molecules/marquees/use-pause-on-hover.mjs.map +1 -0
  178. package/dist/components/molecules/menu/item/item.mjs +2 -4
  179. package/dist/components/molecules/menu/item/item.mjs.map +1 -1
  180. package/dist/components/molecules/menu/item/label.mjs +1 -2
  181. package/dist/components/molecules/menu/item/label.mjs.map +1 -1
  182. package/dist/components/molecules/menu/menu.d.mts +2 -17
  183. package/dist/components/molecules/menu/menu.d.mts.map +1 -1
  184. package/dist/components/molecules/menu/menu.mjs +2 -4
  185. package/dist/components/molecules/menu/menu.mjs.map +1 -1
  186. package/dist/components/molecules/reveals/item.d.mts +2 -15
  187. package/dist/components/molecules/reveals/item.d.mts.map +1 -1
  188. package/dist/components/molecules/reveals/item.mjs +2 -4
  189. package/dist/components/molecules/reveals/item.mjs.map +1 -1
  190. package/dist/components/molecules/reveals/reveals.d.mts +2 -18
  191. package/dist/components/molecules/reveals/reveals.d.mts.map +1 -1
  192. package/dist/components/molecules/reveals/reveals.mjs +2 -3
  193. package/dist/components/molecules/reveals/reveals.mjs.map +1 -1
  194. package/dist/components/molecules/splitter/index.d.mts +3 -4
  195. package/dist/components/molecules/splitter/index.d.mts.map +1 -1
  196. package/dist/components/molecules/splitter/index.mjs +1 -2
  197. package/dist/components/molecules/splitter/index.mjs.map +1 -1
  198. package/dist/components/molecules/splitter/panel.d.mts +2 -8
  199. package/dist/components/molecules/splitter/panel.d.mts.map +1 -1
  200. package/dist/components/molecules/splitter/panel.mjs +1 -2
  201. package/dist/components/molecules/splitter/panel.mjs.map +1 -1
  202. package/dist/components/molecules/splitter/splitter.d.mts +2 -14
  203. package/dist/components/molecules/splitter/splitter.d.mts.map +1 -1
  204. package/dist/components/molecules/splitter/splitter.mjs +2 -4
  205. package/dist/components/molecules/splitter/splitter.mjs.map +1 -1
  206. package/dist/components/molecules/upload.d.mts +2 -15
  207. package/dist/components/molecules/upload.d.mts.map +1 -1
  208. package/dist/components/molecules/upload.mjs +2 -4
  209. package/dist/components/molecules/upload.mjs.map +1 -1
  210. package/dist/components/organisms/drawer.d.mts +2 -25
  211. package/dist/components/organisms/drawer.d.mts.map +1 -1
  212. package/dist/components/organisms/drawer.mjs +2 -4
  213. package/dist/components/organisms/drawer.mjs.map +1 -1
  214. package/dist/components/organisms/imperative-stack.mjs +9 -11
  215. package/dist/components/organisms/imperative-stack.mjs.map +1 -1
  216. package/dist/components/organisms/index.d.mts +6 -5
  217. package/dist/components/organisms/list/index.d.mts +3 -4
  218. package/dist/components/organisms/list/index.d.mts.map +1 -1
  219. package/dist/components/organisms/list/index.mjs +1 -2
  220. package/dist/components/organisms/list/index.mjs.map +1 -1
  221. package/dist/components/organisms/list/item.d.mts +2 -8
  222. package/dist/components/organisms/list/item.d.mts.map +1 -1
  223. package/dist/components/organisms/list/item.mjs +1 -2
  224. package/dist/components/organisms/list/item.mjs.map +1 -1
  225. package/dist/components/organisms/list/list.d.mts +3 -20
  226. package/dist/components/organisms/list/list.d.mts.map +1 -1
  227. package/dist/components/organisms/list/list.mjs +3 -5
  228. package/dist/components/organisms/list/list.mjs.map +1 -1
  229. package/dist/components/organisms/modal.d.mts +2 -22
  230. package/dist/components/organisms/modal.d.mts.map +1 -1
  231. package/dist/components/organisms/modal.mjs +3 -5
  232. package/dist/components/organisms/modal.mjs.map +1 -1
  233. package/dist/components/organisms/swiper/index.d.mts +3 -4
  234. package/dist/components/organisms/swiper/index.d.mts.map +1 -1
  235. package/dist/components/organisms/swiper/index.mjs +2 -3
  236. package/dist/components/organisms/swiper/index.mjs.map +1 -1
  237. package/dist/components/organisms/swiper/slide.d.mts +2 -8
  238. package/dist/components/organisms/swiper/slide.d.mts.map +1 -1
  239. package/dist/components/organisms/swiper/slide.mjs +2 -4
  240. package/dist/components/organisms/swiper/slide.mjs.map +1 -1
  241. package/dist/components/organisms/swiper/swiper.d.mts +2 -15
  242. package/dist/components/organisms/swiper/swiper.d.mts.map +1 -1
  243. package/dist/components/organisms/swiper/swiper.mjs +2 -4
  244. package/dist/components/organisms/swiper/swiper.mjs.map +1 -1
  245. package/dist/components/organisms/toast.d.mts +2 -13
  246. package/dist/components/organisms/toast.d.mts.map +1 -1
  247. package/dist/components/organisms/toast.mjs +2 -4
  248. package/dist/components/organisms/toast.mjs.map +1 -1
  249. package/dist/components/templates/container.d.mts +2 -10
  250. package/dist/components/templates/container.d.mts.map +1 -1
  251. package/dist/components/templates/container.mjs +1 -2
  252. package/dist/components/templates/container.mjs.map +1 -1
  253. package/dist/components/templates/empty.d.mts +2 -11
  254. package/dist/components/templates/empty.d.mts.map +1 -1
  255. package/dist/components/templates/empty.mjs +1 -2
  256. package/dist/components/templates/empty.mjs.map +1 -1
  257. package/dist/components/templates/grid/col.d.mts +2 -17
  258. package/dist/components/templates/grid/col.d.mts.map +1 -1
  259. package/dist/components/templates/grid/col.mjs +2 -4
  260. package/dist/components/templates/grid/col.mjs.map +1 -1
  261. package/dist/components/templates/grid/row-context.mjs +1 -2
  262. package/dist/components/templates/grid/row-context.mjs.map +1 -1
  263. package/dist/components/templates/grid/row.d.mts +2 -13
  264. package/dist/components/templates/grid/row.d.mts.map +1 -1
  265. package/dist/components/templates/grid/row.mjs +2 -4
  266. package/dist/components/templates/grid/row.mjs.map +1 -1
  267. package/dist/components/templates/layout/content.d.mts +2 -9
  268. package/dist/components/templates/layout/content.d.mts.map +1 -1
  269. package/dist/components/templates/layout/content.mjs +1 -2
  270. package/dist/components/templates/layout/content.mjs.map +1 -1
  271. package/dist/components/templates/layout/footer.d.mts +2 -8
  272. package/dist/components/templates/layout/footer.d.mts.map +1 -1
  273. package/dist/components/templates/layout/footer.mjs +1 -2
  274. package/dist/components/templates/layout/footer.mjs.map +1 -1
  275. package/dist/components/templates/layout/header.d.mts +2 -9
  276. package/dist/components/templates/layout/header.d.mts.map +1 -1
  277. package/dist/components/templates/layout/header.mjs +1 -2
  278. package/dist/components/templates/layout/header.mjs.map +1 -1
  279. package/dist/components/templates/layout/layout.d.mts +2 -8
  280. package/dist/components/templates/layout/layout.d.mts.map +1 -1
  281. package/dist/components/templates/layout/layout.mjs +1 -2
  282. package/dist/components/templates/layout/layout.mjs.map +1 -1
  283. package/dist/components/templates/layout/sider-context.mjs +1 -2
  284. package/dist/components/templates/layout/sider-context.mjs.map +1 -1
  285. package/dist/components/templates/layout/sider.d.mts +2 -21
  286. package/dist/components/templates/layout/sider.d.mts.map +1 -1
  287. package/dist/components/templates/layout/sider.mjs +2 -4
  288. package/dist/components/templates/layout/sider.mjs.map +1 -1
  289. package/dist/components/templates/page-header.d.mts +2 -14
  290. package/dist/components/templates/page-header.d.mts.map +1 -1
  291. package/dist/components/templates/page-header.mjs +2 -4
  292. package/dist/components/templates/page-header.mjs.map +1 -1
  293. package/dist/components/templates/result.d.mts +2 -13
  294. package/dist/components/templates/result.d.mts.map +1 -1
  295. package/dist/components/templates/result.mjs +1 -2
  296. package/dist/components/templates/result.mjs.map +1 -1
  297. package/dist/core/accordion.d.mts +5 -22
  298. package/dist/core/accordion.d.mts.map +1 -1
  299. package/dist/core/accordion.mjs +3 -5
  300. package/dist/core/accordion.mjs.map +1 -1
  301. package/dist/core/badge.d.mts +4 -13
  302. package/dist/core/badge.d.mts.map +1 -1
  303. package/dist/core/badge.mjs +2 -3
  304. package/dist/core/badge.mjs.map +1 -1
  305. package/dist/core/button.d.mts +5 -15
  306. package/dist/core/button.d.mts.map +1 -1
  307. package/dist/core/button.mjs +1 -2
  308. package/dist/core/button.mjs.map +1 -1
  309. package/dist/core/calendar.d.mts +4 -21
  310. package/dist/core/calendar.d.mts.map +1 -1
  311. package/dist/core/calendar.mjs +3 -5
  312. package/dist/core/calendar.mjs.map +1 -1
  313. package/dist/core/checkbox.d.mts +2 -8
  314. package/dist/core/checkbox.d.mts.map +1 -1
  315. package/dist/core/checkbox.mjs +3 -5
  316. package/dist/core/checkbox.mjs.map +1 -1
  317. package/dist/core/dialog.d.mts +12 -48
  318. package/dist/core/dialog.d.mts.map +1 -1
  319. package/dist/core/dialog.mjs +3 -5
  320. package/dist/core/dialog.mjs.map +1 -1
  321. package/dist/core/drawer.d.mts +11 -46
  322. package/dist/core/drawer.d.mts.map +1 -1
  323. package/dist/core/drawer.mjs +3 -5
  324. package/dist/core/drawer.mjs.map +1 -1
  325. package/dist/core/field.d.mts +15 -54
  326. package/dist/core/field.d.mts.map +1 -1
  327. package/dist/core/field.mjs +3 -5
  328. package/dist/core/field.mjs.map +1 -1
  329. package/dist/core/input.d.mts +2 -9
  330. package/dist/core/input.d.mts.map +1 -1
  331. package/dist/core/input.mjs +2 -3
  332. package/dist/core/input.mjs.map +1 -1
  333. package/dist/core/label.d.mts +1 -7
  334. package/dist/core/label.d.mts.map +1 -1
  335. package/dist/core/label.mjs +2 -4
  336. package/dist/core/label.mjs.map +1 -1
  337. package/dist/core/popover.d.mts +9 -33
  338. package/dist/core/popover.d.mts.map +1 -1
  339. package/dist/core/popover.mjs +3 -5
  340. package/dist/core/popover.mjs.map +1 -1
  341. package/dist/core/progress.d.mts +2 -11
  342. package/dist/core/progress.d.mts.map +1 -1
  343. package/dist/core/progress.mjs +3 -5
  344. package/dist/core/progress.mjs.map +1 -1
  345. package/dist/core/radio-group.d.mts +4 -15
  346. package/dist/core/radio-group.d.mts.map +1 -1
  347. package/dist/core/radio-group.mjs +3 -5
  348. package/dist/core/radio-group.mjs.map +1 -1
  349. package/dist/core/resizable.d.mts +5 -17
  350. package/dist/core/resizable.d.mts.map +1 -1
  351. package/dist/core/resizable.mjs +3 -5
  352. package/dist/core/resizable.mjs.map +1 -1
  353. package/dist/core/select.d.mts +13 -50
  354. package/dist/core/select.d.mts.map +1 -1
  355. package/dist/core/select.mjs +3 -5
  356. package/dist/core/select.mjs.map +1 -1
  357. package/dist/core/separator.d.mts +2 -10
  358. package/dist/core/separator.d.mts.map +1 -1
  359. package/dist/core/separator.mjs +2 -4
  360. package/dist/core/separator.mjs.map +1 -1
  361. package/dist/core/skeleton.d.mts +2 -8
  362. package/dist/core/skeleton.d.mts.map +1 -1
  363. package/dist/core/skeleton.mjs +2 -3
  364. package/dist/core/skeleton.mjs.map +1 -1
  365. package/dist/core/switch.d.mts +3 -12
  366. package/dist/core/switch.d.mts.map +1 -1
  367. package/dist/core/switch.mjs +3 -5
  368. package/dist/core/switch.mjs.map +1 -1
  369. package/dist/core/textarea.d.mts +2 -8
  370. package/dist/core/textarea.d.mts.map +1 -1
  371. package/dist/core/textarea.mjs +2 -3
  372. package/dist/core/textarea.mjs.map +1 -1
  373. package/dist/core.mjs +1 -2
  374. package/dist/index.d.mts +31 -33
  375. package/dist/index.mjs +2 -3
  376. package/dist/providers/config/config.d.mts +2 -14
  377. package/dist/providers/config/config.d.mts.map +1 -1
  378. package/dist/providers/config/config.mjs +5 -6
  379. package/dist/providers/config/config.mjs.map +1 -1
  380. package/dist/providers/config/context.d.mts +0 -2
  381. package/dist/providers/config/context.d.mts.map +1 -1
  382. package/dist/providers/config/context.mjs +2 -4
  383. package/dist/providers/config/context.mjs.map +1 -1
  384. package/dist/providers/config/registry.d.mts +2 -7
  385. package/dist/providers/config/registry.d.mts.map +1 -1
  386. package/dist/providers/config/registry.mjs +2 -4
  387. package/dist/providers/config/registry.mjs.map +1 -1
  388. package/dist/providers/config/types.d.mts.map +1 -1
  389. package/dist/providers.d.mts +1 -2
  390. package/dist/providers.mjs +1 -2
  391. package/dist/style.css +1013 -1868
  392. package/dist/utils.d.mts +0 -1
  393. package/dist/utils.d.mts.map +1 -1
  394. package/dist/utils.mjs +1 -2
  395. package/dist/utils.mjs.map +1 -1
  396. package/package.json +29 -28
  397. package/dist/components/templates/grid/index.d.mts +0 -2
  398. package/dist/components/templates/index.d.mts +0 -13
  399. package/dist/providers/config/index.d.mts +0 -4
  400. package/dist/style.css.map +0 -1
  401. package/dist/style.mjs +0 -1
@@ -1,5 +1,3 @@
1
- import * as react_jsx_runtime0 from "react/jsx-runtime";
2
-
3
1
  //#region src/components/organisms/drawer.d.ts
4
2
  interface Props {
5
3
  open: boolean;
@@ -32,28 +30,7 @@ interface Props {
32
30
  container?: HTMLElement;
33
31
  onClose: () => void;
34
32
  }
35
- declare const Drawer: ({
36
- open,
37
- title,
38
- extra,
39
- footer,
40
- closable,
41
- closeIcon,
42
- direction,
43
- size,
44
- maskClosable,
45
- handlebar,
46
- draggable,
47
- rounded,
48
- mask,
49
- className,
50
- classNames,
51
- style,
52
- children,
53
- container,
54
- onClose,
55
- ...props
56
- }: Props) => react_jsx_runtime0.JSX.Element;
33
+ declare const Drawer: ({ open, title, extra, footer, closable, closeIcon, direction, size, maskClosable, handlebar, draggable, rounded, mask, className, classNames, style, children, container, onClose, ...props }: Props) => import("react").JSX.Element;
57
34
  //#endregion
58
- export { Drawer, Props };
35
+ export { Props, Drawer as default };
59
36
  //# sourceMappingURL=drawer.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"drawer.d.mts","names":[],"sources":["../../../src/components/organisms/drawer.tsx"],"mappings":";;;UA2CiB,KAAA;EACf,IAAA;EACA,QAAA,GAAW,KAAA,CAAM,SAAA;EACjB,KAAA,GAAQ,KAAA,CAAM,SAAA;EACd,KAAA,GAAQ,KAAA,CAAM,SAAA;EACd,MAAA,GAAS,KAAA,CAAM,SAAA;EACf,QAAA;EACA,SAAA,GAAY,KAAA,CAAM,SAAA;EAClB,SAAA;EACA,IAAA;EACA,YAAA;EACA,SAAA;EACA,SAAA;EACA,OAAA;EACA,IAAA;EACA,SAAA;EACA,KAAA,GAAQ,KAAA,CAAM,aAAA;EACd,UAAA;IACE,IAAA;IACA,OAAA;IACA,SAAA;IACA,MAAA;IACA,KAAA;IACA,KAAA;IACA,KAAA;IACA,IAAA;IACA,MAAA;EAAA;EAEF,SAAA,GAAY,WAAA;EACZ,OAAA;AAAA;AAAA,cA8BI,MAAA;EAAU,IAAA;EAAA,KAAA;EAAA,KAAA;EAAA,MAAA;EAAA,QAAA;EAAA,SAAA;EAAA,SAAA;EAAA,IAAA;EAAA,YAAA;EAAA,SAAA;EAAA,SAAA;EAAA,OAAA;EAAA,IAAA;EAAA,SAAA;EAAA,UAAA;EAAA,KAAA;EAAA,QAAA;EAAA,SAAA;EAAA,OAAA;EAAA,GAAA;AAAA,GAqBb,KAAA,KAAK,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"drawer.d.mts","names":[],"sources":["../../../src/components/organisms/drawer.tsx"],"mappings":";UA2CiB;EACf;EACA,WAAW,MAAM;EACjB,QAAQ,MAAM;EACd,QAAQ,MAAM;EACd,SAAS,MAAM;EACf;EACA,YAAY,MAAM;EAClB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,QAAQ,MAAM;EACd;IACE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF,YAAY;EACZ;;cA8BI,WAAU,MAAA,OAAA,OAAA,QAAA,UAAA,WAAA,WAAA,MAAA,cAAA,WAAA,WAAA,SAAA,MAAA,WAAA,YAAA,OAAA,UAAA,WAAA,YAAA,SAqBb,0BAAK,IAAA"}
@@ -1,5 +1,4 @@
1
- 'use client';
2
-
1
+ "use client";
3
2
  import { cn, renderConditional } from "../../utils.mjs";
4
3
  import { DEFAULT_LOCALE, useConfig } from "../../providers/config/context.mjs";
5
4
  import { drawer_exports } from "../../core/drawer.mjs";
@@ -7,7 +6,6 @@ import Button from "../../Button.mjs";
7
6
  import { X } from "lucide-react";
8
7
  import { useEffect } from "react";
9
8
  import { jsx, jsxs } from "react/jsx-runtime";
10
-
11
9
  //#region src/components/organisms/drawer.tsx
12
10
  const { DrawerContent, Drawer: DrawerCore, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle } = drawer_exports;
13
11
  const maskLessStates = /* @__PURE__ */ new WeakMap();
@@ -125,7 +123,7 @@ const Drawer = ({ open, title, extra, footer, closable = true, closeIcon, direct
125
123
  })
126
124
  });
127
125
  };
128
-
129
126
  //#endregion
130
127
  export { Drawer as default };
128
+
131
129
  //# sourceMappingURL=drawer.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"drawer.mjs","names":["drawer"],"sources":["../../../src/components/organisms/drawer.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect } from 'react';\n\nimport { X } from 'lucide-react';\n\nimport { drawer } from '@repo/ui/core';\nimport { DEFAULT_LOCALE, useConfig } from '@repo/ui/providers';\nimport { cn, renderConditional } from '@repo/ui/utils';\n\nimport Button from '../atoms/button';\n\nconst {\n DrawerContent,\n Drawer: DrawerCore,\n DrawerDescription,\n DrawerFooter,\n DrawerHeader,\n DrawerTitle,\n} = drawer;\n\n// `body.style.pointerEvents` is global state (per document), so several\n// mask-less overlays opening at once would otherwise race: each instance\n// would capture whatever the previous one had already written and the\n// last cleanup would restore a stale value. Reference counting makes only\n// the first instance capture the original value and only the last one\n// restore it. Keyed by document (not a single module-level counter) so\n// drawers portaled into different documents — e.g. live-editor's iframe\n// Renderer — don't share state with the host document.\ntype MaskLessState = { count: number; originalPointerEvents: string | null };\nconst maskLessStates = new WeakMap<Document, MaskLessState>();\n\nconst getMaskLessState = (doc: Document): MaskLessState => {\n let state = maskLessStates.get(doc);\n\n if (!state) {\n state = { count: 0, originalPointerEvents: null };\n maskLessStates.set(doc, state);\n }\n\n return state;\n};\n\nexport interface Props {\n open: boolean;\n children?: React.ReactNode;\n title?: React.ReactNode;\n extra?: React.ReactNode;\n footer?: React.ReactNode;\n closable?: boolean;\n closeIcon?: React.ReactNode;\n direction?: 'top' | 'bottom' | 'left' | 'right';\n size?: 'small' | 'medium' | 'large' | 'full' | string;\n maskClosable?: boolean;\n handlebar?: boolean;\n draggable?: boolean;\n rounded?: boolean;\n mask?: boolean;\n className?: string;\n style?: React.CSSProperties;\n classNames?: {\n mask?: string;\n content?: string;\n handlebar?: string;\n header?: string;\n title?: string;\n close?: string;\n extra?: string;\n body?: string;\n footer?: string;\n };\n container?: HTMLElement;\n onClose: () => void;\n}\n\nconst SIZES: Record<string, string> = {\n small: '30%',\n medium: '50%',\n large: '75%',\n full: '90%',\n};\n\n// Rounds the edge facing into the viewport — the opposite edge from\n// whichever side the drawer is anchored to.\nconst ROUNDED_CLASSES: Record<'top' | 'bottom' | 'left' | 'right', string> = {\n top: 'rounded-b-[30px]!',\n bottom: 'rounded-t-[30px]!',\n left: 'rounded-r-[30px]!',\n right: 'rounded-l-[30px]!',\n};\n\nconst getSizeStyles = (\n direction: 'top' | 'bottom' | 'left' | 'right',\n size: string,\n): React.CSSProperties => {\n const value = SIZES[size] || size;\n\n return direction === 'top' || direction === 'bottom'\n ? { height: value }\n : { width: value };\n};\n\nconst Drawer = ({\n open,\n title,\n extra,\n footer,\n closable = true,\n closeIcon,\n direction = 'bottom',\n size = 'medium',\n maskClosable = true,\n handlebar = true,\n draggable = false,\n rounded = false,\n mask = true,\n className,\n classNames,\n style,\n children,\n container,\n onClose,\n ...props\n}: Props) => {\n const { locale } = useConfig();\n\n useEffect(() => {\n if (!open || mask) {\n return;\n }\n\n const targetDocument = container?.ownerDocument ?? document;\n const targetWindow = targetDocument.defaultView ?? window;\n const body = targetDocument.body;\n const state = getMaskLessState(targetDocument);\n\n if (state.count === 0) {\n state.originalPointerEvents = body.style.pointerEvents;\n }\n state.count += 1;\n\n const raf = targetWindow.requestAnimationFrame(() => {\n body.style.pointerEvents = 'auto';\n });\n\n return () => {\n targetWindow.cancelAnimationFrame(raf);\n state.count -= 1;\n\n if (state.count === 0) {\n body.style.pointerEvents = state.originalPointerEvents ?? '';\n state.originalPointerEvents = null;\n }\n };\n }, [open, mask, container]);\n\n return (\n <DrawerCore\n open={open}\n direction={direction}\n handleOnly={!draggable}\n container={container}\n onOpenChange={open => {\n if (!open) {\n onClose();\n }\n }}\n {...props}\n >\n <DrawerContent\n className={cn(\n 'border-none outline-none',\n rounded ? ROUNDED_CLASSES[direction] : 'rounded-none!',\n classNames?.content,\n className,\n //\n )}\n handlebar={handlebar}\n mask={mask}\n onPointerDownOutside={event => {\n if (!maskClosable) {\n event.preventDefault();\n }\n }}\n classNames={{\n mask: classNames?.mask || '',\n handlebar: classNames?.handlebar || '',\n }}\n style={{\n ...getSizeStyles(direction, size),\n ...style,\n }}\n >\n <DrawerHeader\n className={cn(\n classNames?.header,\n !title && 'p-0',\n //\n )}\n >\n <div className=\"flex items-start gap-2\">\n {closable && (\n <Button\n type=\"text\"\n shape=\"circle\"\n size=\"small\"\n aria-label={locale.close ?? DEFAULT_LOCALE.close}\n icon={closeIcon || <X />}\n onClick={onClose}\n className={cn(classNames?.close)}\n />\n )}\n <div className=\"flex flex-1 items-start justify-between gap-2\">\n <DrawerTitle className={cn(classNames?.title)}>\n {title}\n </DrawerTitle>\n {renderConditional(extra, v => (\n <div className={cn('shrink-0', classNames?.extra)}>{v}</div>\n ))}\n </div>\n </div>\n <DrawerDescription className=\"hidden\" />\n </DrawerHeader>\n <div\n className={cn(\n 'overflow-auto p-5',\n classNames?.body,\n //\n )}\n >\n {children}\n </div>\n {renderConditional(footer, v => (\n <DrawerFooter className={cn(classNames?.footer)}>{v}</DrawerFooter>\n ))}\n </DrawerContent>\n </DrawerCore>\n );\n};\n\nexport default Drawer;\n"],"mappings":";;;;;;;;;;;AAYA,MAAM,EACJ,eACA,QAAQ,YACR,mBACA,cACA,cACA,gBACEA;AAWJ,MAAM,iCAAiB,IAAI,SAAkC;AAE7D,MAAM,oBAAoB,QAAiC;CACzD,IAAI,QAAQ,eAAe,IAAI,IAAI;AAEnC,KAAI,CAAC,OAAO;AACV,UAAQ;GAAE,OAAO;GAAG,uBAAuB;GAAM;AACjD,iBAAe,IAAI,KAAK,MAAM;;AAGhC,QAAO;;AAmCT,MAAM,QAAgC;CACpC,OAAO;CACP,QAAQ;CACR,OAAO;CACP,MAAM;CACP;AAID,MAAM,kBAAuE;CAC3E,KAAK;CACL,QAAQ;CACR,MAAM;CACN,OAAO;CACR;AAED,MAAM,iBACJ,WACA,SACwB;CACxB,MAAM,QAAQ,MAAM,SAAS;AAE7B,QAAO,cAAc,SAAS,cAAc,WACxC,EAAE,QAAQ,OAAO,GACjB,EAAE,OAAO,OAAO;;AAGtB,MAAM,UAAU,EACd,MACA,OACA,OACA,QACA,WAAW,MACX,WACA,YAAY,UACZ,OAAO,UACP,eAAe,MACf,YAAY,MACZ,YAAY,OACZ,UAAU,OACV,OAAO,MACP,WACA,YACA,OACA,UACA,WACA,SACA,GAAG,YACQ;CACX,MAAM,EAAE,WAAW,WAAW;AAE9B,iBAAgB;AACd,MAAI,CAAC,QAAQ,KACX;EAGF,MAAM,iBAAiB,WAAW,iBAAiB;EACnD,MAAM,eAAe,eAAe,eAAe;EACnD,MAAM,OAAO,eAAe;EAC5B,MAAM,QAAQ,iBAAiB,eAAe;AAE9C,MAAI,MAAM,UAAU,EAClB,OAAM,wBAAwB,KAAK,MAAM;AAE3C,QAAM,SAAS;EAEf,MAAM,MAAM,aAAa,4BAA4B;AACnD,QAAK,MAAM,gBAAgB;IAC3B;AAEF,eAAa;AACX,gBAAa,qBAAqB,IAAI;AACtC,SAAM,SAAS;AAEf,OAAI,MAAM,UAAU,GAAG;AACrB,SAAK,MAAM,gBAAgB,MAAM,yBAAyB;AAC1D,UAAM,wBAAwB;;;IAGjC;EAAC;EAAM;EAAM;EAAU,CAAC;AAE3B,QACE,oBAAC;EACO;EACK;EACX,YAAY,CAAC;EACF;EACX,eAAc,SAAQ;AACpB,OAAI,CAAC,KACH,UAAS;;EAGb,GAAI;YAEJ,qBAAC;GACC,WAAW,GACT,4BACA,UAAU,gBAAgB,aAAa,iBACvC,YAAY,SACZ,UAED;GACU;GACL;GACN,uBAAsB,UAAS;AAC7B,QAAI,CAAC,aACH,OAAM,gBAAgB;;GAG1B,YAAY;IACV,MAAM,YAAY,QAAQ;IAC1B,WAAW,YAAY,aAAa;IACrC;GACD,OAAO;IACL,GAAG,cAAc,WAAW,KAAK;IACjC,GAAG;IACJ;;IAED,qBAAC;KACC,WAAW,GACT,YAAY,QACZ,CAAC,SAAS,MAEX;gBAED,qBAAC;MAAI,WAAU;iBACZ,YACC,oBAAC;OACC,MAAK;OACL,OAAM;OACN,MAAK;OACL,cAAY,OAAO,SAAS,eAAe;OAC3C,MAAM,aAAa,oBAAC,MAAI;OACxB,SAAS;OACT,WAAW,GAAG,YAAY,MAAM;QAChC,EAEJ,qBAAC;OAAI,WAAU;kBACb,oBAAC;QAAY,WAAW,GAAG,YAAY,MAAM;kBAC1C;SACW,EACb,kBAAkB,QAAO,MACxB,oBAAC;QAAI,WAAW,GAAG,YAAY,YAAY,MAAM;kBAAG;SAAQ,CAC5D;QACE;OACF,EACN,oBAAC,qBAAkB,WAAU,WAAW;MAC3B;IACf,oBAAC;KACC,WAAW,GACT,qBACA,YAAY,KAEb;KAEA;MACG;IACL,kBAAkB,SAAQ,MACzB,oBAAC;KAAa,WAAW,GAAG,YAAY,OAAO;eAAG;MAAiB,CACnE;;IACY;GACL"}
1
+ {"version":3,"file":"drawer.mjs","names":["drawer"],"sources":["../../../src/components/organisms/drawer.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect } from 'react';\n\nimport { X } from 'lucide-react';\n\nimport { drawer } from '@repo/ui/core';\nimport { DEFAULT_LOCALE, useConfig } from '@repo/ui/providers';\nimport { cn, renderConditional } from '@repo/ui/utils';\n\nimport Button from '../atoms/button';\n\nconst {\n DrawerContent,\n Drawer: DrawerCore,\n DrawerDescription,\n DrawerFooter,\n DrawerHeader,\n DrawerTitle,\n} = drawer;\n\n// `body.style.pointerEvents` is global state (per document), so several\n// mask-less overlays opening at once would otherwise race: each instance\n// would capture whatever the previous one had already written and the\n// last cleanup would restore a stale value. Reference counting makes only\n// the first instance capture the original value and only the last one\n// restore it. Keyed by document (not a single module-level counter) so\n// drawers portaled into different documents — e.g. live-editor's iframe\n// Renderer — don't share state with the host document.\ntype MaskLessState = { count: number; originalPointerEvents: string | null };\nconst maskLessStates = new WeakMap<Document, MaskLessState>();\n\nconst getMaskLessState = (doc: Document): MaskLessState => {\n let state = maskLessStates.get(doc);\n\n if (!state) {\n state = { count: 0, originalPointerEvents: null };\n maskLessStates.set(doc, state);\n }\n\n return state;\n};\n\nexport interface Props {\n open: boolean;\n children?: React.ReactNode;\n title?: React.ReactNode;\n extra?: React.ReactNode;\n footer?: React.ReactNode;\n closable?: boolean;\n closeIcon?: React.ReactNode;\n direction?: 'top' | 'bottom' | 'left' | 'right';\n size?: 'small' | 'medium' | 'large' | 'full' | string;\n maskClosable?: boolean;\n handlebar?: boolean;\n draggable?: boolean;\n rounded?: boolean;\n mask?: boolean;\n className?: string;\n style?: React.CSSProperties;\n classNames?: {\n mask?: string;\n content?: string;\n handlebar?: string;\n header?: string;\n title?: string;\n close?: string;\n extra?: string;\n body?: string;\n footer?: string;\n };\n container?: HTMLElement;\n onClose: () => void;\n}\n\nconst SIZES: Record<string, string> = {\n small: '30%',\n medium: '50%',\n large: '75%',\n full: '90%',\n};\n\n// Rounds the edge facing into the viewport — the opposite edge from\n// whichever side the drawer is anchored to.\nconst ROUNDED_CLASSES: Record<'top' | 'bottom' | 'left' | 'right', string> = {\n top: 'rounded-b-[30px]!',\n bottom: 'rounded-t-[30px]!',\n left: 'rounded-r-[30px]!',\n right: 'rounded-l-[30px]!',\n};\n\nconst getSizeStyles = (\n direction: 'top' | 'bottom' | 'left' | 'right',\n size: string,\n): React.CSSProperties => {\n const value = SIZES[size] || size;\n\n return direction === 'top' || direction === 'bottom'\n ? { height: value }\n : { width: value };\n};\n\nconst Drawer = ({\n open,\n title,\n extra,\n footer,\n closable = true,\n closeIcon,\n direction = 'bottom',\n size = 'medium',\n maskClosable = true,\n handlebar = true,\n draggable = false,\n rounded = false,\n mask = true,\n className,\n classNames,\n style,\n children,\n container,\n onClose,\n ...props\n}: Props) => {\n const { locale } = useConfig();\n\n useEffect(() => {\n if (!open || mask) {\n return;\n }\n\n const targetDocument = container?.ownerDocument ?? document;\n const targetWindow = targetDocument.defaultView ?? window;\n const body = targetDocument.body;\n const state = getMaskLessState(targetDocument);\n\n if (state.count === 0) {\n state.originalPointerEvents = body.style.pointerEvents;\n }\n state.count += 1;\n\n const raf = targetWindow.requestAnimationFrame(() => {\n body.style.pointerEvents = 'auto';\n });\n\n return () => {\n targetWindow.cancelAnimationFrame(raf);\n state.count -= 1;\n\n if (state.count === 0) {\n body.style.pointerEvents = state.originalPointerEvents ?? '';\n state.originalPointerEvents = null;\n }\n };\n }, [open, mask, container]);\n\n return (\n <DrawerCore\n open={open}\n direction={direction}\n handleOnly={!draggable}\n container={container}\n onOpenChange={open => {\n if (!open) {\n onClose();\n }\n }}\n {...props}\n >\n <DrawerContent\n className={cn(\n 'border-none outline-none',\n rounded ? ROUNDED_CLASSES[direction] : 'rounded-none!',\n classNames?.content,\n className,\n //\n )}\n handlebar={handlebar}\n mask={mask}\n onPointerDownOutside={event => {\n if (!maskClosable) {\n event.preventDefault();\n }\n }}\n classNames={{\n mask: classNames?.mask || '',\n handlebar: classNames?.handlebar || '',\n }}\n style={{\n ...getSizeStyles(direction, size),\n ...style,\n }}\n >\n <DrawerHeader\n className={cn(\n classNames?.header,\n !title && 'p-0',\n //\n )}\n >\n <div className=\"flex items-start gap-2\">\n {closable && (\n <Button\n type=\"text\"\n shape=\"circle\"\n size=\"small\"\n aria-label={locale.close ?? DEFAULT_LOCALE.close}\n icon={closeIcon || <X />}\n onClick={onClose}\n className={cn(classNames?.close)}\n />\n )}\n <div className=\"flex flex-1 items-start justify-between gap-2\">\n <DrawerTitle className={cn(classNames?.title)}>\n {title}\n </DrawerTitle>\n {renderConditional(extra, v => (\n <div className={cn('shrink-0', classNames?.extra)}>{v}</div>\n ))}\n </div>\n </div>\n <DrawerDescription className=\"hidden\" />\n </DrawerHeader>\n <div\n className={cn(\n 'overflow-auto p-5',\n classNames?.body,\n //\n )}\n >\n {children}\n </div>\n {renderConditional(footer, v => (\n <DrawerFooter className={cn(classNames?.footer)}>{v}</DrawerFooter>\n ))}\n </DrawerContent>\n </DrawerCore>\n );\n};\n\nexport default Drawer;\n"],"mappings":"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"}
@@ -1,11 +1,9 @@
1
- 'use client';
2
-
1
+ "use client";
3
2
  import { ConfigSnapshotProvider, getRootConfigValue } from "../../providers/config/registry.mjs";
4
- import { useEffect, useState } from "react";
3
+ import { useCallback, useSyncExternalStore } from "react";
5
4
  import { jsx } from "react/jsx-runtime";
6
5
  import { v4 } from "uuid";
7
6
  import { createRoot } from "react-dom/client";
8
-
9
7
  //#region src/components/organisms/imperative-stack.tsx
10
8
  const isBrowser = typeof window !== "undefined" && typeof document !== "undefined";
11
9
  function createImperativeStack({ createRootElement, StackItem }) {
@@ -36,15 +34,15 @@ function createImperativeStack({ createRootElement, StackItem }) {
36
34
  return rootEl;
37
35
  };
38
36
  const StackRenderer = ({ container }) => {
39
- const [, forceUpdate] = useState({});
40
- useEffect(() => {
37
+ const subscribe = useCallback((onStoreChange) => {
41
38
  const state = getContainerState(container);
42
- state.update = () => forceUpdate({});
39
+ state.update = onStoreChange;
43
40
  return () => {
44
41
  state.update = null;
45
42
  };
46
43
  }, [container]);
47
- const { stack } = getContainerState(container);
44
+ const getSnapshot = useCallback(() => getContainerState(container).stack, [container]);
45
+ const stack = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
48
46
  return /* @__PURE__ */ jsx(ConfigSnapshotProvider, { children: stack.map(({ id, ...props }) => /* @__PURE__ */ jsx(StackItem, {
49
47
  id,
50
48
  ...props
@@ -61,10 +59,10 @@ function createImperativeStack({ createRootElement, StackItem }) {
61
59
  }
62
60
  const state = getContainerState(targetContainer);
63
61
  const id = props.id || v4();
64
- state.stack.push({
62
+ state.stack = [...state.stack, {
65
63
  ...props,
66
64
  id
67
- });
65
+ }];
68
66
  state.update?.();
69
67
  return id;
70
68
  };
@@ -102,7 +100,7 @@ function createImperativeStack({ createRootElement, StackItem }) {
102
100
  getRootElement
103
101
  };
104
102
  }
105
-
106
103
  //#endregion
107
104
  export { createImperativeStack, isBrowser };
105
+
108
106
  //# sourceMappingURL=imperative-stack.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"imperative-stack.mjs","names":["uuid"],"sources":["../../../src/components/organisms/imperative-stack.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useState } from 'react';\nimport { Root, createRoot } from 'react-dom/client';\n\nimport { v4 as uuid } from 'uuid';\n\nimport { ConfigSnapshotProvider, getRootConfigValue } from '@repo/ui/providers';\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 [, forceUpdate] = useState({});\n\n useEffect(() => {\n const state = getContainerState(container);\n state.update = () => forceUpdate({});\n return () => {\n state.update = null;\n };\n }, [container]);\n\n const { stack } = getContainerState(container);\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 || uuid();\n state.stack.push({ ...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":";;;;;;;;;AAiBA,MAAa,YACX,OAAO,WAAW,eAAe,OAAO,aAAa;AA2BvD,SAAgB,sBAEd,EACA,mBACA,aAC0D;CAC1D,MAAM,kCAAkB,IAAI,KAA0C;CACtE,MAAM,+BAAe,IAAI,SAAmC;CAC5D,MAAM,6BAAa,IAAI,KAAwB;CAE/C,MAAM,qBACJ,cAC2B;EAC3B,IAAI,QAAQ,gBAAgB,IAAI,UAAU;AAE1C,MAAI,CAAC,OAAO;AACV,WAAQ;IAAE,OAAO,EAAE;IAAE,QAAQ;IAAM;AACnC,mBAAgB,IAAI,WAAW,MAAM;;AAGvC,SAAO;;CAYT,MAAM,oBAAoB,cACxB,aAAa,oBAAoB,EAAE,cAAc,IAAI,SAAS;CAEhE,MAAM,kBAAkB,cAAgD;AACtE,MAAI,CAAC,UACH,QAAO;EAGT,MAAM,kBAAkB,iBAAiB,UAAU;EACnD,IAAI,SAAS,aAAa,IAAI,gBAAgB;AAE9C,MAAI,CAAC,QAAQ;AACX,YAAS,mBAAmB;AAC5B,mBAAgB,YAAY,OAAO;AACnC,gBAAa,IAAI,iBAAiB,OAAO;;AAG3C,SAAO;;CAGT,MAAM,iBAAiB,EAAE,gBAA4C;EACnE,MAAM,GAAG,eAAe,SAAS,EAAE,CAAC;AAEpC,kBAAgB;GACd,MAAM,QAAQ,kBAAkB,UAAU;AAC1C,SAAM,eAAe,YAAY,EAAE,CAAC;AACpC,gBAAa;AACX,UAAM,SAAS;;KAEhB,CAAC,UAAU,CAAC;EAEf,MAAM,EAAE,UAAU,kBAAkB,UAAU;AAE9C,SACE,oBAAC,oCACE,MAAM,KAAK,EAAE,IAAI,GAAG,YACnB,oBAAC;GAAuB;GAAI,GAAK;KAAjB,GAAqC,CACrD,GACqB;;CAI7B,MAAM,UAAU,UAAsC;AACpD,MAAI,CAAC,UACH;EASF,MAAM,kBAAkB,iBAAiB,MAAM,UAAU;EACzD,MAAM,cAAc,eAAe,gBAAgB;AAEnD,MAAI,CAAC,WAAW,IAAI,gBAAgB,EAAE;GACpC,MAAM,OAAO,WAAW,YAAY;AACpC,cAAW,IAAI,iBAAiB,KAAK;AACrC,QAAK,OAAO,oBAAC,iBAAc,WAAW,kBAAmB,CAAC;;EAG5D,MAAM,QAAQ,kBAAkB,gBAAgB;EAChD,MAAM,KAAK,MAAM,MAAMA,IAAM;AAC7B,QAAM,MAAM,KAAK;GAAE,GAAG;GAAO;GAAI,CAAC;AAClC,QAAM,UAAU;AAEhB,SAAO;;CAGT,MAAM,WAAW,OAAgB;AAC/B,MAAI,CAAC,IAAI;AACP,mBAAgB,SAAQ,UAAS;AAC/B,UAAM,QAAQ,EAAE;AAChB,UAAM,UAAU;KAChB;AACF,cAAW,SAAS,MAAM,cAAc;AACtC,SAAK,SAAS;AACd,iBAAa,IAAI,UAAU,EAAE,QAAQ;AACrC,iBAAa,OAAO,UAAU;KAC9B;AACF,cAAW,OAAO;AAClB,mBAAgB,OAAO;AACvB;;AAGF,kBAAgB,SAAS,OAAO,cAAc;AAC5C,OAAI,CAAC,MAAM,MAAM,MAAK,SAAQ,KAAK,OAAO,GAAG,CAC3C;AAGF,SAAM,QAAQ,MAAM,MAAM,QAAO,SAAQ,KAAK,OAAO,GAAG;AACxD,SAAM,UAAU;AAEhB,OAAI,CAAC,MAAM,MAAM,QAAQ;AACvB,eAAW,IAAI,UAAU,EAAE,SAAS;AACpC,eAAW,OAAO,UAAU;AAC5B,oBAAgB,OAAO,UAAU;AACjC,iBAAa,IAAI,UAAU,EAAE,QAAQ;AACrC,iBAAa,OAAO,UAAU;;IAEhC;;AAGJ,QAAO;EAAE;EAAQ;EAAS;EAAgB"}
1
+ {"version":3,"file":"imperative-stack.mjs","names":["uuid"],"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 { v4 as uuid } from 'uuid';\n\nimport { ConfigSnapshotProvider, getRootConfigValue } from '@repo/ui/providers';\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 || uuid();\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,7 +1,8 @@
1
- import { Drawer, Props } from "./drawer.mjs";
1
+ import Drawer, { Props } from "./drawer.mjs";
2
2
  import { Props as Props$1 } from "./list/list.mjs";
3
- import { List } from "./list/index.mjs";
4
- import { Modal, Props as Props$2 } from "./modal.mjs";
3
+ import List from "./list/index.mjs";
4
+ import Modal, { Props as Props$2 } from "./modal.mjs";
5
5
  import { Props as Props$3 } from "./swiper/swiper.mjs";
6
- import { Swiper } from "./swiper/index.mjs";
7
- import { StaticProps, Toast } from "./toast.mjs";
6
+ import Swiper from "./swiper/index.mjs";
7
+ import Toast, { ToastOptions as StaticProps } from "./toast.mjs";
8
+ export { Drawer, type Props as DrawerProps, List, type Props$1 as ListProps, Modal, type Props$2 as ModalProps, Swiper, type Props$3 as SwiperProps, Toast, type StaticProps as ToastOptions };
@@ -1,11 +1,10 @@
1
- import { Item } from "./item.mjs";
2
- import { List as List$1, Props } from "./list.mjs";
3
-
1
+ import Item from "./item.mjs";
2
+ import List$1, { Props } from "./list.mjs";
4
3
  //#region src/components/organisms/list/index.d.ts
5
4
  type ListComponent = typeof List$1 & {
6
5
  Item: typeof Item;
7
6
  };
8
7
  declare const List: ListComponent;
9
8
  //#endregion
10
- export { List };
9
+ export { type Props as ListProps, List as default };
11
10
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/organisms/list/index.ts"],"mappings":";;;;KAGK,aAAA,UAAuB,MAAA;EAAa,IAAA,SAAa,IAAA;AAAA;AAAA,cAEhD,IAAA,EAAmB,aAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/organisms/list/index.ts"],"mappings":";;;KAGK,uBAAuB;EAAa,aAAa;;cAEhD,MAAmB"}
@@ -1,10 +1,9 @@
1
1
  import Item from "./item.mjs";
2
2
  import List$1 from "./list.mjs";
3
-
4
3
  //#region src/components/organisms/list/index.ts
5
4
  const List = List$1;
6
5
  List.Item = Item;
7
-
8
6
  //#endregion
9
7
  export { List as default };
8
+
10
9
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["ListImpl"],"sources":["../../../../src/components/organisms/list/index.ts"],"sourcesContent":["import Item from './item';\nimport ListImpl from './list';\n\ntype ListComponent = typeof ListImpl & { Item: typeof Item };\n\nconst List = ListImpl as ListComponent;\n\nList.Item = Item;\n\nexport default List;\nexport type { Props as ListProps } from './list';\n"],"mappings":";;;;AAKA,MAAM,OAAOA;AAEb,KAAK,OAAO"}
1
+ {"version":3,"file":"index.mjs","names":["ListImpl"],"sources":["../../../../src/components/organisms/list/index.ts"],"sourcesContent":["import Item from './item';\nimport ListImpl from './list';\n\ntype ListComponent = typeof ListImpl & { Item: typeof Item };\n\nconst List = ListImpl as ListComponent;\n\nList.Item = Item;\n\nexport default List;\nexport type { Props as ListProps } from './list';\n"],"mappings":";;;AAKA,MAAM,OAAOA;AAEb,KAAK,OAAO"}
@@ -1,11 +1,5 @@
1
- import * as react_jsx_runtime0 from "react/jsx-runtime";
2
-
3
1
  //#region src/components/organisms/list/item.d.ts
4
- declare const Item: ({
5
- children,
6
- className,
7
- ...props
8
- }: React.ComponentPropsWithoutRef<"div">) => react_jsx_runtime0.JSX.Element;
2
+ declare const Item: ({ children, className, ...props }: React.ComponentPropsWithoutRef<"div">) => import("react").JSX.Element;
9
3
  //#endregion
10
- export { Item };
4
+ export { Item as default };
11
5
  //# sourceMappingURL=item.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"item.d.mts","names":[],"sources":["../../../../src/components/organisms/list/item.tsx"],"mappings":";;;cAEM,IAAA;EAAQ,QAAA;EAAA,SAAA;EAAA,GAAA;AAAA,GAIX,KAAA,CAAM,wBAAA,YAA+B,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"item.d.mts","names":[],"sources":["../../../../src/components/organisms/list/item.tsx"],"mappings":";cAEM,SAAQ,UAAA,cAAA,SAIX,MAAM,oDAA+B,IAAA"}
@@ -1,6 +1,5 @@
1
1
  import { cn } from "../../../utils.mjs";
2
2
  import { jsx } from "react/jsx-runtime";
3
-
4
3
  //#region src/components/organisms/list/item.tsx
5
4
  const Item = ({ children, className, ...props }) => {
6
5
  return /* @__PURE__ */ jsx("div", {
@@ -10,7 +9,7 @@ const Item = ({ children, className, ...props }) => {
10
9
  children
11
10
  });
12
11
  };
13
-
14
12
  //#endregion
15
13
  export { Item as default };
14
+
16
15
  //# sourceMappingURL=item.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"item.mjs","names":[],"sources":["../../../../src/components/organisms/list/item.tsx"],"sourcesContent":["import { cn } from '@repo/ui/utils';\n\nconst Item = ({\n children,\n className,\n ...props\n}: React.ComponentPropsWithoutRef<'div'>) => {\n return (\n <div role=\"listitem\" className={cn(className)} {...props}>\n {children}\n </div>\n );\n};\n\nexport default Item;\n"],"mappings":";;;;AAEA,MAAM,QAAQ,EACZ,UACA,WACA,GAAG,YACwC;AAC3C,QACE,oBAAC;EAAI,MAAK;EAAW,WAAW,GAAG,UAAU;EAAE,GAAI;EAChD;GACG"}
1
+ {"version":3,"file":"item.mjs","names":[],"sources":["../../../../src/components/organisms/list/item.tsx"],"sourcesContent":["import { cn } from '@repo/ui/utils';\n\nconst Item = ({\n children,\n className,\n ...props\n}: React.ComponentPropsWithoutRef<'div'>) => {\n return (\n <div role=\"listitem\" className={cn(className)} {...props}>\n {children}\n </div>\n );\n};\n\nexport default Item;\n"],"mappings":";;;AAEA,MAAM,QAAQ,EACZ,UACA,WACA,GAAG,YACwC;CAC3C,OACE,oBAAC,OAAD;EAAK,MAAK;EAAW,WAAW,GAAG,SAAS;EAAG,GAAI;EAChD;CACE,CAAA;AAET"}
@@ -1,7 +1,5 @@
1
- import { Skeleton } from "../../atoms/skeleton/index.mjs";
1
+ import Skeleton from "../../atoms/skeleton/index.mjs";
2
2
  import React from "react";
3
- import * as react_jsx_runtime0 from "react/jsx-runtime";
4
-
5
3
  //#region src/components/organisms/list/list.d.ts
6
4
  interface Props<T> extends Omit<React.ComponentPropsWithoutRef<'div'>, 'title'> {
7
5
  loading?: boolean;
@@ -34,22 +32,7 @@ interface Props<T> extends Omit<React.ComponentPropsWithoutRef<'div'>, 'title'>
34
32
  renderItem?: (item: T, index: number) => React.ReactNode;
35
33
  itemKey?: (item: T, index: number) => React.Key;
36
34
  }
37
- declare const List: <T>({
38
- loading,
39
- loaderProps,
40
- loader,
41
- header,
42
- title,
43
- titleLevel,
44
- empty,
45
- scroll,
46
- data,
47
- className,
48
- classNames,
49
- renderItem,
50
- itemKey,
51
- ...props
52
- }: Props<T>) => react_jsx_runtime0.JSX.Element;
35
+ declare const List: <T>({ loading, loaderProps, loader, header, title, titleLevel, empty, scroll, data, className, classNames, renderItem, itemKey, ...props }: Props<T>) => React.JSX.Element;
53
36
  //#endregion
54
- export { List, Props };
37
+ export { Props, List as default };
55
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,KAAA,YAAiB,IAAA,CAChC,KAAA,CAAM,wBAAA;EAGN,OAAA;EACA,WAAA,GAAc,KAAA,CAAM,cAAA,QAAsB,QAAA;EAC1C,MAAA,GAAS,KAAA,CAAM,SAAA;EACf,KAAA,GAAQ,KAAA,CAAM,SAAA;EACd,UAAA;EACA,MAAA,GAAS,KAAA,CAAM,SAAA;EACf,KAAA,GAAQ,KAAA,CAAM,SAAA;EACd,UAAA;IACE,KAAA;IACA,MAAA;IACA,IAAA;EAAA;EAEF,MAAA;IACE,OAAA;IACA,OAAA;IACA,MAAA,GAAS,KAAA,CAAM,SAAA;IACf,OAAA,GAAU,wBAAA;IAYK;;;;;;;IAJf,IAAA;EAAA;EAEF,IAAA,GAAO,CAAA;EACP,UAAA,IAAc,IAAA,EAAM,CAAA,EAAG,KAAA,aAAkB,KAAA,CAAM,SAAA;EAC/C,OAAA,IAAW,IAAA,EAAM,CAAA,EAAG,KAAA,aAAkB,KAAA,CAAM,GAAA;AAAA;AAAA,cAGxC,IAAA;EAAY,OAAA;EAAA,WAAA;EAAA,MAAA;EAAA,MAAA;EAAA,KAAA;EAAA,UAAA;EAAA,KAAA;EAAA,MAAA;EAAA,IAAA;EAAA,SAAA;EAAA,UAAA;EAAA,UAAA;EAAA,OAAA;EAAA,GAAA;AAAA,GAef,KAAA,CAAM,CAAA,MAAE,kBAAA,CAAA,GAAA,CAAA,OAAA"}
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,12 +1,10 @@
1
- 'use client';
2
-
1
+ "use client";
3
2
  import { cn, renderConditional } from "../../../utils.mjs";
4
3
  import Title from "../../atoms/typography/title.mjs";
5
4
  import Skeleton from "../../atoms/skeleton/index.mjs";
6
- import React, { useEffect, useRef } from "react";
5
+ import { useEffect, useRef } from "react";
7
6
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
8
7
  import { useIntersectionObserver } from "@jbpark/use-hooks";
9
-
10
8
  //#region src/components/organisms/list/list.tsx
11
9
  const List = ({ loading, loaderProps, loader, header, title, titleLevel = 2, empty, scroll, data, className, classNames, renderItem = () => null, itemKey, ...props }) => {
12
10
  const [loaderRef, { isIntersecting }] = useIntersectionObserver({
@@ -87,7 +85,7 @@ const List = ({ loading, loaderProps, loader, header, title, titleLevel = 2, emp
87
85
  ]
88
86
  });
89
87
  };
90
-
91
88
  //#endregion
92
89
  export { List as default };
90
+
93
91
  //# sourceMappingURL=list.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"list.mjs","names":[],"sources":["../../../../src/components/organisms/list/list.tsx"],"sourcesContent":["'use client';\n\nimport React, { useEffect, useRef } from 'react';\n\nimport { useIntersectionObserver } from '@jbpark/use-hooks';\n\nimport { cn, renderConditional } from '@repo/ui/utils';\n\nimport Skeleton from '../../atoms/skeleton';\nimport { Title } from '../../atoms/typography';\n\nexport interface Props<T> extends Omit<\n React.ComponentPropsWithoutRef<'div'>,\n 'title'\n> {\n loading?: boolean;\n loaderProps?: React.ComponentProps<typeof Skeleton>;\n loader?: React.ReactNode;\n title?: React.ReactNode;\n titleLevel?: 1 | 2 | 3 | 4 | 5 | 6;\n header?: React.ReactNode;\n empty?: React.ReactNode;\n classNames?: {\n title?: string;\n header?: string;\n body?: string;\n };\n scroll?: {\n hasMore: boolean;\n loading: boolean;\n loader?: React.ReactNode;\n options?: IntersectionObserverInit;\n /**\n * Called when more items should be fetched. `List` tracks in-flight\n * requests via `loading` — the caller MUST flip `loading` back to\n * `false` when the fetch settles, including on failure/rejection.\n * If `loading` never becomes `false` again after a failed fetch,\n * `List` will stop calling `next()` for subsequent intersections.\n */\n next: () => void;\n };\n data?: T[];\n renderItem?: (item: T, index: number) => React.ReactNode;\n itemKey?: (item: T, index: number) => React.Key;\n}\n\nconst List = <T,>({\n loading,\n loaderProps,\n loader,\n header,\n title,\n titleLevel = 2,\n empty,\n scroll,\n data,\n className,\n classNames,\n renderItem = () => null,\n itemKey,\n ...props\n}: Props<T>) => {\n const [loaderRef, { isIntersecting }] = useIntersectionObserver({\n threshold: 0,\n root: null,\n rootMargin: '0px',\n ...scroll?.options,\n });\n\n // `scroll` is typically a new object identity every render, so this\n // effect re-runs often. Guard with a ref (updated synchronously, unlike\n // the `loading` prop which only reflects the caller's next state update)\n // to avoid firing `next()` again for the same in-flight request before\n // the caller's `loading` has had a chance to become true.\n const fetchingRef = useRef(false);\n\n useEffect(() => {\n if (!scroll) {\n return;\n }\n\n if (scroll.loading) {\n fetchingRef.current = false;\n return;\n }\n\n if (isIntersecting && scroll.hasMore && !fetchingRef.current) {\n fetchingRef.current = true;\n scroll.next();\n }\n }, [isIntersecting, scroll]);\n\n if (loading) {\n return (\n <div className={cn(className)} {...props}>\n {loader ?? (\n <>\n <div className={cn(classNames?.title)}>{title && <Skeleton />}</div>\n <div className={cn(classNames?.header)}>\n {header && <Skeleton size=\"small\" />}\n </div>\n <div className={cn('space-y-2', classNames?.body)}>\n <Skeleton.Node count={10} gap={10} {...loaderProps} />\n </div>\n </>\n )}\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n className,\n //\n )}\n {...props}\n >\n {renderConditional(title, v => (\n <Title\n level={titleLevel}\n className={cn(\n 'px-1.5 py-4',\n 'text-black-90 text-lg leading-5.75 font-bold',\n //\n )}\n >\n {v}\n </Title>\n ))}\n <div className={cn(classNames?.header)}>{header}</div>\n <div role=\"list\" className={cn('space-y-2', classNames?.body)}>\n {!data?.length && empty\n ? empty\n : data?.map((item, i) => (\n <div role=\"listitem\" key={itemKey ? itemKey(item, i) : i}>\n {renderItem(item, i)}\n </div>\n ))}\n {scroll?.loading && (\n <div role=\"presentation\">\n {scroll?.loader ?? (\n <Skeleton.Node count={10} gap={10} {...loaderProps} />\n )}\n </div>\n )}\n {scroll && <div ref={loaderRef} role=\"none\" />}\n </div>\n </div>\n );\n};\n\nexport default List;\n"],"mappings":";;;;;;;;;;AA8CA,MAAM,QAAY,EAChB,SACA,aACA,QACA,QACA,OACA,aAAa,GACb,OACA,QACA,MACA,WACA,YACA,mBAAmB,MACnB,SACA,GAAG,YACW;CACd,MAAM,CAAC,WAAW,EAAE,oBAAoB,wBAAwB;EAC9D,WAAW;EACX,MAAM;EACN,YAAY;EACZ,GAAG,QAAQ;EACZ,CAAC;CAOF,MAAM,cAAc,OAAO,MAAM;AAEjC,iBAAgB;AACd,MAAI,CAAC,OACH;AAGF,MAAI,OAAO,SAAS;AAClB,eAAY,UAAU;AACtB;;AAGF,MAAI,kBAAkB,OAAO,WAAW,CAAC,YAAY,SAAS;AAC5D,eAAY,UAAU;AACtB,UAAO,MAAM;;IAEd,CAAC,gBAAgB,OAAO,CAAC;AAE5B,KAAI,QACF,QACE,oBAAC;EAAI,WAAW,GAAG,UAAU;EAAE,GAAI;YAChC,UACC;GACE,oBAAC;IAAI,WAAW,GAAG,YAAY,MAAM;cAAG,SAAS,oBAAC,aAAW;KAAO;GACpE,oBAAC;IAAI,WAAW,GAAG,YAAY,OAAO;cACnC,UAAU,oBAAC,YAAS,MAAK,UAAU;KAChC;GACN,oBAAC;IAAI,WAAW,GAAG,aAAa,YAAY,KAAK;cAC/C,oBAAC,SAAS;KAAK,OAAO;KAAI,KAAK;KAAI,GAAI;MAAe;KAClD;MACL;GAED;AAIV,QACE,qBAAC;EACC,WAAW,GACT,UAED;EACD,GAAI;;GAEH,kBAAkB,QAAO,MACxB,oBAAC;IACC,OAAO;IACP,WAAW,GACT,eACA,+CAED;cAEA;KACK,CACR;GACF,oBAAC;IAAI,WAAW,GAAG,YAAY,OAAO;cAAG;KAAa;GACtD,qBAAC;IAAI,MAAK;IAAO,WAAW,GAAG,aAAa,YAAY,KAAK;;KAC1D,CAAC,MAAM,UAAU,QACd,QACA,MAAM,KAAK,MAAM,MACf,oBAAC;MAAI,MAAK;gBACP,WAAW,MAAM,EAAE;QADI,UAAU,QAAQ,MAAM,EAAE,GAAG,EAEjD,CACN;KACL,QAAQ,WACP,oBAAC;MAAI,MAAK;gBACP,QAAQ,UACP,oBAAC,SAAS;OAAK,OAAO;OAAI,KAAK;OAAI,GAAI;QAAe;OAEpD;KAEP,UAAU,oBAAC;MAAI,KAAK;MAAW,MAAK;OAAS;;KAC1C;;GACF"}
1
+ {"version":3,"file":"list.mjs","names":[],"sources":["../../../../src/components/organisms/list/list.tsx"],"sourcesContent":["'use client';\n\nimport React, { useEffect, useRef } from 'react';\n\nimport { useIntersectionObserver } from '@jbpark/use-hooks';\n\nimport { cn, renderConditional } from '@repo/ui/utils';\n\nimport Skeleton from '../../atoms/skeleton';\nimport { Title } from '../../atoms/typography';\n\nexport interface Props<T> extends Omit<\n React.ComponentPropsWithoutRef<'div'>,\n 'title'\n> {\n loading?: boolean;\n loaderProps?: React.ComponentProps<typeof Skeleton>;\n loader?: React.ReactNode;\n title?: React.ReactNode;\n titleLevel?: 1 | 2 | 3 | 4 | 5 | 6;\n header?: React.ReactNode;\n empty?: React.ReactNode;\n classNames?: {\n title?: string;\n header?: string;\n body?: string;\n };\n scroll?: {\n hasMore: boolean;\n loading: boolean;\n loader?: React.ReactNode;\n options?: IntersectionObserverInit;\n /**\n * Called when more items should be fetched. `List` tracks in-flight\n * requests via `loading` — the caller MUST flip `loading` back to\n * `false` when the fetch settles, including on failure/rejection.\n * If `loading` never becomes `false` again after a failed fetch,\n * `List` will stop calling `next()` for subsequent intersections.\n */\n next: () => void;\n };\n data?: T[];\n renderItem?: (item: T, index: number) => React.ReactNode;\n itemKey?: (item: T, index: number) => React.Key;\n}\n\nconst List = <T,>({\n loading,\n loaderProps,\n loader,\n header,\n title,\n titleLevel = 2,\n empty,\n scroll,\n data,\n className,\n classNames,\n renderItem = () => null,\n itemKey,\n ...props\n}: Props<T>) => {\n const [loaderRef, { isIntersecting }] = useIntersectionObserver({\n threshold: 0,\n root: null,\n rootMargin: '0px',\n ...scroll?.options,\n });\n\n // `scroll` is typically a new object identity every render, so this\n // effect re-runs often. Guard with a ref (updated synchronously, unlike\n // the `loading` prop which only reflects the caller's next state update)\n // to avoid firing `next()` again for the same in-flight request before\n // the caller's `loading` has had a chance to become true.\n const fetchingRef = useRef(false);\n\n useEffect(() => {\n if (!scroll) {\n return;\n }\n\n if (scroll.loading) {\n fetchingRef.current = false;\n return;\n }\n\n if (isIntersecting && scroll.hasMore && !fetchingRef.current) {\n fetchingRef.current = true;\n scroll.next();\n }\n }, [isIntersecting, scroll]);\n\n if (loading) {\n return (\n <div className={cn(className)} {...props}>\n {loader ?? (\n <>\n <div className={cn(classNames?.title)}>{title && <Skeleton />}</div>\n <div className={cn(classNames?.header)}>\n {header && <Skeleton size=\"small\" />}\n </div>\n <div className={cn('space-y-2', classNames?.body)}>\n <Skeleton.Node count={10} gap={10} {...loaderProps} />\n </div>\n </>\n )}\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n className,\n //\n )}\n {...props}\n >\n {renderConditional(title, v => (\n <Title\n level={titleLevel}\n className={cn(\n 'px-1.5 py-4',\n 'text-black-90 text-lg leading-5.75 font-bold',\n //\n )}\n >\n {v}\n </Title>\n ))}\n <div className={cn(classNames?.header)}>{header}</div>\n <div role=\"list\" className={cn('space-y-2', classNames?.body)}>\n {!data?.length && empty\n ? empty\n : data?.map((item, i) => (\n <div role=\"listitem\" key={itemKey ? itemKey(item, i) : i}>\n {renderItem(item, i)}\n </div>\n ))}\n {scroll?.loading && (\n <div role=\"presentation\">\n {scroll?.loader ?? (\n <Skeleton.Node count={10} gap={10} {...loaderProps} />\n )}\n </div>\n )}\n {scroll && <div ref={loaderRef} role=\"none\" />}\n </div>\n </div>\n );\n};\n\nexport default List;\n"],"mappings":";;;;;;;;AA8CA,MAAM,QAAY,EAChB,SACA,aACA,QACA,QACA,OACA,aAAa,GACb,OACA,QACA,MACA,WACA,YACA,mBAAmB,MACnB,SACA,GAAG,YACW;CACd,MAAM,CAAC,WAAW,EAAE,oBAAoB,wBAAwB;EAC9D,WAAW;EACX,MAAM;EACN,YAAY;EACZ,GAAG,QAAQ;CACb,CAAC;CAOD,MAAM,cAAc,OAAO,KAAK;CAEhC,gBAAgB;EACd,IAAI,CAAC,QACH;EAGF,IAAI,OAAO,SAAS;GAClB,YAAY,UAAU;GACtB;EACF;EAEA,IAAI,kBAAkB,OAAO,WAAW,CAAC,YAAY,SAAS;GAC5D,YAAY,UAAU;GACtB,OAAO,KAAK;EACd;CACF,GAAG,CAAC,gBAAgB,MAAM,CAAC;CAE3B,IAAI,SACF,OACE,oBAAC,OAAD;EAAK,WAAW,GAAG,SAAS;EAAG,GAAI;EAChC,UAAA,UACC,qBAAA,YAAA,EAAA,UAAA;GACE,oBAAC,OAAD;IAAK,WAAW,GAAG,YAAY,KAAK;IAAI,UAAA,SAAS,oBAAC,UAAD,CAAW,CAAA;GAAO,CAAA;GACnE,oBAAC,OAAD;IAAK,WAAW,GAAG,YAAY,MAAM;IAClC,UAAA,UAAU,oBAAC,UAAD,EAAU,MAAK,QAAS,CAAA;GAChC,CAAA;GACL,oBAAC,OAAD;IAAK,WAAW,GAAG,aAAa,YAAY,IAAI;IAC9C,UAAA,oBAAC,SAAS,MAAV;KAAe,OAAO;KAAI,KAAK;KAAI,GAAI;IAAc,CAAA;GAClD,CAAA;EACL,EAAA,CAAA;CAED,CAAA;CAIT,OACE,qBAAC,OAAD;EACE,WAAW,GACT,SAEF;EACA,GAAI;EALN,UAAA;GAOG,kBAAkB,QAAO,MACxB,oBAAC,OAAD;IACE,OAAO;IACP,WAAW,GACT,eACA,8CAEF;IAEC,UAAA;GACI,CAAA,CACR;GACD,oBAAC,OAAD;IAAK,WAAW,GAAG,YAAY,MAAM;IAAI,UAAA;GAAY,CAAA;GACrD,qBAAC,OAAD;IAAK,MAAK;IAAO,WAAW,GAAG,aAAa,YAAY,IAAI;IAA5D,UAAA;KACG,CAAC,MAAM,UAAU,QACd,QACA,MAAM,KAAK,MAAM,MACf,oBAAC,OAAD;MAAK,MAAK;MACP,UAAA,WAAW,MAAM,CAAC;KAChB,GAFqB,UAAU,QAAQ,MAAM,CAAC,IAAI,CAElD,CACN;KACJ,QAAQ,WACP,oBAAC,OAAD;MAAK,MAAK;MACP,UAAA,QAAQ,UACP,oBAAC,SAAS,MAAV;OAAe,OAAO;OAAI,KAAK;OAAI,GAAI;MAAc,CAAA;KAEpD,CAAA;KAEN,UAAU,oBAAC,OAAD;MAAK,KAAK;MAAW,MAAK;KAAQ,CAAA;IAC1C;;EACF;;AAET"}
@@ -1,6 +1,4 @@
1
1
  import React from "react";
2
- import * as react_jsx_runtime0 from "react/jsx-runtime";
3
-
4
2
  //#region src/components/organisms/modal.d.ts
5
3
  interface Props {
6
4
  open?: boolean;
@@ -35,25 +33,7 @@ interface StaticProps extends Props {
35
33
  container?: HTMLElement;
36
34
  }
37
35
  declare const Modal: {
38
- ({
39
- open,
40
- maskClosable,
41
- closable,
42
- closeIcon,
43
- className,
44
- classNames,
45
- style,
46
- title,
47
- content,
48
- footer,
49
- container,
50
- children,
51
- okText,
52
- cancelText,
53
- onOk,
54
- onCancel,
55
- ...props
56
- }: Props): react_jsx_runtime0.JSX.Element | null;
36
+ ({ open, maskClosable, closable, closeIcon, className, classNames, style, title, content, footer, container, children, okText, cancelText, onOk, onCancel, ...props }: Props): React.JSX.Element | null;
57
37
  destroy: (id?: string) => void;
58
38
  destroyAll(): void;
59
39
  info(props: StaticProps): string | undefined;
@@ -63,5 +43,5 @@ declare const Modal: {
63
43
  confirm(props: StaticProps): string | undefined;
64
44
  };
65
45
  //#endregion
66
- export { Modal, Props };
46
+ export { Props, Modal as default };
67
47
  //# sourceMappingURL=modal.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"modal.d.mts","names":[],"sources":["../../../src/components/organisms/modal.tsx"],"mappings":";;;;UAiCiB,KAAA;EACf,IAAA;EACA,YAAA;EACA,QAAA;IAGM,SAAA,GAAY,KAAA,CAAM,SAAA;IAClB,QAAA;EAAA;EAEN,SAAA,GAAY,KAAA,CAAM,SAAA;EAClB,KAAA,GAAQ,KAAA,CAAM,SAAA;EACd,OAAA,GAAU,KAAA,CAAM,SAAA;EAChB,MAAA,GAAS,KAAA,CAAM,SAAA;EACf,SAAA;EACA,UAAA;IACE,IAAA;IACA,MAAA;IACA,IAAA;IACA,MAAA;EAAA;EAEF,KAAA,GAAQ,KAAA,CAAM,aAAA;EACd,MAAA;EACA,UAAA;EACA,SAAA,GAAY,WAAA;EACZ,QAAA,GAAW,KAAA,CAAM,SAAA;EACjB,IAAA;EACA,QAAA;AAAA;AAAA,UAGQ,WAAA,SAAoB,KAAA;EAC5B,IAAA;EACA,EAAA;EACA,IAAA,GAAO,KAAA,CAAM,SAAA;EACb,SAAA,GAAY,WAAA;AAAA;AAAA,cAGR,KAAA;EAAA;;;;;;;;;;;;;;;;;;KAkBH,KAAA,GAAK,kBAAA,CAAA,GAAA,CAAA,OAAA;;;cA4Ma,WAAA;iBAEG,WAAA;eAEF,WAAA;iBAEE,WAAA;iBAEA,WAAA;AAAA"}
1
+ {"version":3,"file":"modal.d.mts","names":[],"sources":["../../../src/components/organisms/modal.tsx"],"mappings":";;UAiCiB;EACf;EACA;EACA;IAGM,YAAY,MAAM;IAClB;;EAEN,YAAY,MAAM;EAClB,QAAQ,MAAM;EACd,UAAU,MAAM;EAChB,SAAS,MAAM;EACf;EACA;IACE;IACA;IACA;IACA;;EAEF,QAAQ,MAAM;EACd;EACA;EACA,YAAY;EACZ,WAAW,MAAM;EACjB;EACA;;UAGQ,oBAAoB;EAC5B;EACA;EACA,OAAO,MAAM;EACb,YAAY;;cAGR;KAkBH,MAAA,cAAA,UAAA,WAAA,WAAA,YAAA,OAAA,OAAA,SAAA,QAAA,WAAA,UAAA,QAAA,YAAA,MAAA,aAAA,SAAA,QAAK,MAAA,IAAA;;;EA4Ma,KAAA,OAAA;EAEG,QAAA,OAAA;EAEF,MAAA,OAAA;EAEE,QAAA,OAAA;EAEA,QAAA,OAAA"}
@@ -1,15 +1,13 @@
1
- 'use client';
2
-
1
+ "use client";
3
2
  import { cn } from "../../utils.mjs";
4
3
  import { DEFAULT_LOCALE, useConfig } from "../../providers/config/context.mjs";
5
4
  import { dialog_exports } from "../../core/dialog.mjs";
6
5
  import Button from "../../Button.mjs";
7
6
  import { createImperativeStack, isBrowser } from "./imperative-stack.mjs";
8
7
  import { Check, CircleQuestionMark, Info, OctagonAlert, OctagonX } from "lucide-react";
9
- import React, { useState } from "react";
8
+ import { useState } from "react";
10
9
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
11
10
  import { createPortal } from "react-dom";
12
-
13
11
  //#region src/components/organisms/modal.tsx
14
12
  const { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } = dialog_exports;
15
13
  const Modal = ({ open = false, maskClosable = false, closable = false, closeIcon, className, classNames, style, title, content, footer, container, children, okText, cancelText, onOk, onCancel, ...props }) => {
@@ -147,7 +145,7 @@ Modal.confirm = (props) => modalStack.render({
147
145
  type: "confirm",
148
146
  ...props
149
147
  });
150
-
151
148
  //#endregion
152
149
  export { Modal as default };
150
+
153
151
  //# sourceMappingURL=modal.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"modal.mjs","names":["dialog"],"sources":["../../../src/components/organisms/modal.tsx"],"sourcesContent":["'use client';\n\nimport React, { useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport {\n Check,\n CircleQuestionMark,\n Info,\n OctagonAlert,\n OctagonX,\n} from 'lucide-react';\n\nimport { dialog } from '@repo/ui/core';\nimport { DEFAULT_LOCALE, useConfig } from '@repo/ui/providers';\nimport { cn } from '@repo/ui/utils';\n\nimport Button from '../atoms/button';\nimport {\n type ImperativeStack,\n createImperativeStack,\n isBrowser,\n} from './imperative-stack';\n\nconst {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} = dialog;\n\nexport interface Props {\n open?: boolean;\n maskClosable?: boolean;\n closable?:\n | boolean\n | {\n closeIcon?: React.ReactNode;\n disabled?: boolean;\n };\n closeIcon?: React.ReactNode;\n title?: React.ReactNode;\n content?: React.ReactNode;\n footer?: React.ReactNode;\n className?: string;\n classNames?: {\n mask?: string;\n header?: string;\n body?: string;\n footer?: string;\n };\n style?: React.CSSProperties;\n okText?: string;\n cancelText?: string;\n container?: HTMLElement;\n children?: React.ReactNode;\n onOk?: () => void;\n onCancel?: () => void;\n}\n\ninterface StaticProps extends Props {\n type?: 'info' | 'success' | 'error' | 'warning' | 'confirm';\n id?: string;\n icon?: React.ReactNode;\n container?: HTMLElement;\n}\n\nconst Modal = ({\n open = false,\n maskClosable = false,\n closable = false,\n closeIcon,\n className,\n classNames,\n style,\n title,\n content,\n footer,\n container,\n children,\n okText,\n cancelText,\n onOk,\n onCancel,\n ...props\n}: Props) => {\n const { locale } = useConfig();\n\n if (typeof window === 'undefined') {\n return null;\n }\n\n return (\n <Dialog\n open={open}\n onOpenChange={(open: boolean) => {\n if (!open) {\n onCancel?.();\n }\n }}\n {...props}\n >\n <DialogContent\n className={cn(\n 'rounded-lg p-4 max-sm:max-w-[80%]',\n 'border-none outline-none',\n className,\n )}\n classNames={{\n ...classNames,\n mask: cn('bg-black/60', classNames?.mask),\n }}\n style={style}\n closable={closable}\n closeIcon={closeIcon}\n container={container}\n onPointerDownOutside={event => {\n if (!maskClosable) {\n event.preventDefault();\n }\n }}\n >\n {/**\n * @todo [Dialog & AlertDialog] fix: can't get id correctly in shadow dom\n * @see https://github.com/radix-ui/primitives/pull/3384\n **/}\n <DialogHeader\n className={cn(\n classNames?.header,\n !title && 'hidden',\n //\n )}\n >\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription className=\"hidden\" />\n </DialogHeader>\n <div className={cn('break-all', classNames?.body)}>\n {children ?? content}\n </div>\n {footer !== null && (\n <DialogFooter\n className={cn('flex-row justify-end gap-x-2', classNames?.footer)}\n >\n {footer || (\n <>\n <Button onClick={onOk}>\n {okText ?? locale.ok ?? DEFAULT_LOCALE.ok}\n </Button>\n <Button variant=\"outlined\" onClick={onCancel}>\n {cancelText ?? locale.cancel ?? DEFAULT_LOCALE.cancel}\n </Button>\n </>\n )}\n </DialogFooter>\n )}\n </DialogContent>\n </Dialog>\n );\n};\n\nconst STATIC_ICONS = {\n info: <Info className=\"text-blue-400\" />,\n success: <Check className=\"text-green-400\" />,\n error: <OctagonX className=\"text-red-400\" />,\n warning: <OctagonAlert className=\"text-yellow-400\" />,\n confirm: <CircleQuestionMark />,\n};\n\nconst StaticModal = ({\n id,\n type,\n title,\n content,\n okText,\n cancelText,\n container,\n icon,\n onOk,\n onCancel,\n ...props\n}: StaticProps & { id: string }): React.ReactPortal | null => {\n const { locale } = useConfig();\n const [open, setOpen] = useState(true);\n const resolvedOkText = okText ?? locale.ok ?? DEFAULT_LOCALE.ok;\n const resolvedCancelText =\n cancelText ?? locale.cancel ?? DEFAULT_LOCALE.cancel;\n\n const closeModal = (callback?: () => void) => {\n callback?.();\n setOpen(false);\n setTimeout(() => {\n modalStack.destroy(id);\n }, 200);\n };\n\n const footer =\n type === 'confirm' ? (\n <div className=\"grid w-full grid-cols-5 gap-x-2\">\n <Button\n variant=\"outlined\"\n className=\"col-span-2\"\n onClick={() => closeModal(onCancel)}\n >\n {resolvedCancelText}\n </Button>\n <Button className=\"col-span-3\" onClick={() => closeModal(onOk)}>\n {resolvedOkText}\n </Button>\n </div>\n ) : (\n <Button\n className={cn(\n 'grow',\n //\n )}\n onClick={() => closeModal(onOk)}\n >\n {resolvedOkText}\n </Button>\n );\n\n if (!isBrowser) {\n return null;\n }\n\n return createPortal(\n <Modal\n open={open}\n footer={footer}\n className={cn(\n 'z-10000',\n 'box-content w-100',\n 'rounded-3xl p-4',\n 'gap-y-0',\n )}\n classNames={{\n mask: 'z-10000 bg-black/[.6]',\n body: cn(\n 'text-black-70 whitespace-pre-wrap text-center',\n content && 'mt-3',\n ),\n footer: 'mt-9',\n }}\n title={\n <p\n className={cn(\n 'text-center text-lg leading-normal whitespace-pre-wrap',\n 'flex items-center justify-center gap-x-2',\n //\n )}\n >\n {icon || (type && STATIC_ICONS[type])}\n {title}\n </p>\n }\n container={container}\n onCancel={() => closeModal(onCancel)}\n {...props}\n >\n {content}\n </Modal>,\n modalStack.getRootElement(container)!,\n );\n};\n\n// No `role`/`aria-modal` here — this element is only a mount point for the\n// imperative stack, not the dialog itself. Radix already renders its own\n// `role=\"dialog\"`/`aria-modal=\"true\"` on the actual `DialogContent` via\n// portal once a modal is open. Setting it here as well would (a) leave\n// `aria-modal=\"true\"` on the page permanently, even with zero modals open,\n// hiding the rest of the document from screen readers, and (b) duplicate\n// Radix's own dialog role once one is open.\nconst modalStack: ImperativeStack<StaticProps> =\n createImperativeStack<StaticProps>({\n createRootElement: () => {\n const el = document.createElement('div');\n el.style.zIndex = '10000';\n el.style.position = 'absolute';\n return el;\n },\n StackItem: StaticModal,\n });\n\nModal.destroy = modalStack.destroy;\n\nModal.destroyAll = () => {\n modalStack.destroy();\n};\n\nModal.info = (props: StaticProps) =>\n modalStack.render({ type: 'info', ...props });\nModal.success = (props: StaticProps) =>\n modalStack.render({ type: 'success', ...props });\nModal.error = (props: StaticProps) =>\n modalStack.render({ type: 'error', ...props });\nModal.warning = (props: StaticProps) =>\n modalStack.render({ type: 'warning', ...props });\nModal.confirm = (props: StaticProps) =>\n modalStack.render({ type: 'confirm', ...props });\n\nexport default Modal;\n"],"mappings":"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"}
1
+ {"version":3,"file":"modal.mjs","names":["dialog"],"sources":["../../../src/components/organisms/modal.tsx"],"sourcesContent":["'use client';\n\nimport React, { useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport {\n Check,\n CircleQuestionMark,\n Info,\n OctagonAlert,\n OctagonX,\n} from 'lucide-react';\n\nimport { dialog } from '@repo/ui/core';\nimport { DEFAULT_LOCALE, useConfig } from '@repo/ui/providers';\nimport { cn } from '@repo/ui/utils';\n\nimport Button from '../atoms/button';\nimport {\n type ImperativeStack,\n createImperativeStack,\n isBrowser,\n} from './imperative-stack';\n\nconst {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} = dialog;\n\nexport interface Props {\n open?: boolean;\n maskClosable?: boolean;\n closable?:\n | boolean\n | {\n closeIcon?: React.ReactNode;\n disabled?: boolean;\n };\n closeIcon?: React.ReactNode;\n title?: React.ReactNode;\n content?: React.ReactNode;\n footer?: React.ReactNode;\n className?: string;\n classNames?: {\n mask?: string;\n header?: string;\n body?: string;\n footer?: string;\n };\n style?: React.CSSProperties;\n okText?: string;\n cancelText?: string;\n container?: HTMLElement;\n children?: React.ReactNode;\n onOk?: () => void;\n onCancel?: () => void;\n}\n\ninterface StaticProps extends Props {\n type?: 'info' | 'success' | 'error' | 'warning' | 'confirm';\n id?: string;\n icon?: React.ReactNode;\n container?: HTMLElement;\n}\n\nconst Modal = ({\n open = false,\n maskClosable = false,\n closable = false,\n closeIcon,\n className,\n classNames,\n style,\n title,\n content,\n footer,\n container,\n children,\n okText,\n cancelText,\n onOk,\n onCancel,\n ...props\n}: Props) => {\n const { locale } = useConfig();\n\n if (typeof window === 'undefined') {\n return null;\n }\n\n return (\n <Dialog\n open={open}\n onOpenChange={(open: boolean) => {\n if (!open) {\n onCancel?.();\n }\n }}\n {...props}\n >\n <DialogContent\n className={cn(\n 'rounded-lg p-4 max-sm:max-w-[80%]',\n 'border-none outline-none',\n className,\n )}\n classNames={{\n ...classNames,\n mask: cn('bg-black/60', classNames?.mask),\n }}\n style={style}\n closable={closable}\n closeIcon={closeIcon}\n container={container}\n onPointerDownOutside={event => {\n if (!maskClosable) {\n event.preventDefault();\n }\n }}\n >\n {/**\n * @todo [Dialog & AlertDialog] fix: can't get id correctly in shadow dom\n * @see https://github.com/radix-ui/primitives/pull/3384\n **/}\n <DialogHeader\n className={cn(\n classNames?.header,\n !title && 'hidden',\n //\n )}\n >\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription className=\"hidden\" />\n </DialogHeader>\n <div className={cn('break-all', classNames?.body)}>\n {children ?? content}\n </div>\n {footer !== null && (\n <DialogFooter\n className={cn('flex-row justify-end gap-x-2', classNames?.footer)}\n >\n {footer || (\n <>\n <Button onClick={onOk}>\n {okText ?? locale.ok ?? DEFAULT_LOCALE.ok}\n </Button>\n <Button variant=\"outlined\" onClick={onCancel}>\n {cancelText ?? locale.cancel ?? DEFAULT_LOCALE.cancel}\n </Button>\n </>\n )}\n </DialogFooter>\n )}\n </DialogContent>\n </Dialog>\n );\n};\n\nconst STATIC_ICONS = {\n info: <Info className=\"text-blue-400\" />,\n success: <Check className=\"text-green-400\" />,\n error: <OctagonX className=\"text-red-400\" />,\n warning: <OctagonAlert className=\"text-yellow-400\" />,\n confirm: <CircleQuestionMark />,\n};\n\nconst StaticModal = ({\n id,\n type,\n title,\n content,\n okText,\n cancelText,\n container,\n icon,\n onOk,\n onCancel,\n ...props\n}: StaticProps & { id: string }): React.ReactPortal | null => {\n const { locale } = useConfig();\n const [open, setOpen] = useState(true);\n const resolvedOkText = okText ?? locale.ok ?? DEFAULT_LOCALE.ok;\n const resolvedCancelText =\n cancelText ?? locale.cancel ?? DEFAULT_LOCALE.cancel;\n\n const closeModal = (callback?: () => void) => {\n callback?.();\n setOpen(false);\n setTimeout(() => {\n modalStack.destroy(id);\n }, 200);\n };\n\n const footer =\n type === 'confirm' ? (\n <div className=\"grid w-full grid-cols-5 gap-x-2\">\n <Button\n variant=\"outlined\"\n className=\"col-span-2\"\n onClick={() => closeModal(onCancel)}\n >\n {resolvedCancelText}\n </Button>\n <Button className=\"col-span-3\" onClick={() => closeModal(onOk)}>\n {resolvedOkText}\n </Button>\n </div>\n ) : (\n <Button\n className={cn(\n 'grow',\n //\n )}\n onClick={() => closeModal(onOk)}\n >\n {resolvedOkText}\n </Button>\n );\n\n if (!isBrowser) {\n return null;\n }\n\n return createPortal(\n <Modal\n open={open}\n footer={footer}\n className={cn(\n 'z-10000',\n 'box-content w-100',\n 'rounded-3xl p-4',\n 'gap-y-0',\n )}\n classNames={{\n mask: 'z-10000 bg-black/[.6]',\n body: cn(\n 'text-black-70 whitespace-pre-wrap text-center',\n content && 'mt-3',\n ),\n footer: 'mt-9',\n }}\n title={\n <p\n className={cn(\n 'text-center text-lg leading-normal whitespace-pre-wrap',\n 'flex items-center justify-center gap-x-2',\n //\n )}\n >\n {icon || (type && STATIC_ICONS[type])}\n {title}\n </p>\n }\n container={container}\n onCancel={() => closeModal(onCancel)}\n {...props}\n >\n {content}\n </Modal>,\n modalStack.getRootElement(container)!,\n );\n};\n\n// No `role`/`aria-modal` here — this element is only a mount point for the\n// imperative stack, not the dialog itself. Radix already renders its own\n// `role=\"dialog\"`/`aria-modal=\"true\"` on the actual `DialogContent` via\n// portal once a modal is open. Setting it here as well would (a) leave\n// `aria-modal=\"true\"` on the page permanently, even with zero modals open,\n// hiding the rest of the document from screen readers, and (b) duplicate\n// Radix's own dialog role once one is open.\nconst modalStack: ImperativeStack<StaticProps> =\n createImperativeStack<StaticProps>({\n createRootElement: () => {\n const el = document.createElement('div');\n el.style.zIndex = '10000';\n el.style.position = 'absolute';\n return el;\n },\n StackItem: StaticModal,\n });\n\nModal.destroy = modalStack.destroy;\n\nModal.destroyAll = () => {\n modalStack.destroy();\n};\n\nModal.info = (props: StaticProps) =>\n modalStack.render({ type: 'info', ...props });\nModal.success = (props: StaticProps) =>\n modalStack.render({ type: 'success', ...props });\nModal.error = (props: StaticProps) =>\n modalStack.render({ type: 'error', ...props });\nModal.warning = (props: StaticProps) =>\n modalStack.render({ type: 'warning', ...props });\nModal.confirm = (props: StaticProps) =>\n modalStack.render({ type: 'confirm', ...props });\n\nexport default Modal;\n"],"mappings":"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"}
@@ -1,11 +1,10 @@
1
- import { Slide } from "./slide.mjs";
2
- import { Props, Swiper as Swiper$1 } from "./swiper.mjs";
3
-
1
+ import Slide from "./slide.mjs";
2
+ import Swiper$1, { Props } from "./swiper.mjs";
4
3
  //#region src/components/organisms/swiper/index.d.ts
5
4
  type SwiperComponent = typeof Swiper$1 & {
6
5
  Slide: typeof Slide;
7
6
  };
8
7
  declare const Swiper: SwiperComponent;
9
8
  //#endregion
10
- export { Swiper };
9
+ export { type Props as SwiperProps, Swiper as default };
11
10
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/organisms/swiper/index.ts"],"mappings":";;;;KAGK,eAAA,UAAyB,QAAA;EAAe,KAAA,SAAc,KAAA;AAAA;AAAA,cAErD,MAAA,EAAuB,eAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/organisms/swiper/index.ts"],"mappings":";;;KAGK,yBAAyB;EAAe,cAAc;;cAErD,QAAuB"}
@@ -1,10 +1,9 @@
1
1
  import Slide from "./slide.mjs";
2
- import Swiper$1, { initialOptions } from "./swiper.mjs";
3
-
2
+ import Swiper$1 from "./swiper.mjs";
4
3
  //#region src/components/organisms/swiper/index.ts
5
4
  const Swiper = Swiper$1;
6
5
  Swiper.Slide = Slide;
7
-
8
6
  //#endregion
9
7
  export { Swiper as default };
8
+
10
9
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["SwiperImpl"],"sources":["../../../../src/components/organisms/swiper/index.ts"],"sourcesContent":["import Slide from './slide';\nimport SwiperImpl, { initialOptions } from './swiper';\n\ntype SwiperComponent = typeof SwiperImpl & { Slide: typeof Slide };\n\nconst Swiper = SwiperImpl as SwiperComponent;\n\nSwiper.Slide = Slide;\n\nexport default Swiper;\nexport { initialOptions };\nexport type { Props as SwiperProps } from './swiper';\n"],"mappings":";;;;AAKA,MAAM,SAASA;AAEf,OAAO,QAAQ"}
1
+ {"version":3,"file":"index.mjs","names":["SwiperImpl"],"sources":["../../../../src/components/organisms/swiper/index.ts"],"sourcesContent":["import Slide from './slide';\nimport SwiperImpl, { initialOptions } from './swiper';\n\ntype SwiperComponent = typeof SwiperImpl & { Slide: typeof Slide };\n\nconst Swiper = SwiperImpl as SwiperComponent;\n\nSwiper.Slide = Slide;\n\nexport default Swiper;\nexport { initialOptions };\nexport type { Props as SwiperProps } from './swiper';\n"],"mappings":";;;AAKA,MAAM,SAASA;AAEf,OAAO,QAAQ"}