erp-pro-ui 0.1.1 → 0.1.2

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 (400) hide show
  1. package/README.md +512 -288
  2. package/dist/accordion.cjs +1 -1
  3. package/dist/accordion.mjs +1 -1
  4. package/dist/alert.cjs +1 -1
  5. package/dist/alert.mjs +1 -1
  6. package/dist/ascii-text.cjs +1 -1
  7. package/dist/ascii-text.mjs +1 -1
  8. package/dist/button.cjs +1 -1
  9. package/dist/button.mjs +1 -1
  10. package/dist/card.cjs +1 -1
  11. package/dist/card.mjs +1 -1
  12. package/dist/carousel.cjs +1 -1
  13. package/dist/carousel.mjs +1 -1
  14. package/dist/catalog.cjs +6 -0
  15. package/dist/catalog.cjs.map +1 -1
  16. package/dist/catalog.d.ts +11 -1
  17. package/dist/catalog.d.ts.map +1 -1
  18. package/dist/catalog.mjs +6 -0
  19. package/dist/catalog.mjs.map +1 -1
  20. package/dist/charts.cjs +4 -1
  21. package/dist/charts.mjs +2 -2
  22. package/dist/checkbox.cjs +1 -1
  23. package/dist/checkbox.mjs +1 -1
  24. package/dist/chip.cjs +1 -1
  25. package/dist/chip.mjs +1 -1
  26. package/dist/chroma-grid.cjs +1 -1
  27. package/dist/chroma-grid.mjs +1 -1
  28. package/dist/chunks/{accordion-C_0oGZkZ.mjs → accordion-Cbt-SJhj.mjs} +4 -4
  29. package/dist/chunks/accordion-Cbt-SJhj.mjs.map +1 -0
  30. package/dist/chunks/{accordion-BZ5hyz0_.cjs → accordion-pfJR8YYA.cjs} +4 -4
  31. package/dist/chunks/accordion-pfJR8YYA.cjs.map +1 -0
  32. package/dist/chunks/{alert-DeVa-NR1.mjs → alert-CtdLy4Hv.mjs} +6 -6
  33. package/dist/chunks/alert-CtdLy4Hv.mjs.map +1 -0
  34. package/dist/chunks/{alert-BdBDWqBN.cjs → alert-Dvz1GoL5.cjs} +6 -6
  35. package/dist/chunks/alert-Dvz1GoL5.cjs.map +1 -0
  36. package/dist/chunks/{ascii-text-BzQCLfya.mjs → ascii-text-C5tyNsR3.mjs} +32 -5
  37. package/dist/chunks/ascii-text-C5tyNsR3.mjs.map +1 -0
  38. package/dist/chunks/{ascii-text-D6lVHWph.cjs → ascii-text-DlmArZXh.cjs} +32 -5
  39. package/dist/chunks/ascii-text-DlmArZXh.cjs.map +1 -0
  40. package/dist/chunks/background-gradient-animation-BL-lnrJe.mjs.map +1 -1
  41. package/dist/chunks/background-gradient-animation-CXV9GDH8.cjs.map +1 -1
  42. package/dist/chunks/{button-CmNEMp_O.mjs → button-B0Lhj0AS.mjs} +3 -3
  43. package/dist/chunks/button-B0Lhj0AS.mjs.map +1 -0
  44. package/dist/chunks/{button-BH1eUjae.cjs → button-CZL6kFzT.cjs} +3 -3
  45. package/dist/chunks/button-CZL6kFzT.cjs.map +1 -0
  46. package/dist/chunks/{card-CzstAQYy.mjs → card-CcIF6z2H.mjs} +2 -2
  47. package/dist/chunks/card-CcIF6z2H.mjs.map +1 -0
  48. package/dist/chunks/{card-DZGM4zLx.cjs → card-gt-HZh0h.cjs} +2 -2
  49. package/dist/chunks/card-gt-HZh0h.cjs.map +1 -0
  50. package/dist/chunks/{carousel-47Eiyzwg.cjs → carousel-Cq5uwqQt.cjs} +3 -3
  51. package/dist/chunks/{carousel-BJ3nm2bw.mjs.map → carousel-Cq5uwqQt.cjs.map} +1 -1
  52. package/dist/chunks/{carousel-BJ3nm2bw.mjs → carousel-DJdqBVRK.mjs} +3 -3
  53. package/dist/chunks/{carousel-47Eiyzwg.cjs.map → carousel-DJdqBVRK.mjs.map} +1 -1
  54. package/dist/chunks/charts-BpElnsoR.cjs +687 -0
  55. package/dist/chunks/charts-BpElnsoR.cjs.map +1 -0
  56. package/dist/chunks/charts-DugYWvEf.mjs +632 -0
  57. package/dist/chunks/charts-DugYWvEf.mjs.map +1 -0
  58. package/dist/chunks/{checkbox-B3eIojWs.mjs → checkbox-DvwlGwWe.mjs} +8 -8
  59. package/dist/chunks/checkbox-DvwlGwWe.mjs.map +1 -0
  60. package/dist/chunks/{checkbox-DQmZwRTt.cjs → checkbox-yHuSw-hV.cjs} +8 -8
  61. package/dist/chunks/checkbox-yHuSw-hV.cjs.map +1 -0
  62. package/dist/chunks/{chip-cZ7-HmWw.mjs → chip-BGSUmnlO.mjs} +12 -12
  63. package/dist/chunks/chip-BGSUmnlO.mjs.map +1 -0
  64. package/dist/chunks/{chip-BH6wzwat.cjs → chip-DcBji__g.cjs} +12 -12
  65. package/dist/chunks/chip-DcBji__g.cjs.map +1 -0
  66. package/dist/chunks/{chroma-grid-DtsqM4LW.cjs → chroma-grid-9E9j1s9I.cjs} +10 -10
  67. package/dist/chunks/chroma-grid-9E9j1s9I.cjs.map +1 -0
  68. package/dist/chunks/{chroma-grid-CC_fFzxO.mjs → chroma-grid-Cdeql_2C.mjs} +10 -10
  69. package/dist/chunks/chroma-grid-Cdeql_2C.mjs.map +1 -0
  70. package/dist/chunks/color-palette-BLvDnCOD.cjs +754 -0
  71. package/dist/chunks/color-palette-BLvDnCOD.cjs.map +1 -0
  72. package/dist/chunks/color-palette-CXlCDiZz.mjs +748 -0
  73. package/dist/chunks/color-palette-CXlCDiZz.mjs.map +1 -0
  74. package/dist/chunks/{combobox-mAvOcg-E.cjs → combobox-BXu3s0dt.cjs} +56 -32
  75. package/dist/chunks/combobox-BXu3s0dt.cjs.map +1 -0
  76. package/dist/chunks/combobox-CjK-qG4k.mjs +132 -0
  77. package/dist/chunks/combobox-CjK-qG4k.mjs.map +1 -0
  78. package/dist/chunks/{data-table-BRcGhJDf.cjs → data-table-9HELVsYR.cjs} +197 -292
  79. package/dist/chunks/data-table-9HELVsYR.cjs.map +1 -0
  80. package/dist/chunks/{data-table-Dp0t_I_z.mjs → data-table-DyEQn9Yj.mjs} +197 -292
  81. package/dist/chunks/data-table-DyEQn9Yj.mjs.map +1 -0
  82. package/dist/chunks/{date-picker-BWBkr6LG.mjs → date-picker-D8gaaMlJ.mjs} +39 -16
  83. package/dist/chunks/date-picker-D8gaaMlJ.mjs.map +1 -0
  84. package/dist/chunks/{date-picker-DooielHi.cjs → date-picker-W9om1j7A.cjs} +39 -16
  85. package/dist/chunks/date-picker-W9om1j7A.cjs.map +1 -0
  86. package/dist/chunks/{dialog-Cbuf8V0g.cjs → dialog-CYFiWN8M.cjs} +20 -20
  87. package/dist/chunks/dialog-CYFiWN8M.cjs.map +1 -0
  88. package/dist/chunks/{dialog-C6nxSfIl.mjs → dialog-DUWnV9tN.mjs} +20 -20
  89. package/dist/chunks/dialog-DUWnV9tN.mjs.map +1 -0
  90. package/dist/chunks/{drawer-Dn0u8Sck.cjs → drawer-CLjsYdxN.cjs} +39 -22
  91. package/dist/chunks/drawer-CLjsYdxN.cjs.map +1 -0
  92. package/dist/chunks/drawer-D82Jz6KO.mjs +122 -0
  93. package/dist/chunks/drawer-D82Jz6KO.mjs.map +1 -0
  94. package/dist/chunks/{form-TwlDrshv.mjs → form-B2vcaHwh.mjs} +4 -4
  95. package/dist/chunks/form-B2vcaHwh.mjs.map +1 -0
  96. package/dist/chunks/{form-DcEuk721.cjs → form-CzH9GQc6.cjs} +4 -4
  97. package/dist/chunks/form-CzH9GQc6.cjs.map +1 -0
  98. package/dist/chunks/{gradual-blur-2jVhPcND.cjs → gradual-blur-B9GoY8o1.cjs} +1 -1
  99. package/dist/chunks/{gradual-blur-2jVhPcND.cjs.map → gradual-blur-B9GoY8o1.cjs.map} +1 -1
  100. package/dist/chunks/{gradual-blur-jTzKCmAV.mjs → gradual-blur-Bl3dOMEz.mjs} +1 -1
  101. package/dist/chunks/{gradual-blur-jTzKCmAV.mjs.map → gradual-blur-Bl3dOMEz.mjs.map} +1 -1
  102. package/dist/chunks/{hover-card-KjWMnvt_.cjs → hover-card-v0QwmVBU.cjs} +9 -4
  103. package/dist/chunks/hover-card-v0QwmVBU.cjs.map +1 -0
  104. package/dist/chunks/{hover-card-DwTVfjgN.mjs → hover-card-xqwpmZNm.mjs} +9 -4
  105. package/dist/chunks/{hover-card-KjWMnvt_.cjs.map → hover-card-xqwpmZNm.mjs.map} +1 -1
  106. package/dist/chunks/{icons-DYkpqWYG.cjs → icons-BxIzP2jd.cjs} +131 -8
  107. package/dist/chunks/icons-BxIzP2jd.cjs.map +1 -0
  108. package/dist/chunks/{icons-CrM6pFkv.mjs → icons-DuumN7z-.mjs} +108 -9
  109. package/dist/chunks/icons-DuumN7z-.mjs.map +1 -0
  110. package/dist/chunks/{input-CoRHoZkB.cjs → input-D9qZNqXV.cjs} +8 -8
  111. package/dist/chunks/input-D9qZNqXV.cjs.map +1 -0
  112. package/dist/chunks/{input-ChhwdNGk.mjs → input-wNqevfQ4.mjs} +8 -8
  113. package/dist/chunks/input-wNqevfQ4.mjs.map +1 -0
  114. package/dist/chunks/{label-EciNc4hO.cjs → label-BWPEGVam.cjs} +1 -1
  115. package/dist/chunks/{label-EciNc4hO.cjs.map → label-BWPEGVam.cjs.map} +1 -1
  116. package/dist/chunks/{label-JZn7PmtR.mjs → label-KPA-yYOF.mjs} +1 -1
  117. package/dist/chunks/{label-JZn7PmtR.mjs.map → label-KPA-yYOF.mjs.map} +1 -1
  118. package/dist/chunks/{loading-DPNa_X3c.mjs → loading-S1TdIrbB.mjs} +2 -2
  119. package/dist/chunks/{loading-DPNa_X3c.mjs.map → loading-S1TdIrbB.mjs.map} +1 -1
  120. package/dist/chunks/{loading-Cqgps3nf.cjs → loading-q7IEg56I.cjs} +2 -2
  121. package/dist/chunks/{loading-Cqgps3nf.cjs.map → loading-q7IEg56I.cjs.map} +1 -1
  122. package/dist/chunks/multi-select-combobox-ELSH_Xr4.mjs +132 -0
  123. package/dist/chunks/multi-select-combobox-ELSH_Xr4.mjs.map +1 -0
  124. package/dist/chunks/multi-select-combobox-UW0X15W7.cjs +139 -0
  125. package/dist/chunks/multi-select-combobox-UW0X15W7.cjs.map +1 -0
  126. package/dist/chunks/{otp-input-DaQDfI9C.cjs → otp-input-B6zzOEqw.cjs} +13 -14
  127. package/dist/chunks/otp-input-B6zzOEqw.cjs.map +1 -0
  128. package/dist/chunks/{otp-input-CNungc1j.mjs → otp-input-Bg4nQG6x.mjs} +13 -14
  129. package/dist/chunks/otp-input-Bg4nQG6x.mjs.map +1 -0
  130. package/dist/chunks/{overlay-BfUR77DT.cjs → overlay-DWNTyQzK.cjs} +1 -1
  131. package/dist/chunks/{overlay-BfUR77DT.cjs.map → overlay-DWNTyQzK.cjs.map} +1 -1
  132. package/dist/chunks/{overlay-CpdakhXI.mjs → overlay-TycCIFOu.mjs} +1 -1
  133. package/dist/chunks/{overlay-CpdakhXI.mjs.map → overlay-TycCIFOu.mjs.map} +1 -1
  134. package/dist/chunks/{password-strength-meter-xtMqhhFg.mjs → password-strength-meter-CbNSBuh_.mjs} +10 -10
  135. package/dist/chunks/password-strength-meter-CbNSBuh_.mjs.map +1 -0
  136. package/dist/chunks/{password-strength-meter-u4YI00zE.cjs → password-strength-meter-DxMV6GAs.cjs} +10 -10
  137. package/dist/chunks/password-strength-meter-DxMV6GAs.cjs.map +1 -0
  138. package/dist/chunks/progress-bar-C1OvQ-NI.cjs +96 -0
  139. package/dist/chunks/progress-bar-C1OvQ-NI.cjs.map +1 -0
  140. package/dist/chunks/progress-bar-C9FZDrju.mjs +89 -0
  141. package/dist/chunks/progress-bar-C9FZDrju.mjs.map +1 -0
  142. package/dist/chunks/{radio-C-fPZgSY.mjs → radio-C9w_CoiY.mjs} +9 -9
  143. package/dist/chunks/radio-C9w_CoiY.mjs.map +1 -0
  144. package/dist/chunks/{radio-mCgvEhOR.cjs → radio-jMHDvaMY.cjs} +9 -9
  145. package/dist/chunks/radio-jMHDvaMY.cjs.map +1 -0
  146. package/dist/chunks/select-D71tk6-I.mjs +152 -0
  147. package/dist/chunks/select-D71tk6-I.mjs.map +1 -0
  148. package/dist/chunks/select-WC_kPqUP.cjs +158 -0
  149. package/dist/chunks/select-WC_kPqUP.cjs.map +1 -0
  150. package/dist/chunks/{skeleton-D1S4RyeL.mjs → skeleton-BhYWOp0Q.mjs} +1 -1
  151. package/dist/chunks/{skeleton-D1S4RyeL.mjs.map → skeleton-BhYWOp0Q.mjs.map} +1 -1
  152. package/dist/chunks/{skeleton-C-NHrM-w.cjs → skeleton-DTXpHYYB.cjs} +1 -1
  153. package/dist/chunks/{skeleton-C-NHrM-w.cjs.map → skeleton-DTXpHYYB.cjs.map} +1 -1
  154. package/dist/chunks/{spinners-hf553hP9.mjs → spinners-BBCWD2gw.mjs} +2 -2
  155. package/dist/chunks/{spinners-hf553hP9.mjs.map → spinners-BBCWD2gw.mjs.map} +1 -1
  156. package/dist/chunks/{spinners-CU3bLaoo.cjs → spinners-BL4ERCCw.cjs} +2 -2
  157. package/dist/chunks/{spinners-CU3bLaoo.cjs.map → spinners-BL4ERCCw.cjs.map} +1 -1
  158. package/dist/chunks/{splash-cursor-Dpzl_YXx.cjs → splash-cursor-BVSmbcIX.cjs} +9 -8
  159. package/dist/chunks/splash-cursor-BVSmbcIX.cjs.map +1 -0
  160. package/dist/chunks/{splash-cursor-9BsoQZl0.mjs → splash-cursor-rSrTnawZ.mjs} +9 -8
  161. package/dist/chunks/splash-cursor-rSrTnawZ.mjs.map +1 -0
  162. package/dist/chunks/{spotlight-card-Bl0aXnT4.mjs → spotlight-card-BpZLMOp6.mjs} +1 -1
  163. package/dist/chunks/{spotlight-card-Bl0aXnT4.mjs.map → spotlight-card-BpZLMOp6.mjs.map} +1 -1
  164. package/dist/chunks/{spotlight-card-SUhrgstF.cjs → spotlight-card-DS1dy1W3.cjs} +1 -1
  165. package/dist/chunks/{spotlight-card-SUhrgstF.cjs.map → spotlight-card-DS1dy1W3.cjs.map} +1 -1
  166. package/dist/chunks/{stepper-uz8iRzlY.mjs → stepper-D4yQsQB0.mjs} +14 -14
  167. package/dist/chunks/stepper-D4yQsQB0.mjs.map +1 -0
  168. package/dist/chunks/{stepper-BDz6PkjV.cjs → stepper-fY-Sx72k.cjs} +14 -14
  169. package/dist/chunks/stepper-fY-Sx72k.cjs.map +1 -0
  170. package/dist/chunks/{sun-to-moon-button-3E6qah0o.mjs → sun-to-moon-button-B2Aje05o.mjs} +3 -3
  171. package/dist/chunks/{sun-to-moon-button-3E6qah0o.mjs.map → sun-to-moon-button-B2Aje05o.mjs.map} +1 -1
  172. package/dist/chunks/{sun-to-moon-button-B__3FWnK.cjs → sun-to-moon-button-BmFwRBye.cjs} +3 -3
  173. package/dist/chunks/{sun-to-moon-button-B__3FWnK.cjs.map → sun-to-moon-button-BmFwRBye.cjs.map} +1 -1
  174. package/dist/chunks/{switch-y8oWcyLp.cjs → switch-C5otDb4c.cjs} +3 -3
  175. package/dist/chunks/switch-C5otDb4c.cjs.map +1 -0
  176. package/dist/chunks/{switch-DYLavKgf.mjs → switch-DOVl_i_s.mjs} +3 -3
  177. package/dist/chunks/switch-DOVl_i_s.mjs.map +1 -0
  178. package/dist/chunks/textarea-CAUsyu4-.cjs +63 -0
  179. package/dist/chunks/textarea-CAUsyu4-.cjs.map +1 -0
  180. package/dist/chunks/textarea-CU5C-Zw9.mjs +57 -0
  181. package/dist/chunks/textarea-CU5C-Zw9.mjs.map +1 -0
  182. package/dist/chunks/{theme-CBtWIFMT.cjs → theme-7DWLxJK_.cjs} +4 -2
  183. package/dist/chunks/theme-7DWLxJK_.cjs.map +1 -0
  184. package/dist/chunks/{theme-Bwu0HKqZ.mjs → theme-BceKeYhw.mjs} +4 -2
  185. package/dist/chunks/theme-BceKeYhw.mjs.map +1 -0
  186. package/dist/chunks/{toast-C8JRhbSo.mjs → toast-CvfP7PUP.mjs} +20 -20
  187. package/dist/chunks/toast-CvfP7PUP.mjs.map +1 -0
  188. package/dist/chunks/{toast-DWOwpD2F.cjs → toast-Ds7_19Ap.cjs} +20 -20
  189. package/dist/chunks/toast-Ds7_19Ap.cjs.map +1 -0
  190. package/dist/chunks/{tooltip-YtA_66_1.mjs → tooltip-efHETBo1.mjs} +1 -1
  191. package/dist/chunks/{tooltip-YtA_66_1.mjs.map → tooltip-efHETBo1.mjs.map} +1 -1
  192. package/dist/chunks/{tooltip-BHXNmXsa.cjs → tooltip-nkIqViGk.cjs} +1 -1
  193. package/dist/chunks/{tooltip-BHXNmXsa.cjs.map → tooltip-nkIqViGk.cjs.map} +1 -1
  194. package/dist/chunks/{typography-BzprBnQc.mjs → typography-CLu6Hx9j.mjs} +7 -3
  195. package/dist/chunks/{typography-BzprBnQc.mjs.map → typography-CLu6Hx9j.mjs.map} +1 -1
  196. package/dist/chunks/{typography-3wSx67DZ.cjs → typography-DaLu9tty.cjs} +7 -3
  197. package/dist/chunks/{typography-3wSx67DZ.cjs.map → typography-DaLu9tty.cjs.map} +1 -1
  198. package/dist/color-palette.cjs +1 -1
  199. package/dist/color-palette.mjs +1 -1
  200. package/dist/colors.css +121 -186
  201. package/dist/combobox.cjs +1 -1
  202. package/dist/combobox.mjs +1 -1
  203. package/dist/components/data-display/charts/AreaChart.d.ts.map +1 -1
  204. package/dist/components/data-display/charts/BarChart.d.ts.map +1 -1
  205. package/dist/components/data-display/charts/NeonLineChart.d.ts.map +1 -1
  206. package/dist/components/data-display/charts/PieChart.d.ts.map +1 -1
  207. package/dist/components/data-display/charts/StackedBarChart.d.ts.map +1 -1
  208. package/dist/components/data-display/charts/ThinBreakdownBar.d.ts.map +1 -1
  209. package/dist/components/data-display/charts/chartPalette.d.ts +10 -0
  210. package/dist/components/data-display/charts/chartPalette.d.ts.map +1 -0
  211. package/dist/components/data-display/charts/index.d.ts +2 -0
  212. package/dist/components/data-display/charts/index.d.ts.map +1 -1
  213. package/dist/components/data-display/chip/Chip.d.ts.map +1 -1
  214. package/dist/components/data-display/color-palette/ColorPalette.d.ts.map +1 -1
  215. package/dist/components/data-display/data-table/DataTable.d.ts +17 -10
  216. package/dist/components/data-display/data-table/DataTable.d.ts.map +1 -1
  217. package/dist/components/data-display/data-table/index.d.ts +1 -1
  218. package/dist/components/data-display/data-table/index.d.ts.map +1 -1
  219. package/dist/components/data-display/index.d.ts +1 -0
  220. package/dist/components/data-display/index.d.ts.map +1 -1
  221. package/dist/components/data-display/progress-bar/ProgressBar.d.ts +18 -0
  222. package/dist/components/data-display/progress-bar/ProgressBar.d.ts.map +1 -0
  223. package/dist/components/data-display/progress-bar/index.d.ts +3 -0
  224. package/dist/components/data-display/progress-bar/index.d.ts.map +1 -0
  225. package/dist/components/effects/ascii-text/ASCIIText.d.ts.map +1 -1
  226. package/dist/components/effects/border-beam/BorderBeam.d.ts.map +1 -1
  227. package/dist/components/effects/chroma-grid/ChromaGrid.d.ts.map +1 -1
  228. package/dist/components/effects/splash-cursor/SplashCursor.d.ts.map +1 -1
  229. package/dist/components/forms/combobox/Combobox.d.ts.map +1 -1
  230. package/dist/components/forms/date-picker/DatePicker.d.ts.map +1 -1
  231. package/dist/components/forms/input/Input.d.ts.map +1 -1
  232. package/dist/components/forms/multi-select-combobox/MultiSelectCombobox.d.ts.map +1 -1
  233. package/dist/components/forms/otp-input/OTPInput.d.ts.map +1 -1
  234. package/dist/components/forms/password-strength-meter/PasswordCriteria.d.ts.map +1 -1
  235. package/dist/components/forms/select/Select.d.ts.map +1 -1
  236. package/dist/components/forms/select/types.d.ts +2 -0
  237. package/dist/components/forms/select/types.d.ts.map +1 -1
  238. package/dist/components/forms/textarea/Textarea.d.ts.map +1 -1
  239. package/dist/components/icons/ColumnsIcon.d.ts +9 -0
  240. package/dist/components/icons/ColumnsIcon.d.ts.map +1 -0
  241. package/dist/components/icons/MailIcon.d.ts +9 -0
  242. package/dist/components/icons/MailIcon.d.ts.map +1 -0
  243. package/dist/components/icons/PlayIcon.d.ts +9 -0
  244. package/dist/components/icons/PlayIcon.d.ts.map +1 -0
  245. package/dist/components/icons/ZapIcon.d.ts +9 -0
  246. package/dist/components/icons/ZapIcon.d.ts.map +1 -0
  247. package/dist/components/icons/index.d.ts +4 -0
  248. package/dist/components/icons/index.d.ts.map +1 -1
  249. package/dist/components/navigation/accordion/Accordion.d.ts.map +1 -1
  250. package/dist/components/overlays/drawer/Drawer.d.ts.map +1 -1
  251. package/dist/components/overlays/hover-card/HoverCard.d.ts.map +1 -1
  252. package/dist/components/typography/Typography.d.ts.map +1 -1
  253. package/dist/data-table.cjs +1 -1
  254. package/dist/data-table.mjs +1 -1
  255. package/dist/date-picker.cjs +1 -1
  256. package/dist/date-picker.mjs +1 -1
  257. package/dist/dialog.cjs +1 -1
  258. package/dist/dialog.mjs +1 -1
  259. package/dist/docs.cjs +50 -4
  260. package/dist/docs.cjs.map +1 -1
  261. package/dist/docs.d.ts +59 -9
  262. package/dist/docs.d.ts.map +1 -1
  263. package/dist/docs.mjs +50 -4
  264. package/dist/docs.mjs.map +1 -1
  265. package/dist/drawer.cjs +1 -1
  266. package/dist/drawer.mjs +1 -1
  267. package/dist/fonts.css +5 -0
  268. package/dist/form.cjs +1 -1
  269. package/dist/form.mjs +1 -1
  270. package/dist/foundation.css +3 -3
  271. package/dist/foundations/theme/ThemeProvider.d.ts +1 -0
  272. package/dist/foundations/theme/ThemeProvider.d.ts.map +1 -1
  273. package/dist/gradual-blur.cjs +1 -1
  274. package/dist/gradual-blur.mjs +1 -1
  275. package/dist/hover-card.cjs +1 -1
  276. package/dist/hover-card.mjs +1 -1
  277. package/dist/icons.cjs +5 -1
  278. package/dist/icons.mjs +2 -2
  279. package/dist/index.cjs +50 -41
  280. package/dist/index.cjs.map +1 -1
  281. package/dist/index.d.ts +5 -3
  282. package/dist/index.d.ts.map +1 -1
  283. package/dist/index.mjs +43 -42
  284. package/dist/index.mjs.map +1 -1
  285. package/dist/input.cjs +1 -1
  286. package/dist/input.mjs +1 -1
  287. package/dist/label.cjs +1 -1
  288. package/dist/label.mjs +1 -1
  289. package/dist/loading.cjs +1 -1
  290. package/dist/loading.mjs +1 -1
  291. package/dist/multi-select-combobox.cjs +1 -1
  292. package/dist/multi-select-combobox.mjs +1 -1
  293. package/dist/otp-input.cjs +1 -1
  294. package/dist/otp-input.mjs +1 -1
  295. package/dist/password-strength-meter.cjs +1 -1
  296. package/dist/password-strength-meter.mjs +1 -1
  297. package/dist/progress-bar.cjs +3 -0
  298. package/dist/progress-bar.d.ts +2 -0
  299. package/dist/progress-bar.mjs +2 -0
  300. package/dist/radio.cjs +1 -1
  301. package/dist/radio.mjs +1 -1
  302. package/dist/select.cjs +1 -1
  303. package/dist/select.mjs +1 -1
  304. package/dist/skeleton.cjs +1 -1
  305. package/dist/skeleton.mjs +1 -1
  306. package/dist/spinners.cjs +1 -1
  307. package/dist/spinners.mjs +1 -1
  308. package/dist/splash-cursor.cjs +1 -1
  309. package/dist/splash-cursor.mjs +1 -1
  310. package/dist/spotlight-card.cjs +1 -1
  311. package/dist/spotlight-card.mjs +1 -1
  312. package/dist/stepper.cjs +1 -1
  313. package/dist/stepper.mjs +1 -1
  314. package/dist/sun-to-moon-button.cjs +1 -1
  315. package/dist/sun-to-moon-button.mjs +1 -1
  316. package/dist/switch.cjs +1 -1
  317. package/dist/switch.mjs +1 -1
  318. package/dist/textarea.cjs +1 -1
  319. package/dist/textarea.mjs +1 -1
  320. package/dist/theme.cjs +1 -1
  321. package/dist/theme.mjs +1 -1
  322. package/dist/toast.cjs +1 -1
  323. package/dist/toast.mjs +1 -1
  324. package/dist/tokens.css +592 -0
  325. package/dist/tooltip.cjs +1 -1
  326. package/dist/tooltip.mjs +1 -1
  327. package/dist/typography.cjs +1 -1
  328. package/dist/typography.mjs +1 -1
  329. package/package.json +19 -5
  330. package/dist/chunks/accordion-BZ5hyz0_.cjs.map +0 -1
  331. package/dist/chunks/accordion-C_0oGZkZ.mjs.map +0 -1
  332. package/dist/chunks/alert-BdBDWqBN.cjs.map +0 -1
  333. package/dist/chunks/alert-DeVa-NR1.mjs.map +0 -1
  334. package/dist/chunks/ascii-text-BzQCLfya.mjs.map +0 -1
  335. package/dist/chunks/ascii-text-D6lVHWph.cjs.map +0 -1
  336. package/dist/chunks/button-BH1eUjae.cjs.map +0 -1
  337. package/dist/chunks/button-CmNEMp_O.mjs.map +0 -1
  338. package/dist/chunks/card-CzstAQYy.mjs.map +0 -1
  339. package/dist/chunks/card-DZGM4zLx.cjs.map +0 -1
  340. package/dist/chunks/charts-Bynf6x07.mjs +0 -448
  341. package/dist/chunks/charts-Bynf6x07.mjs.map +0 -1
  342. package/dist/chunks/charts-UYl7Ecqv.cjs +0 -485
  343. package/dist/chunks/charts-UYl7Ecqv.cjs.map +0 -1
  344. package/dist/chunks/checkbox-B3eIojWs.mjs.map +0 -1
  345. package/dist/chunks/checkbox-DQmZwRTt.cjs.map +0 -1
  346. package/dist/chunks/chip-BH6wzwat.cjs.map +0 -1
  347. package/dist/chunks/chip-cZ7-HmWw.mjs.map +0 -1
  348. package/dist/chunks/chroma-grid-CC_fFzxO.mjs.map +0 -1
  349. package/dist/chunks/chroma-grid-DtsqM4LW.cjs.map +0 -1
  350. package/dist/chunks/color-palette-Cz7vqbil.cjs +0 -1156
  351. package/dist/chunks/color-palette-Cz7vqbil.cjs.map +0 -1
  352. package/dist/chunks/color-palette-yadpDCUw.mjs +0 -1150
  353. package/dist/chunks/color-palette-yadpDCUw.mjs.map +0 -1
  354. package/dist/chunks/combobox-B9Nzlhu3.mjs +0 -108
  355. package/dist/chunks/combobox-B9Nzlhu3.mjs.map +0 -1
  356. package/dist/chunks/combobox-mAvOcg-E.cjs.map +0 -1
  357. package/dist/chunks/data-table-BRcGhJDf.cjs.map +0 -1
  358. package/dist/chunks/data-table-Dp0t_I_z.mjs.map +0 -1
  359. package/dist/chunks/date-picker-BWBkr6LG.mjs.map +0 -1
  360. package/dist/chunks/date-picker-DooielHi.cjs.map +0 -1
  361. package/dist/chunks/dialog-C6nxSfIl.mjs.map +0 -1
  362. package/dist/chunks/dialog-Cbuf8V0g.cjs.map +0 -1
  363. package/dist/chunks/drawer-DIuvgqTA.mjs +0 -105
  364. package/dist/chunks/drawer-DIuvgqTA.mjs.map +0 -1
  365. package/dist/chunks/drawer-Dn0u8Sck.cjs.map +0 -1
  366. package/dist/chunks/form-DcEuk721.cjs.map +0 -1
  367. package/dist/chunks/form-TwlDrshv.mjs.map +0 -1
  368. package/dist/chunks/hover-card-DwTVfjgN.mjs.map +0 -1
  369. package/dist/chunks/icons-CrM6pFkv.mjs.map +0 -1
  370. package/dist/chunks/icons-DYkpqWYG.cjs.map +0 -1
  371. package/dist/chunks/input-ChhwdNGk.mjs.map +0 -1
  372. package/dist/chunks/input-CoRHoZkB.cjs.map +0 -1
  373. package/dist/chunks/multi-select-combobox-BPRTZVF6.mjs +0 -108
  374. package/dist/chunks/multi-select-combobox-BPRTZVF6.mjs.map +0 -1
  375. package/dist/chunks/multi-select-combobox-DiMwJxj_.cjs +0 -115
  376. package/dist/chunks/multi-select-combobox-DiMwJxj_.cjs.map +0 -1
  377. package/dist/chunks/otp-input-CNungc1j.mjs.map +0 -1
  378. package/dist/chunks/otp-input-DaQDfI9C.cjs.map +0 -1
  379. package/dist/chunks/password-strength-meter-u4YI00zE.cjs.map +0 -1
  380. package/dist/chunks/password-strength-meter-xtMqhhFg.mjs.map +0 -1
  381. package/dist/chunks/radio-C-fPZgSY.mjs.map +0 -1
  382. package/dist/chunks/radio-mCgvEhOR.cjs.map +0 -1
  383. package/dist/chunks/select-BB-pOzI2.mjs +0 -116
  384. package/dist/chunks/select-BB-pOzI2.mjs.map +0 -1
  385. package/dist/chunks/select-BwelAQc1.cjs +0 -122
  386. package/dist/chunks/select-BwelAQc1.cjs.map +0 -1
  387. package/dist/chunks/splash-cursor-9BsoQZl0.mjs.map +0 -1
  388. package/dist/chunks/splash-cursor-Dpzl_YXx.cjs.map +0 -1
  389. package/dist/chunks/stepper-BDz6PkjV.cjs.map +0 -1
  390. package/dist/chunks/stepper-uz8iRzlY.mjs.map +0 -1
  391. package/dist/chunks/switch-DYLavKgf.mjs.map +0 -1
  392. package/dist/chunks/switch-y8oWcyLp.cjs.map +0 -1
  393. package/dist/chunks/textarea-BWkUVpm3.cjs +0 -66
  394. package/dist/chunks/textarea-BWkUVpm3.cjs.map +0 -1
  395. package/dist/chunks/textarea-Bxqe70TW.mjs +0 -60
  396. package/dist/chunks/textarea-Bxqe70TW.mjs.map +0 -1
  397. package/dist/chunks/theme-Bwu0HKqZ.mjs.map +0 -1
  398. package/dist/chunks/theme-CBtWIFMT.cjs.map +0 -1
  399. package/dist/chunks/toast-C8JRhbSo.mjs.map +0 -1
  400. package/dist/chunks/toast-DWOwpD2F.cjs.map +0 -1
