erp-pro-ui 0.1.4 → 0.1.6

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 (484) hide show
  1. package/README.md +137 -28
  2. package/dist/accordion.cjs +1 -1
  3. package/dist/accordion.mjs +1 -1
  4. package/dist/alert.cjs +1 -1
  5. package/dist/alert.mjs +1 -1
  6. package/dist/animated-content.cjs +1 -1
  7. package/dist/animated-content.mjs +1 -1
  8. package/dist/animations.css +2 -2
  9. package/dist/ascii-text.cjs +1 -1
  10. package/dist/ascii-text.mjs +1 -1
  11. package/dist/background-gradient-animation.cjs +1 -1
  12. package/dist/background-gradient-animation.mjs +1 -1
  13. package/dist/button-hover-border-gradient.cjs +1 -1
  14. package/dist/button-hover-border-gradient.mjs +1 -1
  15. package/dist/button.cjs +1 -1
  16. package/dist/button.mjs +1 -1
  17. package/dist/calendar.cjs +1 -1
  18. package/dist/calendar.mjs +1 -1
  19. package/dist/card.cjs +1 -1
  20. package/dist/card.mjs +1 -1
  21. package/dist/carousel.cjs +1 -1
  22. package/dist/carousel.mjs +1 -1
  23. package/dist/catalog.cjs +6 -0
  24. package/dist/catalog.cjs.map +1 -1
  25. package/dist/catalog.d.ts +11 -1
  26. package/dist/catalog.d.ts.map +1 -1
  27. package/dist/catalog.mjs +6 -0
  28. package/dist/catalog.mjs.map +1 -1
  29. package/dist/charts.cjs +2 -1
  30. package/dist/charts.mjs +2 -2
  31. package/dist/checkbox.cjs +1 -1
  32. package/dist/checkbox.mjs +1 -1
  33. package/dist/chip.cjs +3 -1
  34. package/dist/chip.mjs +2 -2
  35. package/dist/chroma-grid.cjs +1 -1
  36. package/dist/chroma-grid.mjs +1 -1
  37. package/dist/chunks/{HoverBorderGradient-Df3PKpw6.cjs → HoverBorderGradient-C5D6lGg0.cjs} +8 -8
  38. package/dist/chunks/HoverBorderGradient-C5D6lGg0.cjs.map +1 -0
  39. package/dist/chunks/{HoverBorderGradient-DVFEIXFQ.mjs → HoverBorderGradient-CduqqQgX.mjs} +8 -8
  40. package/dist/chunks/HoverBorderGradient-CduqqQgX.mjs.map +1 -0
  41. package/dist/chunks/{accordion-Cbt-SJhj.mjs → accordion-6zxJUYXr.mjs} +8 -8
  42. package/dist/chunks/accordion-6zxJUYXr.mjs.map +1 -0
  43. package/dist/chunks/{accordion-pfJR8YYA.cjs → accordion-CmB6EidC.cjs} +8 -8
  44. package/dist/chunks/accordion-CmB6EidC.cjs.map +1 -0
  45. package/dist/chunks/alert-C5KEeQqh.cjs +81 -0
  46. package/dist/chunks/alert-C5KEeQqh.cjs.map +1 -0
  47. package/dist/chunks/alert-XVmYJgds.mjs +75 -0
  48. package/dist/chunks/alert-XVmYJgds.mjs.map +1 -0
  49. package/dist/chunks/{animated-content-CttSmLWV.cjs → animated-content-CLsFnjgr.cjs} +1 -1
  50. package/dist/chunks/{animated-content-CttSmLWV.cjs.map → animated-content-CLsFnjgr.cjs.map} +1 -1
  51. package/dist/chunks/{animated-content-C1uNg1xO.mjs → animated-content-bK6xp-vc.mjs} +1 -1
  52. package/dist/chunks/{animated-content-C1uNg1xO.mjs.map → animated-content-bK6xp-vc.mjs.map} +1 -1
  53. package/dist/chunks/{ascii-text-DlmArZXh.cjs → ascii-text-BP-BBy0-.cjs} +3 -3
  54. package/dist/chunks/{ascii-text-DlmArZXh.cjs.map → ascii-text-BP-BBy0-.cjs.map} +1 -1
  55. package/dist/chunks/{ascii-text-C5tyNsR3.mjs → ascii-text-RJxX3wCC.mjs} +1 -1
  56. package/dist/chunks/{ascii-text-C5tyNsR3.mjs.map → ascii-text-RJxX3wCC.mjs.map} +1 -1
  57. package/dist/chunks/{background-gradient-animation-BL-lnrJe.mjs → background-gradient-animation-DpKJ3ecq.mjs} +3 -3
  58. package/dist/chunks/{background-gradient-animation-BL-lnrJe.mjs.map → background-gradient-animation-DpKJ3ecq.mjs.map} +1 -1
  59. package/dist/chunks/{background-gradient-animation-CXV9GDH8.cjs → background-gradient-animation-II9hdrgB.cjs} +3 -3
  60. package/dist/chunks/{background-gradient-animation-CXV9GDH8.cjs.map → background-gradient-animation-II9hdrgB.cjs.map} +1 -1
  61. package/dist/chunks/{button-B0Lhj0AS.mjs → button-DddUhuR-.mjs} +6 -5
  62. package/dist/chunks/button-DddUhuR-.mjs.map +1 -0
  63. package/dist/chunks/{button-hover-border-gradient-CvoM60wz.mjs → button-hover-border-gradient-DFppVRI4.mjs} +3 -3
  64. package/dist/chunks/{button-hover-border-gradient-CvoM60wz.mjs.map → button-hover-border-gradient-DFppVRI4.mjs.map} +1 -1
  65. package/dist/chunks/{button-hover-border-gradient-CSHXM5Cm.cjs → button-hover-border-gradient-DX2lBG5C.cjs} +3 -3
  66. package/dist/chunks/{button-hover-border-gradient-CSHXM5Cm.cjs.map → button-hover-border-gradient-DX2lBG5C.cjs.map} +1 -1
  67. package/dist/chunks/{button-CZL6kFzT.cjs → button-xqernofO.cjs} +6 -5
  68. package/dist/chunks/button-xqernofO.cjs.map +1 -0
  69. package/dist/chunks/{calendar-DrCgT_pj.mjs → calendar-Cp84V2rY.mjs} +7 -7
  70. package/dist/chunks/calendar-Cp84V2rY.mjs.map +1 -0
  71. package/dist/chunks/{calendar-Cpp_Rc7T.cjs → calendar-DuCKr6b7.cjs} +7 -7
  72. package/dist/chunks/calendar-DuCKr6b7.cjs.map +1 -0
  73. package/dist/chunks/{card-C5_tFK6Q.cjs → card-CqPDr6Tt.cjs} +4 -4
  74. package/dist/chunks/card-CqPDr6Tt.cjs.map +1 -0
  75. package/dist/chunks/{card-Dh8wNv8N.mjs → card-SpHHNB0c.mjs} +4 -4
  76. package/dist/chunks/card-SpHHNB0c.mjs.map +1 -0
  77. package/dist/chunks/{carousel-BYwqI4cA.mjs → carousel-C1skQ65z.mjs} +14 -14
  78. package/dist/chunks/carousel-C1skQ65z.mjs.map +1 -0
  79. package/dist/chunks/{carousel-C1338X8h.cjs → carousel-YlRLOGkM.cjs} +11 -11
  80. package/dist/chunks/carousel-YlRLOGkM.cjs.map +1 -0
  81. package/dist/chunks/{charts-BYvM4TMG.mjs → charts-C-Qee_JY.mjs} +118 -19
  82. package/dist/chunks/charts-C-Qee_JY.mjs.map +1 -0
  83. package/dist/chunks/{charts-DbxyHtlX.cjs → charts-CZEYcr6X.cjs} +119 -14
  84. package/dist/chunks/charts-CZEYcr6X.cjs.map +1 -0
  85. package/dist/chunks/{checkbox-Pr49U9F1.mjs → checkbox-DjGpvMyo.mjs} +12 -12
  86. package/dist/chunks/checkbox-DjGpvMyo.mjs.map +1 -0
  87. package/dist/chunks/{checkbox-CxOcjoGP.cjs → checkbox-NM_iPd6S.cjs} +10 -10
  88. package/dist/chunks/checkbox-NM_iPd6S.cjs.map +1 -0
  89. package/dist/chunks/chip-BY83_HK7.cjs +203 -0
  90. package/dist/chunks/chip-BY83_HK7.cjs.map +1 -0
  91. package/dist/chunks/chip-CbO8-1lK.mjs +185 -0
  92. package/dist/chunks/chip-CbO8-1lK.mjs.map +1 -0
  93. package/dist/chunks/{chroma-grid-BAo6V5A7.mjs → chroma-grid-CexX28VQ.mjs} +6 -6
  94. package/dist/chunks/chroma-grid-CexX28VQ.mjs.map +1 -0
  95. package/dist/chunks/{chroma-grid-CIk0dsNS.cjs → chroma-grid-DP__XtmV.cjs} +6 -6
  96. package/dist/chunks/chroma-grid-DP__XtmV.cjs.map +1 -0
  97. package/dist/chunks/{color-palette-euKQMWlV.mjs → color-palette-BU1cI6XP.mjs} +166 -132
  98. package/dist/chunks/color-palette-BU1cI6XP.mjs.map +1 -0
  99. package/dist/chunks/{color-palette-2TuEMkAn.cjs → color-palette-ThIKMhT1.cjs} +168 -133
  100. package/dist/chunks/color-palette-ThIKMhT1.cjs.map +1 -0
  101. package/dist/chunks/{combobox-CwGubKTt.cjs → combobox-B7UIcjsI.cjs} +31 -23
  102. package/dist/chunks/combobox-B7UIcjsI.cjs.map +1 -0
  103. package/dist/chunks/{combobox-DrFmkI0F.mjs → combobox-D6WnThIQ.mjs} +30 -22
  104. package/dist/chunks/combobox-D6WnThIQ.mjs.map +1 -0
  105. package/dist/chunks/data-table-KDM8AEwU.mjs +1555 -0
  106. package/dist/chunks/data-table-KDM8AEwU.mjs.map +1 -0
  107. package/dist/chunks/data-table-z-YDzi0N.cjs +1646 -0
  108. package/dist/chunks/data-table-z-YDzi0N.cjs.map +1 -0
  109. package/dist/chunks/{date-picker-CNPORxhv.mjs → date-picker-Bh6_p4bD.mjs} +39 -19
  110. package/dist/chunks/date-picker-Bh6_p4bD.mjs.map +1 -0
  111. package/dist/chunks/{date-picker-CZo68Fkl.cjs → date-picker-CfCvp6Tj.cjs} +39 -19
  112. package/dist/chunks/date-picker-CfCvp6Tj.cjs.map +1 -0
  113. package/dist/chunks/{dialog-DUWnV9tN.mjs → dialog-BibwiFLY.mjs} +33 -30
  114. package/dist/chunks/dialog-BibwiFLY.mjs.map +1 -0
  115. package/dist/chunks/{dialog-CYFiWN8M.cjs → dialog-I141I0nc.cjs} +33 -30
  116. package/dist/chunks/dialog-I141I0nc.cjs.map +1 -0
  117. package/dist/chunks/{drawer-D82Jz6KO.mjs → drawer-DsE8Pb8e.mjs} +11 -11
  118. package/dist/chunks/drawer-DsE8Pb8e.mjs.map +1 -0
  119. package/dist/chunks/{drawer-CLjsYdxN.cjs → drawer-EC9eopGX.cjs} +11 -11
  120. package/dist/chunks/drawer-EC9eopGX.cjs.map +1 -0
  121. package/dist/chunks/{form-B2vcaHwh.mjs → form-CRwpjFWu.mjs} +10 -10
  122. package/dist/chunks/form-CRwpjFWu.mjs.map +1 -0
  123. package/dist/chunks/{form-CzH9GQc6.cjs → form-DaGyqM97.cjs} +10 -10
  124. package/dist/chunks/form-DaGyqM97.cjs.map +1 -0
  125. package/dist/chunks/{gradual-blur-B9GoY8o1.cjs → gradual-blur-Di7MBs7M.cjs} +1 -1
  126. package/dist/chunks/{gradual-blur-B9GoY8o1.cjs.map → gradual-blur-Di7MBs7M.cjs.map} +1 -1
  127. package/dist/chunks/{gradual-blur-Bl3dOMEz.mjs → gradual-blur-pt0UiMEy.mjs} +1 -1
  128. package/dist/chunks/{gradual-blur-Bl3dOMEz.mjs.map → gradual-blur-pt0UiMEy.mjs.map} +1 -1
  129. package/dist/chunks/{hover-card-xqwpmZNm.mjs → hover-card-C3Xa18Ov.mjs} +7 -8
  130. package/dist/chunks/hover-card-C3Xa18Ov.mjs.map +1 -0
  131. package/dist/chunks/{hover-card-v0QwmVBU.cjs → hover-card-D78E07hk.cjs} +7 -8
  132. package/dist/chunks/hover-card-D78E07hk.cjs.map +1 -0
  133. package/dist/chunks/{icons-BxIzP2jd.cjs → icons-CRanVZB1.cjs} +8 -8
  134. package/dist/chunks/icons-CRanVZB1.cjs.map +1 -0
  135. package/dist/chunks/{icons-DuumN7z-.mjs → icons-bx3nrxNv.mjs} +8 -8
  136. package/dist/chunks/icons-bx3nrxNv.mjs.map +1 -0
  137. package/dist/chunks/{input-Bt_r_B_c.mjs → input-CpARxvFi.mjs} +14 -14
  138. package/dist/chunks/input-CpARxvFi.mjs.map +1 -0
  139. package/dist/chunks/{input-BWM6G7jq.cjs → input-DTW_8EwG.cjs} +14 -14
  140. package/dist/chunks/input-DTW_8EwG.cjs.map +1 -0
  141. package/dist/chunks/{label-KPA-yYOF.mjs → label-BVH02Yvq.mjs} +1 -1
  142. package/dist/chunks/{label-KPA-yYOF.mjs.map → label-BVH02Yvq.mjs.map} +1 -1
  143. package/dist/chunks/{label-BWPEGVam.cjs → label-DN-Bg5i8.cjs} +1 -1
  144. package/dist/chunks/{label-BWPEGVam.cjs.map → label-DN-Bg5i8.cjs.map} +1 -1
  145. package/dist/chunks/{loading-q7IEg56I.cjs → loading-B1yrR3KX.cjs} +7 -7
  146. package/dist/chunks/{loading-q7IEg56I.cjs.map → loading-B1yrR3KX.cjs.map} +1 -1
  147. package/dist/chunks/{loading-S1TdIrbB.mjs → loading-B2Ron0Fd.mjs} +7 -7
  148. package/dist/chunks/{loading-S1TdIrbB.mjs.map → loading-B2Ron0Fd.mjs.map} +1 -1
  149. package/dist/chunks/{multi-select-combobox-D46M-AN9.mjs → multi-select-combobox-CMhAXEGZ.mjs} +15 -15
  150. package/dist/chunks/multi-select-combobox-CMhAXEGZ.mjs.map +1 -0
  151. package/dist/chunks/{multi-select-combobox-dS6bJE_e.cjs → multi-select-combobox-FEbMAPEg.cjs} +16 -16
  152. package/dist/chunks/multi-select-combobox-FEbMAPEg.cjs.map +1 -0
  153. package/dist/chunks/{otp-input-DSW9Ca_D.cjs → otp-input-B6nJC-Fl.cjs} +10 -10
  154. package/dist/chunks/otp-input-B6nJC-Fl.cjs.map +1 -0
  155. package/dist/chunks/{otp-input-DeAi4nJ_.mjs → otp-input-B7DhhsMe.mjs} +10 -10
  156. package/dist/chunks/otp-input-B7DhhsMe.mjs.map +1 -0
  157. package/dist/chunks/{overlay-TycCIFOu.mjs → overlay-C58wXorc.mjs} +1 -1
  158. package/dist/chunks/{overlay-TycCIFOu.mjs.map → overlay-C58wXorc.mjs.map} +1 -1
  159. package/dist/chunks/{overlay-DWNTyQzK.cjs → overlay-DwJgjJuu.cjs} +1 -1
  160. package/dist/chunks/{overlay-DWNTyQzK.cjs.map → overlay-DwJgjJuu.cjs.map} +1 -1
  161. package/dist/chunks/{password-strength-meter-DxMV6GAs.cjs → password-strength-meter-6vNu6p19.cjs} +13 -13
  162. package/dist/chunks/password-strength-meter-6vNu6p19.cjs.map +1 -0
  163. package/dist/chunks/{password-strength-meter-CbNSBuh_.mjs → password-strength-meter-D7gmZNjp.mjs} +13 -13
  164. package/dist/chunks/password-strength-meter-D7gmZNjp.mjs.map +1 -0
  165. package/dist/chunks/{progress-bar-BdvQtpm3.cjs → progress-bar-CbsCItvv.cjs} +78 -5
  166. package/dist/chunks/progress-bar-CbsCItvv.cjs.map +1 -0
  167. package/dist/chunks/{progress-bar-B9sy7WBT.mjs → progress-bar-D6Q9Di7D.mjs} +72 -5
  168. package/dist/chunks/progress-bar-D6Q9Di7D.mjs.map +1 -0
  169. package/dist/chunks/{radio-C9w_CoiY.mjs → radio-C6Meq2iz.mjs} +2 -2
  170. package/dist/chunks/{radio-C9w_CoiY.mjs.map → radio-C6Meq2iz.mjs.map} +1 -1
  171. package/dist/chunks/{radio-jMHDvaMY.cjs → radio-DxakS7iD.cjs} +2 -2
  172. package/dist/chunks/{radio-jMHDvaMY.cjs.map → radio-DxakS7iD.cjs.map} +1 -1
  173. package/dist/chunks/{select-B8UQ6Uq5.mjs → select-1rSJeUBQ.mjs} +25 -19
  174. package/dist/chunks/select-1rSJeUBQ.mjs.map +1 -0
  175. package/dist/chunks/{select-CCUSMvfS.cjs → select-SOmIt-BD.cjs} +25 -19
  176. package/dist/chunks/select-SOmIt-BD.cjs.map +1 -0
  177. package/dist/chunks/{skeleton-CtLumdRw.mjs → skeleton-BRx-80dg.mjs} +18 -18
  178. package/dist/chunks/skeleton-BRx-80dg.mjs.map +1 -0
  179. package/dist/chunks/{skeleton-BNea1Rcp.cjs → skeleton-o7DlA5yl.cjs} +18 -18
  180. package/dist/chunks/skeleton-o7DlA5yl.cjs.map +1 -0
  181. package/dist/chunks/{spinners-BL4ERCCw.cjs → spinners-BylPf0uk.cjs} +2 -2
  182. package/dist/chunks/{spinners-BL4ERCCw.cjs.map → spinners-BylPf0uk.cjs.map} +1 -1
  183. package/dist/chunks/{spinners-BBCWD2gw.mjs → spinners-hJaI_cBH.mjs} +2 -2
  184. package/dist/chunks/{spinners-BBCWD2gw.mjs.map → spinners-hJaI_cBH.mjs.map} +1 -1
  185. package/dist/chunks/{splash-cursor-BVSmbcIX.cjs → splash-cursor-CmqkSl6m.cjs} +1 -1
  186. package/dist/chunks/{splash-cursor-BVSmbcIX.cjs.map → splash-cursor-CmqkSl6m.cjs.map} +1 -1
  187. package/dist/chunks/{splash-cursor-rSrTnawZ.mjs → splash-cursor-Cxouip_h.mjs} +1 -1
  188. package/dist/chunks/{splash-cursor-rSrTnawZ.mjs.map → splash-cursor-Cxouip_h.mjs.map} +1 -1
  189. package/dist/chunks/{spotlight-card-DS1dy1W3.cjs → spotlight-card-B3L3K21T.cjs} +8 -8
  190. package/dist/chunks/spotlight-card-B3L3K21T.cjs.map +1 -0
  191. package/dist/chunks/{spotlight-card-BpZLMOp6.mjs → spotlight-card-DIgacTxA.mjs} +8 -8
  192. package/dist/chunks/spotlight-card-DIgacTxA.mjs.map +1 -0
  193. package/dist/chunks/{stepper-D6qQbZdg.cjs → stepper-BpjKyemI.cjs} +212 -129
  194. package/dist/chunks/stepper-BpjKyemI.cjs.map +1 -0
  195. package/dist/chunks/{stepper-DUknuW2E.mjs → stepper-JD4ZHT-b.mjs} +213 -130
  196. package/dist/chunks/stepper-JD4ZHT-b.mjs.map +1 -0
  197. package/dist/chunks/sun-to-moon-button-BOx1n6nk.cjs +311 -0
  198. package/dist/chunks/sun-to-moon-button-BOx1n6nk.cjs.map +1 -0
  199. package/dist/chunks/sun-to-moon-button-CBbDar4k.mjs +299 -0
  200. package/dist/chunks/sun-to-moon-button-CBbDar4k.mjs.map +1 -0
  201. package/dist/chunks/{switch-C5otDb4c.cjs → switch-C9suGEWg.cjs} +5 -5
  202. package/dist/chunks/switch-C9suGEWg.cjs.map +1 -0
  203. package/dist/chunks/{switch-DOVl_i_s.mjs → switch-hd7zTBD_.mjs} +5 -5
  204. package/dist/chunks/switch-hd7zTBD_.mjs.map +1 -0
  205. package/dist/chunks/{textarea-Blky_fLK.mjs → textarea-Cu26uKqq.mjs} +5 -5
  206. package/dist/chunks/textarea-Cu26uKqq.mjs.map +1 -0
  207. package/dist/chunks/{textarea-ok_NlE2p.cjs → textarea-cXgKzluG.cjs} +5 -5
  208. package/dist/chunks/textarea-cXgKzluG.cjs.map +1 -0
  209. package/dist/chunks/{theme-7DWLxJK_.cjs → theme-D6B-FaoE.cjs} +28 -5
  210. package/dist/chunks/theme-D6B-FaoE.cjs.map +1 -0
  211. package/dist/chunks/{theme-BceKeYhw.mjs → theme-koPrLKQv.mjs} +28 -5
  212. package/dist/chunks/theme-koPrLKQv.mjs.map +1 -0
  213. package/dist/chunks/{toast-CvfP7PUP.mjs → toast-CpX-22n2.mjs} +26 -26
  214. package/dist/chunks/toast-CpX-22n2.mjs.map +1 -0
  215. package/dist/chunks/{toast-Ds7_19Ap.cjs → toast-REa6FRBc.cjs} +26 -26
  216. package/dist/chunks/toast-REa6FRBc.cjs.map +1 -0
  217. package/dist/chunks/{tooltip-efHETBo1.mjs → tooltip-CASvQiFQ.mjs} +6 -7
  218. package/dist/chunks/tooltip-CASvQiFQ.mjs.map +1 -0
  219. package/dist/chunks/{tooltip-nkIqViGk.cjs → tooltip-CKF78rni.cjs} +6 -7
  220. package/dist/chunks/tooltip-CKF78rni.cjs.map +1 -0
  221. package/dist/chunks/truncated-text-DTgks5yS.mjs +45 -0
  222. package/dist/chunks/truncated-text-DTgks5yS.mjs.map +1 -0
  223. package/dist/chunks/truncated-text-istgJRUq.cjs +52 -0
  224. package/dist/chunks/truncated-text-istgJRUq.cjs.map +1 -0
  225. package/dist/chunks/{typography-CLu6Hx9j.mjs → typography-KxLf6Td8.mjs} +5 -5
  226. package/dist/chunks/typography-KxLf6Td8.mjs.map +1 -0
  227. package/dist/chunks/{typography-DaLu9tty.cjs → typography-sGmh0gZ_.cjs} +6 -6
  228. package/dist/chunks/typography-sGmh0gZ_.cjs.map +1 -0
  229. package/dist/color-palette.cjs +1 -1
  230. package/dist/color-palette.mjs +1 -1
  231. package/dist/colors.css +45 -149
  232. package/dist/combobox.cjs +1 -1
  233. package/dist/combobox.mjs +1 -1
  234. package/dist/components/data-display/card/Card.d.ts.map +1 -1
  235. package/dist/components/data-display/charts/MiniNeonSparkline.d.ts +17 -0
  236. package/dist/components/data-display/charts/MiniNeonSparkline.d.ts.map +1 -0
  237. package/dist/components/data-display/charts/ThinBreakdownBar.d.ts.map +1 -1
  238. package/dist/components/data-display/charts/index.d.ts +2 -0
  239. package/dist/components/data-display/charts/index.d.ts.map +1 -1
  240. package/dist/components/data-display/chip/Chip.d.ts.map +1 -1
  241. package/dist/components/data-display/chip/SpecialChip.d.ts +23 -0
  242. package/dist/components/data-display/chip/SpecialChip.d.ts.map +1 -0
  243. package/dist/components/data-display/chip/index.d.ts +2 -0
  244. package/dist/components/data-display/chip/index.d.ts.map +1 -1
  245. package/dist/components/data-display/color-palette/ColorPalette.d.ts.map +1 -1
  246. package/dist/components/data-display/data-table/DataTable.d.ts +49 -26
  247. package/dist/components/data-display/data-table/DataTable.d.ts.map +1 -1
  248. package/dist/components/data-display/data-table/DataTableControls.d.ts +34 -0
  249. package/dist/components/data-display/data-table/DataTableControls.d.ts.map +1 -0
  250. package/dist/components/data-display/data-table/DataTableFilters.d.ts +27 -0
  251. package/dist/components/data-display/data-table/DataTableFilters.d.ts.map +1 -0
  252. package/dist/components/data-display/data-table/DataTableRows.d.ts +34 -0
  253. package/dist/components/data-display/data-table/DataTableRows.d.ts.map +1 -0
  254. package/dist/components/data-display/data-table/DataTableToolbar.d.ts +48 -0
  255. package/dist/components/data-display/data-table/DataTableToolbar.d.ts.map +1 -0
  256. package/dist/components/data-display/data-table/TablePrimitives.d.ts +11 -0
  257. package/dist/components/data-display/data-table/TablePrimitives.d.ts.map +1 -0
  258. package/dist/components/data-display/data-table/direction.d.ts +7 -0
  259. package/dist/components/data-display/data-table/direction.d.ts.map +1 -0
  260. package/dist/components/data-display/data-table/index.d.ts +2 -2
  261. package/dist/components/data-display/data-table/index.d.ts.map +1 -1
  262. package/dist/components/data-display/loading/Loading.d.ts.map +1 -1
  263. package/dist/components/data-display/progress-bar/CircularProgress.d.ts +17 -0
  264. package/dist/components/data-display/progress-bar/CircularProgress.d.ts.map +1 -0
  265. package/dist/components/data-display/progress-bar/index.d.ts +2 -0
  266. package/dist/components/data-display/progress-bar/index.d.ts.map +1 -1
  267. package/dist/components/effects/sun-to-moon-button/ThemeSwitcherButtons.d.ts +5 -0
  268. package/dist/components/effects/sun-to-moon-button/ThemeSwitcherButtons.d.ts.map +1 -0
  269. package/dist/components/effects/sun-to-moon-button/index.d.ts +2 -0
  270. package/dist/components/effects/sun-to-moon-button/index.d.ts.map +1 -1
  271. package/dist/components/feedback/alert/Alert.d.ts +1 -1
  272. package/dist/components/feedback/alert/Alert.d.ts.map +1 -1
  273. package/dist/components/feedback/alert/types.d.ts +11 -2
  274. package/dist/components/feedback/alert/types.d.ts.map +1 -1
  275. package/dist/components/forms/button/Button.d.ts +1 -1
  276. package/dist/components/forms/button/Button.d.ts.map +1 -1
  277. package/dist/components/forms/button/index.d.ts +1 -1
  278. package/dist/components/forms/button/index.d.ts.map +1 -1
  279. package/dist/components/forms/button/types.d.ts +4 -1
  280. package/dist/components/forms/button/types.d.ts.map +1 -1
  281. package/dist/components/forms/calendar/Calendar.d.ts.map +1 -1
  282. package/dist/components/forms/checkbox/Checkbox.d.ts.map +1 -1
  283. package/dist/components/forms/combobox/Combobox.d.ts.map +1 -1
  284. package/dist/components/forms/date-picker/DatePicker.d.ts.map +1 -1
  285. package/dist/components/forms/form/Form.d.ts.map +1 -1
  286. package/dist/components/forms/input/Input.d.ts.map +1 -1
  287. package/dist/components/forms/input/types.d.ts +1 -1
  288. package/dist/components/forms/input/types.d.ts.map +1 -1
  289. package/dist/components/forms/password-strength-meter/PasswordCriteria.d.ts.map +1 -1
  290. package/dist/components/forms/password-strength-meter/PasswordStrengthMeter.d.ts.map +1 -1
  291. package/dist/components/forms/select/Select.d.ts.map +1 -1
  292. package/dist/components/navigation/accordion/Accordion.d.ts.map +1 -1
  293. package/dist/components/navigation/stepper/Stepper.d.ts +1 -1
  294. package/dist/components/navigation/stepper/Stepper.d.ts.map +1 -1
  295. package/dist/components/navigation/stepper/Stepper1.d.ts.map +1 -1
  296. package/dist/components/navigation/stepper/index.d.ts +1 -1
  297. package/dist/components/navigation/stepper/index.d.ts.map +1 -1
  298. package/dist/components/navigation/stepper/types.d.ts +3 -0
  299. package/dist/components/navigation/stepper/types.d.ts.map +1 -1
  300. package/dist/components/navigation/tabs/Tabs.d.ts +3 -0
  301. package/dist/components/navigation/tabs/Tabs.d.ts.map +1 -0
  302. package/dist/components/navigation/tabs/index.d.ts +3 -0
  303. package/dist/components/navigation/tabs/index.d.ts.map +1 -0
  304. package/dist/components/navigation/tabs/types.d.ts +21 -0
  305. package/dist/components/navigation/tabs/types.d.ts.map +1 -0
  306. package/dist/components/overlays/dialog/Dialog.d.ts.map +1 -1
  307. package/dist/components/overlays/dialog/types.d.ts +1 -0
  308. package/dist/components/overlays/dialog/types.d.ts.map +1 -1
  309. package/dist/components/overlays/drawer/Drawer.d.ts.map +1 -1
  310. package/dist/components/overlays/hover-card/HoverCard.d.ts.map +1 -1
  311. package/dist/components/overlays/toast/Toast.d.ts.map +1 -1
  312. package/dist/components/overlays/tooltip/Tooltip.d.ts.map +1 -1
  313. package/dist/components/shared/overlay.d.ts +1 -1
  314. package/dist/components/typography/Typography.d.ts.map +1 -1
  315. package/dist/components/typography/truncated-text/TruncatedText.d.ts +11 -0
  316. package/dist/components/typography/truncated-text/TruncatedText.d.ts.map +1 -0
  317. package/dist/components/typography/truncated-text/index.d.ts +3 -0
  318. package/dist/components/typography/truncated-text/index.d.ts.map +1 -0
  319. package/dist/contexts/ThemeContext.d.ts +1 -1
  320. package/dist/contexts/ThemeContext.d.ts.map +1 -1
  321. package/dist/contexts/index.d.ts +1 -1
  322. package/dist/contexts/index.d.ts.map +1 -1
  323. package/dist/data-table.cjs +11 -1
  324. package/dist/data-table.mjs +2 -2
  325. package/dist/date-picker.cjs +1 -1
  326. package/dist/date-picker.mjs +1 -1
  327. package/dist/dialog.cjs +1 -1
  328. package/dist/dialog.mjs +1 -1
  329. package/dist/docs.cjs +76 -26
  330. package/dist/docs.cjs.map +1 -1
  331. package/dist/docs.d.ts +10 -10
  332. package/dist/docs.d.ts.map +1 -1
  333. package/dist/docs.mjs +76 -26
  334. package/dist/docs.mjs.map +1 -1
  335. package/dist/drawer.cjs +1 -1
  336. package/dist/drawer.mjs +1 -1
  337. package/dist/form.cjs +1 -1
  338. package/dist/form.mjs +1 -1
  339. package/dist/foundation.css +54 -3
  340. package/dist/foundations/theme/ThemeProvider.d.ts +22 -1
  341. package/dist/foundations/theme/ThemeProvider.d.ts.map +1 -1
  342. package/dist/foundations/theme/index.d.ts +1 -1
  343. package/dist/foundations/theme/index.d.ts.map +1 -1
  344. package/dist/gradual-blur.cjs +1 -1
  345. package/dist/gradual-blur.mjs +1 -1
  346. package/dist/hover-border-gradient.cjs +1 -1
  347. package/dist/hover-border-gradient.mjs +1 -1
  348. package/dist/hover-card.cjs +1 -1
  349. package/dist/hover-card.mjs +1 -1
  350. package/dist/icons.cjs +1 -1
  351. package/dist/icons.mjs +1 -1
  352. package/dist/index.cjs +201 -48
  353. package/dist/index.cjs.map +1 -1
  354. package/dist/index.d.ts +17 -9
  355. package/dist/index.d.ts.map +1 -1
  356. package/dist/index.mjs +183 -50
  357. package/dist/index.mjs.map +1 -1
  358. package/dist/input.cjs +1 -1
  359. package/dist/input.mjs +1 -1
  360. package/dist/label.cjs +1 -1
  361. package/dist/label.mjs +1 -1
  362. package/dist/loading.cjs +1 -1
  363. package/dist/loading.mjs +1 -1
  364. package/dist/multi-select-combobox.cjs +1 -1
  365. package/dist/multi-select-combobox.mjs +1 -1
  366. package/dist/otp-input.cjs +1 -1
  367. package/dist/otp-input.mjs +1 -1
  368. package/dist/password-strength-meter.cjs +1 -1
  369. package/dist/password-strength-meter.mjs +1 -1
  370. package/dist/progress-bar.cjs +2 -1
  371. package/dist/progress-bar.mjs +2 -2
  372. package/dist/radio.cjs +1 -1
  373. package/dist/radio.mjs +1 -1
  374. package/dist/select.cjs +1 -1
  375. package/dist/select.mjs +1 -1
  376. package/dist/skeleton.cjs +1 -1
  377. package/dist/skeleton.mjs +1 -1
  378. package/dist/spinners.cjs +1 -1
  379. package/dist/spinners.mjs +1 -1
  380. package/dist/splash-cursor.cjs +1 -1
  381. package/dist/splash-cursor.mjs +1 -1
  382. package/dist/spotlight-card.cjs +1 -1
  383. package/dist/spotlight-card.mjs +1 -1
  384. package/dist/stepper.cjs +1 -1
  385. package/dist/stepper.mjs +1 -1
  386. package/dist/sun-to-moon-button.cjs +2 -1
  387. package/dist/sun-to-moon-button.mjs +2 -2
  388. package/dist/switch.cjs +1 -1
  389. package/dist/switch.mjs +1 -1
  390. package/dist/textarea.cjs +1 -1
  391. package/dist/textarea.mjs +1 -1
  392. package/dist/theme.cjs +1 -1
  393. package/dist/theme.mjs +1 -1
  394. package/dist/toast.cjs +1 -1
  395. package/dist/toast.mjs +1 -1
  396. package/dist/tokens.css +592 -298
  397. package/dist/tooltip.cjs +1 -1
  398. package/dist/tooltip.mjs +1 -1
  399. package/dist/truncated-text.cjs +3 -0
  400. package/dist/truncated-text.d.ts +2 -0
  401. package/dist/truncated-text.mjs +2 -0
  402. package/dist/typography.cjs +1 -1
  403. package/dist/typography.mjs +1 -1
  404. package/package.json +15 -9
  405. package/dist/chunks/HoverBorderGradient-DVFEIXFQ.mjs.map +0 -1
  406. package/dist/chunks/HoverBorderGradient-Df3PKpw6.cjs.map +0 -1
  407. package/dist/chunks/accordion-Cbt-SJhj.mjs.map +0 -1
  408. package/dist/chunks/accordion-pfJR8YYA.cjs.map +0 -1
  409. package/dist/chunks/alert-CtdLy4Hv.mjs +0 -40
  410. package/dist/chunks/alert-CtdLy4Hv.mjs.map +0 -1
  411. package/dist/chunks/alert-Dvz1GoL5.cjs +0 -46
  412. package/dist/chunks/alert-Dvz1GoL5.cjs.map +0 -1
  413. package/dist/chunks/button-B0Lhj0AS.mjs.map +0 -1
  414. package/dist/chunks/button-CZL6kFzT.cjs.map +0 -1
  415. package/dist/chunks/calendar-Cpp_Rc7T.cjs.map +0 -1
  416. package/dist/chunks/calendar-DrCgT_pj.mjs.map +0 -1
  417. package/dist/chunks/card-C5_tFK6Q.cjs.map +0 -1
  418. package/dist/chunks/card-Dh8wNv8N.mjs.map +0 -1
  419. package/dist/chunks/carousel-BYwqI4cA.mjs.map +0 -1
  420. package/dist/chunks/carousel-C1338X8h.cjs.map +0 -1
  421. package/dist/chunks/charts-BYvM4TMG.mjs.map +0 -1
  422. package/dist/chunks/charts-DbxyHtlX.cjs.map +0 -1
  423. package/dist/chunks/checkbox-CxOcjoGP.cjs.map +0 -1
  424. package/dist/chunks/checkbox-Pr49U9F1.mjs.map +0 -1
  425. package/dist/chunks/chip-B4ol1yPk.cjs +0 -145
  426. package/dist/chunks/chip-B4ol1yPk.cjs.map +0 -1
  427. package/dist/chunks/chip-DdnBLdpl.mjs +0 -139
  428. package/dist/chunks/chip-DdnBLdpl.mjs.map +0 -1
  429. package/dist/chunks/chroma-grid-BAo6V5A7.mjs.map +0 -1
  430. package/dist/chunks/chroma-grid-CIk0dsNS.cjs.map +0 -1
  431. package/dist/chunks/color-palette-2TuEMkAn.cjs.map +0 -1
  432. package/dist/chunks/color-palette-euKQMWlV.mjs.map +0 -1
  433. package/dist/chunks/combobox-CwGubKTt.cjs.map +0 -1
  434. package/dist/chunks/combobox-DrFmkI0F.mjs.map +0 -1
  435. package/dist/chunks/data-table-Bo80m7qV.mjs +0 -1123
  436. package/dist/chunks/data-table-Bo80m7qV.mjs.map +0 -1
  437. package/dist/chunks/data-table-W1sK5tkL.cjs +0 -1154
  438. package/dist/chunks/data-table-W1sK5tkL.cjs.map +0 -1
  439. package/dist/chunks/date-picker-CNPORxhv.mjs.map +0 -1
  440. package/dist/chunks/date-picker-CZo68Fkl.cjs.map +0 -1
  441. package/dist/chunks/dialog-CYFiWN8M.cjs.map +0 -1
  442. package/dist/chunks/dialog-DUWnV9tN.mjs.map +0 -1
  443. package/dist/chunks/drawer-CLjsYdxN.cjs.map +0 -1
  444. package/dist/chunks/drawer-D82Jz6KO.mjs.map +0 -1
  445. package/dist/chunks/form-B2vcaHwh.mjs.map +0 -1
  446. package/dist/chunks/form-CzH9GQc6.cjs.map +0 -1
  447. package/dist/chunks/hover-card-v0QwmVBU.cjs.map +0 -1
  448. package/dist/chunks/hover-card-xqwpmZNm.mjs.map +0 -1
  449. package/dist/chunks/icons-BxIzP2jd.cjs.map +0 -1
  450. package/dist/chunks/icons-DuumN7z-.mjs.map +0 -1
  451. package/dist/chunks/input-BWM6G7jq.cjs.map +0 -1
  452. package/dist/chunks/input-Bt_r_B_c.mjs.map +0 -1
  453. package/dist/chunks/multi-select-combobox-D46M-AN9.mjs.map +0 -1
  454. package/dist/chunks/multi-select-combobox-dS6bJE_e.cjs.map +0 -1
  455. package/dist/chunks/otp-input-DSW9Ca_D.cjs.map +0 -1
  456. package/dist/chunks/otp-input-DeAi4nJ_.mjs.map +0 -1
  457. package/dist/chunks/password-strength-meter-CbNSBuh_.mjs.map +0 -1
  458. package/dist/chunks/password-strength-meter-DxMV6GAs.cjs.map +0 -1
  459. package/dist/chunks/progress-bar-B9sy7WBT.mjs.map +0 -1
  460. package/dist/chunks/progress-bar-BdvQtpm3.cjs.map +0 -1
  461. package/dist/chunks/select-B8UQ6Uq5.mjs.map +0 -1
  462. package/dist/chunks/select-CCUSMvfS.cjs.map +0 -1
  463. package/dist/chunks/skeleton-BNea1Rcp.cjs.map +0 -1
  464. package/dist/chunks/skeleton-CtLumdRw.mjs.map +0 -1
  465. package/dist/chunks/spotlight-card-BpZLMOp6.mjs.map +0 -1
  466. package/dist/chunks/spotlight-card-DS1dy1W3.cjs.map +0 -1
  467. package/dist/chunks/stepper-D6qQbZdg.cjs.map +0 -1
  468. package/dist/chunks/stepper-DUknuW2E.mjs.map +0 -1
  469. package/dist/chunks/sun-to-moon-button-B2Aje05o.mjs +0 -186
  470. package/dist/chunks/sun-to-moon-button-B2Aje05o.mjs.map +0 -1
  471. package/dist/chunks/sun-to-moon-button-BmFwRBye.cjs +0 -192
  472. package/dist/chunks/sun-to-moon-button-BmFwRBye.cjs.map +0 -1
  473. package/dist/chunks/switch-C5otDb4c.cjs.map +0 -1
  474. package/dist/chunks/switch-DOVl_i_s.mjs.map +0 -1
  475. package/dist/chunks/textarea-Blky_fLK.mjs.map +0 -1
  476. package/dist/chunks/textarea-ok_NlE2p.cjs.map +0 -1
  477. package/dist/chunks/theme-7DWLxJK_.cjs.map +0 -1
  478. package/dist/chunks/theme-BceKeYhw.mjs.map +0 -1
  479. package/dist/chunks/toast-CvfP7PUP.mjs.map +0 -1
  480. package/dist/chunks/toast-Ds7_19Ap.cjs.map +0 -1
  481. package/dist/chunks/tooltip-efHETBo1.mjs.map +0 -1
  482. package/dist/chunks/tooltip-nkIqViGk.cjs.map +0 -1
  483. package/dist/chunks/typography-CLu6Hx9j.mjs.map +0 -1
  484. package/dist/chunks/typography-DaLu9tty.cjs.map +0 -1
