@mieweb/ui 0.2.2 → 0.3.0-dev.60

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 (326) hide show
  1. package/dist/ag-grid.cjs +6 -5
  2. package/dist/ag-grid.cjs.map +1 -1
  3. package/dist/ag-grid.js +2 -1
  4. package/dist/ag-grid.js.map +1 -1
  5. package/dist/brands/index.cjs +20 -20
  6. package/dist/brands/index.js +3 -3
  7. package/dist/brands/types.cjs +4 -4
  8. package/dist/brands/types.d.cts +14 -8
  9. package/dist/brands/types.d.ts +14 -8
  10. package/dist/brands/types.js +1 -1
  11. package/dist/{chunk-B7YGVKTE.cjs → chunk-2YFJ6A5V.cjs} +51 -24
  12. package/dist/chunk-2YFJ6A5V.cjs.map +1 -0
  13. package/dist/{chunk-2J2V4TMJ.cjs → chunk-35J4B3ZK.cjs} +41 -31
  14. package/dist/chunk-35J4B3ZK.cjs.map +1 -0
  15. package/dist/{chunk-B5364UWR.cjs → chunk-3DBRHYTN.cjs} +2 -2
  16. package/dist/{chunk-B5364UWR.cjs.map → chunk-3DBRHYTN.cjs.map} +1 -1
  17. package/dist/{chunk-JFAXLE2J.js → chunk-3DM6LMZG.js} +7 -4
  18. package/dist/chunk-3DM6LMZG.js.map +1 -0
  19. package/dist/{chunk-N3QTYHRZ.cjs → chunk-3GGET5LK.cjs} +40 -22
  20. package/dist/chunk-3GGET5LK.cjs.map +1 -0
  21. package/dist/{chunk-VV4N4WY6.cjs → chunk-3XK5GENF.cjs} +61 -35
  22. package/dist/chunk-3XK5GENF.cjs.map +1 -0
  23. package/dist/{chunk-OW2BWGST.js → chunk-4ASPCSWT.js} +48 -31
  24. package/dist/chunk-4ASPCSWT.js.map +1 -0
  25. package/dist/{chunk-EKIQE524.cjs → chunk-4FALCEJI.cjs} +3 -2
  26. package/dist/chunk-4FALCEJI.cjs.map +1 -0
  27. package/dist/{chunk-6OCIIIAI.js → chunk-4Z6ZZKIY.js} +40 -22
  28. package/dist/chunk-4Z6ZZKIY.js.map +1 -0
  29. package/dist/{chunk-QUA7WVHK.cjs → chunk-4ZU53GNR.cjs} +6 -14
  30. package/dist/{chunk-QUA7WVHK.cjs.map → chunk-4ZU53GNR.cjs.map} +1 -1
  31. package/dist/{chunk-6Q4SU72T.js → chunk-5NSURWMM.js} +49 -10
  32. package/dist/chunk-5NSURWMM.js.map +1 -0
  33. package/dist/{chunk-4MHTSFPX.js → chunk-6EN6ZIW3.js} +43 -18
  34. package/dist/chunk-6EN6ZIW3.js.map +1 -0
  35. package/dist/chunk-7CLHYU4Q.cjs +270 -0
  36. package/dist/chunk-7CLHYU4Q.cjs.map +1 -0
  37. package/dist/{chunk-RYQ5NEKH.js → chunk-7MX7MGSA.js} +2 -2
  38. package/dist/{chunk-RYQ5NEKH.js.map → chunk-7MX7MGSA.js.map} +1 -1
  39. package/dist/chunk-7XWPUWSL.js +328 -0
  40. package/dist/chunk-7XWPUWSL.js.map +1 -0
  41. package/dist/{chunk-PEH4ZOEM.cjs → chunk-A2QVQF54.cjs} +12 -6
  42. package/dist/chunk-A2QVQF54.cjs.map +1 -0
  43. package/dist/{chunk-4AWW5WPF.js → chunk-ATALZYST.js} +51 -24
  44. package/dist/chunk-ATALZYST.js.map +1 -0
  45. package/dist/{chunk-HRA4FUO6.cjs → chunk-AUXHRAID.cjs} +71 -44
  46. package/dist/chunk-AUXHRAID.cjs.map +1 -0
  47. package/dist/{chunk-I7L6CQXR.cjs → chunk-AWUADXYI.cjs} +58 -31
  48. package/dist/chunk-AWUADXYI.cjs.map +1 -0
  49. package/dist/chunk-B43FRU5R.js +247 -0
  50. package/dist/chunk-B43FRU5R.js.map +1 -0
  51. package/dist/{chunk-XXOBTAKA.js → chunk-BBQZNIB4.js} +71 -44
  52. package/dist/chunk-BBQZNIB4.js.map +1 -0
  53. package/dist/{chunk-PEFJAWNR.cjs → chunk-BWYYA3LQ.cjs} +26 -10
  54. package/dist/chunk-BWYYA3LQ.cjs.map +1 -0
  55. package/dist/{chunk-WH6I7CMP.cjs → chunk-CW75IKA6.cjs} +27 -2
  56. package/dist/chunk-CW75IKA6.cjs.map +1 -0
  57. package/dist/{chunk-QSMMFATL.js → chunk-DCDXOT3A.js} +178 -127
  58. package/dist/chunk-DCDXOT3A.js.map +1 -0
  59. package/dist/{chunk-3NJ72QU6.js → chunk-DCER2QQB.js} +3 -2
  60. package/dist/chunk-DCER2QQB.js.map +1 -0
  61. package/dist/{chunk-AWIULTJW.js → chunk-DNPRRYPQ.js} +18 -3
  62. package/dist/chunk-DNPRRYPQ.js.map +1 -0
  63. package/dist/{chunk-NAATBUHR.cjs → chunk-EMMQPDOY.cjs} +43 -18
  64. package/dist/chunk-EMMQPDOY.cjs.map +1 -0
  65. package/dist/{chunk-GHRQ3ZJH.js → chunk-EUHPVNWD.js} +51 -12
  66. package/dist/chunk-EUHPVNWD.js.map +1 -0
  67. package/dist/{chunk-UZUBLXVC.js → chunk-FZJBFJJR.js} +3 -2
  68. package/dist/chunk-FZJBFJJR.js.map +1 -0
  69. package/dist/{chunk-SSKI6VTW.cjs → chunk-G7ZHQA4O.cjs} +2 -2
  70. package/dist/chunk-G7ZHQA4O.cjs.map +1 -0
  71. package/dist/{chunk-B3L43JGH.js → chunk-HEH3QXOQ.js} +26 -10
  72. package/dist/chunk-HEH3QXOQ.js.map +1 -0
  73. package/dist/{chunk-TA6FVVCM.js → chunk-I56VBDSC.js} +3 -3
  74. package/dist/{chunk-TA6FVVCM.js.map → chunk-I56VBDSC.js.map} +1 -1
  75. package/dist/{chunk-SWMRCGL4.cjs → chunk-IKMR2ADM.cjs} +5 -4
  76. package/dist/chunk-IKMR2ADM.cjs.map +1 -0
  77. package/dist/{chunk-53K3KWXQ.cjs → chunk-IMNLYVXJ.cjs} +166 -136
  78. package/dist/chunk-IMNLYVXJ.cjs.map +1 -0
  79. package/dist/{chunk-FFJVCQ5R.cjs → chunk-J644FU54.cjs} +49 -19
  80. package/dist/chunk-J644FU54.cjs.map +1 -0
  81. package/dist/{chunk-KWDTTGH2.js → chunk-JDI45GEY.js} +4 -4
  82. package/dist/{chunk-KWDTTGH2.js.map → chunk-JDI45GEY.js.map} +1 -1
  83. package/dist/{chunk-EF46XW4Z.cjs → chunk-JE4AH2TZ.cjs} +160 -66
  84. package/dist/chunk-JE4AH2TZ.cjs.map +1 -0
  85. package/dist/{chunk-VDMQCSXT.cjs → chunk-JHPFOG2N.cjs} +4 -4
  86. package/dist/{chunk-VDMQCSXT.cjs.map → chunk-JHPFOG2N.cjs.map} +1 -1
  87. package/dist/{chunk-5T3AWNHG.cjs → chunk-K7IGBNZA.cjs} +70 -39
  88. package/dist/chunk-K7IGBNZA.cjs.map +1 -0
  89. package/dist/chunk-LEMY57MI.js +3 -0
  90. package/dist/{chunk-Y22SOAJM.js.map → chunk-LEMY57MI.js.map} +1 -1
  91. package/dist/{chunk-EYH7OUX5.js → chunk-LUVSO5LK.js} +2 -2
  92. package/dist/chunk-LUVSO5LK.js.map +1 -0
  93. package/dist/chunk-LXHPW2ZF.cjs +353 -0
  94. package/dist/chunk-LXHPW2ZF.cjs.map +1 -0
  95. package/dist/chunk-MOULJE34.js +334 -0
  96. package/dist/chunk-MOULJE34.js.map +1 -0
  97. package/dist/{chunk-B26RIQ5R.js → chunk-MV3MTHWQ.js} +6 -2
  98. package/dist/chunk-MV3MTHWQ.js.map +1 -0
  99. package/dist/{chunk-AU5ADTYD.cjs → chunk-ND75VHB7.cjs} +49 -10
  100. package/dist/chunk-ND75VHB7.cjs.map +1 -0
  101. package/dist/{chunk-GV5JQBPX.js → chunk-NDHW3ZRF.js} +8 -4
  102. package/dist/chunk-NDHW3ZRF.js.map +1 -0
  103. package/dist/{chunk-QL2YTVTR.js → chunk-O43QBXRX.js} +7 -2
  104. package/dist/chunk-O43QBXRX.js.map +1 -0
  105. package/dist/{chunk-4T2ZNPTC.js → chunk-OJ64Q3A5.js} +104 -62
  106. package/dist/chunk-OJ64Q3A5.js.map +1 -0
  107. package/dist/{chunk-OT36EMM5.js → chunk-OKBR6PX4.js} +5 -4
  108. package/dist/chunk-OKBR6PX4.js.map +1 -0
  109. package/dist/{chunk-LZEY55QZ.cjs → chunk-OYKS2JBB.cjs} +18 -3
  110. package/dist/chunk-OYKS2JBB.cjs.map +1 -0
  111. package/dist/{chunk-ORUPC5TV.cjs → chunk-PLIK3DN6.cjs} +7 -4
  112. package/dist/chunk-PLIK3DN6.cjs.map +1 -0
  113. package/dist/{chunk-PF3XWKE5.cjs → chunk-QEAIFTUL.cjs} +26 -9
  114. package/dist/chunk-QEAIFTUL.cjs.map +1 -0
  115. package/dist/chunk-QMQE4PDD.cjs +615 -0
  116. package/dist/chunk-QMQE4PDD.cjs.map +1 -0
  117. package/dist/{chunk-XVZ4SLQB.js → chunk-QVJBUWJQ.js} +70 -39
  118. package/dist/chunk-QVJBUWJQ.js.map +1 -0
  119. package/dist/{chunk-XHJGYBYG.cjs → chunk-QXJMKJJV.cjs} +48 -31
  120. package/dist/chunk-QXJMKJJV.cjs.map +1 -0
  121. package/dist/{chunk-TPGT236K.js → chunk-RC2YMOMS.js} +26 -3
  122. package/dist/chunk-RC2YMOMS.js.map +1 -0
  123. package/dist/{chunk-BXK5TNJE.cjs → chunk-RH43XBNV.cjs} +3 -2
  124. package/dist/chunk-RH43XBNV.cjs.map +1 -0
  125. package/dist/{chunk-NIHESA7O.js → chunk-T4AO7KYK.js} +41 -31
  126. package/dist/chunk-T4AO7KYK.js.map +1 -0
  127. package/dist/chunk-TF5OZDFU.js +588 -0
  128. package/dist/chunk-TF5OZDFU.js.map +1 -0
  129. package/dist/{chunk-BV75DAKO.cjs → chunk-TSZRR2ZK.cjs} +104 -62
  130. package/dist/chunk-TSZRR2ZK.cjs.map +1 -0
  131. package/dist/{chunk-ONWOB76P.js → chunk-V2O636JO.js} +26 -9
  132. package/dist/chunk-V2O636JO.js.map +1 -0
  133. package/dist/{chunk-G2DOD34H.js → chunk-VKTQQOUH.js} +82 -36
  134. package/dist/chunk-VKTQQOUH.js.map +1 -0
  135. package/dist/{chunk-RRQGH7C5.cjs → chunk-VQW36LLX.cjs} +7 -2
  136. package/dist/chunk-VQW36LLX.cjs.map +1 -0
  137. package/dist/{chunk-IY7UQPDO.cjs → chunk-WGPMTW36.cjs} +6 -2
  138. package/dist/chunk-WGPMTW36.cjs.map +1 -0
  139. package/dist/{chunk-SOFX4T7M.js → chunk-WOYUQ4AT.js} +49 -19
  140. package/dist/chunk-WOYUQ4AT.js.map +1 -0
  141. package/dist/{chunk-SD44QJIP.js → chunk-WTDCNXZO.js} +58 -31
  142. package/dist/chunk-WTDCNXZO.js.map +1 -0
  143. package/dist/chunk-XHESCAUE.js +124 -0
  144. package/dist/chunk-XHESCAUE.js.map +1 -0
  145. package/dist/{chunk-QZLRB3UG.js → chunk-YN3ZIUYC.js} +166 -136
  146. package/dist/chunk-YN3ZIUYC.js.map +1 -0
  147. package/dist/{chunk-VZUVYJFU.cjs → chunk-YR365F2H.cjs} +16 -16
  148. package/dist/{chunk-VZUVYJFU.cjs.map → chunk-YR365F2H.cjs.map} +1 -1
  149. package/dist/{chunk-5UUL5EEO.cjs → chunk-Z2ABQA5Z.cjs} +178 -127
  150. package/dist/chunk-Z2ABQA5Z.cjs.map +1 -0
  151. package/dist/{chunk-JYMQJ32S.cjs → chunk-Z4HZ35KX.cjs} +8 -4
  152. package/dist/chunk-Z4HZ35KX.cjs.map +1 -0
  153. package/dist/{chunk-INFSKLXE.cjs → chunk-ZAHQU7PQ.cjs} +51 -12
  154. package/dist/chunk-ZAHQU7PQ.cjs.map +1 -0
  155. package/dist/{chunk-QYJ7RQJ2.cjs → chunk-ZGSPFVGL.cjs} +82 -36
  156. package/dist/chunk-ZGSPFVGL.cjs.map +1 -0
  157. package/dist/{chunk-VBHPXSCV.js → chunk-ZVSW2KS6.js} +12 -6
  158. package/dist/chunk-ZVSW2KS6.js.map +1 -0
  159. package/dist/components/Alert/index.cjs +5 -5
  160. package/dist/components/Alert/index.js +1 -1
  161. package/dist/components/AudioPlayer/index.cjs +6 -6
  162. package/dist/components/AudioPlayer/index.js +1 -1
  163. package/dist/components/AudioRecorder/index.cjs +6 -6
  164. package/dist/components/AudioRecorder/index.js +1 -1
  165. package/dist/components/Avatar/index.cjs +5 -5
  166. package/dist/components/Avatar/index.js +1 -1
  167. package/dist/components/Badge/index.cjs +3 -3
  168. package/dist/components/Badge/index.js +1 -1
  169. package/dist/components/Breadcrumb/index.cjs +3 -3
  170. package/dist/components/Breadcrumb/index.js +1 -1
  171. package/dist/components/Button/index.cjs +3 -3
  172. package/dist/components/Button/index.js +1 -1
  173. package/dist/components/Card/index.cjs +15 -15
  174. package/dist/components/Card/index.js +1 -1
  175. package/dist/components/Checkbox/index.cjs +4 -4
  176. package/dist/components/Checkbox/index.js +1 -1
  177. package/dist/components/CountryCodeDropdown/index.cjs +23 -0
  178. package/dist/components/CountryCodeDropdown/index.cjs.map +1 -0
  179. package/dist/components/CountryCodeDropdown/index.d.cts +69 -0
  180. package/dist/components/CountryCodeDropdown/index.d.ts +69 -0
  181. package/dist/components/CountryCodeDropdown/index.js +6 -0
  182. package/dist/components/CountryCodeDropdown/index.js.map +1 -0
  183. package/dist/components/DateInput/index.cjs +4 -4
  184. package/dist/components/DateInput/index.js +3 -3
  185. package/dist/components/Dropdown/index.cjs +9 -8
  186. package/dist/components/Dropdown/index.d.cts +29 -1
  187. package/dist/components/Dropdown/index.d.ts +29 -1
  188. package/dist/components/Dropdown/index.js +3 -2
  189. package/dist/components/Input/index.cjs +3 -3
  190. package/dist/components/Input/index.js +1 -1
  191. package/dist/components/Modal/index.cjs +9 -9
  192. package/dist/components/Modal/index.js +1 -1
  193. package/dist/components/Pagination/index.cjs +4 -4
  194. package/dist/components/Pagination/index.js +1 -1
  195. package/dist/components/PhoneInput/index.cjs +4 -4
  196. package/dist/components/PhoneInput/index.js +2 -2
  197. package/dist/components/Progress/index.cjs +6 -6
  198. package/dist/components/Progress/index.js +1 -1
  199. package/dist/components/QuickAction/index.cjs +6 -6
  200. package/dist/components/QuickAction/index.js +1 -1
  201. package/dist/components/Radio/index.cjs +4 -4
  202. package/dist/components/Radio/index.js +1 -1
  203. package/dist/components/RecordButton/index.cjs +4 -4
  204. package/dist/components/RecordButton/index.js +1 -1
  205. package/dist/components/SchedulePicker/index.cjs +10 -10
  206. package/dist/components/SchedulePicker/index.js +1 -1
  207. package/dist/components/Select/index.cjs +3 -3
  208. package/dist/components/Select/index.js +1 -1
  209. package/dist/components/Skeleton/index.cjs +6 -6
  210. package/dist/components/Skeleton/index.d.cts +1 -1
  211. package/dist/components/Skeleton/index.d.ts +1 -1
  212. package/dist/components/Skeleton/index.js +1 -1
  213. package/dist/components/Slider/index.cjs +5 -5
  214. package/dist/components/Slider/index.js +1 -1
  215. package/dist/components/Spinner/index.cjs +5 -5
  216. package/dist/components/Spinner/index.js +1 -1
  217. package/dist/components/Switch/index.cjs +4 -4
  218. package/dist/components/Switch/index.js +1 -1
  219. package/dist/components/Table/index.cjs +9 -9
  220. package/dist/components/Table/index.js +1 -1
  221. package/dist/components/Tabs/index.cjs +7 -7
  222. package/dist/components/Tabs/index.js +1 -1
  223. package/dist/components/Textarea/index.cjs +3 -3
  224. package/dist/components/Textarea/index.js +1 -1
  225. package/dist/components/ThemeProvider/index.cjs +8 -8
  226. package/dist/components/ThemeProvider/index.js +2 -2
  227. package/dist/components/Tooltip/index.cjs +2 -2
  228. package/dist/components/Tooltip/index.js +1 -1
  229. package/dist/datavis.cjs +251 -0
  230. package/dist/datavis.cjs.map +1 -0
  231. package/dist/datavis.d.cts +47 -0
  232. package/dist/datavis.d.ts +47 -0
  233. package/dist/datavis.js +247 -0
  234. package/dist/datavis.js.map +1 -0
  235. package/dist/hooks/index.cjs +2 -2
  236. package/dist/hooks/index.d.cts +2 -2
  237. package/dist/hooks/index.d.ts +2 -2
  238. package/dist/hooks/index.js +1 -1
  239. package/dist/index.cjs +12815 -8821
  240. package/dist/index.cjs.map +1 -1
  241. package/dist/index.d.cts +43 -49
  242. package/dist/index.d.ts +43 -49
  243. package/dist/index.js +12183 -8208
  244. package/dist/index.js.map +1 -1
  245. package/dist/styles/init.css +326 -0
  246. package/dist/styles.css +1 -1
  247. package/dist/tailwind-preset.cjs +4 -4
  248. package/dist/tailwind-preset.d.cts +13 -2
  249. package/dist/tailwind-preset.d.ts +13 -2
  250. package/dist/tailwind-preset.js +1 -1
  251. package/dist/utils/index.cjs +30 -22
  252. package/dist/utils/index.d.cts +12 -1
  253. package/dist/utils/index.d.ts +12 -1
  254. package/dist/utils/index.js +1 -1
  255. package/package.json +24 -3
  256. package/dist/chunk-265CFCCX.js +0 -173
  257. package/dist/chunk-265CFCCX.js.map +0 -1
  258. package/dist/chunk-2J2V4TMJ.cjs.map +0 -1
  259. package/dist/chunk-3NJ72QU6.js.map +0 -1
  260. package/dist/chunk-4AWW5WPF.js.map +0 -1
  261. package/dist/chunk-4MHTSFPX.js.map +0 -1
  262. package/dist/chunk-4T2ZNPTC.js.map +0 -1
  263. package/dist/chunk-4YRAEFYW.js +0 -233
  264. package/dist/chunk-4YRAEFYW.js.map +0 -1
  265. package/dist/chunk-53K3KWXQ.cjs.map +0 -1
  266. package/dist/chunk-5T3AWNHG.cjs.map +0 -1
  267. package/dist/chunk-5UUL5EEO.cjs.map +0 -1
  268. package/dist/chunk-6OCIIIAI.js.map +0 -1
  269. package/dist/chunk-6Q4SU72T.js.map +0 -1
  270. package/dist/chunk-AU5ADTYD.cjs.map +0 -1
  271. package/dist/chunk-AWIULTJW.js.map +0 -1
  272. package/dist/chunk-B26RIQ5R.js.map +0 -1
  273. package/dist/chunk-B3L43JGH.js.map +0 -1
  274. package/dist/chunk-B7YGVKTE.cjs.map +0 -1
  275. package/dist/chunk-BV75DAKO.cjs.map +0 -1
  276. package/dist/chunk-BXK5TNJE.cjs.map +0 -1
  277. package/dist/chunk-CQCYXHCU.cjs +0 -256
  278. package/dist/chunk-CQCYXHCU.cjs.map +0 -1
  279. package/dist/chunk-DMA74PZ7.js +0 -240
  280. package/dist/chunk-DMA74PZ7.js.map +0 -1
  281. package/dist/chunk-EF46XW4Z.cjs.map +0 -1
  282. package/dist/chunk-EKIQE524.cjs.map +0 -1
  283. package/dist/chunk-EYH7OUX5.js.map +0 -1
  284. package/dist/chunk-FFJVCQ5R.cjs.map +0 -1
  285. package/dist/chunk-FIXAVBUA.cjs +0 -200
  286. package/dist/chunk-FIXAVBUA.cjs.map +0 -1
  287. package/dist/chunk-G2DOD34H.js.map +0 -1
  288. package/dist/chunk-GHRQ3ZJH.js.map +0 -1
  289. package/dist/chunk-GV5JQBPX.js.map +0 -1
  290. package/dist/chunk-HRA4FUO6.cjs.map +0 -1
  291. package/dist/chunk-I7L6CQXR.cjs.map +0 -1
  292. package/dist/chunk-INFSKLXE.cjs.map +0 -1
  293. package/dist/chunk-IY7UQPDO.cjs.map +0 -1
  294. package/dist/chunk-JFAXLE2J.js.map +0 -1
  295. package/dist/chunk-JYMQJ32S.cjs.map +0 -1
  296. package/dist/chunk-LZEY55QZ.cjs.map +0 -1
  297. package/dist/chunk-N3QTYHRZ.cjs.map +0 -1
  298. package/dist/chunk-NAATBUHR.cjs.map +0 -1
  299. package/dist/chunk-NIHESA7O.js.map +0 -1
  300. package/dist/chunk-NXRLGHEC.js +0 -98
  301. package/dist/chunk-NXRLGHEC.js.map +0 -1
  302. package/dist/chunk-ONWOB76P.js.map +0 -1
  303. package/dist/chunk-ORUPC5TV.cjs.map +0 -1
  304. package/dist/chunk-OT36EMM5.js.map +0 -1
  305. package/dist/chunk-OW2BWGST.js.map +0 -1
  306. package/dist/chunk-PEFJAWNR.cjs.map +0 -1
  307. package/dist/chunk-PEH4ZOEM.cjs.map +0 -1
  308. package/dist/chunk-PF3XWKE5.cjs.map +0 -1
  309. package/dist/chunk-QL2YTVTR.js.map +0 -1
  310. package/dist/chunk-QSMMFATL.js.map +0 -1
  311. package/dist/chunk-QYJ7RQJ2.cjs.map +0 -1
  312. package/dist/chunk-QZLRB3UG.js.map +0 -1
  313. package/dist/chunk-RRQGH7C5.cjs.map +0 -1
  314. package/dist/chunk-SD44QJIP.js.map +0 -1
  315. package/dist/chunk-SOFX4T7M.js.map +0 -1
  316. package/dist/chunk-SSKI6VTW.cjs.map +0 -1
  317. package/dist/chunk-SWMRCGL4.cjs.map +0 -1
  318. package/dist/chunk-TPGT236K.js.map +0 -1
  319. package/dist/chunk-UZUBLXVC.js.map +0 -1
  320. package/dist/chunk-VBHPXSCV.js.map +0 -1
  321. package/dist/chunk-VV4N4WY6.cjs.map +0 -1
  322. package/dist/chunk-WH6I7CMP.cjs.map +0 -1
  323. package/dist/chunk-XHJGYBYG.cjs.map +0 -1
  324. package/dist/chunk-XVZ4SLQB.js.map +0 -1
  325. package/dist/chunk-XXOBTAKA.js.map +0 -1
  326. package/dist/chunk-Y22SOAJM.js +0 -3