@@ -1,5 +1,5 @@
1
- import { U as CloseIcon, a as QuestionCircleIcon, d as CheckCircleIcon, m as AlertCircleIcon, o as LoaderIcon, p as AlertTriangleIcon, s as InfoCircleIcon } from "./icons-CrM6pFkv.mjs";
2
- import { t as useOverlayEffects } from "./overlay-CpdakhXI.mjs";
1
+ import { _ as AlertTriangleIcon, h as CheckCircleIcon, l as LoaderIcon, o as QuestionCircleIcon, q as CloseIcon, u as InfoCircleIcon, v as AlertCircleIcon } from "./icons-DuumN7z-.mjs";
2
+ import { t as useOverlayEffects } from "./overlay-TycCIFOu.mjs";
3
3
  import { useEffect, useRef } from "react";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
  import { AnimatePresence, motion } from "framer-motion";
@@ -214,29 +214,29 @@ var basePanel = `
214
214
  `;
215
215
  var variantStyles = {
216
216
  default: {
217
- icon: "bg-primary-100 dark:bg-primary-900/30",
218
- button: "bg-primary hover:bg-primary-600 text-white",
219
- iconColor: "text-primary dark:text-primary-400"
217
+ icon: "bg-accent-subtle",
218
+ button: "bg-accent hover:bg-accent-hover text-on-accent",
219
+ iconColor: "text-accent"
220
220
  },
221
221
  destructive: {
222
- icon: "bg-red-100 dark:bg-red-900/30",
223
- button: "bg-red-500 hover:bg-red-600 text-white",
224
- iconColor: "text-red-500 dark:text-red-400"
222
+ icon: "bg-danger-subtle",
223
+ button: "bg-destructive hover:opacity-90 text-white",
224
+ iconColor: "text-danger"
225
225
  },
226
226
  success: {
227
- icon: "bg-green-100 dark:bg-green-900/30",
228
- button: "bg-green-500 hover:bg-green-600 text-white",
229
- iconColor: "text-green-500 dark:text-green-400"
227
+ icon: "bg-success-subtle",
228
+ button: "bg-success hover:opacity-90 text-white",
229
+ iconColor: "text-success"
230
230
  },
231
231
  warning: {
232
- icon: "bg-amber-100 dark:bg-amber-900/30",
233
- button: "bg-amber-500 hover:bg-amber-600 text-white",
234
- iconColor: "text-amber-500 dark:text-amber-400"
232
+ icon: "bg-warning-subtle",
233
+ button: "bg-warning hover:opacity-90 text-neutral-950",
234
+ iconColor: "text-warning"
235
235
  },
236
236
  info: {
237
- icon: "bg-blue-100 dark:bg-blue-900/30",
238
- button: "bg-blue-500 hover:bg-blue-600 text-white",
239
- iconColor: "text-blue-500 dark:text-blue-400"
237
+ icon: "bg-info-subtle",
238
+ button: "bg-info hover:opacity-90 text-white",
239
+ iconColor: "text-info"
240
240
  }
241
241
  };
