erp-pro-ui 0.2.6 → 0.2.7

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 (422) hide show
  1. package/dist/accordion.cjs +1 -1
  2. package/dist/accordion.mjs +1 -1
  3. package/dist/alert.cjs +1 -1
  4. package/dist/alert.mjs +1 -1
  5. package/dist/animated-content.cjs +1 -1
  6. package/dist/animated-content.mjs +1 -1
  7. package/dist/ascii-text.cjs +1 -1
  8. package/dist/ascii-text.mjs +1 -1
  9. package/dist/background-gradient-animation.cjs +1 -1
  10. package/dist/background-gradient-animation.mjs +1 -1
  11. package/dist/button-hover-border-gradient.cjs +1 -1
  12. package/dist/button-hover-border-gradient.mjs +1 -1
  13. package/dist/button.cjs +1 -1
  14. package/dist/button.mjs +1 -1
  15. package/dist/calendar.cjs +1 -1
  16. package/dist/calendar.mjs +1 -1
  17. package/dist/card.cjs +1 -1
  18. package/dist/card.mjs +1 -1
  19. package/dist/carousel.cjs +1 -1
  20. package/dist/carousel.mjs +1 -1
  21. package/dist/catalog.cjs +7 -0
  22. package/dist/catalog.cjs.map +1 -1
  23. package/dist/catalog.d.ts +13 -1
  24. package/dist/catalog.d.ts.map +1 -1
  25. package/dist/catalog.mjs +7 -0
  26. package/dist/catalog.mjs.map +1 -1
  27. package/dist/charts.cjs +1 -1
  28. package/dist/charts.mjs +1 -1
  29. package/dist/checkbox.cjs +1 -1
  30. package/dist/checkbox.mjs +1 -1
  31. package/dist/chip.cjs +1 -1
  32. package/dist/chip.mjs +1 -1
  33. package/dist/chroma-grid.cjs +1 -1
  34. package/dist/chroma-grid.mjs +1 -1
  35. package/dist/chunks/{Drawer-Y0_sJni5.mjs → Drawer-BhTTQV8Q.mjs} +2 -2
  36. package/dist/chunks/{Drawer-Y0_sJni5.mjs.map → Drawer-BhTTQV8Q.mjs.map} +1 -1
  37. package/dist/chunks/{Drawer-D72Xi2Gq.cjs → Drawer-C_DLqrus.cjs} +2 -3
  38. package/dist/chunks/{Drawer-D72Xi2Gq.cjs.map → Drawer-C_DLqrus.cjs.map} +1 -1
  39. package/dist/chunks/{DropdownMenu-BQ4WlaGp.mjs → DropdownMenu-B18BI5l7.mjs} +2 -2
  40. package/dist/chunks/{DropdownMenu-BQ4WlaGp.mjs.map → DropdownMenu-B18BI5l7.mjs.map} +1 -1
  41. package/dist/chunks/{DropdownMenu-yh04burS.cjs → DropdownMenu-CEmlmX7P.cjs} +2 -3
  42. package/dist/chunks/{DropdownMenu-yh04burS.cjs.map → DropdownMenu-CEmlmX7P.cjs.map} +1 -1
  43. package/dist/chunks/{HoverBorderGradient-DEtm3owk.mjs → HoverBorderGradient-CGKcviEd.mjs} +2 -2
  44. package/dist/chunks/{HoverBorderGradient-DEtm3owk.mjs.map → HoverBorderGradient-CGKcviEd.mjs.map} +1 -1
  45. package/dist/chunks/{HoverBorderGradient-DMMyr2L3.cjs → HoverBorderGradient-DTKasFZO.cjs} +2 -3
  46. package/dist/chunks/{HoverBorderGradient-DMMyr2L3.cjs.map → HoverBorderGradient-DTKasFZO.cjs.map} +1 -1
  47. package/dist/chunks/{SunToMoonButton-BOKHzC1H.mjs → SunToMoonButton-DIMK53fW.mjs} +2 -2
  48. package/dist/chunks/{SunToMoonButton-BOKHzC1H.mjs.map → SunToMoonButton-DIMK53fW.mjs.map} +1 -1
  49. package/dist/chunks/{SunToMoonButton-gX4Kk_5B.cjs → SunToMoonButton-DUuIqw22.cjs} +2 -3
  50. package/dist/chunks/{SunToMoonButton-gX4Kk_5B.cjs.map → SunToMoonButton-DUuIqw22.cjs.map} +1 -1
  51. package/dist/chunks/{Tooltip-nnaiqJTT.cjs → Tooltip-1yPGRJ2Q.cjs} +1 -2
  52. package/dist/chunks/{Tooltip-nnaiqJTT.cjs.map → Tooltip-1yPGRJ2Q.cjs.map} +1 -1
  53. package/dist/chunks/{Tooltip-LbOKP__2.mjs → Tooltip-CEj-I4JO.mjs} +1 -1
  54. package/dist/chunks/{Tooltip-LbOKP__2.mjs.map → Tooltip-CEj-I4JO.mjs.map} +1 -1
  55. package/dist/chunks/{accordion-CLcjNX_X.mjs → accordion-Cf-Q3rec.mjs} +2 -2
  56. package/dist/chunks/{accordion-CLcjNX_X.mjs.map → accordion-Cf-Q3rec.mjs.map} +1 -1
  57. package/dist/chunks/{accordion-Bj3Sj0mC.cjs → accordion-X4PNqWkW.cjs} +2 -3
  58. package/dist/chunks/{accordion-Bj3Sj0mC.cjs.map → accordion-X4PNqWkW.cjs.map} +1 -1
  59. package/dist/chunks/{alert-BBA4Sh4e.cjs → alert-BEMULPIi.cjs} +2 -3
  60. package/dist/chunks/{alert-BBA4Sh4e.cjs.map → alert-BEMULPIi.cjs.map} +1 -1
  61. package/dist/chunks/{alert-oUz79MGc.mjs → alert-GImBqaCY.mjs} +2 -2
  62. package/dist/chunks/{alert-oUz79MGc.mjs.map → alert-GImBqaCY.mjs.map} +1 -1
  63. package/dist/chunks/{animated-content-CiNJLgbq.mjs → animated-content-Bp-Yt0_7.mjs} +1 -1
  64. package/dist/chunks/{animated-content-CiNJLgbq.mjs.map → animated-content-Bp-Yt0_7.mjs.map} +1 -1
  65. package/dist/chunks/{animated-content-B3wbiWQI.cjs → animated-content-tSHXDZq2.cjs} +1 -2
  66. package/dist/chunks/{animated-content-B3wbiWQI.cjs.map → animated-content-tSHXDZq2.cjs.map} +1 -1
  67. package/dist/chunks/{ascii-text-KwVE41Hw.cjs → ascii-text-Ctua6ucZ.cjs} +2 -2
  68. package/dist/chunks/{ascii-text-KwVE41Hw.cjs.map → ascii-text-Ctua6ucZ.cjs.map} +1 -1
  69. package/dist/chunks/{ascii-text-C6JegLhP.mjs → ascii-text-QyP7JU7g.mjs} +1 -1
  70. package/dist/chunks/{ascii-text-C6JegLhP.mjs.map → ascii-text-QyP7JU7g.mjs.map} +1 -1
  71. package/dist/chunks/{background-gradient-animation-CTc2ZR74.mjs → background-gradient-animation-CZUD_aq2.mjs} +2 -2
  72. package/dist/chunks/{background-gradient-animation-CTc2ZR74.mjs.map → background-gradient-animation-CZUD_aq2.mjs.map} +1 -1
  73. package/dist/chunks/{background-gradient-animation-1LZY3DYT.cjs → background-gradient-animation-PvM0i88k.cjs} +2 -3
  74. package/dist/chunks/{background-gradient-animation-1LZY3DYT.cjs.map → background-gradient-animation-PvM0i88k.cjs.map} +1 -1
  75. package/dist/chunks/{button-IDShmQqA.mjs → button-CAU9ej3h.mjs} +2 -2
  76. package/dist/chunks/{button-IDShmQqA.mjs.map → button-CAU9ej3h.mjs.map} +1 -1
  77. package/dist/chunks/{button-uD87K76W.cjs → button-D2ZYmVda.cjs} +2 -3
  78. package/dist/chunks/{button-uD87K76W.cjs.map → button-D2ZYmVda.cjs.map} +1 -1
  79. package/dist/chunks/{button-hover-border-gradient-DGZqd8je.cjs → button-hover-border-gradient-D12Zjmd3.cjs} +2 -3
  80. package/dist/chunks/{button-hover-border-gradient-DGZqd8je.cjs.map → button-hover-border-gradient-D12Zjmd3.cjs.map} +1 -1
  81. package/dist/chunks/{button-hover-border-gradient-B2ebbDek.mjs → button-hover-border-gradient-VNEg4V0o.mjs} +2 -2
  82. package/dist/chunks/{button-hover-border-gradient-B2ebbDek.mjs.map → button-hover-border-gradient-VNEg4V0o.mjs.map} +1 -1
  83. package/dist/chunks/calendar-BlUhssD4.mjs +203 -0
  84. package/dist/chunks/calendar-BlUhssD4.mjs.map +1 -0
  85. package/dist/chunks/calendar-CdKKhdx5.cjs +208 -0
  86. package/dist/chunks/calendar-CdKKhdx5.cjs.map +1 -0
  87. package/dist/chunks/{card-Cuud0jIt.cjs → card-C_Qr7E6E.cjs} +1 -2
  88. package/dist/chunks/{card-Cuud0jIt.cjs.map → card-C_Qr7E6E.cjs.map} +1 -1
  89. package/dist/chunks/{card-DNeC6jqk.mjs → card-DYHDNCPK.mjs} +1 -1
  90. package/dist/chunks/{card-DNeC6jqk.mjs.map → card-DYHDNCPK.mjs.map} +1 -1
  91. package/dist/chunks/{carousel-xHkrV_pt.cjs → carousel-DtOJEbEU.cjs} +4 -5
  92. package/dist/chunks/{carousel-xHkrV_pt.cjs.map → carousel-DtOJEbEU.cjs.map} +1 -1
  93. package/dist/chunks/{carousel-Dpe5QLJK.mjs → carousel-eeqWZZHE.mjs} +4 -4
  94. package/dist/chunks/{carousel-Dpe5QLJK.mjs.map → carousel-eeqWZZHE.mjs.map} +1 -1
  95. package/dist/chunks/{chartStyles-BADmRKZo.cjs → chartStyles-2mTluDoo.cjs} +1 -1
  96. package/dist/chunks/{chartStyles-BADmRKZo.cjs.map → chartStyles-2mTluDoo.cjs.map} +1 -1
  97. package/dist/chunks/{chartStyles-DPXgYmGn.mjs → chartStyles-DrHVYS5N.mjs} +1 -1
  98. package/dist/chunks/{chartStyles-DPXgYmGn.mjs.map → chartStyles-DrHVYS5N.mjs.map} +1 -1
  99. package/dist/chunks/{charts-COx3IbI2.cjs → charts-DMu4zp8j.cjs} +4 -4
  100. package/dist/chunks/{charts-COx3IbI2.cjs.map → charts-DMu4zp8j.cjs.map} +1 -1
  101. package/dist/chunks/{charts-C-KQ3Nk5.mjs → charts-DlskmT1J.mjs} +3 -3
  102. package/dist/chunks/{charts-C-KQ3Nk5.mjs.map → charts-DlskmT1J.mjs.map} +1 -1
  103. package/dist/chunks/{checkbox-Y04NlzB8.mjs → checkbox-D7EJQbqC.mjs} +1 -1
  104. package/dist/chunks/{checkbox-Y04NlzB8.mjs.map → checkbox-D7EJQbqC.mjs.map} +1 -1
  105. package/dist/chunks/{checkbox-CDknzh89.cjs → checkbox-Lw2UqyNE.cjs} +1 -2
  106. package/dist/chunks/{checkbox-CDknzh89.cjs.map → checkbox-Lw2UqyNE.cjs.map} +1 -1
  107. package/dist/chunks/{chip-sfQlzrbo.cjs → chip-D5i9VT9O.cjs} +4 -5
  108. package/dist/chunks/{chip-sfQlzrbo.cjs.map → chip-D5i9VT9O.cjs.map} +1 -1
  109. package/dist/chunks/{chip-B3j6R6sO.mjs → chip-DBlSQcqR.mjs} +4 -4
  110. package/dist/chunks/{chip-B3j6R6sO.mjs.map → chip-DBlSQcqR.mjs.map} +1 -1
  111. package/dist/chunks/{chroma-grid-Bp55pKEm.cjs → chroma-grid-CTDtdFUm.cjs} +2 -3
  112. package/dist/chunks/{chroma-grid-Bp55pKEm.cjs.map → chroma-grid-CTDtdFUm.cjs.map} +1 -1
  113. package/dist/chunks/{chroma-grid-BHS9qAn_.mjs → chroma-grid-DuLTfGVP.mjs} +2 -2
  114. package/dist/chunks/{chroma-grid-BHS9qAn_.mjs.map → chroma-grid-DuLTfGVP.mjs.map} +1 -1
  115. package/dist/chunks/{color-palette-Duud5Iqq.cjs → color-palette-DQQ9UV0N.cjs} +2 -2
  116. package/dist/chunks/{color-palette-Duud5Iqq.cjs.map → color-palette-DQQ9UV0N.cjs.map} +1 -1
  117. package/dist/chunks/{color-palette-D9Qlw2Cx.mjs → color-palette-G1HUXWJP.mjs} +1 -1
  118. package/dist/chunks/{color-palette-D9Qlw2Cx.mjs.map → color-palette-G1HUXWJP.mjs.map} +1 -1
  119. package/dist/chunks/{combobox-C3a2iogC.cjs → combobox-CkNzH1YV.cjs} +6 -6
  120. package/dist/chunks/{combobox-C3a2iogC.cjs.map → combobox-CkNzH1YV.cjs.map} +1 -1
  121. package/dist/chunks/{combobox-neBItbtz.mjs → combobox-xNmFFHd6.mjs} +5 -5
  122. package/dist/chunks/{combobox-neBItbtz.mjs.map → combobox-xNmFFHd6.mjs.map} +1 -1
  123. package/dist/chunks/dashboard-cards-Bww66_5K.cjs +6570 -0
  124. package/dist/chunks/dashboard-cards-Bww66_5K.cjs.map +1 -0
  125. package/dist/chunks/dashboard-cards-lnifLEyj.mjs +6385 -0
  126. package/dist/chunks/dashboard-cards-lnifLEyj.mjs.map +1 -0
  127. package/dist/chunks/{data-table-BZEiSZI2.cjs → data-table-BCVbzkLo.cjs} +16 -17
  128. package/dist/chunks/{data-table-BZEiSZI2.cjs.map → data-table-BCVbzkLo.cjs.map} +1 -1
  129. package/dist/chunks/{data-table-EfGKkerd.mjs → data-table-C25KHEn4.mjs} +14 -15
  130. package/dist/chunks/{data-table-EfGKkerd.mjs.map → data-table-C25KHEn4.mjs.map} +1 -1
  131. package/dist/chunks/date-picker--cqsgsIV.mjs +587 -0
  132. package/dist/chunks/date-picker--cqsgsIV.mjs.map +1 -0
  133. package/dist/chunks/date-picker-BJQdFyqr.cjs +592 -0
  134. package/dist/chunks/date-picker-BJQdFyqr.cjs.map +1 -0
  135. package/dist/chunks/{dialog-B60BjJz0.mjs → dialog-BHIeG3Sg.mjs} +3 -3
  136. package/dist/chunks/{dialog-B60BjJz0.mjs.map → dialog-BHIeG3Sg.mjs.map} +1 -1
  137. package/dist/chunks/{dialog-i9LdkXmF.cjs → dialog-CLKU0cXX.cjs} +3 -4
  138. package/dist/chunks/{dialog-i9LdkXmF.cjs.map → dialog-CLKU0cXX.cjs.map} +1 -1
  139. package/dist/chunks/draggable-grid-2L_eHKfp.cjs +245 -0
  140. package/dist/chunks/draggable-grid-2L_eHKfp.cjs.map +1 -0
  141. package/dist/chunks/draggable-grid-IuCMSOsE.mjs +240 -0
  142. package/dist/chunks/draggable-grid-IuCMSOsE.mjs.map +1 -0
  143. package/dist/chunks/{event-calendar-BbFOUDov.mjs → event-calendar-CO2doGJW.mjs} +11 -11
  144. package/dist/chunks/{event-calendar-BbFOUDov.mjs.map → event-calendar-CO2doGJW.mjs.map} +1 -1
  145. package/dist/chunks/{event-calendar-Bljd_7PI.cjs → event-calendar-CvficOuV.cjs} +11 -12
  146. package/dist/chunks/{event-calendar-Bljd_7PI.cjs.map → event-calendar-CvficOuV.cjs.map} +1 -1
  147. package/dist/chunks/{form-DGwdlSW2.cjs → form-DARN6jtX.cjs} +1 -2
  148. package/dist/chunks/{form-DGwdlSW2.cjs.map → form-DARN6jtX.cjs.map} +1 -1
  149. package/dist/chunks/{form-CDc9UM3r.mjs → form-DNuFklNR.mjs} +1 -1
  150. package/dist/chunks/{form-CDc9UM3r.mjs.map → form-DNuFklNR.mjs.map} +1 -1
  151. package/dist/chunks/{gradual-blur-BNYVlqb1.cjs → gradual-blur-BBLbpXD4.cjs} +2 -3
  152. package/dist/chunks/{gradual-blur-BNYVlqb1.cjs.map → gradual-blur-BBLbpXD4.cjs.map} +1 -1
  153. package/dist/chunks/{gradual-blur-Bw2KNmXb.mjs → gradual-blur-BPx2MSWI.mjs} +2 -2
  154. package/dist/chunks/{gradual-blur-Bw2KNmXb.mjs.map → gradual-blur-BPx2MSWI.mjs.map} +1 -1
  155. package/dist/chunks/{hover-card-G66SUyjq.mjs → hover-card-BkVHGXz6.mjs} +1 -1
  156. package/dist/chunks/{hover-card-G66SUyjq.mjs.map → hover-card-BkVHGXz6.mjs.map} +1 -1
  157. package/dist/chunks/{hover-card-Dp6Y2h2J.cjs → hover-card-DwZFtu8w.cjs} +1 -2
  158. package/dist/chunks/{hover-card-Dp6Y2h2J.cjs.map → hover-card-DwZFtu8w.cjs.map} +1 -1
  159. package/dist/chunks/{icons-ub9iu-JG.cjs → icons-Ci8yEvvF.cjs} +48 -2
  160. package/dist/chunks/icons-Ci8yEvvF.cjs.map +1 -0
  161. package/dist/chunks/{icons-JzMKLygv.mjs → icons-CkVHNbbN.mjs} +43 -2
  162. package/dist/chunks/icons-CkVHNbbN.mjs.map +1 -0
  163. package/dist/chunks/{input-CRc3MKb_.mjs → input-B-XSdnfh.mjs} +4 -4
  164. package/dist/chunks/{input-CRc3MKb_.mjs.map → input-B-XSdnfh.mjs.map} +1 -1
  165. package/dist/chunks/{input-DMTwz27q.cjs → input-EH7x0pQY.cjs} +4 -5
  166. package/dist/chunks/{input-DMTwz27q.cjs.map → input-EH7x0pQY.cjs.map} +1 -1
  167. package/dist/chunks/{label-Bc_r54NU.mjs → label-CcsncrKQ.mjs} +1 -1
  168. package/dist/chunks/{label-Bc_r54NU.mjs.map → label-CcsncrKQ.mjs.map} +1 -1
  169. package/dist/chunks/{label-B5Ugq0Nk.cjs → label-Du-5H7wd.cjs} +1 -2
  170. package/dist/chunks/{label-B5Ugq0Nk.cjs.map → label-Du-5H7wd.cjs.map} +1 -1
  171. package/dist/chunks/{loading-ll2L6lc7.mjs → loading-2Lh_355V.mjs} +2 -2
  172. package/dist/chunks/{loading-ll2L6lc7.mjs.map → loading-2Lh_355V.mjs.map} +1 -1
  173. package/dist/chunks/{loading-DZKJc3e7.cjs → loading-DeGHTDO2.cjs} +2 -3
  174. package/dist/chunks/{loading-DZKJc3e7.cjs.map → loading-DeGHTDO2.cjs.map} +1 -1
  175. package/dist/chunks/{multi-select-combobox-C_8sxaiL.mjs → multi-select-combobox-BOdKmPj2.mjs} +4 -4
  176. package/dist/chunks/{multi-select-combobox-C_8sxaiL.mjs.map → multi-select-combobox-BOdKmPj2.mjs.map} +1 -1
  177. package/dist/chunks/{multi-select-combobox-CFJGq1hn.cjs → multi-select-combobox-PPYRcaPg.cjs} +5 -5
  178. package/dist/chunks/{multi-select-combobox-CFJGq1hn.cjs.map → multi-select-combobox-PPYRcaPg.cjs.map} +1 -1
  179. package/dist/chunks/{otp-input-BpcTJOmU.mjs → otp-input--_itTXaL.mjs} +1 -1
  180. package/dist/chunks/{otp-input-BpcTJOmU.mjs.map → otp-input--_itTXaL.mjs.map} +1 -1
  181. package/dist/chunks/{otp-input-B5-tuc0q.cjs → otp-input-Dgw_47Z7.cjs} +1 -2
  182. package/dist/chunks/{otp-input-B5-tuc0q.cjs.map → otp-input-Dgw_47Z7.cjs.map} +1 -1
  183. package/dist/chunks/{overlay-DzE_GyYf.cjs → overlay-15EzdrIu.cjs} +1 -2
  184. package/dist/chunks/{overlay-DzE_GyYf.cjs.map → overlay-15EzdrIu.cjs.map} +1 -1
  185. package/dist/chunks/{overlay-CG1dMYtO.mjs → overlay-BMbhF-EC.mjs} +1 -1
  186. package/dist/chunks/{overlay-CG1dMYtO.mjs.map → overlay-BMbhF-EC.mjs.map} +1 -1
  187. package/dist/chunks/{password-strength-meter-_o1T1HLO.cjs → password-strength-meter-Be1c-dnK.cjs} +2 -3
  188. package/dist/chunks/{password-strength-meter-_o1T1HLO.cjs.map → password-strength-meter-Be1c-dnK.cjs.map} +1 -1
  189. package/dist/chunks/{password-strength-meter-CH6uQAuK.mjs → password-strength-meter-Q1Qr-4tz.mjs} +2 -2
  190. package/dist/chunks/{password-strength-meter-CH6uQAuK.mjs.map → password-strength-meter-Q1Qr-4tz.mjs.map} +1 -1
  191. package/dist/chunks/{progress-bar-FfdFVvTT.cjs → progress-bar-BsnX079N.cjs} +3 -3
  192. package/dist/chunks/{progress-bar-FfdFVvTT.cjs.map → progress-bar-BsnX079N.cjs.map} +1 -1
  193. package/dist/chunks/{progress-bar-BAvRSW1b.mjs → progress-bar-l5WpbpZf.mjs} +2 -2
  194. package/dist/chunks/{progress-bar-BAvRSW1b.mjs.map → progress-bar-l5WpbpZf.mjs.map} +1 -1
  195. package/dist/chunks/{radio-BMOnxnUS.mjs → radio-B94_TGtz.mjs} +2 -2
  196. package/dist/chunks/{radio-BMOnxnUS.mjs.map → radio-B94_TGtz.mjs.map} +1 -1
  197. package/dist/chunks/{radio-wagafWwx.cjs → radio-W_NiS_dO.cjs} +2 -3
  198. package/dist/chunks/{radio-wagafWwx.cjs.map → radio-W_NiS_dO.cjs.map} +1 -1
  199. package/dist/chunks/{select-zFFyNmlY.cjs → select-C5lkcrSB.cjs} +5 -6
  200. package/dist/chunks/{select-zFFyNmlY.cjs.map → select-C5lkcrSB.cjs.map} +1 -1
  201. package/dist/chunks/{select--DeSgPdn.mjs → select-DnSSxddm.mjs} +5 -5
  202. package/dist/chunks/{select--DeSgPdn.mjs.map → select-DnSSxddm.mjs.map} +1 -1
  203. package/dist/chunks/{sidebar-oemmRzCL.mjs → sidebar-C3Sx87wD.mjs} +10 -11
  204. package/dist/chunks/{sidebar-oemmRzCL.mjs.map → sidebar-C3Sx87wD.mjs.map} +1 -1
  205. package/dist/chunks/{sidebar-Cq7UbKJT.cjs → sidebar-DDRWkz5k.cjs} +10 -12
  206. package/dist/chunks/{sidebar-Cq7UbKJT.cjs.map → sidebar-DDRWkz5k.cjs.map} +1 -1
  207. package/dist/chunks/{skeleton-DWvVc17T.cjs → skeleton-B2u9c1xJ.cjs} +2 -3
  208. package/dist/chunks/{skeleton-DWvVc17T.cjs.map → skeleton-B2u9c1xJ.cjs.map} +1 -1
  209. package/dist/chunks/{skeleton-BsDMlWZG.mjs → skeleton-DVAlrOq2.mjs} +2 -2
  210. package/dist/chunks/{skeleton-BsDMlWZG.mjs.map → skeleton-DVAlrOq2.mjs.map} +1 -1
  211. package/dist/chunks/{spinners-DlMcokJa.mjs → spinners-BQtIp2ov.mjs} +2 -2
  212. package/dist/chunks/{spinners-DlMcokJa.mjs.map → spinners-BQtIp2ov.mjs.map} +1 -1
  213. package/dist/chunks/{spinners-DBAJliAj.cjs → spinners-BiebALzS.cjs} +2 -3
  214. package/dist/chunks/{spinners-DBAJliAj.cjs.map → spinners-BiebALzS.cjs.map} +1 -1
  215. package/dist/chunks/{splash-cursor-CQ6_HwHV.cjs → splash-cursor-8b7ORB2k.cjs} +2 -3
  216. package/dist/chunks/{splash-cursor-CQ6_HwHV.cjs.map → splash-cursor-8b7ORB2k.cjs.map} +1 -1
  217. package/dist/chunks/{splash-cursor-Bb7LSzaO.mjs → splash-cursor-CeZffMed.mjs} +2 -2
  218. package/dist/chunks/{splash-cursor-Bb7LSzaO.mjs.map → splash-cursor-CeZffMed.mjs.map} +1 -1
  219. package/dist/chunks/{spotlight-card-COfSD7ns.cjs → spotlight-card-BQjp7hO1.cjs} +2 -3
  220. package/dist/chunks/{spotlight-card-COfSD7ns.cjs.map → spotlight-card-BQjp7hO1.cjs.map} +1 -1
  221. package/dist/chunks/{spotlight-card-Bs0iiSLc.mjs → spotlight-card-DiPtBCAK.mjs} +2 -2
  222. package/dist/chunks/{spotlight-card-Bs0iiSLc.mjs.map → spotlight-card-DiPtBCAK.mjs.map} +1 -1
  223. package/dist/chunks/{stepper-CTteR-Kj.cjs → stepper-BuhQfQTH.cjs} +5 -6
  224. package/dist/chunks/{stepper-CTteR-Kj.cjs.map → stepper-BuhQfQTH.cjs.map} +1 -1
  225. package/dist/chunks/{stepper-B9NdZ6ZV.mjs → stepper-CVNcexxq.mjs} +5 -5
  226. package/dist/chunks/{stepper-B9NdZ6ZV.mjs.map → stepper-CVNcexxq.mjs.map} +1 -1
  227. package/dist/chunks/{sun-to-moon-button-lt-1vmWm.cjs → sun-to-moon-button-BzYGFhrg.cjs} +4 -5
  228. package/dist/chunks/{sun-to-moon-button-lt-1vmWm.cjs.map → sun-to-moon-button-BzYGFhrg.cjs.map} +1 -1
  229. package/dist/chunks/{sun-to-moon-button-DWHDpP5B.mjs → sun-to-moon-button-CRXBMFZb.mjs} +4 -4
  230. package/dist/chunks/{sun-to-moon-button-DWHDpP5B.mjs.map → sun-to-moon-button-CRXBMFZb.mjs.map} +1 -1
  231. package/dist/chunks/{switch-BbFl5b4t.cjs → switch-CEoT3MgX.cjs} +1 -2
  232. package/dist/chunks/{switch-BbFl5b4t.cjs.map → switch-CEoT3MgX.cjs.map} +1 -1
  233. package/dist/chunks/{switch--68scepb.mjs → switch-DUnNe4xP.mjs} +1 -1
  234. package/dist/chunks/{switch--68scepb.mjs.map → switch-DUnNe4xP.mjs.map} +1 -1
  235. package/dist/chunks/{textarea-U_JeSWI3.cjs → textarea-Bschfj24.cjs} +2 -3
  236. package/dist/chunks/{textarea-U_JeSWI3.cjs.map → textarea-Bschfj24.cjs.map} +1 -1
  237. package/dist/chunks/{textarea-CEj9voUJ.mjs → textarea-CfeKo5HA.mjs} +2 -2
  238. package/dist/chunks/{textarea-CEj9voUJ.mjs.map → textarea-CfeKo5HA.mjs.map} +1 -1
  239. package/dist/chunks/{theme-koPrLKQv.mjs → theme-BXML6jHE.mjs} +1 -1
  240. package/dist/chunks/{theme-koPrLKQv.mjs.map → theme-BXML6jHE.mjs.map} +1 -1
  241. package/dist/chunks/{theme-D6B-FaoE.cjs → theme-BzTaXYZ8.cjs} +1 -2
  242. package/dist/chunks/{theme-D6B-FaoE.cjs.map → theme-BzTaXYZ8.cjs.map} +1 -1
  243. package/dist/chunks/{toast-CyY8VZN7.mjs → toast-D1W0BvoH.mjs} +2 -2
  244. package/dist/chunks/{toast-CyY8VZN7.mjs.map → toast-D1W0BvoH.mjs.map} +1 -1
  245. package/dist/chunks/{toast-2yq4Q7-q.cjs → toast-DL8svc6q.cjs} +2 -3
  246. package/dist/chunks/{toast-2yq4Q7-q.cjs.map → toast-DL8svc6q.cjs.map} +1 -1
  247. package/dist/chunks/{truncated-text-CswjmrHZ.cjs → truncated-text-D0t4atw5.cjs} +3 -3
  248. package/dist/chunks/{truncated-text-CswjmrHZ.cjs.map → truncated-text-D0t4atw5.cjs.map} +1 -1
  249. package/dist/chunks/{truncated-text-DUYTW1KP.mjs → truncated-text-DIkg-8Vo.mjs} +2 -2
  250. package/dist/chunks/{truncated-text-DUYTW1KP.mjs.map → truncated-text-DIkg-8Vo.mjs.map} +1 -1
  251. package/dist/chunks/{typography-CFIiYk1d.cjs → typography-C5fYwhp2.cjs} +3 -3
  252. package/dist/chunks/{typography-CFIiYk1d.cjs.map → typography-C5fYwhp2.cjs.map} +1 -1
  253. package/dist/chunks/{typography-DHE9sUZ8.mjs → typography-Czi7t5y4.mjs} +2 -2
  254. package/dist/chunks/{typography-DHE9sUZ8.mjs.map → typography-Czi7t5y4.mjs.map} +1 -1
  255. package/dist/chunks/{utils-LRbEQHYs.cjs → utils-CoA0q63n.cjs} +84 -4
  256. package/dist/chunks/utils-CoA0q63n.cjs.map +1 -0
  257. package/dist/chunks/{utils-7S0u48mU.mjs → utils-Dc7j29ec.mjs} +84 -4
  258. package/dist/chunks/utils-Dc7j29ec.mjs.map +1 -0
  259. package/dist/color-palette.cjs +1 -1
  260. package/dist/color-palette.mjs +1 -1
  261. package/dist/combobox.cjs +1 -1
  262. package/dist/combobox.mjs +1 -1
  263. package/dist/components/data-display/dashboard-cards/AIFeatureAdoptionCard.d.ts +26 -0
  264. package/dist/components/data-display/dashboard-cards/AIFeatureAdoptionCard.d.ts.map +1 -0
  265. package/dist/components/data-display/dashboard-cards/AIInsightsCard.d.ts +30 -0
  266. package/dist/components/data-display/dashboard-cards/AIInsightsCard.d.ts.map +1 -0
  267. package/dist/components/data-display/dashboard-cards/AcquisitionChannelCard.d.ts +24 -0
  268. package/dist/components/data-display/dashboard-cards/AcquisitionChannelCard.d.ts.map +1 -0
  269. package/dist/components/data-display/dashboard-cards/BarBreakdownCard.d.ts +49 -0
  270. package/dist/components/data-display/dashboard-cards/BarBreakdownCard.d.ts.map +1 -0
  271. package/dist/components/data-display/dashboard-cards/CustomerLifecycleCard.d.ts +24 -0
  272. package/dist/components/data-display/dashboard-cards/CustomerLifecycleCard.d.ts.map +1 -0
  273. package/dist/components/data-display/dashboard-cards/EarningReportsTabsCard.d.ts +111 -2
  274. package/dist/components/data-display/dashboard-cards/EarningReportsTabsCard.d.ts.map +1 -1
  275. package/dist/components/data-display/dashboard-cards/FinancialPLCard.d.ts +78 -0
  276. package/dist/components/data-display/dashboard-cards/FinancialPLCard.d.ts.map +1 -0
  277. package/dist/components/data-display/dashboard-cards/InventoryCards.d.ts +44 -0
  278. package/dist/components/data-display/dashboard-cards/InventoryCards.d.ts.map +1 -0
  279. package/dist/components/data-display/dashboard-cards/PaymentSummaryCard.d.ts +45 -0
  280. package/dist/components/data-display/dashboard-cards/PaymentSummaryCard.d.ts.map +1 -0
  281. package/dist/components/data-display/dashboard-cards/SalesHeatmapCard.d.ts +36 -0
  282. package/dist/components/data-display/dashboard-cards/SalesHeatmapCard.d.ts.map +1 -0
  283. package/dist/components/data-display/dashboard-cards/SeatUtilizationCard.d.ts +22 -0
  284. package/dist/components/data-display/dashboard-cards/SeatUtilizationCard.d.ts.map +1 -0
  285. package/dist/components/data-display/dashboard-cards/SubscriptionHealthCard.d.ts +23 -0
  286. package/dist/components/data-display/dashboard-cards/SubscriptionHealthCard.d.ts.map +1 -0
  287. package/dist/components/data-display/dashboard-cards/ToolUsageOverviewCard.d.ts +22 -0
  288. package/dist/components/data-display/dashboard-cards/ToolUsageOverviewCard.d.ts.map +1 -0
  289. package/dist/components/data-display/dashboard-cards/TopPlansCard.d.ts +23 -0
  290. package/dist/components/data-display/dashboard-cards/TopPlansCard.d.ts.map +1 -0
  291. package/dist/components/data-display/dashboard-cards/TopSellingItemsCard.d.ts +42 -0
  292. package/dist/components/data-display/dashboard-cards/TopSellingItemsCard.d.ts.map +1 -0
  293. package/dist/components/data-display/dashboard-cards/TopToolsCard.d.ts +22 -0
  294. package/dist/components/data-display/dashboard-cards/TopToolsCard.d.ts.map +1 -0
  295. package/dist/components/data-display/dashboard-cards/_PLCardHeader.d.ts +63 -0
  296. package/dist/components/data-display/dashboard-cards/_PLCardHeader.d.ts.map +1 -0
  297. package/dist/components/data-display/dashboard-cards/_PLCharts.d.ts +33 -0
  298. package/dist/components/data-display/dashboard-cards/_PLCharts.d.ts.map +1 -0
  299. package/dist/components/data-display/dashboard-cards/_PLKpiStrip.d.ts +11 -0
  300. package/dist/components/data-display/dashboard-cards/_PLKpiStrip.d.ts.map +1 -0
  301. package/dist/components/data-display/dashboard-cards/_PLOverview.d.ts +9 -0
  302. package/dist/components/data-display/dashboard-cards/_PLOverview.d.ts.map +1 -0
  303. package/dist/components/data-display/dashboard-cards/_TabTooltip.d.ts +8 -0
  304. package/dist/components/data-display/dashboard-cards/_TabTooltip.d.ts.map +1 -0
  305. package/dist/components/data-display/dashboard-cards/index.d.ts +32 -1
  306. package/dist/components/data-display/dashboard-cards/index.d.ts.map +1 -1
  307. package/dist/components/forms/calendar/Calendar.d.ts +1 -1
  308. package/dist/components/forms/calendar/Calendar.d.ts.map +1 -1
  309. package/dist/components/forms/calendar/types.d.ts +6 -0
  310. package/dist/components/forms/calendar/types.d.ts.map +1 -1
  311. package/dist/components/forms/date-picker/DatePicker.d.ts.map +1 -1
  312. package/dist/components/layout/draggable-grid/DraggableGrid.d.ts +20 -0
  313. package/dist/components/layout/draggable-grid/DraggableGrid.d.ts.map +1 -0
  314. package/dist/components/layout/draggable-grid/index.d.ts +3 -0
  315. package/dist/components/layout/draggable-grid/index.d.ts.map +1 -0
  316. package/dist/components/navigation/sidebar/DashboardSidebarShell.d.ts.map +1 -1
  317. package/dist/dashboard-cards.cjs +16 -1
  318. package/dist/dashboard-cards.mjs +2 -2
  319. package/dist/data-table.cjs +1 -1
  320. package/dist/data-table.mjs +1 -1
  321. package/dist/date-picker.cjs +1 -1
  322. package/dist/date-picker.mjs +1 -1
  323. package/dist/dialog.cjs +1 -1
  324. package/dist/dialog.mjs +1 -1
  325. package/dist/docs.cjs +13 -0
  326. package/dist/docs.cjs.map +1 -1
  327. package/dist/docs.d.ts.map +1 -1
  328. package/dist/docs.mjs +13 -0
  329. package/dist/docs.mjs.map +1 -1
  330. package/dist/draggable-grid.cjs +3 -0
  331. package/dist/draggable-grid.d.ts +2 -0
  332. package/dist/draggable-grid.mjs +2 -0
  333. package/dist/drawer.cjs +1 -1
  334. package/dist/drawer.mjs +1 -1
  335. package/dist/event-calendar.cjs +1 -1
  336. package/dist/event-calendar.mjs +1 -1
  337. package/dist/form.cjs +1 -1
  338. package/dist/form.mjs +1 -1
  339. package/dist/gradual-blur.cjs +1 -1
  340. package/dist/gradual-blur.mjs +1 -1
  341. package/dist/hover-border-gradient.cjs +1 -1
  342. package/dist/hover-border-gradient.mjs +1 -1
  343. package/dist/hover-card.cjs +1 -1
  344. package/dist/hover-card.mjs +1 -1
  345. package/dist/icons.cjs +2 -3
  346. package/dist/icons.mjs +1 -2
  347. package/dist/index.cjs +71 -56
  348. package/dist/index.cjs.map +1 -1
  349. package/dist/index.d.ts +7 -2
  350. package/dist/index.d.ts.map +1 -1
  351. package/dist/index.mjs +55 -55
  352. package/dist/index.mjs.map +1 -1
  353. package/dist/input.cjs +1 -1
  354. package/dist/input.mjs +1 -1
  355. package/dist/label.cjs +1 -1
  356. package/dist/label.mjs +1 -1
  357. package/dist/loading.cjs +1 -1
  358. package/dist/loading.mjs +1 -1
  359. package/dist/multi-select-combobox.cjs +1 -1
  360. package/dist/multi-select-combobox.mjs +1 -1
  361. package/dist/otp-input.cjs +1 -1
  362. package/dist/otp-input.mjs +1 -1
  363. package/dist/password-strength-meter.cjs +1 -1
  364. package/dist/password-strength-meter.mjs +1 -1
  365. package/dist/progress-bar.cjs +1 -1
  366. package/dist/progress-bar.mjs +1 -1
  367. package/dist/radio.cjs +1 -1
  368. package/dist/radio.mjs +1 -1
  369. package/dist/select.cjs +1 -1
  370. package/dist/select.mjs +1 -1
  371. package/dist/sidebar.cjs +1 -1
  372. package/dist/sidebar.mjs +1 -1
  373. package/dist/skeleton.cjs +1 -1
  374. package/dist/skeleton.mjs +1 -1
  375. package/dist/spinners.cjs +1 -1
  376. package/dist/spinners.mjs +1 -1
  377. package/dist/splash-cursor.cjs +1 -1
  378. package/dist/splash-cursor.mjs +1 -1
  379. package/dist/spotlight-card.cjs +1 -1
  380. package/dist/spotlight-card.mjs +1 -1
  381. package/dist/stepper.cjs +1 -1
  382. package/dist/stepper.mjs +1 -1
  383. package/dist/sun-to-moon-button.cjs +2 -2
  384. package/dist/sun-to-moon-button.mjs +2 -2
  385. package/dist/switch.cjs +1 -1
  386. package/dist/switch.mjs +1 -1
  387. package/dist/textarea.cjs +1 -1
  388. package/dist/textarea.mjs +1 -1
  389. package/dist/theme.cjs +1 -1
  390. package/dist/theme.mjs +1 -1
  391. package/dist/toast.cjs +1 -1
  392. package/dist/toast.mjs +1 -1
  393. package/dist/tooltip.cjs +1 -1
  394. package/dist/tooltip.mjs +1 -1
  395. package/dist/truncated-text.cjs +1 -1
  396. package/dist/truncated-text.mjs +1 -1
  397. package/dist/typography.cjs +1 -1
  398. package/dist/typography.mjs +1 -1
  399. package/dist/utils.cjs +1 -1
  400. package/dist/utils.mjs +1 -1
  401. package/package.json +34 -13
  402. package/dist/chunks/EllipsisVerticalIcon-BJw3MNkg.cjs +0 -51
  403. package/dist/chunks/EllipsisVerticalIcon-BJw3MNkg.cjs.map +0 -1
  404. package/dist/chunks/EllipsisVerticalIcon-C2b2KMfE.mjs +0 -45
  405. package/dist/chunks/EllipsisVerticalIcon-C2b2KMfE.mjs.map +0 -1
  406. package/dist/chunks/calendar-DCkikZYb.cjs +0 -184
  407. package/dist/chunks/calendar-DCkikZYb.cjs.map +0 -1
  408. package/dist/chunks/calendar-FxAmm_ao.mjs +0 -178
  409. package/dist/chunks/calendar-FxAmm_ao.mjs.map +0 -1
  410. package/dist/chunks/dashboard-cards-BnPt0gDW.mjs +0 -2428
  411. package/dist/chunks/dashboard-cards-BnPt0gDW.mjs.map +0 -1
  412. package/dist/chunks/dashboard-cards-DNWJPKRu.cjs +0 -2524
  413. package/dist/chunks/dashboard-cards-DNWJPKRu.cjs.map +0 -1
  414. package/dist/chunks/date-picker-3IDSmb9Z.mjs +0 -228
  415. package/dist/chunks/date-picker-3IDSmb9Z.mjs.map +0 -1
  416. package/dist/chunks/date-picker-_EVYpGga.cjs +0 -234
  417. package/dist/chunks/date-picker-_EVYpGga.cjs.map +0 -1
  418. package/dist/chunks/icons-JzMKLygv.mjs.map +0 -1
  419. package/dist/chunks/icons-ub9iu-JG.cjs.map +0 -1
  420. package/dist/chunks/utils-7S0u48mU.mjs.map +0 -1
  421. package/dist/chunks/utils-LRbEQHYs.cjs.map +0 -1
  422. /package/dist/chunks/{chunk-B_GkZjkl.cjs → chunk-D6vf50IK.cjs} +0 -0