@@ -4,6 +4,8 @@ import { jsx } from "react/jsx-runtime";
4
4
  var ThemeContext = createContext(null);
5
5
  var MODE_STORAGE_KEY = "erp-pro-ui:mode";
6
6
  var THEME_STORAGE_KEY = "erp-pro-ui:theme";
7
+ var VARIANT_STORAGE_KEY = "erp-pro-ui:variant";
8
+ var DARK_VARIANT_STORAGE_KEY = "erp-pro-ui:dark-variant";
7
9
  function getStoredMode() {
8
10
  if (typeof window === "undefined") return null;
9
11
  const mode = localStorage.getItem(MODE_STORAGE_KEY) ?? localStorage.getItem("mode");
@@ -14,31 +16,52 @@ function getStoredTheme() {
14
16
  const theme = localStorage.getItem(THEME_STORAGE_KEY) ?? localStorage.getItem("theme");
15
17
  return theme === "purple" || theme === "teal" || theme === "yellow" || theme === "green" ? theme : null;
16
18
  }
19
+ function getStoredVariant() {
20
+ if (typeof window === "undefined") return null;
21
+ const variant = localStorage.getItem(VARIANT_STORAGE_KEY) ?? localStorage.getItem(DARK_VARIANT_STORAGE_KEY);
22
+ return variant === "default" || variant === "alt" ? variant : null;
23
+ }
17
24
  function ThemeProvider({ children }) {
18
25
  const [mode, setMode] = useState(() => getStoredMode() ?? "dark");
19
26
  const [theme, setTheme] = useState(() => getStoredTheme() ?? "purple");
27
+ const [variant, setVariant] = useState(() => getStoredVariant() ?? "default");
20
28
  useLayoutEffect(() => {
21
- const colorScheme = `${theme}-${mode}`;
29
+ const colorScheme = variant === "alt" ? `${theme}-${mode}-alt` : `${theme}-${mode}`;
22
30
  document.documentElement.setAttribute("data-brand", theme);
23
31
  document.documentElement.setAttribute("data-mode", mode);
32
+ document.documentElement.setAttribute("data-variant", variant);
33
+ document.documentElement.setAttribute("data-dark-variant", variant);
24
34
  document.documentElement.setAttribute("data-theme", colorScheme);
25
35
  document.documentElement.style.colorScheme = mode;
26
36
  localStorage.setItem(MODE_STORAGE_KEY, mode);
27
37
  localStorage.setItem(THEME_STORAGE_KEY, theme);
38
+ localStorage.setItem(VARIANT_STORAGE_KEY, variant);
39
+ localStorage.setItem(DARK_VARIANT_STORAGE_KEY, variant);
28
40
  localStorage.setItem("mode", mode);
29
41
  localStorage.setItem("theme", theme);
30
42
  if (mode === "dark") document.documentElement.classList.add("dark");
31
43
  else document.documentElement.classList.remove("dark");
32
- }, [mode, theme]);
44
+ }, [
45
+ mode,
46
+ theme,
47
+ variant
48
+ ]);
33
49
  const toggleMode = () => setMode((previousMode) => previousMode === "light" ? "dark" : "light");