242
242
  var VariantIcon = ({ variant }) => {
@@ -342,7 +342,7 @@ var Dialog = ({ open, onOpenChange, title, description, children, footer, closeO
342
342
  exit: currentAnimation.exit,
343
343
  transition: currentTransition,
344
344
  children: [
345
- /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-gradient-to-tr from-white/10 via-transparent to-white/5 dark:from-white/5 dark:to-transparent pointer-events-none rounded-2xl" }),
345
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-linear-to-tr from-white/10 via-transparent to-white/5 dark:from-white/5 dark:to-transparent pointer-events-none rounded-2xl" }),
346
346
  showClose && /* @__PURE__ */ jsx("button", {
347
347
  type: "button",
348
348
  className: "absolute right-4 top-4 w-8 h-8 flex items-center justify-center\n rounded-full transition-all duration-200\n text-neutral-400 dark:text-neutral-500\n hover:text-neutral-600 dark:hover:text-neutral-300\n hover:bg-neutral-100/50 dark:hover:bg-white/10",
@@ -356,7 +356,7 @@ var Dialog = ({ open, onOpenChange, title, description, children, footer, closeO
356
356
  /* @__PURE__ */ jsxs("div", {
357
357
  className: "relative flex gap-4",
358
358
  children: [preset !== "custom" && /* @__PURE__ */ jsx("div", {
359
- className: `flex-shrink-0 w-10 h-10 rounded-full flex items-center justify-center ${styles.icon}`,
359
+ className: `shrink-0 w-10 h-10 rounded-full flex items-center justify-center ${styles.icon}`,
360
360
  children: /* @__PURE__ */ jsx("span", {
361
361
  className: styles.iconColor,
362
362
  children: icon || /* @__PURE__ */ jsx(VariantIcon, { variant })
@@ -387,4 +387,4 @@ var Dialog = ({ open, onOpenChange, title, description, children, footer, closeO
387
387
  //#endregion
388
388
  export { Dialog as t };
389
389
 
390
- //# sourceMappingURL=dialog-C6nxSfIl.mjs.map
390
+ //# sourceMappingURL=dialog-DUWnV9tN.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialog-DUWnV9tN.mjs","names":[],"sources":["../../src/components/overlays/dialog/Dialog.tsx"],"sourcesContent":["import { useEffect, useRef, type ReactElement } from \"react\";\nimport {\n motion,\n AnimatePresence,\n type TargetAndTransition,\n} from \"framer-motion\";\nimport {\n AlertCircleIcon,\n AlertTriangleIcon,\n CheckCircleIcon,\n CloseIcon,\n InfoCircleIcon,\n LoaderIcon,\n QuestionCircleIcon,\n} from \"../../icons\";\nimport type {\n DialogProps,\n DialogVariant,\n DialogAnimation,\n DialogPreset,\n} from \"./types\";\nexport type { DialogProps, DialogVariant, DialogAnimation, DialogPreset };\nimport { useOverlayEffects } from \"../../shared/overlay\";\n\n// Animation preset type\ninterface AnimationPreset {\n initial: TargetAndTransition;\n animate: TargetAndTransition;\n exit: TargetAndTransition;\n}\n\n// Animation presets for different entrance/exit effects\nconst animationVariants: Record<DialogAnimation, AnimationPreset> = {\n fade: {\n initial: { opacity: 0 },\n animate: { opacity: 1 },\n exit: { opacity: 0 },\n },\n scale: {\n initial: { opacity: 0, scale: 0.9, y: 20 },\n animate: { opacity: 1, scale: 1, y: 0 },\n exit: { opacity: 0, scale: 0.95, y: 10 },\n },\n slideUp: {\n initial: { opacity: 0, y: 100 },\n animate: { opacity: 1, y: 0 },\n exit: { opacity: 0, y: 50 },\n },\n slideDown: {\n initial: { opacity: 0, y: -100 },\n animate: { opacity: 1, y: 0 },\n exit: { opacity: 0, y: -50 },\n },\n slideLeft: {\n initial: { opacity: 0, x: 100 },\n animate: { opacity: 1, x: 0 },\n exit: { opacity: 0, x: 50 },\n },\n slideRight: {\n initial: { opacity: 0, x: -100 },\n animate: { opacity: 1, x: 0 },\n exit: { opacity: 0, x: -50 },\n },\n elastic: {\n initial: { opacity: 0, scale: 0.5, y: 50 },\n animate: { opacity: 1, scale: 1, y: 0 },\n exit: { opacity: 0, scale: 0.8, y: 20 },\n },\n bounce: {\n initial: { opacity: 0, scale: 0.3, y: -100 },\n animate: { opacity: 1, scale: 1, y: 0 },\n exit: { opacity: 0, scale: 0.5, y: -50 },\n },\n flip: {\n initial: { opacity: 0, rotateX: -90, scale: 0.9 },\n animate: { opacity: 1, rotateX: 0, scale: 1 },\n exit: { opacity: 0, rotateX: 90, scale: 0.9 },\n },\n zoom: {\n initial: { opacity: 0, scale: 0, rotate: -10 },\n animate: { opacity: 1, scale: 1, rotate: 0 },\n exit: { opacity: 0, scale: 0.5, rotate: 5 },\n },\n};\n\n// Transition configs for each animation type\nconst animationTransitions: Record<DialogAnimation, object> = {\n fade: { duration: 0.2 },\n scale: { type: \"spring\", damping: 25, stiffness: 300 },\n slideUp: { type: \"spring\", damping: 25, stiffness: 300 },\n slideDown: { type: \"spring\", damping: 25, stiffness: 300 },\n slideLeft: { type: \"spring\", damping: 25, stiffness: 300 },\n slideRight: { type: \"spring\", damping: 25, stiffness: 300 },\n elastic: { type: \"spring\", damping: 10, stiffness: 100 },\n bounce: { type: \"spring\", damping: 8, stiffness: 200, bounce: 0.5 },\n flip: { type: \"spring\", damping: 15, stiffness: 150 },\n zoom: { type: \"spring\", damping: 20, stiffness: 200 },\n};\n\n// Crystal glass panel base styling\nconst basePanel = `\n relative w-full max-w-lg rounded-2xl overflow-hidden\n border border-white/30 dark:border-white/10\n backdrop-blur-2xl backdrop-saturate-150\n bg-gradient-to-br from-white/80 via-white/70 to-white/60\n dark:from-neutral-900/90 dark:via-neutral-900/80 dark:to-neutral-800/70\n p-6\n shadow-[0_8px_32px_rgba(0,0,0,0.12),0_2px_8px_rgba(0,0,0,0.08)]\n dark:shadow-[0_8px_32px_rgba(0,0,0,0.5),0_2px_8px_rgba(0,0,0,0.3)]\n ring-1 ring-inset ring-white/20 dark:ring-white/5\n`;\n\n// Variant accent colors for icons and confirm buttons\nconst variantStyles: Record<\n DialogVariant,\n { icon: string; button: string; iconColor: string }\n> = {\n default: {\n icon: \"bg-accent-subtle\",\n button: \"bg-accent hover:bg-accent-hover text-on-accent\",\n iconColor: \"text-accent\",\n },\n destructive: {\n icon: \"bg-danger-subtle\",\n button: \"bg-destructive hover:opacity-90 text-white\",\n iconColor: \"text-danger\",\n },\n success: {\n icon: \"bg-success-subtle\",\n button: \"bg-success hover:opacity-90 text-white\",\n iconColor: \"text-success\",\n },\n warning: {\n icon: \"bg-warning-subtle\",\n button: \"bg-warning hover:opacity-90 text-neutral-950\",\n iconColor: \"text-warning\",\n },\n info: {\n icon: \"bg-info-subtle\",\n button: \"bg-info hover:opacity-90 text-white\",\n iconColor: \"text-info\",\n },\n};\n\n// Default icons per variant\nconst VariantIcon = ({ variant }: { variant: DialogVariant }): ReactElement => {\n const icons: Record<DialogVariant, ReactElement> = {\n default: <QuestionCircleIcon className=\"w-6 h-6\" aria-hidden=\"true\" />,\n destructive: <AlertTriangleIcon className=\"w-6 h-6\" aria-hidden=\"true\" />,\n success: <CheckCircleIcon className=\"w-6 h-6\" aria-hidden=\"true\" />,\n warning: <AlertCircleIcon className=\"w-6 h-6\" aria-hidden=\"true\" />,\n info: <InfoCircleIcon className=\"w-6 h-6\" aria-hidden=\"true\" />,\n };\n return icons[variant];\n};\n\n// Loading spinner\nconst Spinner = () => (\n <LoaderIcon className=\"animate-spin w-4 h-4\" aria-hidden=\"true\" />\n);\n\nexport const Dialog = ({\n open,\n onOpenChange,\n title,\n description,\n children,\n footer,\n closeOnOverlay = true,\n showClose = true,\n className = \"\",\n widthClassName = \"\",\n variant = \"default\",\n preset = \"custom\",\n confirmLabel = \"OK\",\n cancelLabel = \"Cancel\",\n onConfirm,\n onCancel,\n loading = false,\n icon,\n animation = \"scale\",\n}: DialogProps) => {\n const currentAnimation = animationVariants[animation];\n const currentTransition = animationTransitions[animation];\n const panelRef = useRef<HTMLDivElement | null>(null);\n useOverlayEffects(panelRef, open);\n\n useEffect(() => {\n if (!open || typeof window === \"undefined\") return;\n const handleKey = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n onOpenChange?.(false);\n }\n };\n window.addEventListener(\"keydown\", handleKey);\n return () => window.removeEventListener(\"keydown\", handleKey);\n }, [open, onOpenChange]);\n\n const handleOverlayClick = () => {\n if (closeOnOverlay) {\n onOpenChange?.(false);\n }\n };\n\n const handleCancel = () => {\n onCancel?.();\n onOpenChange?.(false);\n };\n\n const handleConfirm = () => {\n onConfirm?.();\n if (!loading) {\n onOpenChange?.(false);\n }\n };\n\n const styles = variantStyles[variant];\n const showPresetButtons = preset !== \"custom\" && !footer;\n const showCancelButton = preset === \"confirm\";\n\n // Render preset buttons\n const renderFooter = () => {\n if (footer) return footer;\n if (!showPresetButtons) return null;\n\n return (\n <div className=\"flex gap-3 justify-end w-full\">\n {showCancelButton && (\n <button\n type=\"button\"\n onClick={handleCancel}\n disabled={loading}\n className=\"inline-flex items-center justify-center gap-2 cursor-pointer\n py-2.5 px-4 text-sm font-semibold leading-none\n rounded-lg transition-all duration-200\n bg-neutral-200 dark:bg-neutral-700\n border border-neutral-300 dark:border-neutral-600\n text-neutral-800 dark:text-white\n shadow-sm hover:bg-neutral-300 dark:hover:bg-neutral-600\n active:scale-95 hover:opacity-90\n disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n {cancelLabel}\n </button>\n )}\n <button\n type=\"button\"\n onClick={handleConfirm}\n disabled={loading}\n className={`inline-flex items-center justify-center gap-2 cursor-pointer\n py-2.5 px-4 text-sm font-semibold leading-none\n rounded-lg transition-all duration-200\n shadow-md hover:shadow-lg\n active:scale-95 hover:opacity-90\n disabled:opacity-50 disabled:cursor-not-allowed ${styles.button}`}\n >\n {loading && <Spinner />}\n {confirmLabel}\n </button>\n </div>\n );\n };\n\n return (\n <AnimatePresence>\n {open && (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center px-4 overlay-backdrop\"\n role=\"presentation\"\n >\n {/* Backdrop with blur */}\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.2 }}\n className=\"fixed inset-0 bg-black/30 backdrop-blur-sm\"\n onClick={handleOverlayClick}\n />\n\n {/* Crystal panel */}\n <motion.div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={title}\n className={`${basePanel} overlay-panel ${className} ${widthClassName}`.trim()}\n tabIndex={-1}\n ref={panelRef}\n onClick={(event) => event.stopPropagation()}\n initial={currentAnimation.initial}\n animate={currentAnimation.animate}\n exit={currentAnimation.exit}\n transition={currentTransition}\n >\n {/* Subtle gradient overlay for crystal effect */}\n <div className=\"absolute inset-0 bg-linear-to-tr from-white/10 via-transparent to-white/5 dark:from-white/5 dark:to-transparent pointer-events-none rounded-2xl\" />\n\n {/* Close button */}\n {showClose && (\n <button\n type=\"button\"\n className=\"absolute right-4 top-4 w-8 h-8 flex items-center justify-center\n rounded-full transition-all duration-200\n text-neutral-400 dark:text-neutral-500\n hover:text-neutral-600 dark:hover:text-neutral-300\n hover:bg-neutral-100/50 dark:hover:bg-white/10\"\n aria-label=\"Close dialog\"\n onClick={() => onOpenChange?.(false)}\n >\n <CloseIcon className=\"w-4 h-4\" aria-hidden=\"true\" />\n </button>\n )}\n\n {/* Content */}\n <div className=\"relative flex gap-4\">\n {/* Icon */}\n {preset !== \"custom\" && (\n <div\n className={`shrink-0 w-10 h-10 rounded-full flex items-center justify-center ${styles.icon}`}\n >\n <span className={styles.iconColor}>\n {icon || <VariantIcon variant={variant} />}\n </span>\n </div>\n )}\n\n {/* Text content */}\n <div className=\"flex-1 min-w-0\">\n {title && (\n <h2 className=\"text-lg font-semibold text-neutral-900 dark:text-white pr-8\">\n {title}\n </h2>\n )}\n {description && (\n <p className=\"mt-1 text-sm text-neutral-600 dark:text-neutral-400 leading-relaxed\">\n {description}\n </p>\n )}\n </div>\n </div>\n\n {/* Children content */}\n {children && (\n <div className=\"mt-4 space-y-4 relative\">{children}</div>\n )}\n\n {/* Footer */}\n {(footer || showPresetButtons) && (\n <footer className=\"mt-6 flex justify-end gap-3 relative\">\n {renderFooter()}\n </footer>\n )}\n </motion.div>\n </div>\n )}\n </AnimatePresence>\n );\n};\n"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  require("./chunk-B_GkZjkl.cjs");
2
- const require_overlay = require("./overlay-BfUR77DT.cjs");
2
+ const require_overlay = require("./overlay-DWNTyQzK.cjs");
3
3
  let react = require("react");
4
4
  let react_jsx_runtime = require("react/jsx-runtime");
5
5
  let framer_motion = require("framer-motion");
6
6
  //#region src/components/overlays/drawer/Drawer.tsx
7
- var basePanel = "relative flex flex-col backdrop-blur-xl bg-white/70 dark:bg-neutral-900/70 p-6 shadow-2xl border-white/20 dark:border-white/10 rounded-sm";
7
+ var basePanel = "relative flex flex-col overflow-hidden rounded-2xl border border-white/30 bg-gradient-to-br from-white/80 via-white/68 to-white/52 p-6 shadow-[0_24px_80px_rgba(15,23,42,0.22),0_8px_28px_rgba(15,23,42,0.14)] ring-1 ring-inset ring-white/25 backdrop-blur-2xl backdrop-saturate-150 dark:border-white/10 dark:from-neutral-950/84 dark:via-neutral-950/72 dark:to-neutral-900/58 dark:shadow-[0_28px_90px_rgba(0,0,0,0.52),0_10px_30px_rgba(0,0,0,0.3)] dark:ring-white/10";
8
8
  var positionClasses = {
9
9
  right: "h-[calc(100%-8px)] my-1 mr-1 w-full max-w-md ml-auto border",
10
10
  left: "h-[calc(100%-8px)] my-1 ml-1 w-full max-w-md mr-auto border",
@@ -51,7 +51,7 @@ var Drawer = ({ open, onOpenChange, title, description, position = "right", chil
51
51
  animate: { opacity: 1 },
52
52
  exit: { opacity: 0 },
53
53
  transition: { duration: .3 },
54
- className: "fixed inset-0 bg-black/40",
54
+ className: "fixed inset-0 bg-slate-950/24 backdrop-blur-[3px] dark:bg-black/44",
55
55
  onClick: () => onOpenChange?.(false)
56
56
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(framer_motion.motion.div, {
57
57
  role: "dialog",
@@ -71,30 +71,47 @@ var Drawer = ({ open, onOpenChange, title, description, position = "right", chil
71
71
  stiffness: 200
72
72
  },
73
73
  children: [
74
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
75
+ "aria-hidden": "true",
76
+ className: "pointer-events-none absolute inset-0 bg-linear-to-b from-white/30 via-white/10 to-transparent dark:from-white/10 dark:via-white/[0.03] dark:to-transparent"
77
+ }),
78
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
79
+ "aria-hidden": "true",
80
+ className: "pointer-events-none absolute inset-x-0 top-0 h-24 bg-linear-to-b from-white/40 to-transparent dark:from-white/12"
81
+ }),
82
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
83
+ "aria-hidden": "true",
84
+ className: "pointer-events-none absolute -right-10 top-[-72px] h-40 w-40 rounded-full bg-white/35 blur-3xl dark:bg-sky-200/10"
85
+ }),
74
86
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
75
87
  type: "button",
76
- className: "absolute right-4 top-4 text-neutral-500 dark:text-neutral-400 transition-colors hover:text-neutral-900 dark:hover:text-white text-xl font-light",
88
+ className: "absolute right-4 top-4 z-20 inline-flex h-9 w-9 items-center justify-center rounded-full border border-white/35 bg-white/45 text-lg font-light text-foreground shadow-sm backdrop-blur-md transition-all duration-200 hover:bg-white/72 dark:border-white/10 dark:bg-white/5 dark:hover:bg-white/10",
77
89
  "aria-label": "Close drawer",
78
90
  onClick: () => onOpenChange?.(false),
79
91
  children: "×"
80
92
  }),
81
- (title || description) && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", {
82
- className: "space-y-1 pr-6",
83
- children: [title && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h2", {
84
- className: "text-lg font-semibold text-neutral-900 dark:text-white",
85
- children: title
86
- }), description && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
87
- className: "text-sm text-neutral-600 dark:text-neutral-400",
88
- children: description
89
- })]
90
- }),
91
- children && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
92
- className: "mt-4 flex-1 overflow-auto space-y-4",
93
- children
94
- }),
95
- footer && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("footer", {
96
- className: "mt-6",
97
- children: footer
93
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
94
+ className: "relative z-10 flex h-full flex-col",
95
+ children: [
96
+ (title || description) && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", {
97
+ className: "space-y-1 pr-10",
98
+ children: [title && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h2", {
99
+ className: "text-lg font-semibold tracking-tight text-foreground",
100
+ children: title
101
+ }), description && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
102
+ className: "text-sm text-muted-foreground",
103
+ children: description
104
+ })]
105
+ }),
106
+ children && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
107
+ className: "mt-4 flex-1 overflow-auto space-y-4 pr-1",
108
+ children
109
+ }),
110
+ footer && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("footer", {
111
+ className: "mt-6 border-t border-white/20 pt-4 dark:border-white/10",
112
+ children: footer
113
+ })
114
+ ]
98
115
  })