@@ -1 +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
+ {"version":3,"file":"theme-BXML6jHE.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,IAAI;AAE5D,IAAM,mBAAmB;AACzB,IAAM,oBAAoB;AAC1B,IAAM,sBAAsB;AAC5B,IAAM,2BAA2B;AAEjC,SAAS,gBAAsC;CAC7C,IAAI,OAAO,WAAW,aACpB,OAAO;CAGT,MAAM,OACJ,aAAa,QAAQ,gBAAgB,KAAK,aAAa,QAAQ,MAAM;CACvE,OAAO,SAAS,WAAW,SAAS,SAAS,OAAO;AACtD;AAEA,SAAS,iBAAwC;CAC/C,IAAI,OAAO,WAAW,aACpB,OAAO;CAGT,MAAM,QACJ,aAAa,QAAQ,iBAAiB,KAAK,aAAa,QAAQ,OAAO;CACzE,OAAO,UAAU,YACf,UAAU,UACV,UAAU,YACV,UAAU,UACR,QACA;AACN;AAEA,SAAS,mBAA4C;CACnD,IAAI,OAAO,WAAW,aACpB,OAAO;CAGT,MAAM,UACJ,aAAa,QAAQ,mBAAmB,KACxC,aAAa,QAAQ,wBAAwB;CAC/C,OAAO,YAAY,aAAa,YAAY,QAAQ,UAAU;AAChE;AAEA,SAAgB,cAAc,EAAE,YAAqC;CACnE,MAAM,CAAC,MAAM,WAAW,eAChB,cAAc,KAAK,MAC3B;CACA,MAAM,CAAC,OAAO,YAAY,eAClB,eAAe,KAAK,QAC5B;CACA,MAAM,CAAC,SAAS,cAAc,eACtB,iBAAiB,KAAK,SAC9B;CAEA,sBAAsB;EACpB,MAAM,cACJ,YAAY,QAAQ,GAAG,MAAM,GAAG,KAAK,QAAQ,GAAG,MAAM,GAAG;EAG3D,SAAS,gBAAgB,aAAa,cAAc,KAAK;EACzD,SAAS,gBAAgB,aAAa,aAAa,IAAI;EACvD,SAAS,gBAAgB,aAAa,gBAAgB,OAAO;EAE7D,SAAS,gBAAgB,aAAa,qBAAqB,OAAO;EAClE,SAAS,gBAAgB,aAAa,cAAc,WAAW;EAC/D,SAAS,gBAAgB,MAAM,cAAc;EAE7C,aAAa,QAAQ,kBAAkB,IAAI;EAC3C,aAAa,QAAQ,mBAAmB,KAAK;EAC7C,aAAa,QAAQ,qBAAqB,OAAO;EACjD,aAAa,QAAQ,0BAA0B,OAAO;EACtD,aAAa,QAAQ,QAAQ,IAAI;EACjC,aAAa,QAAQ,SAAS,KAAK;EAEnC,IAAI,SAAS,QACX,SAAS,gBAAgB,UAAU,IAAI,MAAM;OAE7C,SAAS,gBAAgB,UAAU,OAAO,MAAM;CAEpD,GAAG;EAAC;EAAM;EAAO;CAAO,CAAC;CAEzB,MAAM,mBACJ,SAAS,iBAAkB,iBAAiB,UAAU,SAAS,OAAQ;CACzE,MAAM,sBACJ,YAAY,oBACV,oBAAoB,YAAY,QAAQ,SAC1C;CAEF,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;CACrB;CAEA,OACE,oBAAC,aAAa,UAAd;EAA8B;EAAQ;CAAgC,CAAA;AAE1E;AAEA,SAAgB,kBAAkB;CAChC,MAAM,UAAU,WAAW,YAAY;CAEvC,IAAI,CAAC,SACH,MAAM,IAAI,MAAM,qDAAqD;CAGvE,OAAO;AACT"}
@@ -1,4 +1,3 @@
1
- require("./chunk-B_GkZjkl.cjs");
2
1
  let react = require("react");