50
+ const toggleVariant = () => setVariant((previousVariant) => previousVariant === "default" ? "alt" : "default");
34
51
  const value = {
35
52
  mode,
36
53
  theme,
37
54
  brand: theme,
38
- colorScheme: `${theme}-${mode}`,
55
+ variant,
56
+ darkVariant: variant,
57
+ colorScheme: variant === "alt" ? `${theme}-${mode}-alt` : `${theme}-${mode}`,
39
58
  setMode,
40
59
  toggleMode,
41
- setTheme
60
+ setTheme,
61
+ setVariant,
62
+ toggleVariant,
63
+ setDarkVariant: setVariant,
64
+ toggleDarkVariant: toggleVariant
42
65
  };
43
66
  return /* @__PURE__ */ jsx(ThemeContext.Provider, {
44
67
  value,
@@ -53,4 +76,4 @@ function useThemeContext() {
53
76
  //#endregion
54
77
  export { useThemeContext as n, ThemeProvider as t };
55
78
 
56
- //# sourceMappingURL=theme-BceKeYhw.mjs.map
79
+ //# sourceMappingURL=theme-koPrLKQv.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-koPrLKQv.mjs","names":[],"sources":["../../src/foundations/theme/ThemeProvider.tsx"],"sourcesContent":["import { createContext, useContext, useLayoutEffect, useState } from \"react\";\nimport type { ReactNode } from \"react\";\n\nexport type ThemeModeType = \"light\" | \"dark\";\nexport type ThemeColorType = \"purple\" | \"teal\" | \"yellow\" | \"green\";\nexport type ThemeVariantType = \"default\" | \"alt\";\n/**\n * @deprecated Use ThemeVariantType instead.\n */\nexport type ThemeDarkVariantType = ThemeVariantType;\nexport type ThemeColorSchemeType =\n | `${ThemeColorType}-light`\n | `${ThemeColorType}-light-alt`\n | `${ThemeColorType}-dark`\n | `${ThemeColorType}-dark-alt`;\n\nexport interface UseThemeType {\n mode: ThemeModeType;\n theme: ThemeColorType;\n brand: ThemeColorType;\n variant: ThemeVariantType;\n /**\n * @deprecated Use `variant` instead.\n */\n darkVariant: ThemeVariantType;\n colorScheme: ThemeColorSchemeType;\n setMode: (mode: ThemeModeType) => void;\n toggleMode: () => void;\n setTheme: (theme: ThemeColorType) => void;\n setVariant: (variant: ThemeVariantType) => void;\n toggleVariant: () => void;\n /**\n * @deprecated Use `setVariant` instead.\n */\n setDarkVariant: (variant: ThemeVariantType) => void;\n /**\n * @deprecated Use `toggleVariant` instead.\n */\n toggleDarkVariant: () => void;\n}\n\nconst ThemeContext = createContext<UseThemeType | null>(null);\n\nconst MODE_STORAGE_KEY = \"erp-pro-ui:mode\";\nconst THEME_STORAGE_KEY = \"erp-pro-ui:theme\";\nconst VARIANT_STORAGE_KEY = \"erp-pro-ui:variant\";\nconst DARK_VARIANT_STORAGE_KEY = \"erp-pro-ui:dark-variant\";\n\nfunction getStoredMode(): ThemeModeType | null {\n if (typeof window === \"undefined\") {\n return null;\n }\n\n const mode =\n localStorage.getItem(MODE_STORAGE_KEY) ?? localStorage.getItem(\"mode\");\n return mode === \"light\" || mode === \"dark\" ? mode : null;\n}\n\nfunction getStoredTheme(): ThemeColorType | null {\n if (typeof window === \"undefined\") {\n return null;\n }\n\n const theme =\n localStorage.getItem(THEME_STORAGE_KEY) ?? localStorage.getItem(\"theme\");\n return theme === \"purple\" ||\n theme === \"teal\" ||\n theme === \"yellow\" ||\n theme === \"green\"\n ? theme\n : null;\n}\n\nfunction getStoredVariant(): ThemeVariantType | null {\n if (typeof window === \"undefined\") {\n return null;\n }\n\n const variant =\n localStorage.getItem(VARIANT_STORAGE_KEY) ??\n localStorage.getItem(DARK_VARIANT_STORAGE_KEY);\n return variant === \"default\" || variant === \"alt\" ? variant : null;\n}\n\nexport function ThemeProvider({ children }: { children: ReactNode }) {\n const [mode, setMode] = useState<ThemeModeType>(\n () => getStoredMode() ?? \"dark\",\n );\n const [theme, setTheme] = useState<ThemeColorType>(\n () => getStoredTheme() ?? \"purple\",\n );\n const [variant, setVariant] = useState<ThemeVariantType>(\n () => getStoredVariant() ?? \"default\",\n );\n\n useLayoutEffect(() => {\n const colorScheme = (\n variant === \"alt\" ? `${theme}-${mode}-alt` : `${theme}-${mode}`\n ) as ThemeColorSchemeType;\n\n document.documentElement.setAttribute(\"data-brand\", theme);\n document.documentElement.setAttribute(\"data-mode\", mode);\n document.documentElement.setAttribute(\"data-variant\", variant);\n // Backward-compatibility attribute for consumers still using darkVariant.\n document.documentElement.setAttribute(\"data-dark-variant\", variant);\n document.documentElement.setAttribute(\"data-theme\", colorScheme);\n document.documentElement.style.colorScheme = mode;\n\n localStorage.setItem(MODE_STORAGE_KEY, mode);\n localStorage.setItem(THEME_STORAGE_KEY, theme);\n localStorage.setItem(VARIANT_STORAGE_KEY, variant);\n localStorage.setItem(DARK_VARIANT_STORAGE_KEY, variant);\n localStorage.setItem(\"mode\", mode);\n localStorage.setItem(\"theme\", theme);\n\n if (mode === \"dark\") {\n document.documentElement.classList.add(\"dark\");\n } else {\n document.documentElement.classList.remove(\"dark\");\n }\n }, [mode, theme, variant]);\n\n const toggleMode = () =>\n setMode((previousMode) => (previousMode === \"light\" ? \"dark\" : \"light\"));\n const toggleVariant = () =>\n setVariant((previousVariant) =>\n previousVariant === \"default\" ? \"alt\" : \"default\",\n );\n\n const value: UseThemeType = {\n mode,\n theme,\n brand: theme,\n variant,\n darkVariant: variant,\n colorScheme: (variant === \"alt\"\n ? `${theme}-${mode}-alt`\n : `${theme}-${mode}`) as ThemeColorSchemeType,\n setMode,\n toggleMode,\n setTheme,\n setVariant,\n toggleVariant,\n setDarkVariant: setVariant,\n toggleDarkVariant: toggleVariant,\n };\n\n return (\n <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>\n );\n}\n\nexport function useThemeContext() {\n const context = useContext(ThemeContext);\n\n if (!context) {\n throw new Error(\"useThemeContext must be used within a ThemeProvider\");\n }\n\n return context;\n}\n"],"mappings":";;;AAyCA,IAAM,eAAe,cAAmC,KAAK;AAE7D,IAAM,mBAAmB;AACzB,IAAM,oBAAoB;AAC1B,IAAM,sBAAsB;AAC5B,IAAM,2BAA2B;AAEjC,SAAS,gBAAsC;AAC7C,KAAI,OAAO,WAAW,YACpB,QAAO;CAGT,MAAM,OACJ,aAAa,QAAQ,iBAAiB,IAAI,aAAa,QAAQ,OAAO;AACxE,QAAO,SAAS,WAAW,SAAS,SAAS,OAAO;;AAGtD,SAAS,iBAAwC;AAC/C,KAAI,OAAO,WAAW,YACpB,QAAO;CAGT,MAAM,QACJ,aAAa,QAAQ,kBAAkB,IAAI,aAAa,QAAQ,QAAQ;AAC1E,QAAO,UAAU,YACf,UAAU,UACV,UAAU,YACV,UAAU,UACR,QACA;;AAGN,SAAS,mBAA4C;AACnD,KAAI,OAAO,WAAW,YACpB,QAAO;CAGT,MAAM,UACJ,aAAa,QAAQ,oBAAoB,IACzC,aAAa,QAAQ,yBAAyB;AAChD,QAAO,YAAY,aAAa,YAAY,QAAQ,UAAU;;AAGhE,SAAgB,cAAc,EAAE,YAAqC;CACnE,MAAM,CAAC,MAAM,WAAW,eAChB,eAAe,IAAI,OAC1B;CACD,MAAM,CAAC,OAAO,YAAY,eAClB,gBAAgB,IAAI,SAC3B;CACD,MAAM,CAAC,SAAS,cAAc,eACtB,kBAAkB,IAAI,UAC7B;AAED,uBAAsB;EACpB,MAAM,cACJ,YAAY,QAAQ,GAAG,MAAM,GAAG,KAAK,QAAQ,GAAG,MAAM,GAAG;AAG3D,WAAS,gBAAgB,aAAa,cAAc,MAAM;AAC1D,WAAS,gBAAgB,aAAa,aAAa,KAAK;AACxD,WAAS,gBAAgB,aAAa,gBAAgB,QAAQ;AAE9D,WAAS,gBAAgB,aAAa,qBAAqB,QAAQ;AACnE,WAAS,gBAAgB,aAAa,cAAc,YAAY;AAChE,WAAS,gBAAgB,MAAM,cAAc;AAE7C,eAAa,QAAQ,kBAAkB,KAAK;AAC5C,eAAa,QAAQ,mBAAmB,MAAM;AAC9C,eAAa,QAAQ,qBAAqB,QAAQ;AAClD,eAAa,QAAQ,0BAA0B,QAAQ;AACvD,eAAa,QAAQ,QAAQ,KAAK;AAClC,eAAa,QAAQ,SAAS,MAAM;AAEpC,MAAI,SAAS,OACX,UAAS,gBAAgB,UAAU,IAAI,OAAO;MAE9C,UAAS,gBAAgB,UAAU,OAAO,OAAO;IAElD;EAAC;EAAM;EAAO;EAAQ,CAAC;CAE1B,MAAM,mBACJ,SAAS,iBAAkB,iBAAiB,UAAU,SAAS,QAAS;CAC1E,MAAM,sBACJ,YAAY,oBACV,oBAAoB,YAAY,QAAQ,UACzC;CAEH,MAAM,QAAsB;EAC1B;EACA;EACA,OAAO;EACP;EACA,aAAa;EACb,aAAc,YAAY,QACtB,GAAG,MAAM,GAAG,KAAK,QACjB,GAAG,MAAM,GAAG;EAChB;EACA;EACA;EACA;EACA;EACA,gBAAgB;EAChB,mBAAmB;EACpB;AAED,QACE,oBAAC,aAAa,UAAd;EAA8B;EAAQ;EAAiC,CAAA;;AAI3E,SAAgB,kBAAkB;CAChC,MAAM,UAAU,WAAW,aAAa;AAExC,KAAI,CAAC,QACH,OAAM,IAAI,MAAM,sDAAsD;AAGxE,QAAO"}
@@ -1,4 +1,4 @@
1
- import { _ as AlertTriangleIcon, h as CheckCircleIcon, l as LoaderIcon, n as XCircleIcon, q as CloseIcon, u as InfoCircleIcon } from "./icons-DuumN7z-.mjs";
1
+ import { _ as AlertTriangleIcon, h as CheckCircleIcon, l as LoaderIcon, n as XCircleIcon, q as CloseIcon, u as InfoCircleIcon } from "./icons-bx3nrxNv.mjs";
2
2
  import { createContext, forwardRef, useCallback, useContext, useEffect, useRef, useState } from "react";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  import { AnimatePresence, motion } from "framer-motion";
@@ -11,34 +11,34 @@ var useToast = () => {
11
11
  };
12
12
  var typeStyles = {
13
13
  success: {
14
- bg: "bg-white dark:bg-neutral-800 border-success-border",
15
- icon: "text-success",
16
- iconBg: "bg-success-subtle"
14
+ bg: "bg-ds-surface-1 border-ds-state-success-border",
15
+ icon: "text-ds-state-success-text",
16
+ iconBg: "bg-ds-state-success-surface"
17
17
  },
18
18
  error: {
19
- bg: "bg-white dark:bg-neutral-800 border-danger-border",
20
- icon: "text-danger",
21
- iconBg: "bg-danger-subtle"
19
+ bg: "bg-ds-surface-1 border-ds-state-error-border",
20
+ icon: "text-ds-state-error-text",
21
+ iconBg: "bg-ds-state-error-surface"
22
22
  },
23
23
  warning: {
24
- bg: "bg-white dark:bg-neutral-800 border-warning-border",
25
- icon: "text-warning",
26
- iconBg: "bg-warning-subtle"
24
+ bg: "bg-ds-surface-1 border-ds-state-warning-border",
25
+ icon: "text-ds-state-warning-text",
26
+ iconBg: "bg-ds-state-warning-surface"
27
27
  },
28
28
  info: {
29
- bg: "bg-white dark:bg-neutral-800 border-info-border",
30
- icon: "text-info",
31
- iconBg: "bg-info-subtle"
29
+ bg: "bg-ds-surface-1 border-ds-state-info-border",
30
+ icon: "text-ds-state-info-text",
31
+ iconBg: "bg-ds-state-info-surface"
32
32
  },
33
33
  default: {
34
- bg: "bg-white dark:bg-neutral-800 border-neutral-200 dark:border-neutral-700",
35
- icon: "text-neutral-500",
36
- iconBg: "bg-neutral-100 dark:bg-neutral-700"
34
+ bg: "bg-ds-surface-1 border-ds-border-2",
35
+ icon: "text-ds-2",
36
+ iconBg: "bg-ds-surface-2"
37
37
  },
38
38
  loading: {
39
- bg: "bg-white dark:bg-neutral-800 border-neutral-200 dark:border-neutral-700",
40
- icon: "text-accent",
41
- iconBg: "bg-accent-subtle"
39
+ bg: "bg-ds-surface-1 border-ds-border-2",
40
+ icon: "text-ds-1",
41
+ iconBg: "bg-ds-accent-subtle"
42
42
  }
43
43
  };
44
44
  var positionStyles = {
@@ -157,9 +157,9 @@ var ToastItem = forwardRef(({ toast, onDismiss, position }, ref) => {
157
157
  "aria-live": "polite",
158
158
  children: [
159
159
  duration && duration > 0 && type !== "loading" && /* @__PURE__ */ jsx("div", {
160
- className: "absolute bottom-0 left-0 right-0 h-1 bg-neutral-100 dark:bg-neutral-700",
160
+ className: "absolute bottom-0 left-0 right-0 h-1 bg-ds-surface-2",
161
161
  children: /* @__PURE__ */ jsx(motion.div, {
162
- className: `h-full ${type === "success" ? "bg-success" : type === "error" ? "bg-destructive" : type === "warning" ? "bg-warning" : type === "info" ? "bg-info" : "bg-neutral-400"}`,
162
+ className: `h-full ${type === "success" ? "bg-ds-state-success" : type === "error" ? "bg-ds-state-danger" : type === "warning" ? "bg-ds-state-warning" : type === "info" ? "bg-ds-state-info" : "bg-ds-border-3"}`,
163
163
  style: { width: `${progress}%` },
164
164
  transition: { duration: .05 }
165
165
  })
@@ -172,11 +172,11 @@ var ToastItem = forwardRef(({ toast, onDismiss, position }, ref) => {
172
172
  className: "flex-1 min-w-0",
173
173
  children: [
174
174
  title && /* @__PURE__ */ jsx("p", {
175
- className: "font-semibold text-neutral-900 dark:text-white text-sm",
175
+ className: "text-sm font-semibold text-ds-1",
176
176
  children: title
177
177
  }),
178
178
  description && /* @__PURE__ */ jsx("p", {
179
- className: `text-sm text-neutral-600 dark:text-neutral-300 ${title ? "mt-1" : ""}`,
179
+ className: `text-sm text-ds-2 ${title ? "mt-1" : ""}`,
180
180
  children: description
181
181
  }),
182
182
  action && /* @__PURE__ */ jsx("button", {
@@ -184,7 +184,7 @@ var ToastItem = forwardRef(({ toast, onDismiss, position }, ref) => {
184
184
  action.onClick();
185
185
  onDismiss(toast.id);
186
186
  },
187
- className: "mt-2 text-sm font-medium text-accent hover:underline",
187
+ className: "mt-2 text-sm font-medium text-ds-1 hover:underline",
188
188
  children: action.label
189
189
  })
190
190
  ]
@@ -194,7 +194,7 @@ var ToastItem = forwardRef(({ toast, onDismiss, position }, ref) => {
194
194
  toast.onDismiss?.();
195
195
  onDismiss(toast.id);
196
196
  },
197
- className: "absolute top-3 right-3 p-1 rounded-full text-neutral-400 hover:text-neutral-600 dark:text-neutral-500 dark:hover:text-neutral-300 hover:bg-neutral-100 dark:hover:bg-neutral-700 transition-colors",
197
+ className: "absolute top-3 right-3 rounded-full p-1 text-ds-2 transition-colors hover:bg-ds-surface-2 hover:text-ds-1",
198
198
  "aria-label": "Dismiss",
199
199
  children: /* @__PURE__ */ jsx(CloseIcon, {
200
200
  className: "w-4 h-4",
@@ -336,4 +336,4 @@ var toastStandalone = {
336
336
  //#endregion
337
337
  export { useToast as a, toastStandalone as i, ToastProvider as n, setGlobalToast as r, ToastItem as t };
338
338
 
339
- //# sourceMappingURL=toast-CvfP7PUP.mjs.map
339
+ //# sourceMappingURL=toast-CpX-22n2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toast-CpX-22n2.mjs","names":[],"sources":["../../src/components/overlays/toast/Toast.tsx"],"sourcesContent":["import {\n createContext,\n useContext,\n useState,\n useCallback,\n useRef,\n useEffect,\n forwardRef,\n} from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport {\n AlertTriangleIcon,\n CheckCircleIcon,\n CloseIcon,\n InfoCircleIcon,\n LoaderIcon,\n XCircleIcon,\n} from \"../../icons\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type ToastType =\n | \"success\"\n | \"error\"\n | \"warning\"\n | \"info\"\n | \"default\"\n | \"loading\";\nexport type ToastPosition =\n | \"top-left\"\n | \"top-center\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-center\"\n | \"bottom-right\";\n\nexport interface ToastAction {\n label: string;\n onClick: () => void;\n}\n\nexport interface Toast {\n id: string;\n type: ToastType;\n title?: string;\n description?: string;\n duration?: number;\n icon?: React.ReactNode;\n action?: ToastAction;\n dismissible?: boolean;\n onDismiss?: () => void;\n onAutoClose?: () => void;\n promise?: {\n loading: string;\n success: string | ((data: unknown) => string);\n error: string | ((error: unknown) => string);\n };\n}\n\nexport interface ToastOptions {\n type?: ToastType;\n title?: string;\n description?: string;\n duration?: number;\n icon?: React.ReactNode;\n action?: ToastAction;\n dismissible?: boolean;\n onDismiss?: () => void;\n onAutoClose?: () => void;\n}\n\nexport interface ToastContextValue {\n toasts: Toast[];\n toast: (options: ToastOptions | string) => string;\n success: (options: ToastOptions | string) => string;\n error: (options: ToastOptions | string) => string;\n warning: (options: ToastOptions | string) => string;\n info: (options: ToastOptions | string) => string;\n loading: (options: ToastOptions | string) => string;\n promise: <T>(\n promise: Promise<T>,\n options: {\n loading: string;\n success: string | ((data: T) => string);\n error: string | ((error: unknown) => string);\n },\n ) => Promise<T>;\n dismiss: (id: string) => void;\n dismissAll: () => void;\n update: (id: string, options: Partial<ToastOptions>) => void;\n}\n\nexport interface ToastProviderProps {\n children: React.ReactNode;\n /** Default position for toasts */\n position?: ToastPosition;\n /** Default duration in milliseconds */\n duration?: number;\n /** Maximum number of visible toasts */\n maxToasts?: number;\n /** Gap between toasts */\n gap?: number;\n /** Whether toasts are dismissible by default */\n dismissible?: boolean;\n /** Custom className for the toast container */\n containerClassName?: string;\n}\n\nexport interface ToastItemProps {\n toast: Toast;\n onDismiss: (id: string) => void;\n position: ToastPosition;\n}\n\n// ============================================================================\n// Context\n// ============================================================================\n\nconst ToastContext = createContext<ToastContextValue | null>(null);\n\nexport const useToast = (): ToastContextValue => {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error(\"useToast must be used within a ToastProvider\");\n }\n return context;\n};\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst typeStyles: Record<\n ToastType,\n { bg: string; icon: string; iconBg: string }\n> = {\n success: {\n bg: \"bg-ds-surface-1 border-ds-state-success-border\",\n icon: \"text-ds-state-success-text\",\n iconBg: \"bg-ds-state-success-surface\",\n },\n error: {\n bg: \"bg-ds-surface-1 border-ds-state-error-border\",\n icon: \"text-ds-state-error-text\",\n iconBg: \"bg-ds-state-error-surface\",\n },\n warning: {\n bg: \"bg-ds-surface-1 border-ds-state-warning-border\",\n icon: \"text-ds-state-warning-text\",\n iconBg: \"bg-ds-state-warning-surface\",\n },\n info: {\n bg: \"bg-ds-surface-1 border-ds-state-info-border\",\n icon: \"text-ds-state-info-text\",\n iconBg: \"bg-ds-state-info-surface\",\n },\n default: {\n bg: \"bg-ds-surface-1 border-ds-border-2\",\n icon: \"text-ds-2\",\n iconBg: \"bg-ds-surface-2\",\n },\n loading: {\n bg: \"bg-ds-surface-1 border-ds-border-2\",\n icon: \"text-ds-1\",\n iconBg: \"bg-ds-accent-subtle\",\n },\n};\n\nconst positionStyles: Record<ToastPosition, string> = {\n \"top-left\": \"top-4 left-4\",\n \"top-center\": \"top-4 left-1/2 -translate-x-1/2\",\n \"top-right\": \"top-4 right-4\",\n \"bottom-left\": \"bottom-4 left-4\",\n \"bottom-center\": \"bottom-4 left-1/2 -translate-x-1/2\",\n \"bottom-right\": \"bottom-4 right-4\",\n};\n\nconst getMotionVariants = (position: ToastPosition) => {\n const isTop = position.startsWith(\"top\");\n const isCenter = position.includes(\"center\");\n const isLeft = position.includes(\"left\");\n\n return {\n initial: {\n opacity: 0,\n y: isTop ? -20 : 20,\n x: isCenter ? 0 : isLeft ? -20 : 20,\n scale: 0.95,\n },\n animate: {\n opacity: 1,\n y: 0,\n x: 0,\n scale: 1,\n },\n exit: {\n opacity: 0,\n y: isTop ? -20 : 20,\n scale: 0.95,\n transition: { duration: 0.15 },\n },\n };\n};\n\n// ============================================================================\n// Toast Item Component\n// ============================================================================\n\nconst ToastItem = forwardRef<HTMLDivElement, ToastItemProps>(\n ({ toast, onDismiss, position }, ref) => {\n const {\n type,\n title,\n description,\n icon,\n action,\n dismissible = true,\n duration,\n } = toast;\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const [progress, setProgress] = useState(100);\n const [isPaused, setIsPaused] = useState(false);\n\n const defaultIcons: Record<ToastType, React.ReactNode> = {\n success: <CheckCircleIcon className=\"w-5 h-5\" aria-hidden=\"true\" />,\n error: <XCircleIcon className=\"w-5 h-5\" aria-hidden=\"true\" />,\n warning: <AlertTriangleIcon className=\"w-5 h-5\" aria-hidden=\"true\" />,\n info: <InfoCircleIcon className=\"w-5 h-5\" aria-hidden=\"true\" />,\n loading: (\n <LoaderIcon className=\"w-5 h-5 animate-spin\" aria-hidden=\"true\" />\n ),\n default: null,\n };\n\n // Auto-dismiss timer with progress\n useEffect(() => {\n if (duration && duration > 0 && type !== \"loading\") {\n const startTime = Date.now();\n const interval = 50;\n\n const updateProgress = () => {\n if (isPaused) return;\n\n const elapsed = Date.now() - startTime;\n const remaining = Math.max(0, 100 - (elapsed / duration) * 100);\n setProgress(remaining);\n\n if (remaining <= 0) {\n toast.onAutoClose?.();\n onDismiss(toast.id);\n }\n };\n\n timerRef.current = setInterval(updateProgress, interval);\n\n return () => {\n if (timerRef.current) {\n clearInterval(timerRef.current);\n }\n };\n }\n }, [duration, toast.id, type, isPaused, onDismiss, toast]);\n\n const handleMouseEnter = () => setIsPaused(true);\n const handleMouseLeave = () => setIsPaused(false);\n\n const styles = typeStyles[type];\n const displayIcon = icon ?? defaultIcons[type];\n const variants = getMotionVariants(position);\n\n return (\n <motion.div\n ref={ref}\n layout\n initial={variants.initial}\n animate={variants.animate}\n exit={variants.exit}\n transition={{ type: \"spring\", stiffness: 400, damping: 30 }}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n className={`\n relative flex items-start gap-3 p-4 pr-10\n rounded-lg shadow-lg border min-w-[320px] max-w-[420px]\n overflow-hidden\n ${styles.bg}\n `}\n role=\"alert\"\n aria-live=\"polite\"\n >\n {/* Progress bar */}\n {duration && duration > 0 && type !== \"loading\" && (\n <div className=\"absolute bottom-0 left-0 right-0 h-1 bg-ds-surface-2\">\n <motion.div\n className={`h-full ${\n type === \"success\"\n ? \"bg-ds-state-success\"\n : type === \"error\"\n ? \"bg-ds-state-danger\"\n : type === \"warning\"\n ? \"bg-ds-state-warning\"\n : type === \"info\"\n ? \"bg-ds-state-info\"\n : \"bg-ds-border-3\"\n }`}\n style={{ width: `${progress}%` }}\n transition={{ duration: 0.05 }}\n />\n </div>\n )}\n\n {/* Icon */}\n {displayIcon && (\n <div\n className={`shrink-0 p-1.5 rounded-full ${styles.iconBg} ${styles.icon}`}\n >\n {displayIcon}\n </div>\n )}\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n {title && <p className=\"text-sm font-semibold text-ds-1\">{title}</p>}\n {description && (\n <p className={`text-sm text-ds-2 ${title ? \"mt-1\" : \"\"}`}>\n {description}\n </p>\n )}\n {action && (\n <button\n onClick={() => {\n action.onClick();\n onDismiss(toast.id);\n }}\n className=\"mt-2 text-sm font-medium text-ds-1 hover:underline\"\n >\n {action.label}\n </button>\n )}\n </div>\n\n {/* Dismiss button */}\n {dismissible && (\n <button\n onClick={() => {\n toast.onDismiss?.();\n onDismiss(toast.id);\n }}\n className=\"absolute top-3 right-3 rounded-full p-1 text-ds-2 transition-colors hover:bg-ds-surface-2 hover:text-ds-1\"\n aria-label=\"Dismiss\"\n >\n <CloseIcon className=\"w-4 h-4\" aria-hidden=\"true\" />\n </button>\n )}\n </motion.div>\n );\n },\n);\n\nToastItem.displayName = \"ToastItem\";\n\n// ============================================================================\n// Toast Provider Component\n// ============================================================================\n\nexport const ToastProvider: React.FC<ToastProviderProps> = ({\n children,\n position = \"bottom-right\",\n duration = 5000,\n maxToasts = 5,\n gap = 12,\n dismissible = true,\n containerClassName = \"\",\n}) => {\n const [toasts, setToasts] = useState<Toast[]>([]);\n const toastIdCounter = useRef(0);\n\n const generateId = () => {\n toastIdCounter.current += 1;\n return `toast-${toastIdCounter.current}-${Date.now()}`;\n };\n\n const addToast = useCallback(\n (options: ToastOptions | string, type: ToastType = \"default\"): string => {\n const id = generateId();\n const toastOptions: ToastOptions =\n typeof options === \"string\" ? { description: options } : options;\n\n const newToast: Toast = {\n id,\n type: toastOptions.type ?? type,\n title: toastOptions.title,\n description: toastOptions.description,\n duration: toastOptions.duration ?? duration,\n icon: toastOptions.icon,\n action: toastOptions.action,\n dismissible: toastOptions.dismissible ?? dismissible,\n onDismiss: toastOptions.onDismiss,\n onAutoClose: toastOptions.onAutoClose,\n };\n\n setToasts((prev) => {\n const updated = [...prev, newToast];\n // Keep only the last maxToasts\n return updated.slice(-maxToasts);\n });\n\n return id;\n },\n [duration, dismissible, maxToasts],\n );\n\n const dismiss = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id));\n }, []);\n\n const dismissAll = useCallback(() => {\n setToasts([]);\n }, []);\n\n const update = useCallback((id: string, options: Partial<ToastOptions>) => {\n setToasts((prev) =>\n prev.map((t) =>\n t.id === id\n ? {\n ...t,\n ...options,\n type: options.type ?? t.type,\n }\n : t,\n ),\n );\n }, []);\n\n const toast = useCallback(\n (options: ToastOptions | string) => addToast(options, \"default\"),\n [addToast],\n );\n\n const success = useCallback(\n (options: ToastOptions | string) => addToast(options, \"success\"),\n [addToast],\n );\n\n const error = useCallback(\n (options: ToastOptions | string) => addToast(options, \"error\"),\n [addToast],\n );\n\n const warning = useCallback(\n (options: ToastOptions | string) => addToast(options, \"warning\"),\n [addToast],\n );\n\n const info = useCallback(\n (options: ToastOptions | string) => addToast(options, \"info\"),\n [addToast],\n );\n\n const loading = useCallback(\n (options: ToastOptions | string) => {\n const toastOptions: ToastOptions =\n typeof options === \"string\" ? { description: options } : options;\n return addToast(\n { ...toastOptions, duration: 0, dismissible: false },\n \"loading\",\n );\n },\n [addToast],\n );\n\n const promise = useCallback(\n async <T,>(\n promiseToResolve: Promise<T>,\n options: {\n loading: string;\n success: string | ((data: T) => string);\n error: string | ((error: unknown) => string);\n },\n ): Promise<T> => {\n const id = loading(options.loading);\n\n try {\n const result = await promiseToResolve;\n const successMessage =\n typeof options.success === \"function\"\n ? options.success(result)\n : options.success;\n update(id, {\n type: \"success\",\n description: successMessage,\n duration,\n dismissible: true,\n });\n return result;\n } catch (err) {\n const errorMessage =\n typeof options.error === \"function\"\n ? options.error(err)\n : options.error;\n update(id, {\n type: \"error\",\n description: errorMessage,\n duration,\n dismissible: true,\n });\n throw err;\n }\n },\n [loading, update, duration],\n );\n\n const contextValue: ToastContextValue = {\n toasts,\n toast,\n success,\n error,\n warning,\n info,\n loading,\n promise,\n dismiss,\n dismissAll,\n update,\n };\n\n const isTop = position.startsWith(\"top\");\n\n return (\n <ToastContext.Provider value={contextValue}>\n {children}\n <div\n className={`fixed z-100 flex flex-col pointer-events-none ${positionStyles[position]} ${containerClassName}`}\n style={{ gap: `${gap}px` }}\n >\n <AnimatePresence mode=\"popLayout\">\n {(isTop ? toasts : [...toasts].reverse()).map((t) => (\n <div key={t.id} className=\"pointer-events-auto\">\n <ToastItem toast={t} onDismiss={dismiss} position={position} />\n </div>\n ))}\n </AnimatePresence>\n </div>\n </ToastContext.Provider>\n );\n};\n\n// ============================================================================\n// Standalone toast function (for use without hooks)\n// ============================================================================\n\nlet globalToast: ToastContextValue | null = null;\n\nexport const setGlobalToast = (toastContext: ToastContextValue) => {\n globalToast = toastContext;\n};\n\nexport const toastStandalone = {\n show: (options: ToastOptions | string) => globalToast?.toast(options),\n success: (options: ToastOptions | string) => globalToast?.success(options),\n error: (options: ToastOptions | string) => globalToast?.error(options),\n warning: (options: ToastOptions | string) => globalToast?.warning(options),\n info: (options: ToastOptions | string) => globalToast?.info(options),\n loading: (options: ToastOptions | string) => globalToast?.loading(options),\n promise: <T,>(\n promise: Promise<T>,\n options: {\n loading: string;\n success: string | ((data: T) => string);\n error: string | ((error: unknown) => string);\n },\n ) => globalToast?.promise(promise, options),\n dismiss: (id: string) => globalToast?.dismiss(id),\n dismissAll: () => globalToast?.dismissAll(),\n};\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport default ToastProvider;\nexport { ToastItem };\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  require("./chunk-B_GkZjkl.cjs");
2
- const require_icons = require("./icons-BxIzP2jd.cjs");
2
+ const require_icons = require("./icons-CRanVZB1.cjs");
3
3
  let react = require("react");
4
4
  let react_jsx_runtime = require("react/jsx-runtime");
5
5
  let framer_motion = require("framer-motion");
@@ -12,34 +12,34 @@ var useToast = () => {
12
12
  };
13
13
  var typeStyles = {
14
14
  success: {
15
- bg: "bg-white dark:bg-neutral-800 border-success-border",
16
- icon: "text-success",
17
- iconBg: "bg-success-subtle"
15
+ bg: "bg-ds-surface-1 border-ds-state-success-border",
16
+ icon: "text-ds-state-success-text",
17
+ iconBg: "bg-ds-state-success-surface"
18
18
  },
19
19
  error: {
20
- bg: "bg-white dark:bg-neutral-800 border-danger-border",
21
- icon: "text-danger",
22
- iconBg: "bg-danger-subtle"
20
+ bg: "bg-ds-surface-1 border-ds-state-error-border",
21
+ icon: "text-ds-state-error-text",
22
+ iconBg: "bg-ds-state-error-surface"
23
23
  },
24
24
  warning: {
25
- bg: "bg-white dark:bg-neutral-800 border-warning-border",
26
- icon: "text-warning",
27
- iconBg: "bg-warning-subtle"
25
+ bg: "bg-ds-surface-1 border-ds-state-warning-border",
26
+ icon: "text-ds-state-warning-text",
27
+ iconBg: "bg-ds-state-warning-surface"
28
28
  },
29
29
  info: {
30
- bg: "bg-white dark:bg-neutral-800 border-info-border",
31
- icon: "text-info",
32
- iconBg: "bg-info-subtle"
30
+ bg: "bg-ds-surface-1 border-ds-state-info-border",
31
+ icon: "text-ds-state-info-text",
32
+ iconBg: "bg-ds-state-info-surface"
33
33
  },
34
34
  default: {
35
- bg: "bg-white dark:bg-neutral-800 border-neutral-200 dark:border-neutral-700",
36
- icon: "text-neutral-500",
37
- iconBg: "bg-neutral-100 dark:bg-neutral-700"
35
+ bg: "bg-ds-surface-1 border-ds-border-2",
36
+ icon: "text-ds-2",
37
+ iconBg: "bg-ds-surface-2"
38
38
  },
39
39
  loading: {
40
- bg: "bg-white dark:bg-neutral-800 border-neutral-200 dark:border-neutral-700",
41
- icon: "text-accent",
42
- iconBg: "bg-accent-subtle"
40
+ bg: "bg-ds-surface-1 border-ds-border-2",
41
+ icon: "text-ds-1",
42
+ iconBg: "bg-ds-accent-subtle"
43
43
  }
44
44
  };
45
45
  var positionStyles = {
@@ -158,9 +158,9 @@ var ToastItem = (0, react.forwardRef)(({ toast, onDismiss, position }, ref) => {
158
158
  "aria-live": "polite",
159
159
  children: [
160
160
  duration && duration > 0 && type !== "loading" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
161
- className: "absolute bottom-0 left-0 right-0 h-1 bg-neutral-100 dark:bg-neutral-700",
161
+ className: "absolute bottom-0 left-0 right-0 h-1 bg-ds-surface-2",
162
162
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(framer_motion.motion.div, {
163
- className: `h-full ${type === "success" ? "bg-success" : type === "error" ? "bg-destructive" : type === "warning" ? "bg-warning" : type === "info" ? "bg-info" : "bg-neutral-400"}`,
163
+ className: `h-full ${type === "success" ? "bg-ds-state-success" : type === "error" ? "bg-ds-state-danger" : type === "warning" ? "bg-ds-state-warning" : type === "info" ? "bg-ds-state-info" : "bg-ds-border-3"}`,
164
164
  style: { width: `${progress}%` },
165
165
  transition: { duration: .05 }
166
166
  })
@@ -173,11 +173,11 @@ var ToastItem = (0, react.forwardRef)(({ toast, onDismiss, position }, ref) => {
173
173
  className: "flex-1 min-w-0",
174
174
  children: [
175
175
  title && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
176
- className: "font-semibold text-neutral-900 dark:text-white text-sm",
176
+ className: "text-sm font-semibold text-ds-1",
177
177
  children: title
178
178
  }),
179
179
  description && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
180
- className: `text-sm text-neutral-600 dark:text-neutral-300 ${title ? "mt-1" : ""}`,
180
+ className: `text-sm text-ds-2 ${title ? "mt-1" : ""}`,
181
181
  children: description
182
182
  }),
183
183
  action && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
@@ -185,7 +185,7 @@ var ToastItem = (0, react.forwardRef)(({ toast, onDismiss, position }, ref) => {
185
185
  action.onClick();
186
186
  onDismiss(toast.id);
187
187
  },
188
- className: "mt-2 text-sm font-medium text-accent hover:underline",
188
+ className: "mt-2 text-sm font-medium text-ds-1 hover:underline",
189
189
  children: action.label
190
190
  })
191
191
  ]
@@ -195,7 +195,7 @@ var ToastItem = (0, react.forwardRef)(({ toast, onDismiss, position }, ref) => {
195
195
  toast.onDismiss?.();
196
196
  onDismiss(toast.id);
197
197
  },
198
- className: "absolute top-3 right-3 p-1 rounded-full text-neutral-400 hover:text-neutral-600 dark:text-neutral-500 dark:hover:text-neutral-300 hover:bg-neutral-100 dark:hover:bg-neutral-700 transition-colors",
198
+ className: "absolute top-3 right-3 rounded-full p-1 text-ds-2 transition-colors hover:bg-ds-surface-2 hover:text-ds-1",
199
199
  "aria-label": "Dismiss",
200
200
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons.CloseIcon, {
201
201
  className: "w-4 h-4",
@@ -366,4 +366,4 @@ Object.defineProperty(exports, "useToast", {
366
366
  }
367
367
  });
368
368
 
369
- //# sourceMappingURL=toast-Ds7_19Ap.cjs.map
369
+ //# sourceMappingURL=toast-REa6FRBc.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toast-REa6FRBc.cjs","names":[],"sources":["../../src/components/overlays/toast/Toast.tsx"],"sourcesContent":["import {\n createContext,\n useContext,\n useState,\n useCallback,\n useRef,\n useEffect,\n forwardRef,\n} from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport {\n AlertTriangleIcon,\n CheckCircleIcon,\n CloseIcon,\n InfoCircleIcon,\n LoaderIcon,\n XCircleIcon,\n} from \"../../icons\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type ToastType =\n | \"success\"\n | \"error\"\n | \"warning\"\n | \"info\"\n | \"default\"\n | \"loading\";\nexport type ToastPosition =\n | \"top-left\"\n | \"top-center\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-center\"\n | \"bottom-right\";\n\nexport interface ToastAction {\n label: string;\n onClick: () => void;\n}\n\nexport interface Toast {\n id: string;\n type: ToastType;\n title?: string;\n description?: string;\n duration?: number;\n icon?: React.ReactNode;\n action?: ToastAction;\n dismissible?: boolean;\n onDismiss?: () => void;\n onAutoClose?: () => void;\n promise?: {\n loading: string;\n success: string | ((data: unknown) => string);\n error: string | ((error: unknown) => string);\n };\n}\n\nexport interface ToastOptions {\n type?: ToastType;\n title?: string;\n description?: string;\n duration?: number;\n icon?: React.ReactNode;\n action?: ToastAction;\n dismissible?: boolean;\n onDismiss?: () => void;\n onAutoClose?: () => void;\n}\n\nexport interface ToastContextValue {\n toasts: Toast[];\n toast: (options: ToastOptions | string) => string;\n success: (options: ToastOptions | string) => string;\n error: (options: ToastOptions | string) => string;\n warning: (options: ToastOptions | string) => string;\n info: (options: ToastOptions | string) => string;\n loading: (options: ToastOptions | string) => string;\n promise: <T>(\n promise: Promise<T>,\n options: {\n loading: string;\n success: string | ((data: T) => string);\n error: string | ((error: unknown) => string);\n },\n ) => Promise<T>;\n dismiss: (id: string) => void;\n dismissAll: () => void;\n update: (id: string, options: Partial<ToastOptions>) => void;\n}\n\nexport interface ToastProviderProps {\n children: React.ReactNode;\n /** Default position for toasts */\n position?: ToastPosition;\n /** Default duration in milliseconds */\n duration?: number;\n /** Maximum number of visible toasts */\n maxToasts?: number;\n /** Gap between toasts */\n gap?: number;\n /** Whether toasts are dismissible by default */\n dismissible?: boolean;\n /** Custom className for the toast container */\n containerClassName?: string;\n}\n\nexport interface ToastItemProps {\n toast: Toast;\n onDismiss: (id: string) => void;\n position: ToastPosition;\n}\n\n// ============================================================================\n// Context\n// ============================================================================\n\nconst ToastContext = createContext<ToastContextValue | null>(null);\n\nexport const useToast = (): ToastContextValue => {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error(\"useToast must be used within a ToastProvider\");\n }\n return context;\n};\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst typeStyles: Record<\n ToastType,\n { bg: string; icon: string; iconBg: string }\n> = {\n success: {\n bg: \"bg-ds-surface-1 border-ds-state-success-border\",\n icon: \"text-ds-state-success-text\",\n iconBg: \"bg-ds-state-success-surface\",\n },\n error: {\n bg: \"bg-ds-surface-1 border-ds-state-error-border\",\n icon: \"text-ds-state-error-text\",\n iconBg: \"bg-ds-state-error-surface\",\n },\n warning: {\n bg: \"bg-ds-surface-1 border-ds-state-warning-border\",\n icon: \"text-ds-state-warning-text\",\n iconBg: \"bg-ds-state-warning-surface\",\n },\n info: {\n bg: \"bg-ds-surface-1 border-ds-state-info-border\",\n icon: \"text-ds-state-info-text\",\n iconBg: \"bg-ds-state-info-surface\",\n },\n default: {\n bg: \"bg-ds-surface-1 border-ds-border-2\",\n icon: \"text-ds-2\",\n iconBg: \"bg-ds-surface-2\",\n },\n loading: {\n bg: \"bg-ds-surface-1 border-ds-border-2\",\n icon: \"text-ds-1\",\n iconBg: \"bg-ds-accent-subtle\",\n },\n};\n\nconst positionStyles: Record<ToastPosition, string> = {\n \"top-left\": \"top-4 left-4\",\n \"top-center\": \"top-4 left-1/2 -translate-x-1/2\",\n \"top-right\": \"top-4 right-4\",\n \"bottom-left\": \"bottom-4 left-4\",\n \"bottom-center\": \"bottom-4 left-1/2 -translate-x-1/2\",\n \"bottom-right\": \"bottom-4 right-4\",\n};\n\nconst getMotionVariants = (position: ToastPosition) => {\n const isTop = position.startsWith(\"top\");\n const isCenter = position.includes(\"center\");\n const isLeft = position.includes(\"left\");\n\n return {\n initial: {\n opacity: 0,\n y: isTop ? -20 : 20,\n x: isCenter ? 0 : isLeft ? -20 : 20,\n scale: 0.95,\n },\n animate: {\n opacity: 1,\n y: 0,\n x: 0,\n scale: 1,\n },\n exit: {\n opacity: 0,\n y: isTop ? -20 : 20,\n scale: 0.95,\n transition: { duration: 0.15 },\n },\n };\n};\n\n// ============================================================================\n// Toast Item Component\n// ============================================================================\n\nconst ToastItem = forwardRef<HTMLDivElement, ToastItemProps>(\n ({ toast, onDismiss, position }, ref) => {\n const {\n type,\n title,\n description,\n icon,\n action,\n dismissible = true,\n duration,\n } = toast;\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const [progress, setProgress] = useState(100);\n const [isPaused, setIsPaused] = useState(false);\n\n const defaultIcons: Record<ToastType, React.ReactNode> = {\n success: <CheckCircleIcon className=\"w-5 h-5\" aria-hidden=\"true\" />,\n error: <XCircleIcon className=\"w-5 h-5\" aria-hidden=\"true\" />,\n warning: <AlertTriangleIcon className=\"w-5 h-5\" aria-hidden=\"true\" />,\n info: <InfoCircleIcon className=\"w-5 h-5\" aria-hidden=\"true\" />,\n loading: (\n <LoaderIcon className=\"w-5 h-5 animate-spin\" aria-hidden=\"true\" />\n ),\n default: null,\n };\n\n // Auto-dismiss timer with progress\n useEffect(() => {\n if (duration && duration > 0 && type !== \"loading\") {\n const startTime = Date.now();\n const interval = 50;\n\n const updateProgress = () => {\n if (isPaused) return;\n\n const elapsed = Date.now() - startTime;\n const remaining = Math.max(0, 100 - (elapsed / duration) * 100);\n setProgress(remaining);\n\n if (remaining <= 0) {\n toast.onAutoClose?.();\n onDismiss(toast.id);\n }\n };\n\n timerRef.current = setInterval(updateProgress, interval);\n\n return () => {\n if (timerRef.current) {\n clearInterval(timerRef.current);\n }\n };\n }\n }, [duration, toast.id, type, isPaused, onDismiss, toast]);\n\n const handleMouseEnter = () => setIsPaused(true);\n const handleMouseLeave = () => setIsPaused(false);\n\n const styles = typeStyles[type];\n const displayIcon = icon ?? defaultIcons[type];\n const variants = getMotionVariants(position);\n\n return (\n <motion.div\n ref={ref}\n layout\n initial={variants.initial}\n animate={variants.animate}\n exit={variants.exit}\n transition={{ type: \"spring\", stiffness: 400, damping: 30 }}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n className={`\n relative flex items-start gap-3 p-4 pr-10\n rounded-lg shadow-lg border min-w-[320px] max-w-[420px]\n overflow-hidden\n ${styles.bg}\n `}\n role=\"alert\"\n aria-live=\"polite\"\n >\n {/* Progress bar */}\n {duration && duration > 0 && type !== \"loading\" && (\n <div className=\"absolute bottom-0 left-0 right-0 h-1 bg-ds-surface-2\">\n <motion.div\n className={`h-full ${\n type === \"success\"\n ? \"bg-ds-state-success\"\n : type === \"error\"\n ? \"bg-ds-state-danger\"\n : type === \"warning\"\n ? \"bg-ds-state-warning\"\n : type === \"info\"\n ? \"bg-ds-state-info\"\n : \"bg-ds-border-3\"\n }`}\n style={{ width: `${progress}%` }}\n transition={{ duration: 0.05 }}\n />\n </div>\n )}\n\n {/* Icon */}\n {displayIcon && (\n <div\n className={`shrink-0 p-1.5 rounded-full ${styles.iconBg} ${styles.icon}`}\n >\n {displayIcon}\n </div>\n )}\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n {title && <p className=\"text-sm font-semibold text-ds-1\">{title}</p>}\n {description && (\n <p className={`text-sm text-ds-2 ${title ? \"mt-1\" : \"\"}`}>\n {description}\n </p>\n )}\n {action && (\n <button\n onClick={() => {\n action.onClick();\n onDismiss(toast.id);\n }}\n className=\"mt-2 text-sm font-medium text-ds-1 hover:underline\"\n >\n {action.label}\n </button>\n )}\n </div>\n\n {/* Dismiss button */}\n {dismissible && (\n <button\n onClick={() => {\n toast.onDismiss?.();\n onDismiss(toast.id);\n }}\n className=\"absolute top-3 right-3 rounded-full p-1 text-ds-2 transition-colors hover:bg-ds-surface-2 hover:text-ds-1\"\n aria-label=\"Dismiss\"\n >\n <CloseIcon className=\"w-4 h-4\" aria-hidden=\"true\" />\n </button>\n )}\n </motion.div>\n );\n },\n);\n\nToastItem.displayName = \"ToastItem\";\n\n// ============================================================================\n// Toast Provider Component\n// ============================================================================\n\nexport const ToastProvider: React.FC<ToastProviderProps> = ({\n children,\n position = \"bottom-right\",\n duration = 5000,\n maxToasts = 5,\n gap = 12,\n dismissible = true,\n containerClassName = \"\",\n}) => {\n const [toasts, setToasts] = useState<Toast[]>([]);\n const toastIdCounter = useRef(0);\n\n const generateId = () => {\n toastIdCounter.current += 1;\n return `toast-${toastIdCounter.current}-${Date.now()}`;\n };\n\n const addToast = useCallback(\n (options: ToastOptions | string, type: ToastType = \"default\"): string => {\n const id = generateId();\n const toastOptions: ToastOptions =\n typeof options === \"string\" ? { description: options } : options;\n\n const newToast: Toast = {\n id,\n type: toastOptions.type ?? type,\n title: toastOptions.title,\n description: toastOptions.description,\n duration: toastOptions.duration ?? duration,\n icon: toastOptions.icon,\n action: toastOptions.action,\n dismissible: toastOptions.dismissible ?? dismissible,\n onDismiss: toastOptions.onDismiss,\n onAutoClose: toastOptions.onAutoClose,\n };\n\n setToasts((prev) => {\n const updated = [...prev, newToast];\n // Keep only the last maxToasts\n return updated.slice(-maxToasts);\n });\n\n return id;\n },\n [duration, dismissible, maxToasts],\n );\n\n const dismiss = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id));\n }, []);\n\n const dismissAll = useCallback(() => {\n setToasts([]);\n }, []);\n\n const update = useCallback((id: string, options: Partial<ToastOptions>) => {\n setToasts((prev) =>\n prev.map((t) =>\n t.id === id\n ? {\n ...t,\n ...options,\n type: options.type ?? t.type,\n }\n : t,\n ),\n );\n }, []);\n\n const toast = useCallback(\n (options: ToastOptions | string) => addToast(options, \"default\"),\n [addToast],\n );\n\n const success = useCallback(\n (options: ToastOptions | string) => addToast(options, \"success\"),\n [addToast],\n );\n\n const error = useCallback(\n (options: ToastOptions | string) => addToast(options, \"error\"),\n [addToast],\n );\n\n const warning = useCallback(\n (options: ToastOptions | string) => addToast(options, \"warning\"),\n [addToast],\n );\n\n const info = useCallback(\n (options: ToastOptions | string) => addToast(options, \"info\"),\n [addToast],\n );\n\n const loading = useCallback(\n (options: ToastOptions | string) => {\n const toastOptions: ToastOptions =\n typeof options === \"string\" ? { description: options } : options;\n return addToast(\n { ...toastOptions, duration: 0, dismissible: false },\n \"loading\",\n );\n },\n [addToast],\n );\n\n const promise = useCallback(\n async <T,>(\n promiseToResolve: Promise<T>,\n options: {\n loading: string;\n success: string | ((data: T) => string);\n error: string | ((error: unknown) => string);\n },\n ): Promise<T> => {\n const id = loading(options.loading);\n\n try {\n const result = await promiseToResolve;\n const successMessage =\n typeof options.success === \"function\"\n ? options.success(result)\n : options.success;\n update(id, {\n type: \"success\",\n description: successMessage,\n duration,\n dismissible: true,\n });\n return result;\n } catch (err) {\n const errorMessage =\n typeof options.error === \"function\"\n ? options.error(err)\n : options.error;\n update(id, {\n type: \"error\",\n description: errorMessage,\n duration,\n dismissible: true,\n });\n throw err;\n }\n },\n [loading, update, duration],\n );\n\n const contextValue: ToastContextValue = {\n toasts,\n toast,\n success,\n error,\n warning,\n info,\n loading,\n promise,\n dismiss,\n dismissAll,\n update,\n };\n\n const isTop = position.startsWith(\"top\");\n\n return (\n <ToastContext.Provider value={contextValue}>\n {children}\n <div\n className={`fixed z-100 flex flex-col pointer-events-none ${positionStyles[position]} ${containerClassName}`}\n style={{ gap: `${gap}px` }}\n >\n <AnimatePresence mode=\"popLayout\">\n {(isTop ? toasts : [...toasts].reverse()).map((t) => (\n <div key={t.id} className=\"pointer-events-auto\">\n <ToastItem toast={t} onDismiss={dismiss} position={position} />\n </div>\n ))}\n </AnimatePresence>\n </div>\n </ToastContext.Provider>\n );\n};\n\n// ============================================================================\n// Standalone toast function (for use without hooks)\n// ============================================================================\n\nlet globalToast: ToastContextValue | null = null;\n\nexport const setGlobalToast = (toastContext: ToastContextValue) => {\n globalToast = toastContext;\n};\n\nexport const toastStandalone = {\n show: (options: ToastOptions | string) => globalToast?.toast(options),\n success: (options: ToastOptions | string) => globalToast?.success(options),\n error: (options: ToastOptions | string) => globalToast?.error(options),\n warning: (options: ToastOptions | string) => globalToast?.warning(options),\n info: (options: ToastOptions | string) => globalToast?.info(options),\n loading: (options: ToastOptions | string) => globalToast?.loading(options),\n promise: <T,>(\n promise: Promise<T>,\n options: {\n loading: string;\n success: string | ((data: T) => string);\n error: string | ((error: unknown) => string);\n },\n ) => globalToast?.promise(promise, options),\n dismiss: (id: string) => globalToast?.dismiss(id),\n dismissAll: () => globalToast?.dismissAll(),\n};\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport default ToastProvider;\nexport { ToastItem };\n"],"mappings":"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"}
@@ -9,10 +9,10 @@ var positionStyles = {
9
9
  right: "left-full top-1/2 -translate-y-1/2 ml-2"
10
10
  };
11
11
  var arrowStyles = {
12
- top: "top-full left-1/2 -translate-x-1/2 border-t-neutral-800 dark:border-t-neutral-700 border-x-transparent border-b-transparent border-t-[6px] border-x-[6px] border-b-0",
13
- bottom: "bottom-full left-1/2 -translate-x-1/2 border-b-neutral-800 dark:border-b-neutral-700 border-x-transparent border-t-transparent border-b-[6px] border-x-[6px] border-t-0",
14
- left: "left-full top-1/2 -translate-y-1/2 border-l-neutral-800 dark:border-l-neutral-700 border-y-transparent border-r-transparent border-l-[6px] border-y-[6px] border-r-0",
15
- right: "right-full top-1/2 -translate-y-1/2 border-r-neutral-800 dark:border-r-neutral-700 border-y-transparent border-l-transparent border-r-[6px] border-y-[6px] border-l-0"
12
+ top: "top-full left-1/2 -translate-x-1/2 border-t-ds-surface-2 border-x-transparent border-b-transparent border-t-[6px] border-x-[6px] border-b-0",
13
+ bottom: "bottom-full left-1/2 -translate-x-1/2 border-b-ds-surface-2 border-x-transparent border-t-transparent border-b-[6px] border-x-[6px] border-t-0",
14
+ left: "left-full top-1/2 -translate-y-1/2 border-l-ds-surface-2 border-y-transparent border-r-transparent border-l-[6px] border-y-[6px] border-r-0",
15
+ right: "right-full top-1/2 -translate-y-1/2 border-r-ds-surface-2 border-y-transparent border-l-transparent border-r-[6px] border-y-[6px] border-l-0"
16
16
  };
17
17
  var motionVariants = {
18
18
  top: {
@@ -180,8 +180,7 @@ function Tooltip({ content, children, position = "top", trigger = "hover", delay
180
180
  className: `
181
181
  absolute z-50 ${positionStyles[position]}
182
182
  px-3 py-2 text-sm font-medium
183
- bg-neutral-800 dark:bg-neutral-700
184
- text-white rounded-lg shadow-lg
183
+ rounded-lg border border-ds-border-2 bg-ds-surface-2 text-ds-1 shadow-lg
185
184
  whitespace-normal break-words
186
185
  ${className}
187
186
  `,
@@ -196,4 +195,4 @@ function Tooltip({ content, children, position = "top", trigger = "hover", delay
196
195
  //#endregion
197
196
  export { Tooltip as t };
198
197
 
199
- //# sourceMappingURL=tooltip-efHETBo1.mjs.map
198
+ //# sourceMappingURL=tooltip-CASvQiFQ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltip-CASvQiFQ.mjs","names":[],"sources":["../../src/components/overlays/tooltip/Tooltip.tsx"],"sourcesContent":["import { useState, useRef, useEffect, useCallback } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\n\nexport type TooltipPosition = \"top\" | \"bottom\" | \"left\" | \"right\";\nexport type TooltipTrigger = \"hover\" | \"click\" | \"focus\";\n\nexport interface TooltipProps {\n /** The content to display in the tooltip */\n content: React.ReactNode;\n /** The element that triggers the tooltip */\n children: React.ReactElement;\n /** Position of the tooltip relative to the trigger */\n position?: TooltipPosition;\n /** How the tooltip is triggered */\n trigger?: TooltipTrigger;\n /** Delay before showing tooltip (ms) */\n delayShow?: number;\n /** Delay before hiding tooltip (ms) */\n delayHide?: number;\n /** Whether the tooltip is disabled */\n disabled?: boolean;\n /** Custom className for the tooltip */\n className?: string;\n /** Whether to show an arrow pointing to the trigger */\n arrow?: boolean;\n /** Maximum width of the tooltip */\n maxWidth?: number;\n /** Controlled open state */\n open?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n}\n\nconst positionStyles: Record<TooltipPosition, string> = {\n top: \"bottom-full left-1/2 -translate-x-1/2 mb-2\",\n bottom: \"top-full left-1/2 -translate-x-1/2 mt-2\",\n left: \"right-full top-1/2 -translate-y-1/2 mr-2\",\n right: \"left-full top-1/2 -translate-y-1/2 ml-2\",\n};\n\nconst arrowStyles: Record<TooltipPosition, string> = {\n top: \"top-full left-1/2 -translate-x-1/2 border-t-ds-surface-2 border-x-transparent border-b-transparent border-t-[6px] border-x-[6px] border-b-0\",\n bottom:\n \"bottom-full left-1/2 -translate-x-1/2 border-b-ds-surface-2 border-x-transparent border-t-transparent border-b-[6px] border-x-[6px] border-t-0\",\n left: \"left-full top-1/2 -translate-y-1/2 border-l-ds-surface-2 border-y-transparent border-r-transparent border-l-[6px] border-y-[6px] border-r-0\",\n right:\n \"right-full top-1/2 -translate-y-1/2 border-r-ds-surface-2 border-y-transparent border-l-transparent border-r-[6px] border-y-[6px] border-l-0\",\n};\n\nconst motionVariants = {\n top: {\n initial: { opacity: 0, y: 4, scale: 0.95 },\n animate: { opacity: 1, y: 0, scale: 1 },\n exit: { opacity: 0, y: 4, scale: 0.95 },\n },\n bottom: {\n initial: { opacity: 0, y: -4, scale: 0.95 },\n animate: { opacity: 1, y: 0, scale: 1 },\n exit: { opacity: 0, y: -4, scale: 0.95 },\n },\n left: {\n initial: { opacity: 0, x: 4, scale: 0.95 },\n animate: { opacity: 1, x: 0, scale: 1 },\n exit: { opacity: 0, x: 4, scale: 0.95 },\n },\n right: {\n initial: { opacity: 0, x: -4, scale: 0.95 },\n animate: { opacity: 1, x: 0, scale: 1 },\n exit: { opacity: 0, x: -4, scale: 0.95 },\n },\n} as const;\n\nexport default function Tooltip({\n content,\n children,\n position = \"top\",\n trigger = \"hover\",\n delayShow = 200,\n delayHide = 0,\n disabled = false,\n className = \"\",\n arrow = true,\n maxWidth = 250,\n open: controlledOpen,\n onOpenChange,\n}: TooltipProps) {\n const [internalOpen, setInternalOpen] = useState(false);\n const showTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const hideTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n const setOpen = useCallback(\n (value: boolean) => {\n if (isControlled) {\n onOpenChange?.(value);\n } else {\n setInternalOpen(value);\n }\n },\n [isControlled, onOpenChange],\n );\n\n const clearTimeouts = useCallback(() => {\n if (showTimeoutRef.current) {\n clearTimeout(showTimeoutRef.current);\n showTimeoutRef.current = null;\n }\n if (hideTimeoutRef.current) {\n clearTimeout(hideTimeoutRef.current);\n hideTimeoutRef.current = null;\n }\n }, []);\n\n const showTooltip = useCallback(() => {\n if (disabled) return;\n clearTimeouts();\n if (delayShow > 0) {\n showTimeoutRef.current = setTimeout(() => setOpen(true), delayShow);\n } else {\n setOpen(true);\n }\n }, [disabled, delayShow, setOpen, clearTimeouts]);\n\n const hideTooltip = useCallback(() => {\n clearTimeouts();\n if (delayHide > 0) {\n hideTimeoutRef.current = setTimeout(() => setOpen(false), delayHide);\n } else {\n setOpen(false);\n }\n }, [delayHide, setOpen, clearTimeouts]);\n\n const toggleTooltip = useCallback(() => {\n if (disabled) return;\n setOpen(!isOpen);\n }, [disabled, isOpen, setOpen]);\n\n useEffect(() => {\n return () => clearTimeouts();\n }, [clearTimeouts]);\n\n // Close on click outside for click trigger\n useEffect(() => {\n if (trigger !== \"click\" || !isOpen) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n if (\n triggerRef.current &&\n !triggerRef.current.contains(event.target as Node)\n ) {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, [trigger, isOpen, setOpen]);\n\n // Close on Escape\n useEffect(() => {\n if (!isOpen) return;\n\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"keydown\", handleEscape);\n return () => document.removeEventListener(\"keydown\", handleEscape);\n }, [isOpen, setOpen]);\n\n const triggerProps = {\n ...(trigger === \"hover\" && {\n onMouseEnter: showTooltip,\n onMouseLeave: hideTooltip,\n }),\n ...(trigger === \"click\" && {\n onClick: toggleTooltip,\n }),\n ...(trigger === \"focus\" && {\n onFocus: showTooltip,\n onBlur: hideTooltip,\n }),\n };\n\n return (\n <div ref={triggerRef} className=\"relative inline-flex\" {...triggerProps}>\n {children}\n <AnimatePresence>\n {isOpen && !disabled && (\n <motion.div\n role=\"tooltip\"\n initial={motionVariants[position].initial}\n animate={motionVariants[position].animate}\n exit={motionVariants[position].exit}\n transition={{ duration: 0.15, ease: \"easeOut\" }}\n className={`\n absolute z-50 ${positionStyles[position]}\n px-3 py-2 text-sm font-medium\n rounded-lg border border-ds-border-2 bg-ds-surface-2 text-ds-1 shadow-lg\n whitespace-normal break-words\n ${className}\n `}\n style={{ maxWidth }}\n >\n {content}\n {arrow && (\n <span\n className={`absolute w-0 h-0 ${arrowStyles[position]}`}\n aria-hidden=\"true\"\n />\n )}\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n}\n\nexport { Tooltip };\n"],"mappings":"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"}
@@ -10,10 +10,10 @@ var positionStyles = {
10
10
  right: "left-full top-1/2 -translate-y-1/2 ml-2"
11
11
  };
12
12
  var arrowStyles = {
13
- top: "top-full left-1/2 -translate-x-1/2 border-t-neutral-800 dark:border-t-neutral-700 border-x-transparent border-b-transparent border-t-[6px] border-x-[6px] border-b-0",
14
- bottom: "bottom-full left-1/2 -translate-x-1/2 border-b-neutral-800 dark:border-b-neutral-700 border-x-transparent border-t-transparent border-b-[6px] border-x-[6px] border-t-0",
15
- left: "left-full top-1/2 -translate-y-1/2 border-l-neutral-800 dark:border-l-neutral-700 border-y-transparent border-r-transparent border-l-[6px] border-y-[6px] border-r-0",
16
- right: "right-full top-1/2 -translate-y-1/2 border-r-neutral-800 dark:border-r-neutral-700 border-y-transparent border-l-transparent border-r-[6px] border-y-[6px] border-l-0"
13
+ top: "top-full left-1/2 -translate-x-1/2 border-t-ds-surface-2 border-x-transparent border-b-transparent border-t-[6px] border-x-[6px] border-b-0",
14
+ bottom: "bottom-full left-1/2 -translate-x-1/2 border-b-ds-surface-2 border-x-transparent border-t-transparent border-b-[6px] border-x-[6px] border-t-0",
15
+ left: "left-full top-1/2 -translate-y-1/2 border-l-ds-surface-2 border-y-transparent border-r-transparent border-l-[6px] border-y-[6px] border-r-0",
16
+ right: "right-full top-1/2 -translate-y-1/2 border-r-ds-surface-2 border-y-transparent border-l-transparent border-r-[6px] border-y-[6px] border-l-0"
17
17
  };
18
18
  var motionVariants = {
19
19
  top: {
@@ -181,8 +181,7 @@ function Tooltip({ content, children, position = "top", trigger = "hover", delay
181
181
  className: `
182
182
  absolute z-50 ${positionStyles[position]}
183
183
  px-3 py-2 text-sm font-medium
184
- bg-neutral-800 dark:bg-neutral-700
185
- text-white rounded-lg shadow-lg
184
+ rounded-lg border border-ds-border-2 bg-ds-surface-2 text-ds-1 shadow-lg
186
185
  whitespace-normal break-words
187
186
  ${className}
188
187
  `,
@@ -202,4 +201,4 @@ Object.defineProperty(exports, "Tooltip", {
202
201
  }
203
202
  });
204
203
 
205
- //# sourceMappingURL=tooltip-nkIqViGk.cjs.map
204
+ //# sourceMappingURL=tooltip-CKF78rni.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltip-CKF78rni.cjs","names":[],"sources":["../../src/components/overlays/tooltip/Tooltip.tsx"],"sourcesContent":["import { useState, useRef, useEffect, useCallback } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\n\nexport type TooltipPosition = \"top\" | \"bottom\" | \"left\" | \"right\";\nexport type TooltipTrigger = \"hover\" | \"click\" | \"focus\";\n\nexport interface TooltipProps {\n /** The content to display in the tooltip */\n content: React.ReactNode;\n /** The element that triggers the tooltip */\n children: React.ReactElement;\n /** Position of the tooltip relative to the trigger */\n position?: TooltipPosition;\n /** How the tooltip is triggered */\n trigger?: TooltipTrigger;\n /** Delay before showing tooltip (ms) */\n delayShow?: number;\n /** Delay before hiding tooltip (ms) */\n delayHide?: number;\n /** Whether the tooltip is disabled */\n disabled?: boolean;\n /** Custom className for the tooltip */\n className?: string;\n /** Whether to show an arrow pointing to the trigger */\n arrow?: boolean;\n /** Maximum width of the tooltip */\n maxWidth?: number;\n /** Controlled open state */\n open?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n}\n\nconst positionStyles: Record<TooltipPosition, string> = {\n top: \"bottom-full left-1/2 -translate-x-1/2 mb-2\",\n bottom: \"top-full left-1/2 -translate-x-1/2 mt-2\",\n left: \"right-full top-1/2 -translate-y-1/2 mr-2\",\n right: \"left-full top-1/2 -translate-y-1/2 ml-2\",\n};\n\nconst arrowStyles: Record<TooltipPosition, string> = {\n top: \"top-full left-1/2 -translate-x-1/2 border-t-ds-surface-2 border-x-transparent border-b-transparent border-t-[6px] border-x-[6px] border-b-0\",\n bottom:\n \"bottom-full left-1/2 -translate-x-1/2 border-b-ds-surface-2 border-x-transparent border-t-transparent border-b-[6px] border-x-[6px] border-t-0\",\n left: \"left-full top-1/2 -translate-y-1/2 border-l-ds-surface-2 border-y-transparent border-r-transparent border-l-[6px] border-y-[6px] border-r-0\",\n right:\n \"right-full top-1/2 -translate-y-1/2 border-r-ds-surface-2 border-y-transparent border-l-transparent border-r-[6px] border-y-[6px] border-l-0\",\n};\n\nconst motionVariants = {\n top: {\n initial: { opacity: 0, y: 4, scale: 0.95 },\n animate: { opacity: 1, y: 0, scale: 1 },\n exit: { opacity: 0, y: 4, scale: 0.95 },\n },\n bottom: {\n initial: { opacity: 0, y: -4, scale: 0.95 },\n animate: { opacity: 1, y: 0, scale: 1 },\n exit: { opacity: 0, y: -4, scale: 0.95 },\n },\n left: {\n initial: { opacity: 0, x: 4, scale: 0.95 },\n animate: { opacity: 1, x: 0, scale: 1 },\n exit: { opacity: 0, x: 4, scale: 0.95 },\n },\n right: {\n initial: { opacity: 0, x: -4, scale: 0.95 },\n animate: { opacity: 1, x: 0, scale: 1 },\n exit: { opacity: 0, x: -4, scale: 0.95 },\n },\n} as const;\n\nexport default function Tooltip({\n content,\n children,\n position = \"top\",\n trigger = \"hover\",\n delayShow = 200,\n delayHide = 0,\n disabled = false,\n className = \"\",\n arrow = true,\n maxWidth = 250,\n open: controlledOpen,\n onOpenChange,\n}: TooltipProps) {\n const [internalOpen, setInternalOpen] = useState(false);\n const showTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const hideTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n const setOpen = useCallback(\n (value: boolean) => {\n if (isControlled) {\n onOpenChange?.(value);\n } else {\n setInternalOpen(value);\n }\n },\n [isControlled, onOpenChange],\n );\n\n const clearTimeouts = useCallback(() => {\n if (showTimeoutRef.current) {\n clearTimeout(showTimeoutRef.current);\n showTimeoutRef.current = null;\n }\n if (hideTimeoutRef.current) {\n clearTimeout(hideTimeoutRef.current);\n hideTimeoutRef.current = null;\n }\n }, []);\n\n const showTooltip = useCallback(() => {\n if (disabled) return;\n clearTimeouts();\n if (delayShow > 0) {\n showTimeoutRef.current = setTimeout(() => setOpen(true), delayShow);\n } else {\n setOpen(true);\n }\n }, [disabled, delayShow, setOpen, clearTimeouts]);\n\n const hideTooltip = useCallback(() => {\n clearTimeouts();\n if (delayHide > 0) {\n hideTimeoutRef.current = setTimeout(() => setOpen(false), delayHide);\n } else {\n setOpen(false);\n }\n }, [delayHide, setOpen, clearTimeouts]);\n\n const toggleTooltip = useCallback(() => {\n if (disabled) return;\n setOpen(!isOpen);\n }, [disabled, isOpen, setOpen]);\n\n useEffect(() => {\n return () => clearTimeouts();\n }, [clearTimeouts]);\n\n // Close on click outside for click trigger\n useEffect(() => {\n if (trigger !== \"click\" || !isOpen) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n if (\n triggerRef.current &&\n !triggerRef.current.contains(event.target as Node)\n ) {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, [trigger, isOpen, setOpen]);\n\n // Close on Escape\n useEffect(() => {\n if (!isOpen) return;\n\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"keydown\", handleEscape);\n return () => document.removeEventListener(\"keydown\", handleEscape);\n }, [isOpen, setOpen]);\n\n const triggerProps = {\n ...(trigger === \"hover\" && {\n onMouseEnter: showTooltip,\n onMouseLeave: hideTooltip,\n }),\n ...(trigger === \"click\" && {\n onClick: toggleTooltip,\n }),\n ...(trigger === \"focus\" && {\n onFocus: showTooltip,\n onBlur: hideTooltip,\n }),\n };\n\n return (\n <div ref={triggerRef} className=\"relative inline-flex\" {...triggerProps}>\n {children}\n <AnimatePresence>\n {isOpen && !disabled && (\n <motion.div\n role=\"tooltip\"\n initial={motionVariants[position].initial}\n animate={motionVariants[position].animate}\n exit={motionVariants[position].exit}\n transition={{ duration: 0.15, ease: \"easeOut\" }}\n className={`\n absolute z-50 ${positionStyles[position]}\n px-3 py-2 text-sm font-medium\n rounded-lg border border-ds-border-2 bg-ds-surface-2 text-ds-1 shadow-lg\n whitespace-normal break-words\n ${className}\n `}\n style={{ maxWidth }}\n >\n {content}\n {arrow && (\n <span\n className={`absolute w-0 h-0 ${arrowStyles[position]}`}\n aria-hidden=\"true\"\n />\n )}\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n}\n\nexport { Tooltip };\n"],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { n as mergeClassNames } from "./utils-ati1KkDb.mjs";
2
+ import { isValidElement } from "react";
3
+ import { jsx } from "react/jsx-runtime";
4
+ //#region src/components/typography/truncated-text/TruncatedText.tsx
5
+ function extractTextContent(node) {
6
+ if (typeof node === "string" || typeof node === "number") return String(node);
7
+ if (Array.isArray(node)) {
8
+ const parts = node.map((child) => extractTextContent(child)).filter((value) => Boolean(value));
9
+ return parts.length > 0 ? parts.join("") : void 0;
10
+ }
11
+ if (isValidElement(node)) return extractTextContent(node.props.children);
12
+ }
13
+ var TruncatedText = ({ children, as, lines = 1, width, maxWidth, showTitleOnHover = false, className, style, title, ...rest }) => {
14
+ const Component = as ?? "span";
15
+ const normalizedLines = Number.isFinite(lines) && lines > 0 ? Math.floor(lines) : 1;
16
+ const resolvedTitle = showTitleOnHover ? title ?? extractTextContent(children) : title;
17
+ const truncationStyle = normalizedLines > 1 ? {
18
+ ...style,
19
+ width,
20
+ maxWidth,
21
+ overflow: "hidden",
22
+ display: style?.display ?? "-webkit-box",
23
+ WebkitBoxOrient: "vertical",
24
+ WebkitLineClamp: normalizedLines
25
+ } : {
26
+ ...style,
27
+ width,
28
+ maxWidth,
29
+ overflow: "hidden",
30
+ textOverflow: "ellipsis",
31
+ whiteSpace: "nowrap",
32
+ display: style?.display ?? "block"
33
+ };
34
+ return /* @__PURE__ */ jsx(Component, {
35
+ ...rest,
36
+ title: resolvedTitle,
37
+ style: truncationStyle,
38
+ className: mergeClassNames("min-w-0", className),
39
+ children
40
+ });
41
+ };
42
+ //#endregion
43
+ export { TruncatedText as t };
44
+
45
+ //# sourceMappingURL=truncated-text-DTgks5yS.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"truncated-text-DTgks5yS.mjs","names":[],"sources":["../../src/components/typography/truncated-text/TruncatedText.tsx"],"sourcesContent":["import React, { isValidElement, type ElementType, type ReactNode } from \"react\";\n\nimport { mergeClassNames } from \"../../../utils\";\n\nfunction extractTextContent(node: ReactNode): string | undefined {\n if (typeof node === \"string\" || typeof node === \"number\") {\n return String(node);\n }\n\n if (Array.isArray(node)) {\n const parts = node\n .map((child) => extractTextContent(child))\n .filter((value): value is string => Boolean(value));\n\n return parts.length > 0 ? parts.join(\"\") : undefined;\n }\n\n if (isValidElement<{ children?: ReactNode }>(node)) {\n return extractTextContent(node.props.children);\n }\n\n return undefined;\n}\n\nexport interface TruncatedTextProps extends Omit<\n React.HTMLAttributes<HTMLElement>,\n \"children\"\n> {\n children: ReactNode;\n as?: ElementType;\n lines?: number;\n width?: React.CSSProperties[\"width\"];\n maxWidth?: React.CSSProperties[\"maxWidth\"];\n showTitleOnHover?: boolean;\n}\n\nexport const TruncatedText = ({\n children,\n as,\n lines = 1,\n width,\n maxWidth,\n showTitleOnHover = false,\n className,\n style,\n title,\n ...rest\n}: TruncatedTextProps): React.JSX.Element => {\n const Component = as ?? \"span\";\n const normalizedLines =\n Number.isFinite(lines) && lines > 0 ? Math.floor(lines) : 1;\n const resolvedTitle = showTitleOnHover\n ? (title ?? extractTextContent(children))\n : title;\n\n const truncationStyle: React.CSSProperties =\n normalizedLines > 1\n ? {\n ...style,\n width,\n maxWidth,\n overflow: \"hidden\",\n display: style?.display ?? \"-webkit-box\",\n WebkitBoxOrient: \"vertical\",\n WebkitLineClamp: normalizedLines,\n }\n : {\n ...style,\n width,\n maxWidth,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n display: style?.display ?? \"block\",\n };\n\n return (\n <Component\n {...rest}\n title={resolvedTitle}\n style={truncationStyle}\n className={mergeClassNames(\"min-w-0\", className)}\n >\n {children}\n </Component>\n );\n};\n"],"mappings":";;;;AAIA,SAAS,mBAAmB,MAAqC;AAC/D,KAAI,OAAO,SAAS,YAAY,OAAO,SAAS,SAC9C,QAAO,OAAO,KAAK;AAGrB,KAAI,MAAM,QAAQ,KAAK,EAAE;EACvB,MAAM,QAAQ,KACX,KAAK,UAAU,mBAAmB,MAAM,CAAC,CACzC,QAAQ,UAA2B,QAAQ,MAAM,CAAC;AAErD,SAAO,MAAM,SAAS,IAAI,MAAM,KAAK,GAAG,GAAG,KAAA;;AAG7C,KAAI,eAAyC,KAAK,CAChD,QAAO,mBAAmB,KAAK,MAAM,SAAS;;AAkBlD,IAAa,iBAAiB,EAC5B,UACA,IACA,QAAQ,GACR,OACA,UACA,mBAAmB,OACnB,WACA,OACA,OACA,GAAG,WACwC;CAC3C,MAAM,YAAY,MAAM;CACxB,MAAM,kBACJ,OAAO,SAAS,MAAM,IAAI,QAAQ,IAAI,KAAK,MAAM,MAAM,GAAG;CAC5D,MAAM,gBAAgB,mBACjB,SAAS,mBAAmB,SAAS,GACtC;CAEJ,MAAM,kBACJ,kBAAkB,IACd;EACE,GAAG;EACH;EACA;EACA,UAAU;EACV,SAAS,OAAO,WAAW;EAC3B,iBAAiB;EACjB,iBAAiB;EAClB,GACD;EACE,GAAG;EACH;EACA;EACA,UAAU;EACV,cAAc;EACd,YAAY;EACZ,SAAS,OAAO,WAAW;EAC5B;AAEP,QACE,oBAAC,WAAD;EACE,GAAI;EACJ,OAAO;EACP,OAAO;EACP,WAAW,gBAAgB,WAAW,UAAU;EAE/C;EACS,CAAA"}