99
116
  ]
100
117
  })]
@@ -108,4 +125,4 @@ Object.defineProperty(exports, "Drawer", {
108
125
  }
109
126
  });
110
127
 
111
- //# sourceMappingURL=drawer-Dn0u8Sck.cjs.map
128
+ //# sourceMappingURL=drawer-CLjsYdxN.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drawer-CLjsYdxN.cjs","names":[],"sources":["../../src/components/overlays/drawer/Drawer.tsx"],"sourcesContent":["import { useEffect, useRef } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport type { DrawerProps, DrawerPosition } from \"./types\";\nimport { useOverlayEffects } from \"../../shared/overlay\";\n\nconst basePanel =\n \"relative flex flex-col overflow-hidden rounded-2xl border border-white/30 bg-gradient-to-br from-white/80 via-white/68 to-white/52 p-6 shadow-[0_24px_80px_rgba(15,23,42,0.22),0_8px_28px_rgba(15,23,42,0.14)] ring-1 ring-inset ring-white/25 backdrop-blur-2xl backdrop-saturate-150 dark:border-white/10 dark:from-neutral-950/84 dark:via-neutral-950/72 dark:to-neutral-900/58 dark:shadow-[0_28px_90px_rgba(0,0,0,0.52),0_10px_30px_rgba(0,0,0,0.3)] dark:ring-white/10\";\n\nconst positionClasses: Record<DrawerPosition, string> = {\n right: \"h-[calc(100%-8px)] my-1 mr-1 w-full max-w-md ml-auto border\",\n left: \"h-[calc(100%-8px)] my-1 ml-1 w-full max-w-md mr-auto border\",\n top: \"w-[calc(100%-8px)] mx-1 mt-1 max-h-[80vh] border\",\n bottom: \"w-[calc(100%-8px)] mx-1 mb-1 max-h-[80vh] mt-auto border\",\n};\n\nconst getVariants = (position: DrawerPosition) => {\n switch (position) {\n case \"left\":\n return { hidden: { x: \"-100%\" }, visible: { x: 0 } };\n case \"right\":\n return { hidden: { x: \"100%\" }, visible: { x: 0 } };\n case \"top\":\n return { hidden: { y: \"-100%\" }, visible: { y: 0 } };\n case \"bottom\":\n return { hidden: { y: \"100%\" }, visible: { y: 0 } };\n }\n};\n\nexport const Drawer = ({\n open,\n onOpenChange,\n title,\n description,\n position = \"right\",\n children,\n footer,\n}: DrawerProps) => {\n const panelRef = useRef<HTMLDivElement | null>(null);\n useOverlayEffects(panelRef, open);\n\n useEffect(() => {\n if (!open || typeof window === \"undefined\") return;\n const handleKey = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n onOpenChange?.(false);\n }\n };\n window.addEventListener(\"keydown\", handleKey);\n return () => window.removeEventListener(\"keydown\", handleKey);\n }, [open, onOpenChange]);\n\n const variants = getVariants(position);\n\n return (\n <AnimatePresence>\n {open && (\n <div\n className=\"fixed inset-0 z-40 flex overlay-backdrop\"\n role=\"presentation\"\n >\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.3 }}\n className=\"fixed inset-0 bg-slate-950/24 backdrop-blur-[3px] dark:bg-black/44\"\n onClick={() => onOpenChange?.(false)}\n />\n <motion.div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={title}\n className={`${basePanel} ${positionClasses[position]}`}\n tabIndex={-1}\n ref={panelRef}\n onClick={(event) => event.stopPropagation()}\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"hidden\"\n variants={variants}\n transition={{ type: \"spring\", damping: 25, stiffness: 200 }}\n >\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-0 bg-linear-to-b from-white/30 via-white/10 to-transparent dark:from-white/10 dark:via-white/[0.03] dark:to-transparent\"\n />\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-x-0 top-0 h-24 bg-linear-to-b from-white/40 to-transparent dark:from-white/12\"\n />\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute -right-10 top-[-72px] h-40 w-40 rounded-full bg-white/35 blur-3xl dark:bg-sky-200/10\"\n />\n <button\n type=\"button\"\n className=\"absolute right-4 top-4 z-20 inline-flex h-9 w-9 items-center justify-center rounded-full border border-white/35 bg-white/45 text-lg font-light text-foreground shadow-sm backdrop-blur-md transition-all duration-200 hover:bg-white/72 dark:border-white/10 dark:bg-white/5 dark:hover:bg-white/10\"\n aria-label=\"Close drawer\"\n onClick={() => onOpenChange?.(false)}\n >\n ×\n </button>\n <div className=\"relative z-10 flex h-full flex-col\">\n {(title || description) && (\n <header className=\"space-y-1 pr-10\">\n {title && (\n <h2 className=\"text-lg font-semibold tracking-tight text-foreground\">\n {title}\n </h2>\n )}\n {description && (\n <p className=\"text-sm text-muted-foreground\">\n {description}\n </p>\n )}\n </header>\n )}\n {children && (\n <div className=\"mt-4 flex-1 overflow-auto space-y-4 pr-1\">\n {children}\n </div>\n )}\n {footer && (\n <footer className=\"mt-6 border-t border-white/20 pt-4 dark:border-white/10\">\n {footer}\n </footer>\n )}\n </div>\n </motion.div>\n </div>\n )}\n </AnimatePresence>\n );\n};\n"],"mappings":"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"}
@@ -0,0 +1,122 @@
1
+ import { t as useOverlayEffects } from "./overlay-TycCIFOu.mjs";
2
+ import { useEffect, useRef } from "react";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ import { AnimatePresence, motion } from "framer-motion";
5
+ //#region src/components/overlays/drawer/Drawer.tsx
6
+ var basePanel = "relative flex flex-col overflow-hidden rounded-2xl border border-white/30 bg-gradient-to-br from-white/80 via-white/68 to-white/52 p-6 shadow-[0_24px_80px_rgba(15,23,42,0.22),0_8px_28px_rgba(15,23,42,0.14)] ring-1 ring-inset ring-white/25 backdrop-blur-2xl backdrop-saturate-150 dark:border-white/10 dark:from-neutral-950/84 dark:via-neutral-950/72 dark:to-neutral-900/58 dark:shadow-[0_28px_90px_rgba(0,0,0,0.52),0_10px_30px_rgba(0,0,0,0.3)] dark:ring-white/10";
7
+ var positionClasses = {
8
+ right: "h-[calc(100%-8px)] my-1 mr-1 w-full max-w-md ml-auto border",
9
+ left: "h-[calc(100%-8px)] my-1 ml-1 w-full max-w-md mr-auto border",
10
+ top: "w-[calc(100%-8px)] mx-1 mt-1 max-h-[80vh] border",
11
+ bottom: "w-[calc(100%-8px)] mx-1 mb-1 max-h-[80vh] mt-auto border"
12
+ };
13
+ var getVariants = (position) => {
14
+ switch (position) {
15
+ case "left": return {
16
+ hidden: { x: "-100%" },
17
+ visible: { x: 0 }
18
+ };
19
+ case "right": return {
20
+ hidden: { x: "100%" },
21
+ visible: { x: 0 }
22
+ };
23
+ case "top": return {
24
+ hidden: { y: "-100%" },
25
+ visible: { y: 0 }
26
+ };
27
+ case "bottom": return {
28
+ hidden: { y: "100%" },
29
+ visible: { y: 0 }
30
+ };
31
+ }
32
+ };
33
+ var Drawer = ({ open, onOpenChange, title, description, position = "right", children, footer }) => {
34
+ const panelRef = useRef(null);
35
+ useOverlayEffects(panelRef, open);
36
+ useEffect(() => {
37
+ if (!open || typeof window === "undefined") return;
38
+ const handleKey = (event) => {
39
+ if (event.key === "Escape") onOpenChange?.(false);
40
+ };
41
+ window.addEventListener("keydown", handleKey);
42
+ return () => window.removeEventListener("keydown", handleKey);
43
+ }, [open, onOpenChange]);
44
+ const variants = getVariants(position);
45
+ return /* @__PURE__ */ jsx(AnimatePresence, { children: open && /* @__PURE__ */ jsxs("div", {
46
+ className: "fixed inset-0 z-40 flex overlay-backdrop",
47
+ role: "presentation",
48
+ children: [/* @__PURE__ */ jsx(motion.div, {
49
+ initial: { opacity: 0 },
50
+ animate: { opacity: 1 },
51
+ exit: { opacity: 0 },
52
+ transition: { duration: .3 },
53
+ className: "fixed inset-0 bg-slate-950/24 backdrop-blur-[3px] dark:bg-black/44",
54
+ onClick: () => onOpenChange?.(false)
55
+ }), /* @__PURE__ */ jsxs(motion.div, {
56
+ role: "dialog",
57
+ "aria-modal": "true",
58
+ "aria-label": title,
59
+ className: `${basePanel} ${positionClasses[position]}`,
60
+ tabIndex: -1,
61
+ ref: panelRef,
62
+ onClick: (event) => event.stopPropagation(),
63
+ initial: "hidden",
64
+ animate: "visible",
65
+ exit: "hidden",
66
+ variants,
67
+ transition: {
68
+ type: "spring",
69
+ damping: 25,
70
+ stiffness: 200
71
+ },
72
+ children: [
73
+ /* @__PURE__ */ jsx("div", {
74
+ "aria-hidden": "true",
75
+ className: "pointer-events-none absolute inset-0 bg-linear-to-b from-white/30 via-white/10 to-transparent dark:from-white/10 dark:via-white/[0.03] dark:to-transparent"
76
+ }),
77
+ /* @__PURE__ */ jsx("div", {
78
+ "aria-hidden": "true",
79
+ className: "pointer-events-none absolute inset-x-0 top-0 h-24 bg-linear-to-b from-white/40 to-transparent dark:from-white/12"
80
+ }),
81
+ /* @__PURE__ */ jsx("div", {
82
+ "aria-hidden": "true",
83
+ className: "pointer-events-none absolute -right-10 top-[-72px] h-40 w-40 rounded-full bg-white/35 blur-3xl dark:bg-sky-200/10"
84
+ }),
85
+ /* @__PURE__ */ jsx("button", {
86
+ type: "button",
87
+ className: "absolute right-4 top-4 z-20 inline-flex h-9 w-9 items-center justify-center rounded-full border border-white/35 bg-white/45 text-lg font-light text-foreground shadow-sm backdrop-blur-md transition-all duration-200 hover:bg-white/72 dark:border-white/10 dark:bg-white/5 dark:hover:bg-white/10",
88
+ "aria-label": "Close drawer",
89
+ onClick: () => onOpenChange?.(false),
90
+ children: "×"
91
+ }),
92
+ /* @__PURE__ */ jsxs("div", {
93
+ className: "relative z-10 flex h-full flex-col",
94
+ children: [
95
+ (title || description) && /* @__PURE__ */ jsxs("header", {
96
+ className: "space-y-1 pr-10",
97
+ children: [title && /* @__PURE__ */ jsx("h2", {
98
+ className: "text-lg font-semibold tracking-tight text-foreground",
99
+ children: title
100
+ }), description && /* @__PURE__ */ jsx("p", {
101
+ className: "text-sm text-muted-foreground",
102
+ children: description
103
+ })]
104
+ }),
105
+ children && /* @__PURE__ */ jsx("div", {
106
+ className: "mt-4 flex-1 overflow-auto space-y-4 pr-1",
107
+ children
108
+ }),
109
+ footer && /* @__PURE__ */ jsx("footer", {
110
+ className: "mt-6 border-t border-white/20 pt-4 dark:border-white/10",
111
+ children: footer
112
+ })
113
+ ]
114
+ })
115
+ ]
116
+ })]
117
+ }) });
118
+ };
119
+ //#endregion
120
+ export { Drawer as t };
121
+
122
+ //# sourceMappingURL=drawer-D82Jz6KO.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drawer-D82Jz6KO.mjs","names":[],"sources":["../../src/components/overlays/drawer/Drawer.tsx"],"sourcesContent":["import { useEffect, useRef } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport type { DrawerProps, DrawerPosition } from \"./types\";\nimport { useOverlayEffects } from \"../../shared/overlay\";\n\nconst basePanel =\n \"relative flex flex-col overflow-hidden rounded-2xl border border-white/30 bg-gradient-to-br from-white/80 via-white/68 to-white/52 p-6 shadow-[0_24px_80px_rgba(15,23,42,0.22),0_8px_28px_rgba(15,23,42,0.14)] ring-1 ring-inset ring-white/25 backdrop-blur-2xl backdrop-saturate-150 dark:border-white/10 dark:from-neutral-950/84 dark:via-neutral-950/72 dark:to-neutral-900/58 dark:shadow-[0_28px_90px_rgba(0,0,0,0.52),0_10px_30px_rgba(0,0,0,0.3)] dark:ring-white/10\";\n\nconst positionClasses: Record<DrawerPosition, string> = {\n right: \"h-[calc(100%-8px)] my-1 mr-1 w-full max-w-md ml-auto border\",\n left: \"h-[calc(100%-8px)] my-1 ml-1 w-full max-w-md mr-auto border\",\n top: \"w-[calc(100%-8px)] mx-1 mt-1 max-h-[80vh] border\",\n bottom: \"w-[calc(100%-8px)] mx-1 mb-1 max-h-[80vh] mt-auto border\",\n};\n\nconst getVariants = (position: DrawerPosition) => {\n switch (position) {\n case \"left\":\n return { hidden: { x: \"-100%\" }, visible: { x: 0 } };\n case \"right\":\n return { hidden: { x: \"100%\" }, visible: { x: 0 } };\n case \"top\":\n return { hidden: { y: \"-100%\" }, visible: { y: 0 } };\n case \"bottom\":\n return { hidden: { y: \"100%\" }, visible: { y: 0 } };\n }\n};\n\nexport const Drawer = ({\n open,\n onOpenChange,\n title,\n description,\n position = \"right\",\n children,\n footer,\n}: DrawerProps) => {\n const panelRef = useRef<HTMLDivElement | null>(null);\n useOverlayEffects(panelRef, open);\n\n useEffect(() => {\n if (!open || typeof window === \"undefined\") return;\n const handleKey = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n onOpenChange?.(false);\n }\n };\n window.addEventListener(\"keydown\", handleKey);\n return () => window.removeEventListener(\"keydown\", handleKey);\n }, [open, onOpenChange]);\n\n const variants = getVariants(position);\n\n return (\n <AnimatePresence>\n {open && (\n <div\n className=\"fixed inset-0 z-40 flex overlay-backdrop\"\n role=\"presentation\"\n >\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.3 }}\n className=\"fixed inset-0 bg-slate-950/24 backdrop-blur-[3px] dark:bg-black/44\"\n onClick={() => onOpenChange?.(false)}\n />\n <motion.div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={title}\n className={`${basePanel} ${positionClasses[position]}`}\n tabIndex={-1}\n ref={panelRef}\n onClick={(event) => event.stopPropagation()}\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"hidden\"\n variants={variants}\n transition={{ type: \"spring\", damping: 25, stiffness: 200 }}\n >\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-0 bg-linear-to-b from-white/30 via-white/10 to-transparent dark:from-white/10 dark:via-white/[0.03] dark:to-transparent\"\n />\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-x-0 top-0 h-24 bg-linear-to-b from-white/40 to-transparent dark:from-white/12\"\n />\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute -right-10 top-[-72px] h-40 w-40 rounded-full bg-white/35 blur-3xl dark:bg-sky-200/10\"\n />\n <button\n type=\"button\"\n className=\"absolute right-4 top-4 z-20 inline-flex h-9 w-9 items-center justify-center rounded-full border border-white/35 bg-white/45 text-lg font-light text-foreground shadow-sm backdrop-blur-md transition-all duration-200 hover:bg-white/72 dark:border-white/10 dark:bg-white/5 dark:hover:bg-white/10\"\n aria-label=\"Close drawer\"\n onClick={() => onOpenChange?.(false)}\n >\n ×\n </button>\n <div className=\"relative z-10 flex h-full flex-col\">\n {(title || description) && (\n <header className=\"space-y-1 pr-10\">\n {title && (\n <h2 className=\"text-lg font-semibold tracking-tight text-foreground\">\n {title}\n </h2>\n )}\n {description && (\n <p className=\"text-sm text-muted-foreground\">\n {description}\n </p>\n )}\n </header>\n )}\n {children && (\n <div className=\"mt-4 flex-1 overflow-auto space-y-4 pr-1\">\n {children}\n </div>\n )}\n {footer && (\n <footer className=\"mt-6 border-t border-white/20 pt-4 dark:border-white/10\">\n {footer}\n </footer>\n )}\n </div>\n </motion.div>\n </div>\n )}\n </AnimatePresence>\n );\n};\n"],"mappings":";;;;;AAKA,IAAM,YACJ;AAEF,IAAM,kBAAkD;CACtD,OAAO;CACP,MAAM;CACN,KAAK;CACL,QAAQ;CACT;AAED,IAAM,eAAe,aAA6B;AAChD,SAAQ,UAAR;EACE,KAAK,OACH,QAAO;GAAE,QAAQ,EAAE,GAAG,SAAS;GAAE,SAAS,EAAE,GAAG,GAAG;GAAE;EACtD,KAAK,QACH,QAAO;GAAE,QAAQ,EAAE,GAAG,QAAQ;GAAE,SAAS,EAAE,GAAG,GAAG;GAAE;EACrD,KAAK,MACH,QAAO;GAAE,QAAQ,EAAE,GAAG,SAAS;GAAE,SAAS,EAAE,GAAG,GAAG;GAAE;EACtD,KAAK,SACH,QAAO;GAAE,QAAQ,EAAE,GAAG,QAAQ;GAAE,SAAS,EAAE,GAAG,GAAG;GAAE;;;AAIzD,IAAa,UAAU,EACrB,MACA,cACA,OACA,aACA,WAAW,SACX,UACA,aACiB;CACjB,MAAM,WAAW,OAA8B,KAAK;AACpD,mBAAkB,UAAU,KAAK;AAEjC,iBAAgB;AACd,MAAI,CAAC,QAAQ,OAAO,WAAW,YAAa;EAC5C,MAAM,aAAa,UAAyB;AAC1C,OAAI,MAAM,QAAQ,SAChB,gBAAe,MAAM;;AAGzB,SAAO,iBAAiB,WAAW,UAAU;AAC7C,eAAa,OAAO,oBAAoB,WAAW,UAAU;IAC5D,CAAC,MAAM,aAAa,CAAC;CAExB,MAAM,WAAW,YAAY,SAAS;AAEtC,QACE,oBAAC,iBAAD,EAAA,UACG,QACC,qBAAC,OAAD;EACE,WAAU;EACV,MAAK;YAFP,CAIE,oBAAC,OAAO,KAAR;GACE,SAAS,EAAE,SAAS,GAAG;GACvB,SAAS,EAAE,SAAS,GAAG;GACvB,MAAM,EAAE,SAAS,GAAG;GACpB,YAAY,EAAE,UAAU,IAAK;GAC7B,WAAU;GACV,eAAe,eAAe,MAAM;GACpC,CAAA,EACF,qBAAC,OAAO,KAAR;GACE,MAAK;GACL,cAAW;GACX,cAAY;GACZ,WAAW,GAAG,UAAU,GAAG,gBAAgB;GAC3C,UAAU;GACV,KAAK;GACL,UAAU,UAAU,MAAM,iBAAiB;GAC3C,SAAQ;GACR,SAAQ;GACR,MAAK;GACK;GACV,YAAY;IAAE,MAAM;IAAU,SAAS;IAAI,WAAW;IAAK;aAZ7D;IAcE,oBAAC,OAAD;KACE,eAAY;KACZ,WAAU;KACV,CAAA;IACF,oBAAC,OAAD;KACE,eAAY;KACZ,WAAU;KACV,CAAA;IACF,oBAAC,OAAD;KACE,eAAY;KACZ,WAAU;KACV,CAAA;IACF,oBAAC,UAAD;KACE,MAAK;KACL,WAAU;KACV,cAAW;KACX,eAAe,eAAe,MAAM;eACrC;KAEQ,CAAA;IACT,qBAAC,OAAD;KAAK,WAAU;eAAf;OACI,SAAS,gBACT,qBAAC,UAAD;OAAQ,WAAU;iBAAlB,CACG,SACC,oBAAC,MAAD;QAAI,WAAU;kBACX;QACE,CAAA,EAEN,eACC,oBAAC,KAAD;QAAG,WAAU;kBACV;QACC,CAAA,CAEC;;MAEV,YACC,oBAAC,OAAD;OAAK,WAAU;OACZ;OACG,CAAA;MAEP,UACC,oBAAC,UAAD;OAAQ,WAAU;iBACf;OACM,CAAA;MAEP;;IACK;KACT;KAEQ,CAAA"}
@@ -26,8 +26,8 @@ var actionsAlignMap = {
26
26
  };