3
2
  let react_jsx_runtime = require("react/jsx-runtime");
4
3
  //#region src/foundations/theme/ThemeProvider.tsx
@@ -88,4 +87,4 @@ Object.defineProperty(exports, "useThemeContext", {
88
87
  }
89
88
  });
90
89
 
91
- //# sourceMappingURL=theme-D6B-FaoE.cjs.map
90
+ //# sourceMappingURL=theme-BzTaXYZ8.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme-D6B-FaoE.cjs","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,gBAAA,GAAA,MAAA,eAAkD,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,YAAA,GAAA,MAAA,gBACL,eAAe,IAAI,OAC1B;CACD,MAAM,CAAC,OAAO,aAAA,GAAA,MAAA,gBACN,gBAAgB,IAAI,SAC3B;CACD,MAAM,CAAC,SAAS,eAAA,GAAA,MAAA,gBACR,kBAAkB,IAAI,UAC7B;AAED,EAAA,GAAA,MAAA,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,iBAAA,GAAA,kBAAA,KAAC,aAAa,UAAd;EAA8B;EAAQ;EAAiC,CAAA;;AAI3E,SAAgB,kBAAkB;CAChC,MAAM,WAAA,GAAA,MAAA,YAAqB,aAAa;AAExC,KAAI,CAAC,QACH,OAAM,IAAI,MAAM,sDAAsD;AAGxE,QAAO"}
1
+ {"version":3,"file":"theme-BzTaXYZ8.cjs","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,gBAAA,GAAA,MAAA,eAAkD,IAAI;AAE5D,IAAM,mBAAmB;AACzB,IAAM,oBAAoB;AAC1B,IAAM,sBAAsB;AAC5B,IAAM,2BAA2B;AAEjC,SAAS,gBAAsC;CAC7C,IAAI,OAAO,WAAW,aACpB,OAAO;CAGT,MAAM,OACJ,aAAa,QAAQ,gBAAgB,KAAK,aAAa,QAAQ,MAAM;CACvE,OAAO,SAAS,WAAW,SAAS,SAAS,OAAO;AACtD;AAEA,SAAS,iBAAwC;CAC/C,IAAI,OAAO,WAAW,aACpB,OAAO;CAGT,MAAM,QACJ,aAAa,QAAQ,iBAAiB,KAAK,aAAa,QAAQ,OAAO;CACzE,OAAO,UAAU,YACf,UAAU,UACV,UAAU,YACV,UAAU,UACR,QACA;AACN;AAEA,SAAS,mBAA4C;CACnD,IAAI,OAAO,WAAW,aACpB,OAAO;CAGT,MAAM,UACJ,aAAa,QAAQ,mBAAmB,KACxC,aAAa,QAAQ,wBAAwB;CAC/C,OAAO,YAAY,aAAa,YAAY,QAAQ,UAAU;AAChE;AAEA,SAAgB,cAAc,EAAE,YAAqC;CACnE,MAAM,CAAC,MAAM,YAAA,GAAA,MAAA,gBACL,cAAc,KAAK,MAC3B;CACA,MAAM,CAAC,OAAO,aAAA,GAAA,MAAA,gBACN,eAAe,KAAK,QAC5B;CACA,MAAM,CAAC,SAAS,eAAA,GAAA,MAAA,gBACR,iBAAiB,KAAK,SAC9B;CAEA,CAAA,GAAA,MAAA,uBAAsB;EACpB,MAAM,cACJ,YAAY,QAAQ,GAAG,MAAM,GAAG,KAAK,QAAQ,GAAG,MAAM,GAAG;EAG3D,SAAS,gBAAgB,aAAa,cAAc,KAAK;EACzD,SAAS,gBAAgB,aAAa,aAAa,IAAI;EACvD,SAAS,gBAAgB,aAAa,gBAAgB,OAAO;EAE7D,SAAS,gBAAgB,aAAa,qBAAqB,OAAO;EAClE,SAAS,gBAAgB,aAAa,cAAc,WAAW;EAC/D,SAAS,gBAAgB,MAAM,cAAc;EAE7C,aAAa,QAAQ,kBAAkB,IAAI;EAC3C,aAAa,QAAQ,mBAAmB,KAAK;EAC7C,aAAa,QAAQ,qBAAqB,OAAO;EACjD,aAAa,QAAQ,0BAA0B,OAAO;EACtD,aAAa,QAAQ,QAAQ,IAAI;EACjC,aAAa,QAAQ,SAAS,KAAK;EAEnC,IAAI,SAAS,QACX,SAAS,gBAAgB,UAAU,IAAI,MAAM;OAE7C,SAAS,gBAAgB,UAAU,OAAO,MAAM;CAEpD,GAAG;EAAC;EAAM;EAAO;CAAO,CAAC;CAEzB,MAAM,mBACJ,SAAS,iBAAkB,iBAAiB,UAAU,SAAS,OAAQ;CACzE,MAAM,sBACJ,YAAY,oBACV,oBAAoB,YAAY,QAAQ,SAC1C;CAEF,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;CACrB;CAEA,OACE,iBAAA,GAAA,kBAAA,KAAC,aAAa,UAAd;EAA8B;EAAQ;CAAgC,CAAA;AAE1E;AAEA,SAAgB,kBAAkB;CAChC,MAAM,WAAA,GAAA,MAAA,YAAqB,YAAY;CAEvC,IAAI,CAAC,SACH,MAAM,IAAI,MAAM,qDAAqD;CAGvE,OAAO;AACT"}
@@ -1,4 +1,4 @@
1
- import { K as CloseIcon, _ as AlertTriangleIcon, h as CheckCircleIcon, l as LoaderIcon, n as XCircleIcon, u as InfoCircleIcon } from "./icons-JzMKLygv.mjs";
1
+ import { _ as AlertTriangleIcon, h as CheckCircleIcon, l as LoaderIcon, n as XCircleIcon, q as CloseIcon, u as InfoCircleIcon } from "./icons-CkVHNbbN.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";
@@ -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-CyY8VZN7.mjs.map
339
+ //# sourceMappingURL=toast-D1W0BvoH.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"toast-CyY8VZN7.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
+ {"version":3,"file":"toast-D1W0BvoH.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,4 @@
1
- require("./chunk-B_GkZjkl.cjs");
2
- const require_icons = require("./icons-ub9iu-JG.cjs");
1
+ const require_icons = require("./icons-Ci8yEvvF.cjs");
3
2
  let react = require("react");
4
3
  let react_jsx_runtime = require("react/jsx-runtime");
5
4
  let framer_motion = require("framer-motion");
@@ -366,4 +365,4 @@ Object.defineProperty(exports, "useToast", {
366
365
  }
367
366
  });