@@ -108,6 +108,7 @@ var Switch = React__namespace.forwardRef(
108
108
  "button",
109
109
  {
110
110
  ref,
111
+ "data-slot": "switch",
111
112
  id: switchId,
112
113
  type: "button",
113
114
  role: "switch",
@@ -122,6 +123,7 @@ var Switch = React__namespace.forwardRef(
122
123
  children: /* @__PURE__ */ jsxRuntime.jsx(
123
124
  "span",
124
125
  {
126
+ "data-slot": "switch-thumb",
125
127
  "data-state": isChecked ? "checked" : "unchecked",
126
128
  className: switchThumbVariants({ size })
127
129
  }
@@ -143,6 +145,7 @@ var Switch = React__namespace.forwardRef(
143
145
  "label",
144
146
  {
145
147
  htmlFor: switchId,
148
+ "data-slot": "switch-label",
146
149
  className: chunkOR5DRJCW_cjs.cn(
147
150
  "text-foreground cursor-pointer font-medium select-none",
148
151
  labelSizeClasses[size || "md"],
@@ -155,6 +158,7 @@ var Switch = React__namespace.forwardRef(
155
158
  "p",
156
159
  {
157
160
  id: descriptionId,
161
+ "data-slot": "switch-description",
158
162
  className: chunkOR5DRJCW_cjs.cn(
159
163
  "text-muted-foreground",
160
164
  descriptionSizeClasses[size || "md"]
@@ -166,6 +170,7 @@ var Switch = React__namespace.forwardRef(
166
170
  return /* @__PURE__ */ jsxRuntime.jsxs(
167
171
  "div",
168
172
  {
173
+ "data-slot": "switch-wrapper",
169
174
  className: chunkOR5DRJCW_cjs.cn(
170
175
  "flex items-center gap-3",
171
176
  labelPosition === "left" && "flex-row-reverse"
@@ -183,5 +188,5 @@ Switch.displayName = "Switch";
183
188
  exports.Switch = Switch;
184
189
  exports.switchThumbVariants = switchThumbVariants;
185
190
  exports.switchTrackVariants = switchTrackVariants;
186
- //# sourceMappingURL=chunk-RRQGH7C5.cjs.map
187
- //# sourceMappingURL=chunk-RRQGH7C5.cjs.map
191
+ //# sourceMappingURL=chunk-VQW36LLX.cjs.map
192
+ //# sourceMappingURL=chunk-VQW36LLX.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Switch/Switch.tsx"],"names":["cva","React","jsx","cn","jsxs"],"mappings":"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","file":"chunk-VQW36LLX.cjs","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\nconst switchTrackVariants = cva(\n [\n 'relative inline-flex shrink-0',\n 'cursor-pointer rounded-full',\n 'transition-colors duration-200 ease-in-out',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'bg-neutral-200 dark:bg-neutral-700',\n 'data-[state=checked]:bg-primary-500',\n ],\n {\n variants: {\n size: {\n sm: 'h-5 w-9',\n md: 'h-6 w-11',\n lg: 'h-7 w-14',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\nconst switchThumbVariants = cva(\n [\n 'pointer-events-none inline-block rounded-full',\n 'bg-white shadow-lg',\n 'ring-0 transition-transform duration-200 ease-in-out',\n ],\n {\n variants: {\n size: {\n sm: 'h-4 w-4 data-[state=checked]:translate-x-4 translate-x-0.5',\n md: 'h-5 w-5 data-[state=checked]:translate-x-5 translate-x-0.5',\n lg: 'h-6 w-6 data-[state=checked]:translate-x-7 translate-x-0.5',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\nexport interface SwitchProps\n extends\n Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'>,\n VariantProps<typeof switchTrackVariants> {\n /** Controlled checked state */\n checked?: boolean;\n /** Default checked state (uncontrolled) */\n defaultChecked?: boolean;\n /** Callback when checked state changes */\n onCheckedChange?: (checked: boolean) => void;\n /** Label for the switch */\n label?: string;\n /** Description text */\n description?: string;\n /** Position of the label */\n labelPosition?: 'left' | 'right';\n /** ID for the switch */\n id?: string;\n}\n\n/**\n * An accessible toggle switch component.\n *\n * @example\n * ```tsx\n * <Switch label=\"Enable notifications\" />\n * <Switch\n * label=\"Dark mode\"\n * description=\"Toggle between light and dark theme\"\n * />\n * ```\n */\nconst Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(\n (\n {\n className,\n size,\n checked: controlledChecked,\n defaultChecked = false,\n onCheckedChange,\n label,\n description,\n labelPosition = 'right',\n disabled,\n id,\n ...props\n },\n ref\n ) => {\n const [uncontrolledChecked, setUncontrolledChecked] =\n React.useState(defaultChecked);\n\n const generatedId = React.useId();\n const switchId = id || generatedId;\n const descriptionId = `${switchId}-description`;\n\n const isControlled = controlledChecked !== undefined;\n const isChecked = isControlled ? controlledChecked : uncontrolledChecked;\n\n const handleToggle = React.useCallback(() => {\n if (disabled) return;\n\n const newValue = !isChecked;\n if (!isControlled) {\n setUncontrolledChecked(newValue);\n }\n onCheckedChange?.(newValue);\n }, [disabled, isChecked, isControlled, onCheckedChange]);\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleToggle();\n }\n },\n [handleToggle]\n );\n\n const switchElement = (\n <button\n ref={ref}\n data-slot=\"switch\"\n id={switchId}\n type=\"button\"\n role=\"switch\"\n aria-checked={isChecked}\n aria-describedby={description ? descriptionId : undefined}\n data-state={isChecked ? 'checked' : 'unchecked'}\n disabled={disabled}\n onClick={handleToggle}\n onKeyDown={handleKeyDown}\n className={cn(switchTrackVariants({ size }), 'items-center', className)}\n {...props}\n >\n <span\n data-slot=\"switch-thumb\"\n data-state={isChecked ? 'checked' : 'unchecked'}\n className={switchThumbVariants({ size })}\n />\n </button>\n );\n\n const labelSizeClasses = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n };\n\n const descriptionSizeClasses = {\n sm: 'text-[10px]',\n md: 'text-xs',\n lg: 'text-sm',\n };\n\n const labelElement = label && (\n <div className=\"flex flex-col gap-0.5\">\n <label\n htmlFor={switchId}\n data-slot=\"switch-label\"\n className={cn(\n 'text-foreground cursor-pointer font-medium select-none',\n labelSizeClasses[size || 'md'],\n disabled && 'cursor-not-allowed opacity-50'\n )}\n >\n {label}\n </label>\n {description && (\n <p\n id={descriptionId}\n data-slot=\"switch-description\"\n className={cn(\n 'text-muted-foreground',\n descriptionSizeClasses[size || 'md']\n )}\n >\n {description}\n </p>\n )}\n </div>\n );\n\n return (\n <div\n data-slot=\"switch-wrapper\"\n className={cn(\n 'flex items-center gap-3',\n labelPosition === 'left' && 'flex-row-reverse'\n )}\n >\n {switchElement}\n {labelElement}\n </div>\n );\n }\n);\n\nSwitch.displayName = 'Switch';\n\nexport { Switch, switchTrackVariants, switchThumbVariants };\n"]}
@@ -63,6 +63,7 @@ var Alert = React__namespace.forwardRef(
63
63
  {
64
64
  ref,
65
65
  role: "alert",
66
+ "data-slot": "alert",
66
67
  className: chunkOR5DRJCW_cjs.cn(
67
68
  alertVariants({ variant }),
68
69
  React__namespace.isValidElement(icon) && "pl-11",
@@ -77,6 +78,7 @@ var Alert = React__namespace.forwardRef(
77
78
  "button",
78
79
  {
79
80
  type: "button",
81
+ "data-slot": "alert-dismiss",
80
82
  onClick: onDismiss,
81
83
  className: chunkOR5DRJCW_cjs.cn(
82
84
  "absolute top-2 right-2 rounded-md p-1",
@@ -98,6 +100,7 @@ var AlertTitle = React__namespace.forwardRef(({ className, children, ...props },
98
100
  "h5",
99
101
  {
100
102
  ref,
103
+ "data-slot": "alert-title",
101
104
  className: chunkOR5DRJCW_cjs.cn("mb-1 leading-none font-semibold tracking-tight", className),
102
105
  ...props,
103
106
  children
@@ -108,6 +111,7 @@ var AlertDescription = React__namespace.forwardRef(({ className, ...props }, ref
108
111
  "p",
109
112
  {
110
113
  ref,
114
+ "data-slot": "alert-description",
111
115
  className: chunkOR5DRJCW_cjs.cn("text-sm [&_p]:leading-relaxed", className),
112
116
  ...props
113
117
  }
@@ -118,5 +122,5 @@ exports.Alert = Alert;
118
122
  exports.AlertDescription = AlertDescription;
119
123
  exports.AlertTitle = AlertTitle;
120
124
  exports.alertVariants = alertVariants;
121
- //# sourceMappingURL=chunk-IY7UQPDO.cjs.map
122
- //# sourceMappingURL=chunk-IY7UQPDO.cjs.map
125
+ //# sourceMappingURL=chunk-WGPMTW36.cjs.map
126
+ //# sourceMappingURL=chunk-WGPMTW36.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Alert/Alert.tsx"],"names":["cva","React","jsxs","cn","jsx","X"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,IAAM,aAAA,GAAgBA,0BAAA;AAAA,EACpB;AAAA,IACE,uCAAA;AAAA,IACA,oEAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,6CAAA;AAAA,QACT,IAAA,EAAM,qHAAA;AAAA,QACN,OAAA,EACE,yGAAA;AAAA,QACF,OAAA,EACE,+GAAA;AAAA,QACF,MAAA,EACE;AAAA;AACJ,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS;AAAA;AACX;AAEJ;AA2BA,IAAM,KAAA,GAAcC,gBAAA,CAAA,UAAA;AAAA,EAClB,CACE;AAAA,IACE,SAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA,GAAe,eAAA;AAAA,IACf,QAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,uBACEC,eAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,OAAA;AAAA,QACL,WAAA,EAAU,OAAA;AAAA,QACV,SAAA,EAAWC,oBAAA;AAAA,UACT,aAAA,CAAc,EAAE,OAAA,EAAS,CAAA;AAAA,UACnBF,gBAAA,CAAA,cAAA,CAAe,IAAI,CAAA,IAAK,OAAA;AAAA,UAC9B,WAAA,IAAe,OAAA;AAAA,UACf;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAMA,gBAAA,CAAA,cAAA,CAAe,IAAI,CAAA,IAAK,IAAA;AAAA,0BAC/BG,cAAA,CAAC,SAAK,QAAA,EAAS,CAAA;AAAA,UACd,WAAA,oBACCA,cAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,WAAA,EAAU,eAAA;AAAA,cACV,OAAA,EAAS,SAAA;AAAA,cACT,SAAA,EAAWD,oBAAA;AAAA,gBACT,uCAAA;AAAA,gBACA,8BAAA;AAAA,gBACA,qGAAA;AAAA,gBACA;AAAA,eACF;AAAA,cACA,YAAA,EAAY,YAAA;AAAA,cAEZ,QAAA,kBAAAC,cAAA,CAACC,aAAA,EAAA,EAAE,IAAA,EAAM,EAAA,EAAI,eAAY,MAAA,EAAO;AAAA;AAAA;AAClC;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF;AAEA,KAAA,CAAM,WAAA,GAAc,OAAA;AAKpB,IAAM,UAAA,GAAmBJ,4BAGvB,CAAC,EAAE,WAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACpCG,cAAA;AAAA,EAAC,IAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,WAAA,EAAU,aAAA;AAAA,IACV,SAAA,EAAWD,oBAAA,CAAG,gDAAA,EAAkD,SAAS,CAAA;AAAA,IACxE,GAAG,KAAA;AAAA,IAEH;AAAA;AACH,CACD;AAED,UAAA,CAAW,WAAA,GAAc,YAAA;AAKzB,IAAM,gBAAA,GAAyBF,4BAG7B,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1BG,cAAA;AAAA,EAAC,GAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,WAAA,EAAU,mBAAA;AAAA,IACV,SAAA,EAAWD,oBAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,IACvD,GAAG;AAAA;AACN,CACD;AAED,gBAAA,CAAiB,WAAA,GAAc,kBAAA","file":"chunk-WGPMTW36.cjs","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { X } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nconst alertVariants = cva(\n [\n 'relative w-full rounded-lg border p-4',\n '[&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-current',\n '[&>svg+div]:translate-y-[-3px]',\n ],\n {\n variants: {\n variant: {\n default: 'bg-background text-foreground border-border',\n info: 'bg-primary-50 text-primary-900 border-primary-200 dark:bg-primary-950 dark:text-primary-100 dark:border-primary-800',\n success:\n 'bg-green-50 text-green-900 border-green-200 dark:bg-green-950 dark:text-green-100 dark:border-green-800',\n warning:\n 'bg-yellow-50 text-yellow-900 border-yellow-200 dark:bg-yellow-950 dark:text-yellow-100 dark:border-yellow-800',\n danger:\n 'bg-red-50 text-red-900 border-red-200 dark:bg-red-950 dark:text-red-100 dark:border-red-800',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\nexport interface AlertProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof alertVariants> {\n /** Icon to display in the alert */\n icon?: React.ReactElement | null;\n /** Whether the alert can be dismissed */\n dismissible?: boolean;\n /** Callback when the alert is dismissed */\n onDismiss?: () => void;\n /** Accessible label for the dismiss button */\n dismissLabel?: string;\n}\n\n/**\n * An alert component for displaying important messages.\n *\n * @example\n * ```tsx\n * <Alert variant=\"success\">\n * <AlertTitle>Success!</AlertTitle>\n * <AlertDescription>Your changes have been saved.</AlertDescription>\n * </Alert>\n * ```\n */\nconst Alert = React.forwardRef<HTMLDivElement, AlertProps>(\n (\n {\n className,\n variant,\n icon,\n dismissible,\n onDismiss,\n dismissLabel = 'Dismiss alert',\n children,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n role=\"alert\"\n data-slot=\"alert\"\n className={cn(\n alertVariants({ variant }),\n React.isValidElement(icon) && 'pl-11',\n dismissible && 'pr-10',\n className\n )}\n {...props}\n >\n {React.isValidElement(icon) && icon}\n <div>{children}</div>\n {dismissible && (\n <button\n type=\"button\"\n data-slot=\"alert-dismiss\"\n onClick={onDismiss}\n className={cn(\n 'absolute top-2 right-2 rounded-md p-1',\n 'opacity-70 hover:opacity-100',\n 'focus-visible:ring-ring focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none',\n 'transition-opacity'\n )}\n aria-label={dismissLabel}\n >\n <X size={16} aria-hidden=\"true\" />\n </button>\n )}\n </div>\n );\n }\n);\n\nAlert.displayName = 'Alert';\n\n/**\n * Title for an Alert component.\n */\nconst AlertTitle = React.forwardRef<\n globalThis.HTMLHeadingElement,\n React.HTMLAttributes<globalThis.HTMLHeadingElement>\n>(({ className, children, ...props }, ref) => (\n <h5\n ref={ref}\n data-slot=\"alert-title\"\n className={cn('mb-1 leading-none font-semibold tracking-tight', className)}\n {...props}\n >\n {children}\n </h5>\n));\n\nAlertTitle.displayName = 'AlertTitle';\n\n/**\n * Description text for an Alert component.\n */\nconst AlertDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n data-slot=\"alert-description\"\n className={cn('text-sm [&_p]:leading-relaxed', className)}\n {...props}\n />\n));\n\nAlertDescription.displayName = 'AlertDescription';\n\nexport { Alert, AlertTitle, AlertDescription, alertVariants };\n"]}
@@ -1,6 +1,33 @@
1
1
  // src/brands/types.ts
2
2
  function generateBrandCSS(brand) {
3
3
  const { colors, typography, borderRadius, boxShadow } = brand;
4
+ const scaleNames = [
5
+ "primary",
6
+ "secondary",
7
+ "neutral",
8
+ "destructive",
9
+ "success",
10
+ "warning",
11
+ "info"
12
+ ];
13
+ const scaleBlocks = scaleNames.filter(
14
+ (name) => name in colors && typeof colors[name] === "object" && colors[name] !== void 0
15
+ ).map((name) => {
16
+ const scale = colors[name];
17
+ const label = name.charAt(0).toUpperCase() + name.slice(1);
18
+ return ` /* ${label} Color Scale */
19
+ --mieweb-${name}-50: ${scale[50]};
20
+ --mieweb-${name}-100: ${scale[100]};
21
+ --mieweb-${name}-200: ${scale[200]};
22
+ --mieweb-${name}-300: ${scale[300]};
23
+ --mieweb-${name}-400: ${scale[400]};
24
+ --mieweb-${name}-500: ${scale[500]};
25
+ --mieweb-${name}-600: ${scale[600]};
26
+ --mieweb-${name}-700: ${scale[700]};
27
+ --mieweb-${name}-800: ${scale[800]};
28
+ --mieweb-${name}-900: ${scale[900]};
29
+ --mieweb-${name}-950: ${scale[950]};`;
30
+ }).join("\n\n");
4
31
  return `/**
5
32
  * ${brand.displayName} Brand Theme
6
33
  * Generated by @mieweb/ui
@@ -12,18 +39,7 @@ function generateBrandCSS(brand) {
12
39
  ============================================ */
13
40
 
14
41
  :root {
15
- /* Primary Color Scale */
16
- --mieweb-primary-50: ${colors.primary[50]};
17
- --mieweb-primary-100: ${colors.primary[100]};
18
- --mieweb-primary-200: ${colors.primary[200]};
19
- --mieweb-primary-300: ${colors.primary[300]};
20
- --mieweb-primary-400: ${colors.primary[400]};
21
- --mieweb-primary-500: ${colors.primary[500]};
22
- --mieweb-primary-600: ${colors.primary[600]};
23
- --mieweb-primary-700: ${colors.primary[700]};
24
- --mieweb-primary-800: ${colors.primary[800]};
25
- --mieweb-primary-900: ${colors.primary[900]};
26
- --mieweb-primary-950: ${colors.primary[950]};
42
+ ${scaleBlocks}
27
43
 
28
44
  /* Light Mode Semantic Colors */
29
45
  --mieweb-background: ${colors.light.background};
@@ -84,12 +100,26 @@ function generateBrandCSS(brand) {
84
100
  }
85
101
  function generateTailwindTheme(brand) {
86
102
  const { colors, typography, borderRadius, boxShadow } = brand;
103
+ const colorConfig = {
104
+ primary: colors.primary,
105
+ // Expose brand colors under the brand name for semantic usage
106
+ [brand.name]: colors.primary
107
+ };
108
+ const optionalScales = [
109
+ "secondary",
110
+ "neutral",
111
+ "destructive",
112
+ "success",
113
+ "warning",
114
+ "info"
115
+ ];
116
+ for (const scale of optionalScales) {
117
+ if (colors[scale]) {
118
+ colorConfig[scale] = colors[scale];
119
+ }
120
+ }
87
121
  return {
88
- colors: {
89
- primary: colors.primary,
90
- // Expose brand colors under the brand name for semantic usage
91
- [brand.name]: colors.primary
92
- },
122
+ colors: colorConfig,
93
123
  fontFamily: {
94
124
  sans: typography.fontFamily.sans,
95
125
  ...typography.fontFamily.mono ? { mono: typography.fontFamily.mono } : {}
@@ -120,5 +150,5 @@ function createBrandPreset(brand) {
120
150
  }
121
151
 
122
152
  export { createBrandPreset, generateBrandCSS, generateTailwindTheme };
123
- //# sourceMappingURL=chunk-SOFX4T7M.js.map
124
- //# sourceMappingURL=chunk-SOFX4T7M.js.map
153
+ //# sourceMappingURL=chunk-WOYUQ4AT.js.map
154
+ //# sourceMappingURL=chunk-WOYUQ4AT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/brands/types.ts"],"names":[],"mappings":"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","file":"chunk-WOYUQ4AT.js","sourcesContent":["/**\n * @mieweb/ui Brand System Types\n *\n * This module provides type definitions and utilities for brand themes.\n * Brands define colors, typography, spacing, and other design tokens that\n * can be applied to @mieweb/ui components.\n */\n\n// ============================================================================\n// Type Definitions\n// ============================================================================\n\n/**\n * Primary color scale (50-950) following Tailwind conventions.\n */\nexport interface ColorScale {\n 50: string;\n 100: string;\n 200: string;\n 300: string;\n 400: string;\n 500: string;\n 600: string;\n 700: string;\n 800: string;\n 900: string;\n 950: string;\n}\n\n/**\n * Semantic colors for a specific color mode (light or dark).\n */\nexport interface SemanticColors {\n /** Page background color */\n background: string;\n /** Primary text color */\n foreground: string;\n /** Card/panel background */\n card: string;\n /** Card text color */\n cardForeground: string;\n /** Muted/subtle background */\n muted: string;\n /** Muted/secondary text */\n mutedForeground: string;\n /** Border color */\n border: string;\n /** Input border color */\n input: string;\n /** Focus ring color */\n ring: string;\n /** Destructive/error color */\n destructive: string;\n /** Text on destructive backgrounds */\n destructiveForeground: string;\n /** Success color */\n success: string;\n /** Text on success backgrounds */\n successForeground: string;\n /** Warning color */\n warning: string;\n /** Text on warning backgrounds */\n warningForeground: string;\n}\n\n/**\n * Complete color configuration for a brand.\n */\nexport interface BrandColors {\n /** Primary brand color scale */\n primary: ColorScale;\n /** Secondary color scale (optional — falls back to library defaults) */\n secondary?: ColorScale;\n /** Neutral / gray color scale (optional — falls back to library defaults) */\n neutral?: ColorScale;\n /** Destructive / error color scale (optional — falls back to library defaults) */\n destructive?: ColorScale;\n /** Success color scale (optional — falls back to library defaults) */\n success?: ColorScale;\n /** Warning color scale (optional — falls back to library defaults) */\n warning?: ColorScale;\n /** Info color scale (optional — falls back to library defaults) */\n info?: ColorScale;\n /** Light mode semantic colors */\n light: SemanticColors;\n /** Dark mode semantic colors */\n dark: SemanticColors;\n}\n\n/**\n * Typography configuration for a brand.\n */\nexport interface BrandTypography {\n /** Font family stack for body text */\n fontFamily: {\n sans: string[];\n mono?: string[];\n };\n /** Base font size (usually 16px) */\n baseFontSize?: string;\n}\n\n/**\n * Border radius configuration.\n */\nexport interface BrandBorderRadius {\n none: string;\n sm: string;\n md: string;\n lg: string;\n xl: string;\n '2xl': string;\n full: string;\n}\n\n/**\n * Box shadow configuration.\n */\nexport interface BrandBoxShadow {\n card: string;\n dropdown: string;\n modal: string;\n}\n\n/**\n * Complete brand configuration.\n */\nexport interface BrandConfig {\n /** Unique identifier (lowercase, no spaces) */\n name: string;\n /** Human-readable display name */\n displayName: string;\n /** Brand description */\n description?: string;\n /** Color configuration */\n colors: BrandColors;\n /** Typography settings */\n typography: BrandTypography;\n /** Border radius scale */\n borderRadius: BrandBorderRadius;\n /** Box shadow definitions */\n boxShadow: BrandBoxShadow;\n}\n\n// ============================================================================\n// CSS Generation\n// ============================================================================\n\n/**\n * Generate CSS custom properties from a brand configuration.\n * This creates a standalone CSS file that can be imported into any project.\n */\nexport function generateBrandCSS(brand: BrandConfig): string {\n const { colors, typography, borderRadius, boxShadow } = brand;\n\n // Collect all color scales (primary + any optional scales)\n const scaleNames = [\n 'primary',\n 'secondary',\n 'neutral',\n 'destructive',\n 'success',\n 'warning',\n 'info',\n ] as const;\n\n const scaleBlocks = scaleNames\n .filter(\n (name) =>\n name in colors &&\n typeof colors[name] === 'object' &&\n colors[name] !== undefined\n )\n .map((name) => {\n const scale = colors[name] as ColorScale;\n const label = name.charAt(0).toUpperCase() + name.slice(1);\n return ` /* ${label} Color Scale */\n --mieweb-${name}-50: ${scale[50]};\n --mieweb-${name}-100: ${scale[100]};\n --mieweb-${name}-200: ${scale[200]};\n --mieweb-${name}-300: ${scale[300]};\n --mieweb-${name}-400: ${scale[400]};\n --mieweb-${name}-500: ${scale[500]};\n --mieweb-${name}-600: ${scale[600]};\n --mieweb-${name}-700: ${scale[700]};\n --mieweb-${name}-800: ${scale[800]};\n --mieweb-${name}-900: ${scale[900]};\n --mieweb-${name}-950: ${scale[950]};`;\n })\n .join('\\n\\n');\n\n return `/**\n * ${brand.displayName} Brand Theme\n * Generated by @mieweb/ui\n * ${brand.description || ''}\n */\n\n/* ============================================\n ${brand.displayName} Design Tokens\n ============================================ */\n\n:root {\n${scaleBlocks}\n\n /* Light Mode Semantic Colors */\n --mieweb-background: ${colors.light.background};\n --mieweb-foreground: ${colors.light.foreground};\n --mieweb-card: ${colors.light.card};\n --mieweb-card-foreground: ${colors.light.cardForeground};\n --mieweb-muted: ${colors.light.muted};\n --mieweb-muted-foreground: ${colors.light.mutedForeground};\n --mieweb-border: ${colors.light.border};\n --mieweb-input: ${colors.light.input};\n --mieweb-ring: ${colors.light.ring};\n --mieweb-destructive: ${colors.light.destructive};\n --mieweb-destructive-foreground: ${colors.light.destructiveForeground};\n --mieweb-success: ${colors.light.success};\n --mieweb-success-foreground: ${colors.light.successForeground};\n --mieweb-warning: ${colors.light.warning};\n --mieweb-warning-foreground: ${colors.light.warningForeground};\n\n /* Typography */\n --mieweb-font-sans: ${typography.fontFamily.sans.map((f) => (f.includes(' ') ? `\"${f}\"` : f)).join(', ')};\n ${typography.fontFamily.mono ? `--mieweb-font-mono: ${typography.fontFamily.mono.map((f) => (f.includes(' ') ? `\"${f}\"` : f)).join(', ')};` : ''}\n\n /* Border Radius */\n --mieweb-radius-none: ${borderRadius.none};\n --mieweb-radius-sm: ${borderRadius.sm};\n --mieweb-radius-md: ${borderRadius.md};\n --mieweb-radius-lg: ${borderRadius.lg};\n --mieweb-radius-xl: ${borderRadius.xl};\n --mieweb-radius-2xl: ${borderRadius['2xl']};\n --mieweb-radius-full: ${borderRadius.full};\n\n /* Shadows */\n --mieweb-shadow-card: ${boxShadow.card};\n --mieweb-shadow-dropdown: ${boxShadow.dropdown};\n --mieweb-shadow-modal: ${boxShadow.modal};\n}\n\n/* Dark Mode */\n[data-theme=\"dark\"],\n.dark {\n --mieweb-background: ${colors.dark.background};\n --mieweb-foreground: ${colors.dark.foreground};\n --mieweb-card: ${colors.dark.card};\n --mieweb-card-foreground: ${colors.dark.cardForeground};\n --mieweb-muted: ${colors.dark.muted};\n --mieweb-muted-foreground: ${colors.dark.mutedForeground};\n --mieweb-border: ${colors.dark.border};\n --mieweb-input: ${colors.dark.input};\n --mieweb-ring: ${colors.dark.ring};\n --mieweb-destructive: ${colors.dark.destructive};\n --mieweb-destructive-foreground: ${colors.dark.destructiveForeground};\n --mieweb-success: ${colors.dark.success};\n --mieweb-success-foreground: ${colors.dark.successForeground};\n --mieweb-warning: ${colors.dark.warning};\n --mieweb-warning-foreground: ${colors.dark.warningForeground};\n}\n`;\n}\n\n// ============================================================================\n// Tailwind Theme Generation\n// ============================================================================\n\n/**\n * Generate Tailwind CSS theme configuration from a brand.\n * Use this in your tailwind.config.js to apply the brand.\n */\nexport function generateTailwindTheme(brand: BrandConfig) {\n const { colors, typography, borderRadius, boxShadow } = brand;\n\n // Build color config including all provided optional scales\n const colorConfig: Record<string, ColorScale> = {\n primary: colors.primary,\n // Expose brand colors under the brand name for semantic usage\n [brand.name]: colors.primary,\n };\n\n const optionalScales = [\n 'secondary',\n 'neutral',\n 'destructive',\n 'success',\n 'warning',\n 'info',\n ] as const;\n\n for (const scale of optionalScales) {\n if (colors[scale]) {\n colorConfig[scale] = colors[scale];\n }\n }\n\n return {\n colors: colorConfig,\n fontFamily: {\n sans: typography.fontFamily.sans,\n ...(typography.fontFamily.mono\n ? { mono: typography.fontFamily.mono }\n : {}),\n },\n borderRadius: {\n none: borderRadius.none,\n sm: borderRadius.sm,\n md: borderRadius.md,\n lg: borderRadius.lg,\n xl: borderRadius.xl,\n '2xl': borderRadius['2xl'],\n full: borderRadius.full,\n },\n boxShadow: {\n card: boxShadow.card,\n dropdown: boxShadow.dropdown,\n modal: boxShadow.modal,\n },\n };\n}\n\n/**\n * Generate a complete Tailwind preset for a brand.\n * This includes the mieweb/ui base preset plus brand-specific overrides.\n */\nexport function createBrandPreset(brand: BrandConfig) {\n return {\n darkMode: ['class', '[data-theme=\"dark\"]'] as const,\n theme: {\n extend: generateTailwindTheme(brand),\n },\n };\n}\n"]}
@@ -11,7 +11,7 @@ var scrollLockState = {
11
11
  originalOverflow: null};
12
12
  var modalOverlayVariants = cva(
13
13
  [
14
- "fixed inset-0 z-50",
14
+ "fixed inset-0",
15
15
  "bg-black/50 backdrop-blur-sm",
16
16
  "data-[state=open]:animate-in data-[state=open]:fade-in-0",
17
17
  "data-[state=closed]:animate-out data-[state=closed]:fade-out-0"
@@ -23,10 +23,17 @@ var modalOverlayVariants = cva(
23
23
  );
24
24
  var modalContentVariants = cva(
25
25
  [
26
- "fixed left-1/2 top-1/2 z-50",
27
- "-translate-x-1/2 -translate-y-1/2",
28
- "w-full bg-card text-card-foreground",
29
- "border border-border rounded-xl shadow-lg",
26
+ "relative w-full bg-card text-card-foreground",
27
+ "border border-border shadow-lg",
28
+ // Full-screen on mobile, rounded on larger screens
29
+ "rounded-none sm:rounded-xl",
30
+ "flex flex-col",
31
+ // Full viewport height on mobile, constrained on larger screens
32
+ "max-h-dvh sm:max-h-[calc(100dvh-2rem)]",
33
+ "min-h-dvh sm:min-h-0",
34
+ // If a <form> is used as a direct child (wrapping ModalBody + ModalFooter),
35
+ // make it participate in the flex column layout so overflow constraints work.
36
+ "[&>form]:flex [&>form]:flex-col [&>form]:flex-1 [&>form]:min-h-0",
30
37
  "focus:outline-none",
31
38
  "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
32
39
  "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95",
@@ -35,13 +42,13 @@ var modalContentVariants = cva(
35
42
  {
36
43
  variants: {
37
44
  size: {
38
- sm: "max-w-sm",
39
- md: "max-w-md",
40
- lg: "max-w-lg",
41
- xl: "max-w-xl",
42
- "2xl": "max-w-2xl",
43
- "3xl": "max-w-3xl",
44
- "4xl": "max-w-4xl",
45
+ sm: "sm:max-w-sm",
46
+ md: "sm:max-w-md",
47
+ lg: "sm:max-w-lg",
48
+ xl: "sm:max-w-xl",
49
+ "2xl": "sm:max-w-2xl",
50
+ "3xl": "sm:max-w-3xl",
51
+ "4xl": "sm:max-w-4xl",
45
52
  full: "max-w-[calc(100vw-2rem)]"
46
53
  }
47
54
  },
@@ -107,26 +114,34 @@ function Modal({
107
114
  {
108
115
  className: cn(modalOverlayVariants()),
109
116
  "data-state": open ? "open" : "closed",
110
- onClick: handleOverlayClick,
111
117
  "aria-hidden": "true"
112
118
  }
113
119
  ),
114
- /* @__PURE__ */ jsx(
120
+ /* @__PURE__ */ jsx("div", { className: "fixed inset-0 overflow-y-auto", children: /* @__PURE__ */ jsx(
115
121
  "div",
116
122
  {
117
- ref: focusTrapRef,
118
- role: "dialog",
119
- "aria-modal": "true",
120
- "aria-label": ariaLabel,
121
- "aria-labelledby": ariaLabelledBy || `${modalId}-title`,
122
- "aria-describedby": ariaDescribedBy,
123
- id: modalId,
124
- tabIndex: -1,
125
- "data-state": open ? "open" : "closed",
126
- className: cn(modalContentVariants({ size }), className),
127
- children
123
+ className: "flex min-h-full items-center justify-center p-0 sm:p-4",
124
+ onClick: handleOverlayClick,
125
+ children: /* @__PURE__ */ jsx(
126
+ "div",
127
+ {
128
+ ref: focusTrapRef,
129
+ role: "dialog",
130
+ "aria-modal": "true",
131
+ "aria-label": ariaLabel,
132
+ "aria-labelledby": ariaLabelledBy || `${modalId}-title`,
133
+ "aria-describedby": ariaDescribedBy,
134
+ id: modalId,
135
+ tabIndex: -1,
136
+ "data-state": open ? "open" : "closed",
137
+ "data-slot": "modal",
138
+ className: cn(modalContentVariants({ size }), className),
139
+ onClick: (e) => e.stopPropagation(),
140
+ children
141
+ }
142
+ )
128
143
  }
129
- )
144
+ ) })
130
145
  ] })
131
146
  }
132
147
  );
@@ -147,8 +162,9 @@ var ModalHeader = React.forwardRef(
147
162
  "div",
148
163
  {
149
164
  ref,
165
+ "data-slot": "modal-header",
150
166
  className: cn(
151
- "flex items-center justify-between",
167
+ "flex shrink-0 items-center justify-between",
152
168
  "border-border border-b px-6 py-4",
153
169
  className
154
170
  ),
@@ -165,6 +181,7 @@ var ModalTitle = React.forwardRef(
165
181
  {
166
182
  ref,
167
183
  id: `${modalId}-title`,
184
+ "data-slot": "modal-title",
168
185
  className: cn(
169
186
  "text-lg leading-none font-semibold tracking-tight",
170
187
  className
@@ -194,6 +211,7 @@ var ModalClose = React.forwardRef(
194
211
  ref,
195
212
  type: "button",
196
213
  onClick: handleClick,
214
+ "data-slot": "modal-close",
197
215
  className: cn(
198
216
  "inline-flex h-8 w-8 items-center justify-center rounded-lg",
199
217
  "text-muted-foreground hover:text-foreground",
@@ -210,7 +228,15 @@ var ModalClose = React.forwardRef(
210
228
  );
211
229
  ModalClose.displayName = "ModalClose";
212
230
  var ModalBody = React.forwardRef(
213
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("px-6 py-4", className), ...props })
231
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
232
+ "div",
233
+ {
234
+ ref,
235
+ "data-slot": "modal-body",
236
+ className: cn("min-h-0 flex-1 overflow-y-auto px-6 py-4", className),
237
+ ...props
238
+ }
239
+ )
214
240
  );
215
241
  ModalBody.displayName = "ModalBody";
216
242
  var ModalFooter = React.forwardRef(
@@ -218,8 +244,9 @@ var ModalFooter = React.forwardRef(
218
244
  "div",
219
245
  {
220
246
  ref,
247
+ "data-slot": "modal-footer",
221
248
  className: cn(
222
- "flex items-center justify-end gap-3",
249
+ "flex shrink-0 items-center justify-end gap-3",
223
250
  "border-border border-t px-6 py-4",
224
251
  className
225
252
  ),
@@ -251,5 +278,5 @@ function CloseIcon() {
251
278
  }
252
279
 
253
280
  export { Modal, ModalBody, ModalClose, ModalFooter, ModalHeader, ModalTitle, modalContentVariants, modalOverlayVariants };
254
- //# sourceMappingURL=chunk-SD44QJIP.js.map
255
- //# sourceMappingURL=chunk-SD44QJIP.js.map
281
+ //# sourceMappingURL=chunk-WTDCNXZO.js.map
282
+ //# sourceMappingURL=chunk-WTDCNXZO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Modal/Modal.tsx"],"names":[],"mappings":"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","file":"chunk-WTDCNXZO.js","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { isStorybookDocsMode } from '../../utils/environment';\nimport { useFocusTrap } from '../../hooks/useFocusTrap';\nimport { useEscapeKey } from '../../hooks/useEscapeKey';\n\n/**\n * Modal scroll lock state manager.\n * Uses a singleton pattern with ref-like storage to track open modals\n * and manage body scroll locking across multiple modal instances.\n * Includes reset capability for testing environments.\n */\nconst scrollLockState = {\n count: 0,\n originalOverflow: null as string | null,\n reset() {\n this.count = 0;\n this.originalOverflow = null;\n },\n};\n\n// Export for testing environments\nexport const __resetScrollLockState = () => scrollLockState.reset();\n\nconst modalOverlayVariants = cva(\n [\n 'fixed inset-0',\n 'bg-black/50 backdrop-blur-sm',\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0',\n ],\n {\n variants: {},\n defaultVariants: {},\n }\n);\n\nconst modalContentVariants = cva(\n [\n 'relative w-full bg-card text-card-foreground',\n 'border border-border shadow-lg',\n // Full-screen on mobile, rounded on larger screens\n 'rounded-none sm:rounded-xl',\n 'flex flex-col',\n // Full viewport height on mobile, constrained on larger screens\n 'max-h-dvh sm:max-h-[calc(100dvh-2rem)]',\n 'min-h-dvh sm:min-h-0',\n // If a <form> is used as a direct child (wrapping ModalBody + ModalFooter),\n // make it participate in the flex column layout so overflow constraints work.\n '[&>form]:flex [&>form]:flex-col [&>form]:flex-1 [&>form]:min-h-0',\n 'focus:outline-none',\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n 'duration-200',\n ],\n {\n variants: {\n size: {\n sm: 'sm:max-w-sm',\n md: 'sm:max-w-md',\n lg: 'sm:max-w-lg',\n xl: 'sm:max-w-xl',\n '2xl': 'sm:max-w-2xl',\n '3xl': 'sm:max-w-3xl',\n '4xl': 'sm:max-w-4xl',\n full: 'max-w-[calc(100vw-2rem)]',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\nexport interface ModalProps extends VariantProps<typeof modalContentVariants> {\n /** Whether the modal is open */\n open: boolean;\n /** Callback when the modal should close */\n onOpenChange: (open: boolean) => void;\n /** Modal content */\n children: React.ReactNode;\n /** Whether to close when clicking the overlay */\n closeOnOverlayClick?: boolean;\n /** Whether to close when pressing Escape */\n closeOnEscape?: boolean;\n /** Additional class name for the modal content */\n className?: string;\n /** ID for the modal, used for accessibility */\n id?: string;\n /** Accessible label for the modal */\n 'aria-label'?: string;\n /** ID of the element that labels the modal */\n 'aria-labelledby'?: string;\n /** ID of the element that describes the modal */\n 'aria-describedby'?: string;\n}\n\n/**\n * An accessible modal/dialog component.\n *\n * @example\n * ```tsx\n * <Modal open={isOpen} onOpenChange={setIsOpen} size=\"lg\">\n * <ModalHeader>\n * <ModalTitle>Confirm Action</ModalTitle>\n * <ModalClose />\n * </ModalHeader>\n * <ModalBody>\n * Are you sure you want to continue?\n * </ModalBody>\n * <ModalFooter>\n * <Button variant=\"secondary\" onClick={() => setIsOpen(false)}>Cancel</Button>\n * <Button onClick={handleConfirm}>Confirm</Button>\n * </ModalFooter>\n * </Modal>\n * ```\n */\nfunction Modal({\n open,\n onOpenChange,\n children,\n size,\n closeOnOverlayClick = true,\n closeOnEscape = true,\n className,\n id,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n}: ModalProps) {\n const generatedId = React.useId();\n const modalId = id || generatedId;\n\n // Focus trap (only active when modal is open)\n const focusTrapRef = useFocusTrap<HTMLDivElement>(open);\n\n // Handle escape key\n useEscapeKey(() => {\n if (closeOnEscape && open) {\n onOpenChange(false);\n }\n }, open);\n\n // Handle overlay click\n const handleOverlayClick = React.useCallback(\n (e: React.MouseEvent) => {\n if (closeOnOverlayClick && e.target === e.currentTarget) {\n onOpenChange(false);\n }\n },\n [closeOnOverlayClick, onOpenChange]\n );\n\n // Prevent body scroll when modal is open (handles multiple modals)\n // Skip scroll lock in Storybook docs mode where multiple stories render inline\n React.useEffect(() => {\n // Skip scroll lock entirely in Storybook docs mode\n if (!open || isStorybookDocsMode()) {\n return undefined;\n }\n\n scrollLockState.count++;\n // Only capture and set overflow when first modal opens\n if (scrollLockState.count === 1) {\n scrollLockState.originalOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n }\n\n return () => {\n scrollLockState.count--;\n // Only restore overflow when last modal closes\n if (\n scrollLockState.count === 0 &&\n scrollLockState.originalOverflow !== null\n ) {\n document.body.style.overflow = scrollLockState.originalOverflow;\n scrollLockState.originalOverflow = null;\n }\n };\n }, [open]);\n\n if (!open) return null;\n\n return (\n <ModalContext.Provider\n value={{ onClose: () => onOpenChange(false), modalId }}\n >\n {/* Portal to body */}\n <div className=\"fixed inset-0 z-50\">\n {/* Overlay backdrop */}\n <div\n className={cn(modalOverlayVariants())}\n data-state={open ? 'open' : 'closed'}\n aria-hidden=\"true\"\n />\n {/* Scrollable centering container — click outside to close */}\n <div className=\"fixed inset-0 overflow-y-auto\">\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */}\n <div\n className=\"flex min-h-full items-center justify-center p-0 sm:p-4\"\n onClick={handleOverlayClick}\n >\n {/* Content */}\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-noninteractive-element-interactions */}\n <div\n ref={focusTrapRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy || `${modalId}-title`}\n aria-describedby={ariaDescribedBy}\n id={modalId}\n tabIndex={-1}\n data-state={open ? 'open' : 'closed'}\n data-slot=\"modal\"\n className={cn(modalContentVariants({ size }), className)}\n onClick={(e) => e.stopPropagation()}\n >\n {children}\n </div>\n </div>\n </div>\n </div>\n </ModalContext.Provider>\n );\n}\n\nModal.displayName = 'Modal';\n\n// ============================================================================\n// Modal Context\n// ============================================================================\n\ninterface ModalContextValue {\n onClose: () => void;\n modalId: string;\n}\n\nconst ModalContext = React.createContext<ModalContextValue | undefined>(\n undefined\n);\n\nfunction useModalContext() {\n const context = React.useContext(ModalContext);\n if (!context) {\n throw new Error('Modal components must be used within a Modal');\n }\n return context;\n}\n\n// ============================================================================\n// Modal Header\n// ============================================================================\n\nexport type ModalHeaderProps = React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * Header section of a Modal.\n */\nconst ModalHeader = React.forwardRef<HTMLDivElement, ModalHeaderProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"modal-header\"\n className={cn(\n 'flex shrink-0 items-center justify-between',\n 'border-border border-b px-6 py-4',\n className\n )}\n {...props}\n />\n )\n);\n\nModalHeader.displayName = 'ModalHeader';\n\n// ============================================================================\n// Modal Title\n// ============================================================================\n\nexport type ModalTitleProps = React.HTMLAttributes<HTMLHeadingElement>;\n\n/**\n * Title for a Modal.\n */\nconst ModalTitle = React.forwardRef<HTMLHeadingElement, ModalTitleProps>(\n ({ className, children, ...props }, ref) => {\n const { modalId } = useModalContext();\n return (\n <h2\n ref={ref}\n id={`${modalId}-title`}\n data-slot=\"modal-title\"\n className={cn(\n 'text-lg leading-none font-semibold tracking-tight',\n className\n )}\n {...props}\n >\n {children}\n </h2>\n );\n }\n);\n\nModalTitle.displayName = 'ModalTitle';\n\n// ============================================================================\n// Modal Close Button\n// ============================================================================\n\nexport type ModalCloseProps = React.ButtonHTMLAttributes<HTMLButtonElement>;\n\n/**\n * Close button for a Modal.\n */\nconst ModalClose = React.forwardRef<HTMLButtonElement, ModalCloseProps>(\n ({ className, children, onClick, ...props }, ref) => {\n const { onClose } = useModalContext();\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n if (!e.defaultPrevented) {\n onClose();\n }\n },\n [onClick, onClose]\n );\n\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={handleClick}\n data-slot=\"modal-close\"\n className={cn(\n 'inline-flex h-8 w-8 items-center justify-center rounded-lg',\n 'text-muted-foreground hover:text-foreground',\n 'hover:bg-muted transition-colors',\n 'focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none',\n className\n )}\n aria-label=\"Close\"\n {...props}\n >\n {children || <CloseIcon />}\n </button>\n );\n }\n);\n\nModalClose.displayName = 'ModalClose';\n\n// ============================================================================\n// Modal Body\n// ============================================================================\n\nexport type ModalBodyProps = React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * Main content area of a Modal.\n */\nconst ModalBody = React.forwardRef<HTMLDivElement, ModalBodyProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"modal-body\"\n className={cn('min-h-0 flex-1 overflow-y-auto px-6 py-4', className)}\n {...props}\n />\n )\n);\n\nModalBody.displayName = 'ModalBody';\n\n// ============================================================================\n// Modal Footer\n// ============================================================================\n\nexport type ModalFooterProps = React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * Footer section of a Modal, typically for action buttons.\n */\nconst ModalFooter = React.forwardRef<HTMLDivElement, ModalFooterProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"modal-footer\"\n className={cn(\n 'flex shrink-0 items-center justify-end gap-3',\n 'border-border border-t px-6 py-4',\n className\n )}\n {...props}\n />\n )\n);\n\nModalFooter.displayName = 'ModalFooter';\n\n// ============================================================================\n// Close Icon\n// ============================================================================\n\nfunction CloseIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n );\n}\n\nexport {\n Modal,\n ModalHeader,\n ModalTitle,\n ModalClose,\n ModalBody,\n ModalFooter,\n modalContentVariants,\n modalOverlayVariants,\n};\n"]}
@@ -0,0 +1,124 @@
1
+ import { cn } from './chunk-F3SOEIN2.js';
2
+ import * as React from 'react';
3
+ import { cva } from 'class-variance-authority';
4
+ import { jsxs, jsx } from 'react/jsx-runtime';
5
+
6
+ var inputVariants = cva(
7
+ [
8
+ "w-full px-3 py-2",
9
+ "border border-input rounded-lg",
10
+ "bg-background text-foreground",
11
+ "placeholder:text-muted-foreground",
12
+ "transition-colors duration-200",
13
+ "focus:outline-none focus:ring-2 focus:ring-ring focus:border-transparent",
14
+ "disabled:cursor-not-allowed disabled:opacity-50"
15
+ ],
16
+ {
17
+ variants: {
18
+ size: {
19
+ sm: "h-8 text-sm",
20
+ md: "h-10 text-base",
21
+ lg: "h-12 text-lg"
22
+ },
23
+ hasError: {
24
+ true: "border-destructive focus:ring-destructive",
25
+ false: ""
26
+ }
27
+ },
28
+ defaultVariants: {
29
+ size: "md",
30
+ hasError: false
31
+ }
32
+ }
33
+ );
34
+ var Input = React.forwardRef(
35
+ ({
36
+ className,
37
+ size,
38
+ hasError,
39
+ error,
40
+ helperText,
41
+ label,
42
+ hideLabel,
43
+ required,
44
+ disabled,
45
+ id,
46
+ "aria-describedby": ariaDescribedBy,
47
+ ...props
48
+ }, ref) => {
49
+ const generatedId = React.useId();
50
+ const inputId = id || generatedId;
51
+ const errorId = `${inputId}-error`;
52
+ const helperId = `${inputId}-helper`;
53
+ const describedByIds = [
54
+ error ? errorId : null,
55
+ helperText && !error ? helperId : null,
56
+ ariaDescribedBy
57
+ ].filter(Boolean).join(" ");
58
+ return /* @__PURE__ */ jsxs(
59
+ "div",
60
+ {
61
+ "data-slot": "input-wrapper",
62
+ className: cn("flex flex-col gap-1.5", disabled && "opacity-50"),
63
+ children: [
64
+ label && /* @__PURE__ */ jsxs(
65
+ "label",
66
+ {
67
+ "data-slot": "input-label",
68
+ htmlFor: inputId,
69
+ className: cn(
70
+ "text-foreground text-sm font-medium",
71
+ hideLabel && "sr-only"
72
+ ),
73
+ children: [
74
+ label,
75
+ required && /* @__PURE__ */ jsx("span", { className: "text-destructive ml-1", "aria-hidden": "true", children: "*" })
76
+ ]
77
+ }
78
+ ),
79
+ /* @__PURE__ */ jsx(
80
+ "input",
81
+ {
82
+ "data-slot": "input",
83
+ id: inputId,
84
+ ref,
85
+ className: cn(
86
+ inputVariants({ size, hasError: hasError || !!error }),
87
+ className
88
+ ),
89
+ "aria-invalid": hasError || !!error,
90
+ "aria-describedby": describedByIds || void 0,
91
+ required,
92
+ disabled,
93
+ ...props
94
+ }
95
+ ),
96
+ error && /* @__PURE__ */ jsx(
97
+ "p",
98
+ {
99
+ id: errorId,
100
+ "data-slot": "input-error",
101
+ className: "text-destructive text-sm",
102
+ role: "alert",
103
+ children: error
104
+ }
105
+ ),
106
+ helperText && !error && /* @__PURE__ */ jsx(
107
+ "p",
108
+ {
109
+ id: helperId,
110
+ "data-slot": "input-helper",
111
+ className: "text-muted-foreground text-sm",
112
+ children: helperText
113
+ }
114
+ )
115
+ ]
116
+ }
117
+ );
118
+ }
119
+ );
120
+ Input.displayName = "Input";
121
+
122
+ export { Input, inputVariants };
123
+ //# sourceMappingURL=chunk-XHESCAUE.js.map
124
+ //# sourceMappingURL=chunk-XHESCAUE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Input/Input.tsx"],"names":[],"mappings":"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","file":"chunk-XHESCAUE.js","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\nconst inputVariants = cva(\n [\n 'w-full px-3 py-2',\n 'border border-input rounded-lg',\n 'bg-background text-foreground',\n 'placeholder:text-muted-foreground',\n 'transition-colors duration-200',\n 'focus:outline-none focus:ring-2 focus:ring-ring focus:border-transparent',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n ],\n {\n variants: {\n size: {\n sm: 'h-8 text-sm',\n md: 'h-10 text-base',\n lg: 'h-12 text-lg',\n },\n hasError: {\n true: 'border-destructive focus:ring-destructive',\n false: '',\n },\n },\n defaultVariants: {\n size: 'md',\n hasError: false,\n },\n }\n);\n\nexport interface InputProps\n extends\n Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>,\n VariantProps<typeof inputVariants> {\n /** Error message to display below the input */\n error?: string;\n /** Helper text to display below the input */\n helperText?: string;\n /** Label for the input */\n label?: string;\n /** Whether the label should be visually hidden (still accessible) */\n hideLabel?: boolean;\n /** Whether the input is required */\n required?: boolean;\n}\n\n/**\n * A styled input component with support for labels, errors, and helper text.\n *\n * @example\n * ```tsx\n * <Input label=\"Email\" type=\"email\" placeholder=\"you@example.com\" />\n * <Input label=\"Password\" type=\"password\" error=\"Password is required\" hasError />\n * ```\n */\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n size,\n hasError,\n error,\n helperText,\n label,\n hideLabel,\n required,\n disabled,\n id,\n 'aria-describedby': ariaDescribedBy,\n ...props\n },\n ref\n ) => {\n const generatedId = React.useId();\n const inputId = id || generatedId;\n const errorId = `${inputId}-error`;\n const helperId = `${inputId}-helper`;\n\n const describedByIds = [\n error ? errorId : null,\n helperText && !error ? helperId : null,\n ariaDescribedBy,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n data-slot=\"input-wrapper\"\n className={cn('flex flex-col gap-1.5', disabled && 'opacity-50')}\n >\n {label && (\n <label\n data-slot=\"input-label\"\n htmlFor={inputId}\n className={cn(\n 'text-foreground text-sm font-medium',\n hideLabel && 'sr-only'\n )}\n >\n {label}\n {required && (\n <span className=\"text-destructive ml-1\" aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n )}\n <input\n data-slot=\"input\"\n id={inputId}\n ref={ref}\n className={cn(\n inputVariants({ size, hasError: hasError || !!error }),\n className\n )}\n aria-invalid={hasError || !!error}\n aria-describedby={describedByIds || undefined}\n required={required}\n disabled={disabled}\n {...props}\n />\n {error && (\n <p\n id={errorId}\n data-slot=\"input-error\"\n className=\"text-destructive text-sm\"\n role=\"alert\"\n >\n {error}\n </p>\n )}\n {helperText && !error && (\n <p\n id={helperId}\n data-slot=\"input-helper\"\n className=\"text-muted-foreground text-sm\"\n >\n {helperText}\n </p>\n )}\n </div>\n );\n }\n);\n\nInput.displayName = 'Input';\n\nexport { Input, inputVariants };\n"]}