27
27
  var messageIntentMap = {
28
28
  default: "text-neutral-500 dark:text-neutral-400",
29
- error: "text-red-500 dark:text-red-400",
30
- success: "text-emerald-600 dark:text-emerald-400"
29
+ error: "text-destructive",
30
+ success: "text-success"
31
31
  };
32
32
  var sanitizeId = (value) => value.replace(/[^a-zA-Z0-9_-]/g, "-");
33
33
  var Form = ({ title, description, gap = "lg", children, className = "", ...props }) => {
@@ -103,7 +103,7 @@ var FormField = ({ label, description, error, required, htmlFor, helperAction, l
103
103
  htmlFor: fieldId,
104
104
  className: "text-sm font-medium text-neutral-900 dark:text-white",
105
105
  children: [label, required && /* @__PURE__ */ jsx("span", {
106
- className: "text-red-500 ml-1",
106
+ className: "ml-1 text-destructive",
107
107
  children: "*"
108
108
  })]
109
109
  }), helperAction && /* @__PURE__ */ jsx("div", {
@@ -158,4 +158,4 @@ var InputGroup = ({ columns = 2, children, className = "" }) => /* @__PURE__ */
158
158
  //#endregion
159
159
  export { FormMessage as a, FormField as i, FormActions as n, FormSection as o, FormDescription as r, InputGroup as s, Form as t };
160
160
 
161
- //# sourceMappingURL=form-TwlDrshv.mjs.map
161
+ //# sourceMappingURL=form-B2vcaHwh.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-B2vcaHwh.mjs","names":[],"sources":["../../src/components/forms/form/Form.tsx"],"sourcesContent":["import { Children, cloneElement, isValidElement, useId } from \"react\";\nimport type { ReactElement } from \"react\";\n\nimport type {\n FormProps,\n FormSectionProps,\n FormFieldProps,\n FormActionsProps,\n InputGroupProps,\n FormDescriptionProps,\n FormMessageProps,\n} from \"./types\";\n\nconst cx = (...classes: Array<string | false | undefined>) =>\n classes.filter(Boolean).join(\" \").replace(/\\s+/g, \" \").trim();\n\nconst gapClassMap: Record<NonNullable<FormProps[\"gap\"]>, string> = {\n sm: \"space-y-4\",\n md: \"space-y-6\",\n lg: \"space-y-8\",\n};\n\nconst sectionColumnsMap: Record<\n NonNullable<FormSectionProps[\"columns\"]>,\n string\n> = {\n 1: \"space-y-4\",\n 2: \"grid grid-cols-2 gap-4\",\n 3: \"grid grid-cols-3 gap-4\",\n};\n\nconst inputGroupMap: Record<NonNullable<InputGroupProps[\"columns\"]>, string> = {\n 1: \"grid-cols-1\",\n 2: \"grid-cols-2\",\n 3: \"grid-cols-3\",\n 4: \"grid-cols-4\",\n};\n\nconst actionsAlignMap: Record<\n NonNullable<FormActionsProps[\"align\"]>,\n string\n> = {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n between: \"justify-between\",\n};\n\nconst messageIntentMap: Record<\n NonNullable<FormMessageProps[\"intent\"]>,\n string\n> = {\n default: \"text-neutral-500 dark:text-neutral-400\",\n error: \"text-destructive\",\n success: \"text-success\",\n};\n\nconst sanitizeId = (value: string) => value.replace(/[^a-zA-Z0-9_-]/g, \"-\");\n\nexport const Form = ({\n title,\n description,\n gap = \"lg\",\n children,\n className = \"\",\n ...props\n}: FormProps) => {\n return (\n <form\n className={cx(\n \"w-full space-y-6 rounded-lg border border-neutral-200 dark:border-neutral-700 bg-white dark:bg-neutral-800 p-6\",\n className,\n )}\n {...props}\n >\n {(title || description) && (\n <div className=\"space-y-2\">\n {title && (\n <h2 className=\"text-xl font-semibold text-neutral-900 dark:text-white\">\n {title}\n </h2>\n )}\n {description && (\n <p className=\"text-sm text-neutral-500 dark:text-neutral-400\">\n {description}\n </p>\n )}\n </div>\n )}\n <div className={gapClassMap[gap]}>{children}</div>\n </form>\n );\n};\n\nexport const FormSection = ({\n title,\n description,\n columns = 1,\n children,\n className = \"\",\n}: FormSectionProps) => {\n return (\n <section className={cx(\"space-y-4\", className)}>\n {(title || description) && (\n <header className=\"space-y-1\">\n {title && (\n <h3 className=\"text-base font-medium text-neutral-900 dark:text-white\">\n {title}\n </h3>\n )}\n {description && (\n <p className=\"text-sm text-neutral-500 dark:text-neutral-400\">\n {description}\n </p>\n )}\n </header>\n )}\n <div className={sectionColumnsMap[columns] || sectionColumnsMap[1]}>\n {children}\n </div>\n </section>\n );\n};\n\nexport const FormDescription = ({\n children,\n className = \"\",\n id,\n}: FormDescriptionProps) => (\n <p\n id={id}\n className={cx(\"text-sm text-neutral-500 dark:text-neutral-400\", className)}\n >\n {children}\n </p>\n);\n\nexport const FormMessage = ({\n children,\n intent = \"default\",\n className = \"\",\n id,\n}: FormMessageProps) => (\n <p\n id={id}\n role={intent === \"error\" ? \"alert\" : \"status\"}\n className={cx(\"text-sm\", messageIntentMap[intent], className)}\n >\n {children}\n </p>\n);\n\nexport const FormField = ({\n label,\n description,\n error,\n required,\n htmlFor,\n helperAction,\n layout = \"stacked\",\n children,\n className = \"\",\n}: FormFieldProps) => {\n const autoId = useId();\n const fieldId = sanitizeId(htmlFor ?? autoId);\n const descriptionId = description ? `${fieldId}-description` : undefined;\n const errorId = error ? `${fieldId}-error` : undefined;\n\n const controls = Children.map(children, (child) => {\n if (!isValidElement(child)) {\n return child;\n }\n\n const element = child as ReactElement<Record<string, unknown>>;\n const currentDescribedBy = element.props?.[\"aria-describedby\"] as\n | string\n | undefined;\n const describedBy = [currentDescribedBy, descriptionId, errorId]\n .filter(Boolean)\n .join(\" \")\n .trim();\n\n return cloneElement(element, {\n id: element.props?.id ?? fieldId,\n \"aria-describedby\": describedBy || undefined,\n \"aria-invalid\": element.props?.[\"aria-invalid\"] ?? Boolean(error),\n });\n });\n\n const labelNode = (\n <div className=\"flex items-center justify-between gap-2\">\n <label\n htmlFor={fieldId}\n className=\"text-sm font-medium text-neutral-900 dark:text-white\"\n >\n {label}\n {required && <span className=\"ml-1 text-destructive\">*</span>}\n </label>\n {helperAction && (\n <div className=\"text-xs text-neutral-500 dark:text-neutral-400\">\n {helperAction}\n </div>\n )}\n </div>\n );\n\n if (layout === \"inline\") {\n return (\n <div className={cx(\"flex flex-wrap items-start gap-6\", className)}>\n <div className=\"min-w-[200px] space-y-1\">\n {labelNode}\n {description && (\n <FormDescription id={descriptionId}>{description}</FormDescription>\n )}\n </div>\n <div className=\"flex-1 space-y-2\">\n {controls}\n {error && (\n <FormMessage id={errorId} intent=\"error\">\n {error}\n </FormMessage>\n )}\n </div>\n </div>\n );\n }\n\n return (\n <div className={cx(\"space-y-2\", className)}>\n {labelNode}\n {description && (\n <FormDescription id={descriptionId}>{description}</FormDescription>\n )}\n <div className=\"space-y-2\">\n {controls}\n {error && (\n <FormMessage id={errorId} intent=\"error\">\n {error}\n </FormMessage>\n )}\n </div>\n </div>\n );\n};\n\nexport const FormActions = ({\n children,\n align = \"end\",\n className = \"\",\n}: FormActionsProps) => (\n <div\n className={cx(\"flex flex-wrap gap-3\", actionsAlignMap[align], className)}\n >\n {children}\n </div>\n);\n\nexport const InputGroup = ({\n columns = 2,\n children,\n className = \"\",\n}: InputGroupProps) => (\n <div className={cx(\"grid gap-4\", inputGroupMap[columns], className)}>\n {children}\n </div>\n);\n"],"mappings":"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"}
@@ -27,8 +27,8 @@ var actionsAlignMap = {
27
27
  };
28
28
  var messageIntentMap = {
29
29
  default: "text-neutral-500 dark:text-neutral-400",
30
- error: "text-red-500 dark:text-red-400",
31
- success: "text-emerald-600 dark:text-emerald-400"
30
+ error: "text-destructive",
31
+ success: "text-success"
32
32
  };
33
33
  var sanitizeId = (value) => value.replace(/[^a-zA-Z0-9_-]/g, "-");
34
34
  var Form = ({ title, description, gap = "lg", children, className = "", ...props }) => {
@@ -104,7 +104,7 @@ var FormField = ({ label, description, error, required, htmlFor, helperAction, l
104
104
  htmlFor: fieldId,
105
105
  className: "text-sm font-medium text-neutral-900 dark:text-white",
106
106
  children: [label, required && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
107
- className: "text-red-500 ml-1",
107
+ className: "ml-1 text-destructive",
108
108
  children: "*"
109
109
  })]
110
110
  }), helperAction && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
@@ -200,4 +200,4 @@ Object.defineProperty(exports, "InputGroup", {
200
200
  }
201
201
  });
202
202
 
203
- //# sourceMappingURL=form-DcEuk721.cjs.map
203
+ //# sourceMappingURL=form-CzH9GQc6.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-CzH9GQc6.cjs","names":[],"sources":["../../src/components/forms/form/Form.tsx"],"sourcesContent":["import { Children, cloneElement, isValidElement, useId } from \"react\";\nimport type { ReactElement } from \"react\";\n\nimport type {\n FormProps,\n FormSectionProps,\n FormFieldProps,\n FormActionsProps,\n InputGroupProps,\n FormDescriptionProps,\n FormMessageProps,\n} from \"./types\";\n\nconst cx = (...classes: Array<string | false | undefined>) =>\n classes.filter(Boolean).join(\" \").replace(/\\s+/g, \" \").trim();\n\nconst gapClassMap: Record<NonNullable<FormProps[\"gap\"]>, string> = {\n sm: \"space-y-4\",\n md: \"space-y-6\",\n lg: \"space-y-8\",\n};\n\nconst sectionColumnsMap: Record<\n NonNullable<FormSectionProps[\"columns\"]>,\n string\n> = {\n 1: \"space-y-4\",\n 2: \"grid grid-cols-2 gap-4\",\n 3: \"grid grid-cols-3 gap-4\",\n};\n\nconst inputGroupMap: Record<NonNullable<InputGroupProps[\"columns\"]>, string> = {\n 1: \"grid-cols-1\",\n 2: \"grid-cols-2\",\n 3: \"grid-cols-3\",\n 4: \"grid-cols-4\",\n};\n\nconst actionsAlignMap: Record<\n NonNullable<FormActionsProps[\"align\"]>,\n string\n> = {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n between: \"justify-between\",\n};\n\nconst messageIntentMap: Record<\n NonNullable<FormMessageProps[\"intent\"]>,\n string\n> = {\n default: \"text-neutral-500 dark:text-neutral-400\",\n error: \"text-destructive\",\n success: \"text-success\",\n};\n\nconst sanitizeId = (value: string) => value.replace(/[^a-zA-Z0-9_-]/g, \"-\");\n\nexport const Form = ({\n title,\n description,\n gap = \"lg\",\n children,\n className = \"\",\n ...props\n}: FormProps) => {\n return (\n <form\n className={cx(\n \"w-full space-y-6 rounded-lg border border-neutral-200 dark:border-neutral-700 bg-white dark:bg-neutral-800 p-6\",\n className,\n )}\n {...props}\n >\n {(title || description) && (\n <div className=\"space-y-2\">\n {title && (\n <h2 className=\"text-xl font-semibold text-neutral-900 dark:text-white\">\n {title}\n </h2>\n )}\n {description && (\n <p className=\"text-sm text-neutral-500 dark:text-neutral-400\">\n {description}\n </p>\n )}\n </div>\n )}\n <div className={gapClassMap[gap]}>{children}</div>\n </form>\n );\n};\n\nexport const FormSection = ({\n title,\n description,\n columns = 1,\n children,\n className = \"\",\n}: FormSectionProps) => {\n return (\n <section className={cx(\"space-y-4\", className)}>\n {(title || description) && (\n <header className=\"space-y-1\">\n {title && (\n <h3 className=\"text-base font-medium text-neutral-900 dark:text-white\">\n {title}\n </h3>\n )}\n {description && (\n <p className=\"text-sm text-neutral-500 dark:text-neutral-400\">\n {description}\n </p>\n )}\n </header>\n )}\n <div className={sectionColumnsMap[columns] || sectionColumnsMap[1]}>\n {children}\n </div>\n </section>\n );\n};\n\nexport const FormDescription = ({\n children,\n className = \"\",\n id,\n}: FormDescriptionProps) => (\n <p\n id={id}\n className={cx(\"text-sm text-neutral-500 dark:text-neutral-400\", className)}\n >\n {children}\n </p>\n);\n\nexport const FormMessage = ({\n children,\n intent = \"default\",\n className = \"\",\n id,\n}: FormMessageProps) => (\n <p\n id={id}\n role={intent === \"error\" ? \"alert\" : \"status\"}\n className={cx(\"text-sm\", messageIntentMap[intent], className)}\n >\n {children}\n </p>\n);\n\nexport const FormField = ({\n label,\n description,\n error,\n required,\n htmlFor,\n helperAction,\n layout = \"stacked\",\n children,\n className = \"\",\n}: FormFieldProps) => {\n const autoId = useId();\n const fieldId = sanitizeId(htmlFor ?? autoId);\n const descriptionId = description ? `${fieldId}-description` : undefined;\n const errorId = error ? `${fieldId}-error` : undefined;\n\n const controls = Children.map(children, (child) => {\n if (!isValidElement(child)) {\n return child;\n }\n\n const element = child as ReactElement<Record<string, unknown>>;\n const currentDescribedBy = element.props?.[\"aria-describedby\"] as\n | string\n | undefined;\n const describedBy = [currentDescribedBy, descriptionId, errorId]\n .filter(Boolean)\n .join(\" \")\n .trim();\n\n return cloneElement(element, {\n id: element.props?.id ?? fieldId,\n \"aria-describedby\": describedBy || undefined,\n \"aria-invalid\": element.props?.[\"aria-invalid\"] ?? Boolean(error),\n });\n });\n\n const labelNode = (\n <div className=\"flex items-center justify-between gap-2\">\n <label\n htmlFor={fieldId}\n className=\"text-sm font-medium text-neutral-900 dark:text-white\"\n >\n {label}\n {required && <span className=\"ml-1 text-destructive\">*</span>}\n </label>\n {helperAction && (\n <div className=\"text-xs text-neutral-500 dark:text-neutral-400\">\n {helperAction}\n </div>\n )}\n </div>\n );\n\n if (layout === \"inline\") {\n return (\n <div className={cx(\"flex flex-wrap items-start gap-6\", className)}>\n <div className=\"min-w-[200px] space-y-1\">\n {labelNode}\n {description && (\n <FormDescription id={descriptionId}>{description}</FormDescription>\n )}\n </div>\n <div className=\"flex-1 space-y-2\">\n {controls}\n {error && (\n <FormMessage id={errorId} intent=\"error\">\n {error}\n </FormMessage>\n )}\n </div>\n </div>\n );\n }\n\n return (\n <div className={cx(\"space-y-2\", className)}>\n {labelNode}\n {description && (\n <FormDescription id={descriptionId}>{description}</FormDescription>\n )}\n <div className=\"space-y-2\">\n {controls}\n {error && (\n <FormMessage id={errorId} intent=\"error\">\n {error}\n </FormMessage>\n )}\n </div>\n </div>\n );\n};\n\nexport const FormActions = ({\n children,\n align = \"end\",\n className = \"\",\n}: FormActionsProps) => (\n <div\n className={cx(\"flex flex-wrap gap-3\", actionsAlignMap[align], className)}\n >\n {children}\n </div>\n);\n\nexport const InputGroup = ({\n columns = 2,\n children,\n className = \"\",\n}: InputGroupProps) => (\n <div className={cx(\"grid gap-4\", inputGroupMap[columns], className)}>\n {children}\n </div>\n);\n"],"mappings":"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"}
@@ -62,4 +62,4 @@ Object.defineProperty(exports, "GradualBlur", {
62
62
  }
63
63
  });