368
367
 
369
- //# sourceMappingURL=toast-2yq4Q7-q.cjs.map
368
+ //# sourceMappingURL=toast-DL8svc6q.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"toast-2yq4Q7-q.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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"}
1
+ {"version":3,"file":"toast-DL8svc6q.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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"}
@@ -1,5 +1,5 @@
1
- const require_chunk = require("./chunk-B_GkZjkl.cjs");
2
- const require_utils = require("./utils-LRbEQHYs.cjs");
1
+ const require_chunk = require("./chunk-D6vf50IK.cjs");
2
+ const require_utils = require("./utils-CoA0q63n.cjs");
3
3
  let react = require("react");
4
4
  react = require_chunk.__toESM(react, 1);
5
5
  let react_jsx_runtime = require("react/jsx-runtime");
@@ -49,4 +49,4 @@ Object.defineProperty(exports, "TruncatedText", {
49
49
  }
50
50
  });
51
51
 
52
- //# sourceMappingURL=truncated-text-CswjmrHZ.cjs.map
52
+ //# sourceMappingURL=truncated-text-D0t4atw5.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"truncated-text-CswjmrHZ.cjs","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,MAAA,GAAA,MAAA,gBAA6C,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,iBAAA,GAAA,kBAAA,KAAC,WAAD;EACE,GAAI;EACJ,OAAO;EACP,OAAO;EACP,WAAW,cAAA,gBAAgB,WAAW,UAAU;EAE/C;EACS,CAAA"}
1
+ {"version":3,"file":"truncated-text-D0t4atw5.cjs","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;CAC/D,IAAI,OAAO,SAAS,YAAY,OAAO,SAAS,UAC9C,OAAO,OAAO,IAAI;CAGpB,IAAI,MAAM,QAAQ,IAAI,GAAG;EACvB,MAAM,QAAQ,KACX,KAAK,UAAU,mBAAmB,KAAK,CAAC,EACxC,QAAQ,UAA2B,QAAQ,KAAK,CAAC;EAEpD,OAAO,MAAM,SAAS,IAAI,MAAM,KAAK,EAAE,IAAI,KAAA;CAC7C;CAEA,KAAA,GAAA,MAAA,gBAA6C,IAAI,GAC/C,OAAO,mBAAmB,KAAK,MAAM,QAAQ;AAIjD;AAcA,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,KAAK,KAAK,QAAQ,IAAI,KAAK,MAAM,KAAK,IAAI;CAC5D,MAAM,gBAAgB,mBACjB,SAAS,mBAAmB,QAAQ,IACrC;CAEJ,MAAM,kBACJ,kBAAkB,IACd;EACE,GAAG;EACH;EACA;EACA,UAAU;EACV,SAAS,OAAO,WAAW;EAC3B,iBAAiB;EACjB,iBAAiB;CACnB,IACA;EACE,GAAG;EACH;EACA;EACA,UAAU;EACV,cAAc;EACd,YAAY;EACZ,SAAS,OAAO,WAAW;CAC7B;CAEN,OACE,iBAAA,GAAA,kBAAA,KAAC,WAAD;EACE,GAAI;EACJ,OAAO;EACP,OAAO;EACP,WAAW,cAAA,gBAAgB,WAAW,SAAS;EAE9C;CACQ,CAAA;AAEf"}
@@ -1,4 +1,4 @@
1
- import { n as mergeClassNames } from "./utils-7S0u48mU.mjs";
1
+ import { n as mergeClassNames } from "./utils-Dc7j29ec.mjs";
2
2
  import { isValidElement } from "react";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  //#region src/components/typography/truncated-text/TruncatedText.tsx