64
64
 
65
- //# sourceMappingURL=gradual-blur-2jVhPcND.cjs.map
65
+ //# sourceMappingURL=gradual-blur-B9GoY8o1.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"gradual-blur-2jVhPcND.cjs","names":[],"sources":["../../src/components/effects/gradual-blur/GradualBlur.tsx"],"sourcesContent":["import { useRef, type ComponentType } from \"react\";\nimport { motion, type HTMLMotionProps } from \"framer-motion\";\nimport { mergeClassNames } from \"../../../utils\";\nimport type { GradualBlurProps } from \"./types\";\n\nexport const GradualBlur = ({\n children,\n duration = 0.5,\n delay = 0,\n blur = 8,\n triggerOnView = true,\n triggerOnce = true,\n threshold = 0.05,\n visible = false,\n direction = \"none\",\n distance = 20,\n className,\n as = \"div\",\n}: GradualBlurProps) => {\n const ref = useRef<HTMLDivElement>(null);\n\n const getInitialPosition = () => {\n switch (direction) {\n case \"top\":\n return { y: -distance };\n case \"bottom\":\n return { y: distance };\n case \"left\":\n return { x: -distance };\n case \"right\":\n return { x: distance };\n default:\n return { x: 0, y: 0 };\n }\n };\n\n const initialPosition = getInitialPosition();\n\n const variants = {\n hidden: {\n opacity: 0,\n filter: `blur(${blur}px)`,\n ...initialPosition,\n },\n visible: {\n opacity: 1,\n filter: \"blur(0px)\",\n x: 0,\n y: 0,\n },\n };\n\n const MotionComponent = motion.create(as as string) as ComponentType<\n HTMLMotionProps<\"div\">\n >;\n\n return (\n <MotionComponent\n ref={ref}\n variants={variants}\n initial=\"hidden\"\n animate={!triggerOnView ? (visible ? \"visible\" : \"hidden\") : undefined}\n whileInView={triggerOnView ? \"visible\" : undefined}\n viewport={{\n once: triggerOnce,\n amount: threshold,\n margin: \"0px 0px -50px 0px\", // Slight bottom margin to trigger earlier\n }}\n transition={{\n duration,\n delay,\n ease: \"easeOut\",\n filter: { duration: duration },\n opacity: { duration: duration },\n }}\n className={mergeClassNames(\"relative\", className)}\n >\n {children}\n </MotionComponent>\n );\n};\n"],"mappings":";;;;;;AAKA,IAAa,eAAe,EAC1B,UACA,WAAW,IACX,QAAQ,GACR,OAAO,GACP,gBAAgB,MAChB,cAAc,MACd,YAAY,KACZ,UAAU,OACV,YAAY,QACZ,WAAW,IACX,WACA,KAAK,YACiB;CACtB,MAAM,OAAA,GAAA,MAAA,QAA6B,KAAK;CAExC,MAAM,2BAA2B;AAC/B,UAAQ,WAAR;GACE,KAAK,MACH,QAAO,EAAE,GAAG,CAAC,UAAU;GACzB,KAAK,SACH,QAAO,EAAE,GAAG,UAAU;GACxB,KAAK,OACH,QAAO,EAAE,GAAG,CAAC,UAAU;GACzB,KAAK,QACH,QAAO,EAAE,GAAG,UAAU;GACxB,QACE,QAAO;IAAE,GAAG;IAAG,GAAG;IAAG;;;CAI3B,MAAM,kBAAkB,oBAAoB;CAE5C,MAAM,WAAW;EACf,QAAQ;GACN,SAAS;GACT,QAAQ,QAAQ,KAAK;GACrB,GAAG;GACJ;EACD,SAAS;GACP,SAAS;GACT,QAAQ;GACR,GAAG;GACH,GAAG;GACJ;EACF;AAMD,QACE,iBAAA,GAAA,kBAAA,KALsB,cAAA,OAAO,OAAO,GAAa,EAKjD;EACO;EACK;EACV,SAAQ;EACR,SAAS,CAAC,gBAAiB,UAAU,YAAY,WAAY,KAAA;EAC7D,aAAa,gBAAgB,YAAY,KAAA;EACzC,UAAU;GACR,MAAM;GACN,QAAQ;GACR,QAAQ;GACT;EACD,YAAY;GACV;GACA;GACA,MAAM;GACN,QAAQ,EAAY,UAAU;GAC9B,SAAS,EAAY,UAAU;GAChC;EACD,WAAW,cAAA,gBAAgB,YAAY,UAAU;EAEhD;EACe,CAAA"}
1
+ {"version":3,"file":"gradual-blur-B9GoY8o1.cjs","names":[],"sources":["../../src/components/effects/gradual-blur/GradualBlur.tsx"],"sourcesContent":["import { useRef, type ComponentType } from \"react\";\nimport { motion, type HTMLMotionProps } from \"framer-motion\";\nimport { mergeClassNames } from \"../../../utils\";\nimport type { GradualBlurProps } from \"./types\";\n\nexport const GradualBlur = ({\n children,\n duration = 0.5,\n delay = 0,\n blur = 8,\n triggerOnView = true,\n triggerOnce = true,\n threshold = 0.05,\n visible = false,\n direction = \"none\",\n distance = 20,\n className,\n as = \"div\",\n}: GradualBlurProps) => {\n const ref = useRef<HTMLDivElement>(null);\n\n const getInitialPosition = () => {\n switch (direction) {\n case \"top\":\n return { y: -distance };\n case \"bottom\":\n return { y: distance };\n case \"left\":\n return { x: -distance };\n case \"right\":\n return { x: distance };\n default:\n return { x: 0, y: 0 };\n }\n };\n\n const initialPosition = getInitialPosition();\n\n const variants = {\n hidden: {\n opacity: 0,\n filter: `blur(${blur}px)`,\n ...initialPosition,\n },\n visible: {\n opacity: 1,\n filter: \"blur(0px)\",\n x: 0,\n y: 0,\n },\n };\n\n const MotionComponent = motion.create(as as string) as ComponentType<\n HTMLMotionProps<\"div\">\n >;\n\n return (\n <MotionComponent\n ref={ref}\n variants={variants}\n initial=\"hidden\"\n animate={!triggerOnView ? (visible ? \"visible\" : \"hidden\") : undefined}\n whileInView={triggerOnView ? \"visible\" : undefined}\n viewport={{\n once: triggerOnce,\n amount: threshold,\n margin: \"0px 0px -50px 0px\", // Slight bottom margin to trigger earlier\n }}\n transition={{\n duration,\n delay,\n ease: \"easeOut\",\n filter: { duration: duration },\n opacity: { duration: duration },\n }}\n className={mergeClassNames(\"relative\", className)}\n >\n {children}\n </MotionComponent>\n );\n};\n"],"mappings":";;;;;;AAKA,IAAa,eAAe,EAC1B,UACA,WAAW,IACX,QAAQ,GACR,OAAO,GACP,gBAAgB,MAChB,cAAc,MACd,YAAY,KACZ,UAAU,OACV,YAAY,QACZ,WAAW,IACX,WACA,KAAK,YACiB;CACtB,MAAM,OAAA,GAAA,MAAA,QAA6B,KAAK;CAExC,MAAM,2BAA2B;AAC/B,UAAQ,WAAR;GACE,KAAK,MACH,QAAO,EAAE,GAAG,CAAC,UAAU;GACzB,KAAK,SACH,QAAO,EAAE,GAAG,UAAU;GACxB,KAAK,OACH,QAAO,EAAE,GAAG,CAAC,UAAU;GACzB,KAAK,QACH,QAAO,EAAE,GAAG,UAAU;GACxB,QACE,QAAO;IAAE,GAAG;IAAG,GAAG;IAAG;;;CAI3B,MAAM,kBAAkB,oBAAoB;CAE5C,MAAM,WAAW;EACf,QAAQ;GACN,SAAS;GACT,QAAQ,QAAQ,KAAK;GACrB,GAAG;GACJ;EACD,SAAS;GACP,SAAS;GACT,QAAQ;GACR,GAAG;GACH,GAAG;GACJ;EACF;AAMD,QACE,iBAAA,GAAA,kBAAA,KALsB,cAAA,OAAO,OAAO,GAAa,EAKjD;EACO;EACK;EACV,SAAQ;EACR,SAAS,CAAC,gBAAiB,UAAU,YAAY,WAAY,KAAA;EAC7D,aAAa,gBAAgB,YAAY,KAAA;EACzC,UAAU;GACR,MAAM;GACN,QAAQ;GACR,QAAQ;GACT;EACD,YAAY;GACV;GACA;GACA,MAAM;GACN,QAAQ,EAAY,UAAU;GAC9B,SAAS,EAAY,UAAU;GAChC;EACD,WAAW,cAAA,gBAAgB,YAAY,UAAU;EAEhD;EACe,CAAA"}
@@ -56,4 +56,4 @@ var GradualBlur = ({ children, duration = .5, delay = 0, blur = 8, triggerOnView
56
56
  //#endregion
57
57
  export { GradualBlur as t };
58
58
 
59
- //# sourceMappingURL=gradual-blur-jTzKCmAV.mjs.map
59
+ //# sourceMappingURL=gradual-blur-Bl3dOMEz.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"gradual-blur-jTzKCmAV.mjs","names":[],"sources":["../../src/components/effects/gradual-blur/GradualBlur.tsx"],"sourcesContent":["import { useRef, type ComponentType } from \"react\";\nimport { motion, type HTMLMotionProps } from \"framer-motion\";\nimport { mergeClassNames } from \"../../../utils\";\nimport type { GradualBlurProps } from \"./types\";\n\nexport const GradualBlur = ({\n children,\n duration = 0.5,\n delay = 0,\n blur = 8,\n triggerOnView = true,\n triggerOnce = true,\n threshold = 0.05,\n visible = false,\n direction = \"none\",\n distance = 20,\n className,\n as = \"div\",\n}: GradualBlurProps) => {\n const ref = useRef<HTMLDivElement>(null);\n\n const getInitialPosition = () => {\n switch (direction) {\n case \"top\":\n return { y: -distance };\n case \"bottom\":\n return { y: distance };\n case \"left\":\n return { x: -distance };\n case \"right\":\n return { x: distance };\n default:\n return { x: 0, y: 0 };\n }\n };\n\n const initialPosition = getInitialPosition();\n\n const variants = {\n hidden: {\n opacity: 0,\n filter: `blur(${blur}px)`,\n ...initialPosition,\n },\n visible: {\n opacity: 1,\n filter: \"blur(0px)\",\n x: 0,\n y: 0,\n },\n };\n\n const MotionComponent = motion.create(as as string) as ComponentType<\n HTMLMotionProps<\"div\">\n >;\n\n return (\n <MotionComponent\n ref={ref}\n variants={variants}\n initial=\"hidden\"\n animate={!triggerOnView ? (visible ? \"visible\" : \"hidden\") : undefined}\n whileInView={triggerOnView ? \"visible\" : undefined}\n viewport={{\n once: triggerOnce,\n amount: threshold,\n margin: \"0px 0px -50px 0px\", // Slight bottom margin to trigger earlier\n }}\n transition={{\n duration,\n delay,\n ease: \"easeOut\",\n filter: { duration: duration },\n opacity: { duration: duration },\n }}\n className={mergeClassNames(\"relative\", className)}\n >\n {children}\n </MotionComponent>\n );\n};\n"],"mappings":";;;;;AAKA,IAAa,eAAe,EAC1B,UACA,WAAW,IACX,QAAQ,GACR,OAAO,GACP,gBAAgB,MAChB,cAAc,MACd,YAAY,KACZ,UAAU,OACV,YAAY,QACZ,WAAW,IACX,WACA,KAAK,YACiB;CACtB,MAAM,MAAM,OAAuB,KAAK;CAExC,MAAM,2BAA2B;AAC/B,UAAQ,WAAR;GACE,KAAK,MACH,QAAO,EAAE,GAAG,CAAC,UAAU;GACzB,KAAK,SACH,QAAO,EAAE,GAAG,UAAU;GACxB,KAAK,OACH,QAAO,EAAE,GAAG,CAAC,UAAU;GACzB,KAAK,QACH,QAAO,EAAE,GAAG,UAAU;GACxB,QACE,QAAO;IAAE,GAAG;IAAG,GAAG;IAAG;;;CAI3B,MAAM,kBAAkB,oBAAoB;CAE5C,MAAM,WAAW;EACf,QAAQ;GACN,SAAS;GACT,QAAQ,QAAQ,KAAK;GACrB,GAAG;GACJ;EACD,SAAS;GACP,SAAS;GACT,QAAQ;GACR,GAAG;GACH,GAAG;GACJ;EACF;AAMD,QACE,oBALsB,OAAO,OAAO,GAAa,EAKjD;EACO;EACK;EACV,SAAQ;EACR,SAAS,CAAC,gBAAiB,UAAU,YAAY,WAAY,KAAA;EAC7D,aAAa,gBAAgB,YAAY,KAAA;EACzC,UAAU;GACR,MAAM;GACN,QAAQ;GACR,QAAQ;GACT;EACD,YAAY;GACV;GACA;GACA,MAAM;GACN,QAAQ,EAAY,UAAU;GAC9B,SAAS,EAAY,UAAU;GAChC;EACD,WAAW,gBAAgB,YAAY,UAAU;EAEhD;EACe,CAAA"}
1
+ {"version":3,"file":"gradual-blur-Bl3dOMEz.mjs","names":[],"sources":["../../src/components/effects/gradual-blur/GradualBlur.tsx"],"sourcesContent":["import { useRef, type ComponentType } from \"react\";\nimport { motion, type HTMLMotionProps } from \"framer-motion\";\nimport { mergeClassNames } from \"../../../utils\";\nimport type { GradualBlurProps } from \"./types\";\n\nexport const GradualBlur = ({\n children,\n duration = 0.5,\n delay = 0,\n blur = 8,\n triggerOnView = true,\n triggerOnce = true,\n threshold = 0.05,\n visible = false,\n direction = \"none\",\n distance = 20,\n className,\n as = \"div\",\n}: GradualBlurProps) => {\n const ref = useRef<HTMLDivElement>(null);\n\n const getInitialPosition = () => {\n switch (direction) {\n case \"top\":\n return { y: -distance };\n case \"bottom\":\n return { y: distance };\n case \"left\":\n return { x: -distance };\n case \"right\":\n return { x: distance };\n default:\n return { x: 0, y: 0 };\n }\n };\n\n const initialPosition = getInitialPosition();\n\n const variants = {\n hidden: {\n opacity: 0,\n filter: `blur(${blur}px)`,\n ...initialPosition,\n },\n visible: {\n opacity: 1,\n filter: \"blur(0px)\",\n x: 0,\n y: 0,\n },\n };\n\n const MotionComponent = motion.create(as as string) as ComponentType<\n HTMLMotionProps<\"div\">\n >;\n\n return (\n <MotionComponent\n ref={ref}\n variants={variants}\n initial=\"hidden\"\n animate={!triggerOnView ? (visible ? \"visible\" : \"hidden\") : undefined}\n whileInView={triggerOnView ? \"visible\" : undefined}\n viewport={{\n once: triggerOnce,\n amount: threshold,\n margin: \"0px 0px -50px 0px\", // Slight bottom margin to trigger earlier\n }}\n transition={{\n duration,\n delay,\n ease: \"easeOut\",\n filter: { duration: duration },\n opacity: { duration: duration },\n }}\n className={mergeClassNames(\"relative\", className)}\n >\n {children}\n </MotionComponent>\n );\n};\n"],"mappings":";;;;;AAKA,IAAa,eAAe,EAC1B,UACA,WAAW,IACX,QAAQ,GACR,OAAO,GACP,gBAAgB,MAChB,cAAc,MACd,YAAY,KACZ,UAAU,OACV,YAAY,QACZ,WAAW,IACX,WACA,KAAK,YACiB;CACtB,MAAM,MAAM,OAAuB,KAAK;CAExC,MAAM,2BAA2B;AAC/B,UAAQ,WAAR;GACE,KAAK,MACH,QAAO,EAAE,GAAG,CAAC,UAAU;GACzB,KAAK,SACH,QAAO,EAAE,GAAG,UAAU;GACxB,KAAK,OACH,QAAO,EAAE,GAAG,CAAC,UAAU;GACzB,KAAK,QACH,QAAO,EAAE,GAAG,UAAU;GACxB,QACE,QAAO;IAAE,GAAG;IAAG,GAAG;IAAG;;;CAI3B,MAAM,kBAAkB,oBAAoB;CAE5C,MAAM,WAAW;EACf,QAAQ;GACN,SAAS;GACT,QAAQ,QAAQ,KAAK;GACrB,GAAG;GACJ;EACD,SAAS;GACP,SAAS;GACT,QAAQ;GACR,GAAG;GACH,GAAG;GACJ;EACF;AAMD,QACE,oBALsB,OAAO,OAAO,GAAa,EAKjD;EACO;EACK;EACV,SAAQ;EACR,SAAS,CAAC,gBAAiB,UAAU,YAAY,WAAY,KAAA;EAC7D,aAAa,gBAAgB,YAAY,KAAA;EACzC,UAAU;GACR,MAAM;GACN,QAAQ;GACR,QAAQ;GACT;EACD,YAAY;GACV;GACA;GACA,MAAM;GACN,QAAQ,EAAY,UAAU;GAC9B,SAAS,EAAY,UAAU;GAChC;EACD,WAAW,gBAAgB,YAAY,UAAU;EAEhD;EACe,CAAA"}
@@ -135,10 +135,13 @@ var HoverCard = (0, react.forwardRef)(({ children, content, position = "bottom",
135
135
  (0, react.useEffect)(() => {
136
136
  return () => clearTimeouts();
137
137
  }, [clearTimeouts]);
138
- const cardStyle = {
139
- width: width ? typeof width === "number" ? `${width}px` : width : void 0,
140
- maxWidth: typeof maxWidth === "number" ? `${maxWidth}px` : maxWidth
138
+ const resolvedWidth = width ? typeof width === "number" ? `${width}px` : width : "max-content";
139
+ const resolvedMaxWidth = typeof maxWidth === "number" ? `${maxWidth}px` : maxWidth;
140
+ const cardContainerStyle = {
141
+ width: resolvedWidth,
142
+ maxWidth: resolvedMaxWidth ? `min(calc(100vw - 2rem), ${resolvedMaxWidth})` : "calc(100vw - 2rem)"
141
143
  };
144
+ const cardStyle = { width: width ? typeof width === "number" ? `${width}px` : width : "100%" };
142
145
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
143
146
  ref,
144
147
  className: `relative inline-block ${triggerClassName}`,
@@ -149,6 +152,7 @@ var HoverCard = (0, react.forwardRef)(({ children, content, position = "bottom",
149
152
  absolute z-50
150
153
  ${positionStyles[position][align]}
151
154
  `,
155
+ style: cardContainerStyle,
152
156
  initial: motionVariants[position].initial,
153
157
  animate: motionVariants[position].animate,
154
158
  exit: motionVariants[position].exit,
@@ -158,6 +162,7 @@ var HoverCard = (0, react.forwardRef)(({ children, content, position = "bottom",
158
162
  },
159
163
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
160
164
  className: `
165
+ w-full
161
166
  bg-white/70 dark:bg-neutral-900/70
162
167
  backdrop-blur-xl
163
168
  rounded-xl shadow-2xl dark:shadow-neutral-950/50
@@ -183,4 +188,4 @@ Object.defineProperty(exports, "HoverCard", {
183
188
  }
184
189
  });
185
190
 
186
- //# sourceMappingURL=hover-card-KjWMnvt_.cjs.map
191
+ //# sourceMappingURL=hover-card-v0QwmVBU.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hover-card-v0QwmVBU.cjs","names":[],"sources":["../../src/components/overlays/hover-card/HoverCard.tsx"],"sourcesContent":["import { forwardRef, useState, useCallback, useRef, useEffect } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\n\nexport type HoverCardPosition = \"top\" | \"bottom\" | \"left\" | \"right\";\nexport type HoverCardAlign = \"start\" | \"center\" | \"end\";\n\nexport interface HoverCardProps {\n /** The trigger element */\n children: React.ReactNode;\n /** The content to display in the hover card */\n content: React.ReactNode;\n /** Position of the hover card relative to trigger */\n position?: HoverCardPosition;\n /** Alignment of the hover card */\n align?: HoverCardAlign;\n /** Delay before showing the card (ms) */\n openDelay?: number;\n /** Delay before hiding the card (ms) */\n closeDelay?: number;\n /** Whether the hover card is disabled */\n disabled?: boolean;\n /** Custom className for the card */\n className?: string;\n /** Custom className for the trigger wrapper */\n triggerClassName?: string;\n /** Whether to show an arrow */\n arrow?: boolean;\n /** Custom width for the card */\n width?: number | string;\n /** Max width for the card */\n maxWidth?: number | string;\n}\n\nconst positionStyles: Record<\n HoverCardPosition,\n Record<HoverCardAlign, string>\n> = {\n top: {\n start: \"bottom-full left-0 mb-2\",\n center: \"bottom-full left-1/2 -translate-x-1/2 mb-2\",\n end: \"bottom-full right-0 mb-2\",\n },\n bottom: {\n start: \"top-full left-0 mt-2\",\n center: \"top-full left-1/2 -translate-x-1/2 mt-2\",\n end: \"top-full right-0 mt-2\",\n },\n left: {\n start: \"right-full top-0 mr-2\",\n center: \"right-full top-1/2 -translate-y-1/2 mr-2\",\n end: \"right-full bottom-0 mr-2\",\n },\n right: {\n start: \"left-full top-0 ml-2\",\n center: \"left-full top-1/2 -translate-y-1/2 ml-2\",\n end: \"left-full bottom-0 ml-2\",\n },\n};\n\nconst arrowStyles: Record<HoverCardPosition, string> = {\n top: \"bottom-[-6px] left-1/2 -translate-x-1/2 border-l-transparent border-r-transparent border-b-transparent border-t-white/70 dark:border-t-neutral-900/70\",\n bottom:\n \"top-[-6px] left-1/2 -translate-x-1/2 border-l-transparent border-r-transparent border-t-transparent border-b-white/70 dark:border-b-neutral-900/70\",\n left: \"right-[-6px] top-1/2 -translate-y-1/2 border-t-transparent border-b-transparent border-r-transparent border-l-white/70 dark:border-l-neutral-900/70\",\n right:\n \"left-[-6px] top-1/2 -translate-y-1/2 border-t-transparent border-b-transparent border-l-transparent border-r-white/70 dark:border-r-neutral-900/70\",\n};\n\nconst motionVariants = {\n top: {\n initial: { opacity: 0, y: 5, scale: 0.98 },\n animate: { opacity: 1, y: 0, scale: 1 },\n exit: { opacity: 0, y: 5, scale: 0.98 },\n },\n bottom: {\n initial: { opacity: 0, y: -5, scale: 0.98 },\n animate: { opacity: 1, y: 0, scale: 1 },\n exit: { opacity: 0, y: -5, scale: 0.98 },\n },\n left: {\n initial: { opacity: 0, x: 5, scale: 0.98 },\n animate: { opacity: 1, x: 0, scale: 1 },\n exit: { opacity: 0, x: 5, scale: 0.98 },\n },\n right: {\n initial: { opacity: 0, x: -5, scale: 0.98 },\n animate: { opacity: 1, x: 0, scale: 1 },\n exit: { opacity: 0, x: -5, scale: 0.98 },\n },\n} as const;\n\nconst HoverCard = forwardRef<HTMLDivElement, HoverCardProps>(\n (\n {\n children,\n content,\n position = \"bottom\",\n align = \"center\",\n openDelay = 200,\n closeDelay = 150,\n disabled = false,\n className = \"\",\n triggerClassName = \"\",\n arrow = true,\n width,\n maxWidth = 320,\n },\n ref,\n ) => {\n const [isOpen, setIsOpen] = useState(false);\n const openTimeoutRef = useRef<any>(null);\n const closeTimeoutRef = useRef<any>(null);\n\n const clearTimeouts = useCallback(() => {\n if (openTimeoutRef.current) {\n clearTimeout(openTimeoutRef.current);\n openTimeoutRef.current = null;\n }\n if (closeTimeoutRef.current) {\n clearTimeout(closeTimeoutRef.current);\n closeTimeoutRef.current = null;\n }\n }, []);\n\n const handleMouseEnter = useCallback(() => {\n if (disabled) return;\n clearTimeouts();\n openTimeoutRef.current = setTimeout(() => {\n setIsOpen(true);\n }, openDelay);\n }, [disabled, openDelay, clearTimeouts]);\n\n const handleMouseLeave = useCallback(() => {\n clearTimeouts();\n closeTimeoutRef.current = setTimeout(() => {\n setIsOpen(false);\n }, closeDelay);\n }, [closeDelay, clearTimeouts]);\n\n useEffect(() => {\n return () => clearTimeouts();\n }, [clearTimeouts]);\n\n const resolvedWidth = width\n ? typeof width === \"number\"\n ? `${width}px`\n : width\n : \"max-content\";\n\n const resolvedMaxWidth =\n typeof maxWidth === \"number\" ? `${maxWidth}px` : maxWidth;\n\n const cardContainerStyle: React.CSSProperties = {\n width: resolvedWidth,\n maxWidth: resolvedMaxWidth\n ? `min(calc(100vw - 2rem), ${resolvedMaxWidth})`\n : \"calc(100vw - 2rem)\",\n };\n\n const cardStyle: React.CSSProperties = {\n width: width\n ? typeof width === \"number\"\n ? `${width}px`\n : width\n : \"100%\",\n };\n\n return (\n <div\n ref={ref}\n className={`relative inline-block ${triggerClassName}`}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {children}\n <AnimatePresence>\n {isOpen && (\n <motion.div\n className={`\n absolute z-50\n ${positionStyles[position][align]}\n `}\n style={cardContainerStyle}\n initial={motionVariants[position].initial}\n animate={motionVariants[position].animate}\n exit={motionVariants[position].exit}\n transition={{ duration: 0.15, ease: \"easeOut\" }}\n >\n <div\n className={`\n w-full\n bg-white/70 dark:bg-neutral-900/70\n backdrop-blur-xl\n rounded-xl shadow-2xl dark:shadow-neutral-950/50\n border border-white/40 dark:border-white/10\n p-4\n ${className}\n `}\n style={cardStyle}\n >\n {content}\n </div>\n {arrow && (\n <span\n className={`\n absolute w-0 h-0 border-[6px]\n ${arrowStyles[position]}\n `}\n />\n )}\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n },\n);\n\nHoverCard.displayName = \"HoverCard\";\n\nexport default HoverCard;\nexport { HoverCard };\n"],"mappings":"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"}