@@ -42,4 +42,4 @@ var TruncatedText = ({ children, as, lines = 1, width, maxWidth, showTitleOnHove
42
42
  //#endregion
43
43
  export { TruncatedText as t };
44
44
 
45
- //# sourceMappingURL=truncated-text-DUYTW1KP.mjs.map
45
+ //# sourceMappingURL=truncated-text-DIkg-8Vo.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"truncated-text-DUYTW1KP.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"}
1
+ {"version":3,"file":"truncated-text-DIkg-8Vo.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;CAC/D,IAAI,OAAO,SAAS,YAAY,OAAO,SAAS,UAC9C,OAAO,OAAO,IAAI;CAGpB,IAAI,MAAM,QAAQ,IAAI,GAAG;EACvB,MAAM,QAAQ,KACX,KAAK,UAAU,mBAAmB,KAAK,CAAC,EACxC,QAAQ,UAA2B,QAAQ,KAAK,CAAC;EAEpD,OAAO,MAAM,SAAS,IAAI,MAAM,KAAK,EAAE,IAAI,KAAA;CAC7C;CAEA,IAAI,eAAyC,IAAI,GAC/C,OAAO,mBAAmB,KAAK,MAAM,QAAQ;AAIjD;AAcA,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,KAAK,KAAK,QAAQ,IAAI,KAAK,MAAM,KAAK,IAAI;CAC5D,MAAM,gBAAgB,mBACjB,SAAS,mBAAmB,QAAQ,IACrC;CAEJ,MAAM,kBACJ,kBAAkB,IACd;EACE,GAAG;EACH;EACA;EACA,UAAU;EACV,SAAS,OAAO,WAAW;EAC3B,iBAAiB;EACjB,iBAAiB;CACnB,IACA;EACE,GAAG;EACH;EACA;EACA,UAAU;EACV,cAAc;EACd,YAAY;EACZ,SAAS,OAAO,WAAW;CAC7B;CAEN,OACE,oBAAC,WAAD;EACE,GAAI;EACJ,OAAO;EACP,OAAO;EACP,WAAW,gBAAgB,WAAW,SAAS;EAE9C;CACQ,CAAA;AAEf"}
@@ -1,5 +1,5 @@
1
- const require_chunk = require("./chunk-B_GkZjkl.cjs");
2
- const require_utils = require("./utils-LRbEQHYs.cjs");
1
+ const require_chunk = require("./chunk-D6vf50IK.cjs");
2
+ const require_utils = require("./utils-CoA0q63n.cjs");
3
3
  let react = require("react");
4
4
  react = require_chunk.__toESM(react, 1);
5
5
  let react_jsx_runtime = require("react/jsx-runtime");
@@ -87,4 +87,4 @@ Object.defineProperty(exports, "Typography", {
87
87
  }
88
88
  });
89
89
 
90
- //# sourceMappingURL=typography-CFIiYk1d.cjs.map
90
+ //# sourceMappingURL=typography-C5fYwhp2.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"typography-CFIiYk1d.cjs","names":[],"sources":["../../src/components/typography/Typography.tsx"],"sourcesContent":["import React, { type ReactNode, type ElementType } from \"react\";\nimport { mergeClassNames } from \"../../utils\";\n\nexport type TypographyVariant =\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"h5\"\n | \"h6\"\n | \"body1\"\n | \"body2\"\n | \"caption\"\n | \"overline\";\n\nexport type TypographyAlign = \"left\" | \"center\" | \"right\" | \"justify\";\nexport type TypographyWeight =\n | \"thin\"\n | \"extralight\"\n | \"light\"\n | \"normal\"\n | \"medium\"\n | \"semibold\"\n | \"bold\"\n | \"extrabold\"\n | \"black\";\nexport type TypographyTracking =\n | \"tighter\"\n | \"tight\"\n | \"normal\"\n | \"wide\"\n | \"wider\"\n | \"widest\";\nexport type TypographyGradient =\n | boolean\n | \"primary\"\n | \"ocean\"\n | \"sunset\"\n | \"aurora\"\n | \"neon\"\n | \"forest\"\n | \"galaxy\";\n\nexport interface TypographyProps {\n children: ReactNode;\n variant?: TypographyVariant;\n align?: TypographyAlign;\n weight?: TypographyWeight;\n tracking?: TypographyTracking;\n italic?: boolean;\n as?: ElementType;\n className?: string;\n gradient?: TypographyGradient;\n style?: React.CSSProperties;\n}\n\nconst variantMapping: Record<TypographyVariant, ElementType> = {\n h1: \"h1\",\n h2: \"h2\",\n h3: \"h3\",\n h4: \"h4\",\n h5: \"h5\",\n h6: \"h6\",\n body1: \"p\",\n body2: \"p\",\n caption: \"span\",\n overline: \"span\",\n};\n\nconst variantStyles: Record<TypographyVariant, string> = {\n h1: \"text-4xl md:text-6xl font-black tracking-tighter uppercase italic leading-tight\",\n h2: \"text-3xl md:text-5xl font-black tracking-tight uppercase italic leading-snug\",\n h3: \"text-2xl md:text-4xl font-extrabold tracking-tight italic\",\n h4: \"text-xl md:text-2xl font-bold tracking-tight\",\n h5: \"text-lg md:text-xl font-bold\",\n h6: \"text-base md:text-lg font-semibold uppercase tracking-widest text-ds-3\",\n body1: \"text-base font-medium leading-relaxed\",\n body2: \"text-sm font-medium leading-relaxed text-ds-2\",\n caption: \"text-xs font-semibold uppercase tracking-wider text-ds-3\",\n overline: \"text-[10px] font-black uppercase tracking-[0.2em] text-ds-2\",\n};\n\nconst alignStyles: Record<TypographyAlign, string> = {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n justify: \"text-justify\",\n};\n\nconst weightStyles: Record<TypographyWeight, string> = {\n thin: \"font-thin\",\n extralight: \"font-extralight\",\n light: \"font-light\",\n normal: \"font-normal\",\n medium: \"font-medium\",\n semibold: \"font-semibold\",\n bold: \"font-bold\",\n extrabold: \"font-extrabold\",\n black: \"font-black\",\n};\n\nconst trackingStyles: Record<TypographyTracking, string> = {\n tighter: \"tracking-tighter\",\n tight: \"tracking-tight\",\n normal: \"tracking-normal\",\n wide: \"tracking-wide\",\n wider: \"tracking-wider\",\n widest: \"tracking-widest\",\n};\n\nconst gradientStyles: Record<string, string> = {\n primary: \"bg-clip-text text-transparent\",\n ocean:\n \"bg-linear-to-r from-cyan-500 to-blue-600 bg-clip-text text-transparent\",\n sunset:\n \"bg-linear-to-r from-orange-500 to-rose-600 bg-clip-text text-transparent\",\n aurora:\n \"bg-linear-to-r from-emerald-400 to-cyan-500 bg-clip-text text-transparent\",\n neon: \"bg-linear-to-r from-fuchsia-500 to-purple-600 bg-clip-text text-transparent\",\n forest:\n \"bg-linear-to-r from-lime-500 to-emerald-600 bg-clip-text text-transparent\",\n galaxy:\n \"bg-linear-to-r from-indigo-500 via-purple-500 to-pink-500 bg-clip-text text-transparent\",\n};\n\nexport const Typography = ({\n children,\n variant = \"body1\",\n align,\n weight,\n tracking,\n italic,\n as,\n className,\n gradient = false,\n style,\n}: TypographyProps) => {\n const Component = as || variantMapping[variant];\n const gradientVariant = gradient === true ? \"primary\" : gradient;\n\n const getGradientClass = () => {\n if (!gradient) return \"\";\n if (gradient === true) return gradientStyles.primary;\n return gradientStyles[gradient] || gradientStyles.primary;\n };\n\n const computedStyle: React.CSSProperties | undefined =\n gradientVariant === \"primary\"\n ? {\n ...style,\n backgroundImage:\n \"linear-gradient(90deg, var(--ds-color-accent), var(--ds-color-accent-hover))\",\n }\n : style;\n\n return (\n <Component\n style={computedStyle}\n className={mergeClassNames(\n variantStyles[variant],\n align && alignStyles[align],\n weight && weightStyles[weight],\n tracking && trackingStyles[tracking],\n italic && \"italic\",\n getGradientClass(),\n className,\n )}\n >\n {children}\n </Component>\n );\n};\n"],"mappings":";;;;;;AAwDA,IAAM,iBAAyD;CAC7D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,OAAO;CACP,OAAO;CACP,SAAS;CACT,UAAU;CACX;AAED,IAAM,gBAAmD;CACvD,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,OAAO;CACP,OAAO;CACP,SAAS;CACT,UAAU;CACX;AAED,IAAM,cAA+C;CACnD,MAAM;CACN,QAAQ;CACR,OAAO;CACP,SAAS;CACV;AAED,IAAM,eAAiD;CACrD,MAAM;CACN,YAAY;CACZ,OAAO;CACP,QAAQ;CACR,QAAQ;CACR,UAAU;CACV,MAAM;CACN,WAAW;CACX,OAAO;CACR;AAED,IAAM,iBAAqD;CACzD,SAAS;CACT,OAAO;CACP,QAAQ;CACR,MAAM;CACN,OAAO;CACP,QAAQ;CACT;AAED,IAAM,iBAAyC;CAC7C,SAAS;CACT,OACE;CACF,QACE;CACF,QACE;CACF,MAAM;CACN,QACE;CACF,QACE;CACH;AAED,IAAa,cAAc,EACzB,UACA,UAAU,SACV,OACA,QACA,UACA,QACA,IACA,WACA,WAAW,OACX,YACqB;CACrB,MAAM,YAAY,MAAM,eAAe;CACvC,MAAM,kBAAkB,aAAa,OAAO,YAAY;CAExD,MAAM,yBAAyB;AAC7B,MAAI,CAAC,SAAU,QAAO;AACtB,MAAI,aAAa,KAAM,QAAO,eAAe;AAC7C,SAAO,eAAe,aAAa,eAAe;;AAYpD,QACE,iBAAA,GAAA,kBAAA,KAAC,WAAD;EACE,OAVF,oBAAoB,YAChB;GACE,GAAG;GACH,iBACE;GACH,GACD;EAKF,WAAW,cAAA,gBACT,cAAc,UACd,SAAS,YAAY,QACrB,UAAU,aAAa,SACvB,YAAY,eAAe,WAC3B,UAAU,UACV,kBAAkB,EAClB,UACD;EAEA;EACS,CAAA"}
1
+ {"version":3,"file":"typography-C5fYwhp2.cjs","names":[],"sources":["../../src/components/typography/Typography.tsx"],"sourcesContent":["import React, { type ReactNode, type ElementType } from \"react\";\nimport { mergeClassNames } from \"../../utils\";\n\nexport type TypographyVariant =\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"h5\"\n | \"h6\"\n | \"body1\"\n | \"body2\"\n | \"caption\"\n | \"overline\";\n\nexport type TypographyAlign = \"left\" | \"center\" | \"right\" | \"justify\";\nexport type TypographyWeight =\n | \"thin\"\n | \"extralight\"\n | \"light\"\n | \"normal\"\n | \"medium\"\n | \"semibold\"\n | \"bold\"\n | \"extrabold\"\n | \"black\";\nexport type TypographyTracking =\n | \"tighter\"\n | \"tight\"\n | \"normal\"\n | \"wide\"\n | \"wider\"\n | \"widest\";\nexport type TypographyGradient =\n | boolean\n | \"primary\"\n | \"ocean\"\n | \"sunset\"\n | \"aurora\"\n | \"neon\"\n | \"forest\"\n | \"galaxy\";\n\nexport interface TypographyProps {\n children: ReactNode;\n variant?: TypographyVariant;\n align?: TypographyAlign;\n weight?: TypographyWeight;\n tracking?: TypographyTracking;\n italic?: boolean;\n as?: ElementType;\n className?: string;\n gradient?: TypographyGradient;\n style?: React.CSSProperties;\n}\n\nconst variantMapping: Record<TypographyVariant, ElementType> = {\n h1: \"h1\",\n h2: \"h2\",\n h3: \"h3\",\n h4: \"h4\",\n h5: \"h5\",\n h6: \"h6\",\n body1: \"p\",\n body2: \"p\",\n caption: \"span\",\n overline: \"span\",\n};\n\nconst variantStyles: Record<TypographyVariant, string> = {\n h1: \"text-4xl md:text-6xl font-black tracking-tighter uppercase italic leading-tight\",\n h2: \"text-3xl md:text-5xl font-black tracking-tight uppercase italic leading-snug\",\n h3: \"text-2xl md:text-4xl font-extrabold tracking-tight italic\",\n h4: \"text-xl md:text-2xl font-bold tracking-tight\",\n h5: \"text-lg md:text-xl font-bold\",\n h6: \"text-base md:text-lg font-semibold uppercase tracking-widest text-ds-3\",\n body1: \"text-base font-medium leading-relaxed\",\n body2: \"text-sm font-medium leading-relaxed text-ds-2\",\n caption: \"text-xs font-semibold uppercase tracking-wider text-ds-3\",\n overline: \"text-[10px] font-black uppercase tracking-[0.2em] text-ds-2\",\n};\n\nconst alignStyles: Record<TypographyAlign, string> = {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n justify: \"text-justify\",\n};\n\nconst weightStyles: Record<TypographyWeight, string> = {\n thin: \"font-thin\",\n extralight: \"font-extralight\",\n light: \"font-light\",\n normal: \"font-normal\",\n medium: \"font-medium\",\n semibold: \"font-semibold\",\n bold: \"font-bold\",\n extrabold: \"font-extrabold\",\n black: \"font-black\",\n};\n\nconst trackingStyles: Record<TypographyTracking, string> = {\n tighter: \"tracking-tighter\",\n tight: \"tracking-tight\",\n normal: \"tracking-normal\",\n wide: \"tracking-wide\",\n wider: \"tracking-wider\",\n widest: \"tracking-widest\",\n};\n\nconst gradientStyles: Record<string, string> = {\n primary: \"bg-clip-text text-transparent\",\n ocean:\n \"bg-linear-to-r from-cyan-500 to-blue-600 bg-clip-text text-transparent\",\n sunset:\n \"bg-linear-to-r from-orange-500 to-rose-600 bg-clip-text text-transparent\",\n aurora:\n \"bg-linear-to-r from-emerald-400 to-cyan-500 bg-clip-text text-transparent\",\n neon: \"bg-linear-to-r from-fuchsia-500 to-purple-600 bg-clip-text text-transparent\",\n forest:\n \"bg-linear-to-r from-lime-500 to-emerald-600 bg-clip-text text-transparent\",\n galaxy:\n \"bg-linear-to-r from-indigo-500 via-purple-500 to-pink-500 bg-clip-text text-transparent\",\n};\n\nexport const Typography = ({\n children,\n variant = \"body1\",\n align,\n weight,\n tracking,\n italic,\n as,\n className,\n gradient = false,\n style,\n}: TypographyProps) => {\n const Component = as || variantMapping[variant];\n const gradientVariant = gradient === true ? \"primary\" : gradient;\n\n const getGradientClass = () => {\n if (!gradient) return \"\";\n if (gradient === true) return gradientStyles.primary;\n return gradientStyles[gradient] || gradientStyles.primary;\n };\n\n const computedStyle: React.CSSProperties | undefined =\n gradientVariant === \"primary\"\n ? {\n ...style,\n backgroundImage:\n \"linear-gradient(90deg, var(--ds-color-accent), var(--ds-color-accent-hover))\",\n }\n : style;\n\n return (\n <Component\n style={computedStyle}\n className={mergeClassNames(\n variantStyles[variant],\n align && alignStyles[align],\n weight && weightStyles[weight],\n tracking && trackingStyles[tracking],\n italic && \"italic\",\n getGradientClass(),\n className,\n )}\n >\n {children}\n </Component>\n );\n};\n"],"mappings":";;;;;;AAwDA,IAAM,iBAAyD;CAC7D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,OAAO;CACP,OAAO;CACP,SAAS;CACT,UAAU;AACZ;AAEA,IAAM,gBAAmD;CACvD,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,OAAO;CACP,OAAO;CACP,SAAS;CACT,UAAU;AACZ;AAEA,IAAM,cAA+C;CACnD,MAAM;CACN,QAAQ;CACR,OAAO;CACP,SAAS;AACX;AAEA,IAAM,eAAiD;CACrD,MAAM;CACN,YAAY;CACZ,OAAO;CACP,QAAQ;CACR,QAAQ;CACR,UAAU;CACV,MAAM;CACN,WAAW;CACX,OAAO;AACT;AAEA,IAAM,iBAAqD;CACzD,SAAS;CACT,OAAO;CACP,QAAQ;CACR,MAAM;CACN,OAAO;CACP,QAAQ;AACV;AAEA,IAAM,iBAAyC;CAC7C,SAAS;CACT,OACE;CACF,QACE;CACF,QACE;CACF,MAAM;CACN,QACE;CACF,QACE;AACJ;AAEA,IAAa,cAAc,EACzB,UACA,UAAU,SACV,OACA,QACA,UACA,QACA,IACA,WACA,WAAW,OACX,YACqB;CACrB,MAAM,YAAY,MAAM,eAAe;CACvC,MAAM,kBAAkB,aAAa,OAAO,YAAY;CAExD,MAAM,yBAAyB;EAC7B,IAAI,CAAC,UAAU,OAAO;EACtB,IAAI,aAAa,MAAM,OAAO,eAAe;EAC7C,OAAO,eAAe,aAAa,eAAe;CACpD;CAWA,OACE,iBAAA,GAAA,kBAAA,KAAC,WAAD;EACE,OAVF,oBAAoB,YAChB;GACE,GAAG;GACH,iBACE;EACJ,IACA;EAKF,WAAW,cAAA,gBACT,cAAc,UACd,SAAS,YAAY,QACrB,UAAU,aAAa,SACvB,YAAY,eAAe,WAC3B,UAAU,UACV,iBAAiB,GACjB,SACF;EAEC;CACQ,CAAA;AAEf"}
@@ -1,4 +1,4 @@
1
- import { n as mergeClassNames } from "./utils-7S0u48mU.mjs";
1
+ import { n as mergeClassNames } from "./utils-Dc7j29ec.mjs";
2
2
  import "react";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  //#region src/components/typography/Typography.tsx
@@ -80,4 +80,4 @@ var Typography = ({ children, variant = "body1", align, weight, tracking, italic
80
80
  //#endregion
81
81
  export { Typography as t };
82
82
 
83
- //# sourceMappingURL=typography-DHE9sUZ8.mjs.map
83
+ //# sourceMappingURL=typography-Czi7t5y4.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"typography-DHE9sUZ8.mjs","names":[],"sources":["../../src/components/typography/Typography.tsx"],"sourcesContent":["import React, { type ReactNode, type ElementType } from \"react\";\nimport { mergeClassNames } from \"../../utils\";\n\nexport type TypographyVariant =\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"h5\"\n | \"h6\"\n | \"body1\"\n | \"body2\"\n | \"caption\"\n | \"overline\";\n\nexport type TypographyAlign = \"left\" | \"center\" | \"right\" | \"justify\";\nexport type TypographyWeight =\n | \"thin\"\n | \"extralight\"\n | \"light\"\n | \"normal\"\n | \"medium\"\n | \"semibold\"\n | \"bold\"\n | \"extrabold\"\n | \"black\";\nexport type TypographyTracking =\n | \"tighter\"\n | \"tight\"\n | \"normal\"\n | \"wide\"\n | \"wider\"\n | \"widest\";\nexport type TypographyGradient =\n | boolean\n | \"primary\"\n | \"ocean\"\n | \"sunset\"\n | \"aurora\"\n | \"neon\"\n | \"forest\"\n | \"galaxy\";\n\nexport interface TypographyProps {\n children: ReactNode;\n variant?: TypographyVariant;\n align?: TypographyAlign;\n weight?: TypographyWeight;\n tracking?: TypographyTracking;\n italic?: boolean;\n as?: ElementType;\n className?: string;\n gradient?: TypographyGradient;\n style?: React.CSSProperties;\n}\n\nconst variantMapping: Record<TypographyVariant, ElementType> = {\n h1: \"h1\",\n h2: \"h2\",\n h3: \"h3\",\n h4: \"h4\",\n h5: \"h5\",\n h6: \"h6\",\n body1: \"p\",\n body2: \"p\",\n caption: \"span\",\n overline: \"span\",\n};\n\nconst variantStyles: Record<TypographyVariant, string> = {\n h1: \"text-4xl md:text-6xl font-black tracking-tighter uppercase italic leading-tight\",\n h2: \"text-3xl md:text-5xl font-black tracking-tight uppercase italic leading-snug\",\n h3: \"text-2xl md:text-4xl font-extrabold tracking-tight italic\",\n h4: \"text-xl md:text-2xl font-bold tracking-tight\",\n h5: \"text-lg md:text-xl font-bold\",\n h6: \"text-base md:text-lg font-semibold uppercase tracking-widest text-ds-3\",\n body1: \"text-base font-medium leading-relaxed\",\n body2: \"text-sm font-medium leading-relaxed text-ds-2\",\n caption: \"text-xs font-semibold uppercase tracking-wider text-ds-3\",\n overline: \"text-[10px] font-black uppercase tracking-[0.2em] text-ds-2\",\n};\n\nconst alignStyles: Record<TypographyAlign, string> = {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n justify: \"text-justify\",\n};\n\nconst weightStyles: Record<TypographyWeight, string> = {\n thin: \"font-thin\",\n extralight: \"font-extralight\",\n light: \"font-light\",\n normal: \"font-normal\",\n medium: \"font-medium\",\n semibold: \"font-semibold\",\n bold: \"font-bold\",\n extrabold: \"font-extrabold\",\n black: \"font-black\",\n};\n\nconst trackingStyles: Record<TypographyTracking, string> = {\n tighter: \"tracking-tighter\",\n tight: \"tracking-tight\",\n normal: \"tracking-normal\",\n wide: \"tracking-wide\",\n wider: \"tracking-wider\",\n widest: \"tracking-widest\",\n};\n\nconst gradientStyles: Record<string, string> = {\n primary: \"bg-clip-text text-transparent\",\n ocean:\n \"bg-linear-to-r from-cyan-500 to-blue-600 bg-clip-text text-transparent\",\n sunset:\n \"bg-linear-to-r from-orange-500 to-rose-600 bg-clip-text text-transparent\",\n aurora:\n \"bg-linear-to-r from-emerald-400 to-cyan-500 bg-clip-text text-transparent\",\n neon: \"bg-linear-to-r from-fuchsia-500 to-purple-600 bg-clip-text text-transparent\",\n forest:\n \"bg-linear-to-r from-lime-500 to-emerald-600 bg-clip-text text-transparent\",\n galaxy:\n \"bg-linear-to-r from-indigo-500 via-purple-500 to-pink-500 bg-clip-text text-transparent\",\n};\n\nexport const Typography = ({\n children,\n variant = \"body1\",\n align,\n weight,\n tracking,\n italic,\n as,\n className,\n gradient = false,\n style,\n}: TypographyProps) => {\n const Component = as || variantMapping[variant];\n const gradientVariant = gradient === true ? \"primary\" : gradient;\n\n const getGradientClass = () => {\n if (!gradient) return \"\";\n if (gradient === true) return gradientStyles.primary;\n return gradientStyles[gradient] || gradientStyles.primary;\n };\n\n const computedStyle: React.CSSProperties | undefined =\n gradientVariant === \"primary\"\n ? {\n ...style,\n backgroundImage:\n \"linear-gradient(90deg, var(--ds-color-accent), var(--ds-color-accent-hover))\",\n }\n : style;\n\n return (\n <Component\n style={computedStyle}\n className={mergeClassNames(\n variantStyles[variant],\n align && alignStyles[align],\n weight && weightStyles[weight],\n tracking && trackingStyles[tracking],\n italic && \"italic\",\n getGradientClass(),\n className,\n )}\n >\n {children}\n </Component>\n );\n};\n"],"mappings":";;;;AAwDA,IAAM,iBAAyD;CAC7D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,OAAO;CACP,OAAO;CACP,SAAS;CACT,UAAU;CACX;AAED,IAAM,gBAAmD;CACvD,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,OAAO;CACP,OAAO;CACP,SAAS;CACT,UAAU;CACX;AAED,IAAM,cAA+C;CACnD,MAAM;CACN,QAAQ;CACR,OAAO;CACP,SAAS;CACV;AAED,IAAM,eAAiD;CACrD,MAAM;CACN,YAAY;CACZ,OAAO;CACP,QAAQ;CACR,QAAQ;CACR,UAAU;CACV,MAAM;CACN,WAAW;CACX,OAAO;CACR;AAED,IAAM,iBAAqD;CACzD,SAAS;CACT,OAAO;CACP,QAAQ;CACR,MAAM;CACN,OAAO;CACP,QAAQ;CACT;AAED,IAAM,iBAAyC;CAC7C,SAAS;CACT,OACE;CACF,QACE;CACF,QACE;CACF,MAAM;CACN,QACE;CACF,QACE;CACH;AAED,IAAa,cAAc,EACzB,UACA,UAAU,SACV,OACA,QACA,UACA,QACA,IACA,WACA,WAAW,OACX,YACqB;CACrB,MAAM,YAAY,MAAM,eAAe;CACvC,MAAM,kBAAkB,aAAa,OAAO,YAAY;CAExD,MAAM,yBAAyB;AAC7B,MAAI,CAAC,SAAU,QAAO;AACtB,MAAI,aAAa,KAAM,QAAO,eAAe;AAC7C,SAAO,eAAe,aAAa,eAAe;;AAYpD,QACE,oBAAC,WAAD;EACE,OAVF,oBAAoB,YAChB;GACE,GAAG;GACH,iBACE;GACH,GACD;EAKF,WAAW,gBACT,cAAc,UACd,SAAS,YAAY,QACrB,UAAU,aAAa,SACvB,YAAY,eAAe,WAC3B,UAAU,UACV,kBAAkB,EAClB,UACD;EAEA;EACS,CAAA"}
1
+ {"version":3,"file":"typography-Czi7t5y4.mjs","names":[],"sources":["../../src/components/typography/Typography.tsx"],"sourcesContent":["import React, { type ReactNode, type ElementType } from \"react\";\nimport { mergeClassNames } from \"../../utils\";\n\nexport type TypographyVariant =\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"h5\"\n | \"h6\"\n | \"body1\"\n | \"body2\"\n | \"caption\"\n | \"overline\";\n\nexport type TypographyAlign = \"left\" | \"center\" | \"right\" | \"justify\";\nexport type TypographyWeight =\n | \"thin\"\n | \"extralight\"\n | \"light\"\n | \"normal\"\n | \"medium\"\n | \"semibold\"\n | \"bold\"\n | \"extrabold\"\n | \"black\";\nexport type TypographyTracking =\n | \"tighter\"\n | \"tight\"\n | \"normal\"\n | \"wide\"\n | \"wider\"\n | \"widest\";\nexport type TypographyGradient =\n | boolean\n | \"primary\"\n | \"ocean\"\n | \"sunset\"\n | \"aurora\"\n | \"neon\"\n | \"forest\"\n | \"galaxy\";\n\nexport interface TypographyProps {\n children: ReactNode;\n variant?: TypographyVariant;\n align?: TypographyAlign;\n weight?: TypographyWeight;\n tracking?: TypographyTracking;\n italic?: boolean;\n as?: ElementType;\n className?: string;\n gradient?: TypographyGradient;\n style?: React.CSSProperties;\n}\n\nconst variantMapping: Record<TypographyVariant, ElementType> = {\n h1: \"h1\",\n h2: \"h2\",\n h3: \"h3\",\n h4: \"h4\",\n h5: \"h5\",\n h6: \"h6\",\n body1: \"p\",\n body2: \"p\",\n caption: \"span\",\n overline: \"span\",\n};\n\nconst variantStyles: Record<TypographyVariant, string> = {\n h1: \"text-4xl md:text-6xl font-black tracking-tighter uppercase italic leading-tight\",\n h2: \"text-3xl md:text-5xl font-black tracking-tight uppercase italic leading-snug\",\n h3: \"text-2xl md:text-4xl font-extrabold tracking-tight italic\",\n h4: \"text-xl md:text-2xl font-bold tracking-tight\",\n h5: \"text-lg md:text-xl font-bold\",\n h6: \"text-base md:text-lg font-semibold uppercase tracking-widest text-ds-3\",\n body1: \"text-base font-medium leading-relaxed\",\n body2: \"text-sm font-medium leading-relaxed text-ds-2\",\n caption: \"text-xs font-semibold uppercase tracking-wider text-ds-3\",\n overline: \"text-[10px] font-black uppercase tracking-[0.2em] text-ds-2\",\n};\n\nconst alignStyles: Record<TypographyAlign, string> = {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n justify: \"text-justify\",\n};\n\nconst weightStyles: Record<TypographyWeight, string> = {\n thin: \"font-thin\",\n extralight: \"font-extralight\",\n light: \"font-light\",\n normal: \"font-normal\",\n medium: \"font-medium\",\n semibold: \"font-semibold\",\n bold: \"font-bold\",\n extrabold: \"font-extrabold\",\n black: \"font-black\",\n};\n\nconst trackingStyles: Record<TypographyTracking, string> = {\n tighter: \"tracking-tighter\",\n tight: \"tracking-tight\",\n normal: \"tracking-normal\",\n wide: \"tracking-wide\",\n wider: \"tracking-wider\",\n widest: \"tracking-widest\",\n};\n\nconst gradientStyles: Record<string, string> = {\n primary: \"bg-clip-text text-transparent\",\n ocean:\n \"bg-linear-to-r from-cyan-500 to-blue-600 bg-clip-text text-transparent\",\n sunset:\n \"bg-linear-to-r from-orange-500 to-rose-600 bg-clip-text text-transparent\",\n aurora:\n \"bg-linear-to-r from-emerald-400 to-cyan-500 bg-clip-text text-transparent\",\n neon: \"bg-linear-to-r from-fuchsia-500 to-purple-600 bg-clip-text text-transparent\",\n forest:\n \"bg-linear-to-r from-lime-500 to-emerald-600 bg-clip-text text-transparent\",\n galaxy:\n \"bg-linear-to-r from-indigo-500 via-purple-500 to-pink-500 bg-clip-text text-transparent\",\n};\n\nexport const Typography = ({\n children,\n variant = \"body1\",\n align,\n weight,\n tracking,\n italic,\n as,\n className,\n gradient = false,\n style,\n}: TypographyProps) => {\n const Component = as || variantMapping[variant];\n const gradientVariant = gradient === true ? \"primary\" : gradient;\n\n const getGradientClass = () => {\n if (!gradient) return \"\";\n if (gradient === true) return gradientStyles.primary;\n return gradientStyles[gradient] || gradientStyles.primary;\n };\n\n const computedStyle: React.CSSProperties | undefined =\n gradientVariant === \"primary\"\n ? {\n ...style,\n backgroundImage:\n \"linear-gradient(90deg, var(--ds-color-accent), var(--ds-color-accent-hover))\",\n }\n : style;\n\n return (\n <Component\n style={computedStyle}\n className={mergeClassNames(\n variantStyles[variant],\n align && alignStyles[align],\n weight && weightStyles[weight],\n tracking && trackingStyles[tracking],\n italic && \"italic\",\n getGradientClass(),\n className,\n )}\n >\n {children}\n </Component>\n );\n};\n"],"mappings":";;;;AAwDA,IAAM,iBAAyD;CAC7D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,OAAO;CACP,OAAO;CACP,SAAS;CACT,UAAU;AACZ;AAEA,IAAM,gBAAmD;CACvD,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,OAAO;CACP,OAAO;CACP,SAAS;CACT,UAAU;AACZ;AAEA,IAAM,cAA+C;CACnD,MAAM;CACN,QAAQ;CACR,OAAO;CACP,SAAS;AACX;AAEA,IAAM,eAAiD;CACrD,MAAM;CACN,YAAY;CACZ,OAAO;CACP,QAAQ;CACR,QAAQ;CACR,UAAU;CACV,MAAM;CACN,WAAW;CACX,OAAO;AACT;AAEA,IAAM,iBAAqD;CACzD,SAAS;CACT,OAAO;CACP,QAAQ;CACR,MAAM;CACN,OAAO;CACP,QAAQ;AACV;AAEA,IAAM,iBAAyC;CAC7C,SAAS;CACT,OACE;CACF,QACE;CACF,QACE;CACF,MAAM;CACN,QACE;CACF,QACE;AACJ;AAEA,IAAa,cAAc,EACzB,UACA,UAAU,SACV,OACA,QACA,UACA,QACA,IACA,WACA,WAAW,OACX,YACqB;CACrB,MAAM,YAAY,MAAM,eAAe;CACvC,MAAM,kBAAkB,aAAa,OAAO,YAAY;CAExD,MAAM,yBAAyB;EAC7B,IAAI,CAAC,UAAU,OAAO;EACtB,IAAI,aAAa,MAAM,OAAO,eAAe;EAC7C,OAAO,eAAe,aAAa,eAAe;CACpD;CAWA,OACE,oBAAC,WAAD;EACE,OAVF,oBAAoB,YAChB;GACE,GAAG;GACH,iBACE;EACJ,IACA;EAKF,WAAW,gBACT,cAAc,UACd,SAAS,YAAY,QACrB,UAAU,aAAa,SACvB,YAAY,eAAe,WAC3B,UAAU,UACV,iBAAiB,GACjB,SACF;EAEC;CACQ,CAAA;AAEf"}