erp-pro-ui 0.1.8 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (309) hide show
  1. package/README.md +94 -0
  2. package/dist/ascii-text.cjs +1 -1
  3. package/dist/ascii-text.mjs +1 -1
  4. package/dist/background-gradient-animation.cjs +1 -1
  5. package/dist/background-gradient-animation.mjs +1 -1
  6. package/dist/button-hover-border-gradient.cjs +1 -1
  7. package/dist/button-hover-border-gradient.mjs +1 -1
  8. package/dist/button.cjs +1 -1
  9. package/dist/button.mjs +1 -1
  10. package/dist/calendar.cjs +1 -1
  11. package/dist/calendar.mjs +1 -1
  12. package/dist/carousel.cjs +1 -1
  13. package/dist/carousel.mjs +1 -1
  14. package/dist/charts.cjs +1 -1
  15. package/dist/charts.mjs +1 -1
  16. package/dist/chip.cjs +1 -1
  17. package/dist/chip.mjs +1 -1
  18. package/dist/chroma-grid.cjs +1 -1
  19. package/dist/chroma-grid.mjs +1 -1
  20. package/dist/chunks/{DropdownMenu-DOvo5pV_.cjs → DropdownMenu-BDrNYO-D.cjs} +6 -5
  21. package/dist/chunks/DropdownMenu-BDrNYO-D.cjs.map +1 -0
  22. package/dist/chunks/{DropdownMenu-C17Zqu_E.mjs → DropdownMenu-BtTOri-A.mjs} +6 -5
  23. package/dist/chunks/DropdownMenu-BtTOri-A.mjs.map +1 -0
  24. package/dist/chunks/{HoverBorderGradient-C5D6lGg0.cjs → HoverBorderGradient-9pfvBoHR.cjs} +2 -2
  25. package/dist/chunks/{HoverBorderGradient-C5D6lGg0.cjs.map → HoverBorderGradient-9pfvBoHR.cjs.map} +1 -1
  26. package/dist/chunks/{HoverBorderGradient-CduqqQgX.mjs → HoverBorderGradient-NbdXeLgC.mjs} +2 -2
  27. package/dist/chunks/{HoverBorderGradient-CduqqQgX.mjs.map → HoverBorderGradient-NbdXeLgC.mjs.map} +1 -1
  28. package/dist/chunks/SunToMoonButton-BkEfkElJ.mjs.map +1 -1
  29. package/dist/chunks/SunToMoonButton-jS4BJD9q.cjs.map +1 -1
  30. package/dist/chunks/{tooltip-PJaQa8_l.cjs → Tooltip-DD30yj3A.cjs} +1 -1
  31. package/dist/chunks/{tooltip-PJaQa8_l.cjs.map → Tooltip-DD30yj3A.cjs.map} +1 -1
  32. package/dist/chunks/{tooltip-CmB8xKOF.mjs → Tooltip-DK3B879v.mjs} +1 -1
  33. package/dist/chunks/{tooltip-CmB8xKOF.mjs.map → Tooltip-DK3B879v.mjs.map} +1 -1
  34. package/dist/chunks/animated-content-CLsFnjgr.cjs.map +1 -1
  35. package/dist/chunks/animated-content-bK6xp-vc.mjs.map +1 -1
  36. package/dist/chunks/{ascii-text-OnPOTd2I.cjs → ascii-text-BFnpVur6.cjs} +5 -3
  37. package/dist/chunks/{ascii-text-OnPOTd2I.cjs.map → ascii-text-BFnpVur6.cjs.map} +1 -1
  38. package/dist/chunks/{ascii-text-OBwVLFDC.mjs → ascii-text-Bdy4C5rU.mjs} +5 -3
  39. package/dist/chunks/{ascii-text-OBwVLFDC.mjs.map → ascii-text-Bdy4C5rU.mjs.map} +1 -1
  40. package/dist/chunks/{background-gradient-animation-DpKJ3ecq.mjs → background-gradient-animation-BR9wx6Z8.mjs} +2 -2
  41. package/dist/chunks/{background-gradient-animation-DpKJ3ecq.mjs.map → background-gradient-animation-BR9wx6Z8.mjs.map} +1 -1
  42. package/dist/chunks/{background-gradient-animation-II9hdrgB.cjs → background-gradient-animation-CiNdmA61.cjs} +2 -2
  43. package/dist/chunks/{background-gradient-animation-II9hdrgB.cjs.map → background-gradient-animation-CiNdmA61.cjs.map} +1 -1
  44. package/dist/chunks/{button-DddUhuR-.mjs → button-A6UTvrOu.mjs} +2 -2
  45. package/dist/chunks/{button-DddUhuR-.mjs.map → button-A6UTvrOu.mjs.map} +1 -1
  46. package/dist/chunks/{button-xqernofO.cjs → button-C4MXPxsC.cjs} +2 -2
  47. package/dist/chunks/{button-xqernofO.cjs.map → button-C4MXPxsC.cjs.map} +1 -1
  48. package/dist/chunks/{button-hover-border-gradient-DFppVRI4.mjs → button-hover-border-gradient-DnFvjNNw.mjs} +2 -2
  49. package/dist/chunks/{button-hover-border-gradient-DFppVRI4.mjs.map → button-hover-border-gradient-DnFvjNNw.mjs.map} +1 -1
  50. package/dist/chunks/{button-hover-border-gradient-DX2lBG5C.cjs → button-hover-border-gradient-ssmwU5-U.cjs} +2 -2
  51. package/dist/chunks/{button-hover-border-gradient-DX2lBG5C.cjs.map → button-hover-border-gradient-ssmwU5-U.cjs.map} +1 -1
  52. package/dist/chunks/{calendar-BOBm3dFA.mjs → calendar-5XzPqKbE.mjs} +4 -4
  53. package/dist/chunks/calendar-5XzPqKbE.mjs.map +1 -0
  54. package/dist/chunks/{calendar-DJkfDhQA.cjs → calendar-CQJgQ5H_.cjs} +4 -4
  55. package/dist/chunks/calendar-CQJgQ5H_.cjs.map +1 -0
  56. package/dist/chunks/{carousel-F4drTOr6.cjs → carousel-Cv0m1Pp5.cjs} +2 -2
  57. package/dist/chunks/{carousel-DUqOaYvs.mjs.map → carousel-Cv0m1Pp5.cjs.map} +1 -1
  58. package/dist/chunks/{carousel-DUqOaYvs.mjs → carousel-Dd4rp-jr.mjs} +2 -2
  59. package/dist/chunks/{carousel-F4drTOr6.cjs.map → carousel-Dd4rp-jr.mjs.map} +1 -1
  60. package/dist/chunks/{charts-CZEYcr6X.cjs → charts-BmIV-mJy.cjs} +41 -10
  61. package/dist/chunks/charts-BmIV-mJy.cjs.map +1 -0
  62. package/dist/chunks/{charts-C-Qee_JY.mjs → charts-DkVu0rFc.mjs} +41 -10
  63. package/dist/chunks/charts-DkVu0rFc.mjs.map +1 -0
  64. package/dist/chunks/{chip-CMs73sc5.cjs → chip-B0YzBwkz.cjs} +10 -7
  65. package/dist/chunks/chip-B0YzBwkz.cjs.map +1 -0
  66. package/dist/chunks/{chip-BFg3DJx6.mjs → chip-CqcdcSs2.mjs} +10 -7
  67. package/dist/chunks/chip-CqcdcSs2.mjs.map +1 -0
  68. package/dist/chunks/{chroma-grid-tJX7CzCS.cjs → chroma-grid-DcZ9f4Ui.cjs} +2 -2
  69. package/dist/chunks/{chroma-grid-tJX7CzCS.cjs.map → chroma-grid-DcZ9f4Ui.cjs.map} +1 -1
  70. package/dist/chunks/{chroma-grid-DlY9hIRI.mjs → chroma-grid-opB2DBtS.mjs} +2 -2
  71. package/dist/chunks/{chroma-grid-DlY9hIRI.mjs.map → chroma-grid-opB2DBtS.mjs.map} +1 -1
  72. package/dist/chunks/color-palette-C3lesasJ.mjs +329 -0
  73. package/dist/chunks/color-palette-C3lesasJ.mjs.map +1 -0
  74. package/dist/chunks/color-palette-pLh6En3n.cjs +384 -0
  75. package/dist/chunks/color-palette-pLh6En3n.cjs.map +1 -0
  76. package/dist/chunks/{combobox-Bcwi33Qx.mjs → combobox-B6yk5U82.mjs} +6 -6
  77. package/dist/chunks/combobox-B6yk5U82.mjs.map +1 -0
  78. package/dist/chunks/{combobox-DRiHHhXL.cjs → combobox-CtNrGmuR.cjs} +6 -6
  79. package/dist/chunks/combobox-CtNrGmuR.cjs.map +1 -0
  80. package/dist/chunks/{data-table-Biom5rvs.mjs → data-table-Dtf6lKpp.mjs} +19 -19
  81. package/dist/chunks/data-table-Dtf6lKpp.mjs.map +1 -0
  82. package/dist/chunks/{data-table-D0BD2sFz.cjs → data-table-fAEuevPn.cjs} +20 -20
  83. package/dist/chunks/data-table-fAEuevPn.cjs.map +1 -0
  84. package/dist/chunks/{date-picker-CXGwnrLr.mjs → date-picker-BmQ0rgwH.mjs} +2 -2
  85. package/dist/chunks/{date-picker-CXGwnrLr.mjs.map → date-picker-BmQ0rgwH.mjs.map} +1 -1
  86. package/dist/chunks/{date-picker-Cw_tZGuk.cjs → date-picker-qpUZMtZC.cjs} +2 -2
  87. package/dist/chunks/{date-picker-Cw_tZGuk.cjs.map → date-picker-qpUZMtZC.cjs.map} +1 -1
  88. package/dist/chunks/dialog-CanVyiAD.mjs.map +1 -1
  89. package/dist/chunks/dialog-fffx1-4D.cjs.map +1 -1
  90. package/dist/chunks/{drawer-DTRnKChF.cjs → drawer-D07dGN6R.cjs} +6 -6
  91. package/dist/chunks/drawer-D07dGN6R.cjs.map +1 -0
  92. package/dist/chunks/{drawer-BJsBK6cP.mjs → drawer-DaoAXL-w.mjs} +6 -6
  93. package/dist/chunks/drawer-DaoAXL-w.mjs.map +1 -0
  94. package/dist/chunks/{form-CvNNjA1i.mjs → form-CtZ6U-_B.mjs} +2 -2
  95. package/dist/chunks/{form-CvNNjA1i.mjs.map → form-CtZ6U-_B.mjs.map} +1 -1
  96. package/dist/chunks/{form-C_JxqsSZ.cjs → form-X6Vyaavl.cjs} +2 -2
  97. package/dist/chunks/{form-C_JxqsSZ.cjs.map → form-X6Vyaavl.cjs.map} +1 -1
  98. package/dist/chunks/{gradual-blur-BB-8oKX6.cjs → gradual-blur-C6NOnjTw.cjs} +2 -2
  99. package/dist/chunks/{gradual-blur-BB-8oKX6.cjs.map → gradual-blur-C6NOnjTw.cjs.map} +1 -1
  100. package/dist/chunks/{gradual-blur-BR06yO3Y.mjs → gradual-blur-DXfxpCdB.mjs} +2 -2
  101. package/dist/chunks/{gradual-blur-BR06yO3Y.mjs.map → gradual-blur-DXfxpCdB.mjs.map} +1 -1
  102. package/dist/chunks/{input-Dox16Ozo.mjs → input-Bqo9Q5zF.mjs} +34 -13
  103. package/dist/chunks/input-Bqo9Q5zF.mjs.map +1 -0
  104. package/dist/chunks/{input-T4OlFhBc.cjs → input-DkCPyWXi.cjs} +34 -13
  105. package/dist/chunks/input-DkCPyWXi.cjs.map +1 -0
  106. package/dist/chunks/{label-CxmbGh0l.cjs → label-BKzqfAAq.cjs} +2 -2
  107. package/dist/chunks/{label-CxmbGh0l.cjs.map → label-BKzqfAAq.cjs.map} +1 -1
  108. package/dist/chunks/{label-C1Ekt3j2.mjs → label-Drxg0cG2.mjs} +2 -2
  109. package/dist/chunks/{label-C1Ekt3j2.mjs.map → label-Drxg0cG2.mjs.map} +1 -1
  110. package/dist/chunks/loading-BiM4mKh6.cjs.map +1 -1
  111. package/dist/chunks/loading-Dtosnb4A.mjs.map +1 -1
  112. package/dist/chunks/{multi-select-combobox-BzqYLVpV.cjs → multi-select-combobox-C0DoDzxQ.cjs} +6 -6
  113. package/dist/chunks/multi-select-combobox-C0DoDzxQ.cjs.map +1 -0
  114. package/dist/chunks/{multi-select-combobox-BrFtvCrS.mjs → multi-select-combobox-Do23ZfOQ.mjs} +6 -6
  115. package/dist/chunks/multi-select-combobox-Do23ZfOQ.mjs.map +1 -0
  116. package/dist/chunks/otp-input-CkhV-sGl.cjs.map +1 -1
  117. package/dist/chunks/otp-input-JOysxKfD.mjs.map +1 -1
  118. package/dist/chunks/{password-strength-meter-BEx94cfy.mjs → password-strength-meter-BsvqQBAg.mjs} +3 -3
  119. package/dist/chunks/{password-strength-meter-BEx94cfy.mjs.map → password-strength-meter-BsvqQBAg.mjs.map} +1 -1
  120. package/dist/chunks/{password-strength-meter-BNnmSgLh.cjs → password-strength-meter-DCi_BP7e.cjs} +3 -3
  121. package/dist/chunks/{password-strength-meter-BNnmSgLh.cjs.map → password-strength-meter-DCi_BP7e.cjs.map} +1 -1
  122. package/dist/chunks/{progress-bar-DS8KZ7eO.cjs → progress-bar-CYaBO_lS.cjs} +2 -2
  123. package/dist/chunks/{progress-bar-DS8KZ7eO.cjs.map → progress-bar-CYaBO_lS.cjs.map} +1 -1
  124. package/dist/chunks/{progress-bar-C9O0tuZf.mjs → progress-bar-DQ5ZKk2Y.mjs} +2 -2
  125. package/dist/chunks/{progress-bar-C9O0tuZf.mjs.map → progress-bar-DQ5ZKk2Y.mjs.map} +1 -1
  126. package/dist/chunks/radio-CuiM_gDv.mjs +50 -0
  127. package/dist/chunks/radio-CuiM_gDv.mjs.map +1 -0
  128. package/dist/chunks/radio-zx9xEW_C.cjs +56 -0
  129. package/dist/chunks/radio-zx9xEW_C.cjs.map +1 -0
  130. package/dist/chunks/{select-D0GOBB-b.mjs → select-CUaSNR09.mjs} +6 -6
  131. package/dist/chunks/select-CUaSNR09.mjs.map +1 -0
  132. package/dist/chunks/{select-CORFYTvs.cjs → select-bZ9WqLOc.cjs} +6 -6
  133. package/dist/chunks/select-bZ9WqLOc.cjs.map +1 -0
  134. package/dist/chunks/{sidebar-BrOLz89T.mjs → sidebar-DYEDFV2u.mjs} +242 -231
  135. package/dist/chunks/sidebar-DYEDFV2u.mjs.map +1 -0
  136. package/dist/chunks/{sidebar-D9D651F6.cjs → sidebar-Kkr45nuN.cjs} +241 -230
  137. package/dist/chunks/sidebar-Kkr45nuN.cjs.map +1 -0
  138. package/dist/chunks/{skeleton-wQOE-pRg.cjs → skeleton-DCBGLNAZ.cjs} +2 -2
  139. package/dist/chunks/{skeleton-wQOE-pRg.cjs.map → skeleton-DCBGLNAZ.cjs.map} +1 -1
  140. package/dist/chunks/{skeleton-BdijDxP6.mjs → skeleton-nH1eAN96.mjs} +2 -2
  141. package/dist/chunks/{skeleton-BdijDxP6.mjs.map → skeleton-nH1eAN96.mjs.map} +1 -1
  142. package/dist/chunks/{splash-cursor-CCi5n3O-.cjs → splash-cursor-BqG7ClsJ.cjs} +2 -2
  143. package/dist/chunks/{splash-cursor-CCi5n3O-.cjs.map → splash-cursor-BqG7ClsJ.cjs.map} +1 -1
  144. package/dist/chunks/{splash-cursor-CDHTm5vA.mjs → splash-cursor-N4FdnkOa.mjs} +2 -2
  145. package/dist/chunks/{splash-cursor-CDHTm5vA.mjs.map → splash-cursor-N4FdnkOa.mjs.map} +1 -1
  146. package/dist/chunks/{spotlight-card-Bh7KG0vZ.cjs → spotlight-card-BmsqC7wm.cjs} +2 -2
  147. package/dist/chunks/{spotlight-card-Bh7KG0vZ.cjs.map → spotlight-card-BmsqC7wm.cjs.map} +1 -1
  148. package/dist/chunks/{spotlight-card-D0uTxfPZ.mjs → spotlight-card-D9Z3nTmb.mjs} +2 -2
  149. package/dist/chunks/{spotlight-card-D0uTxfPZ.mjs.map → spotlight-card-D9Z3nTmb.mjs.map} +1 -1
  150. package/dist/chunks/{stepper-Z_7ugZJN.cjs → stepper-DepvEGfr.cjs} +4 -4
  151. package/dist/chunks/{stepper-Z_7ugZJN.cjs.map → stepper-DepvEGfr.cjs.map} +1 -1
  152. package/dist/chunks/{stepper-BMKxjCdm.mjs → stepper-Jv5OS1nY.mjs} +4 -4
  153. package/dist/chunks/{stepper-BMKxjCdm.mjs.map → stepper-Jv5OS1nY.mjs.map} +1 -1
  154. package/dist/chunks/{sun-to-moon-button-DcRX0obV.mjs → sun-to-moon-button-BJtBEaa3.mjs} +70 -51
  155. package/dist/chunks/sun-to-moon-button-BJtBEaa3.mjs.map +1 -0
  156. package/dist/chunks/{sun-to-moon-button-De0_Sf01.cjs → sun-to-moon-button-PwgTPsTW.cjs} +70 -51
  157. package/dist/chunks/sun-to-moon-button-PwgTPsTW.cjs.map +1 -0
  158. package/dist/chunks/{switch-DPyzVrNh.cjs → switch-X3l8xnle.cjs} +10 -29
  159. package/dist/chunks/switch-X3l8xnle.cjs.map +1 -0
  160. package/dist/chunks/{switch-C1gKE0m0.mjs → switch-iPsN1NS2.mjs} +10 -29
  161. package/dist/chunks/switch-iPsN1NS2.mjs.map +1 -0
  162. package/dist/chunks/{textarea-BY5-J9No.mjs → textarea-Bdo-Trvi.mjs} +2 -2
  163. package/dist/chunks/{textarea-BY5-J9No.mjs.map → textarea-Bdo-Trvi.mjs.map} +1 -1
  164. package/dist/chunks/{textarea-D-oBQ3IZ.cjs → textarea-CGRl2hrM.cjs} +2 -2
  165. package/dist/chunks/{textarea-D-oBQ3IZ.cjs.map → textarea-CGRl2hrM.cjs.map} +1 -1
  166. package/dist/chunks/toast-BcBidy5n.mjs.map +1 -1
  167. package/dist/chunks/toast-DiFgv3IL.cjs.map +1 -1
  168. package/dist/chunks/{truncated-text-istgJRUq.cjs → truncated-text-BIXqNfOL.cjs} +2 -2
  169. package/dist/chunks/{truncated-text-istgJRUq.cjs.map → truncated-text-BIXqNfOL.cjs.map} +1 -1
  170. package/dist/chunks/{truncated-text-DTgks5yS.mjs → truncated-text-C9t9o9IA.mjs} +2 -2
  171. package/dist/chunks/{truncated-text-DTgks5yS.mjs.map → truncated-text-C9t9o9IA.mjs.map} +1 -1
  172. package/dist/chunks/{typography-C_IanU4b.mjs → typography-Ct-jDJP3.mjs} +2 -2
  173. package/dist/chunks/{typography-C_IanU4b.mjs.map → typography-Ct-jDJP3.mjs.map} +1 -1
  174. package/dist/chunks/{typography-DUD6Dzd5.cjs → typography-LwwY_MOy.cjs} +2 -2
  175. package/dist/chunks/{typography-DUD6Dzd5.cjs.map → typography-LwwY_MOy.cjs.map} +1 -1
  176. package/dist/chunks/{utils-ati1KkDb.mjs → utils-7S0u48mU.mjs} +1339 -1
  177. package/dist/chunks/{utils-B4SmmY4J.cjs.map → utils-7S0u48mU.mjs.map} +1 -1
  178. package/dist/chunks/{utils-B4SmmY4J.cjs → utils-LRbEQHYs.cjs} +1339 -1
  179. package/dist/chunks/{utils-ati1KkDb.mjs.map → utils-LRbEQHYs.cjs.map} +1 -1
  180. package/dist/color-palette.cjs +9 -1
  181. package/dist/color-palette.mjs +2 -2
  182. package/dist/combobox.cjs +1 -1
  183. package/dist/combobox.mjs +1 -1
  184. package/dist/components/data-display/charts/BarChart.d.ts +5 -0
  185. package/dist/components/data-display/charts/BarChart.d.ts.map +1 -1
  186. package/dist/components/data-display/chip/Chip.d.ts +1 -1
  187. package/dist/components/data-display/chip/Chip.d.ts.map +1 -1
  188. package/dist/components/data-display/color-palette/ColorPalette.d.ts +24 -16
  189. package/dist/components/data-display/color-palette/ColorPalette.d.ts.map +1 -1
  190. package/dist/components/data-display/color-palette/index.d.ts +2 -1
  191. package/dist/components/data-display/color-palette/index.d.ts.map +1 -1
  192. package/dist/components/data-display/dashboard-cards/ChartCard.d.ts +15 -0
  193. package/dist/components/data-display/dashboard-cards/ChartCard.d.ts.map +1 -0
  194. package/dist/components/data-display/dashboard-cards/StatCard.d.ts +42 -0
  195. package/dist/components/data-display/dashboard-cards/StatCard.d.ts.map +1 -0
  196. package/dist/components/data-display/dashboard-cards/TopProductsCard.d.ts +17 -0
  197. package/dist/components/data-display/dashboard-cards/TopProductsCard.d.ts.map +1 -0
  198. package/dist/components/data-display/dashboard-cards/index.d.ts +7 -0
  199. package/dist/components/data-display/dashboard-cards/index.d.ts.map +1 -0
  200. package/dist/components/effects/sun-to-moon-button/ThemeSwitcherButtons.d.ts +16 -1
  201. package/dist/components/effects/sun-to-moon-button/ThemeSwitcherButtons.d.ts.map +1 -1
  202. package/dist/components/effects/sun-to-moon-button/index.d.ts +1 -1
  203. package/dist/components/effects/sun-to-moon-button/index.d.ts.map +1 -1
  204. package/dist/components/forms/input/Input.d.ts.map +1 -1
  205. package/dist/components/forms/input/types.d.ts +2 -0
  206. package/dist/components/forms/input/types.d.ts.map +1 -1
  207. package/dist/components/forms/radio/Radio.d.ts.map +1 -1
  208. package/dist/components/forms/switch/Switch.d.ts.map +1 -1
  209. package/dist/components/navigation/sidebar/DashboardSidebarShell.d.ts +26 -6
  210. package/dist/components/navigation/sidebar/DashboardSidebarShell.d.ts.map +1 -1
  211. package/dist/components/navigation/sidebar/index.d.ts +1 -0
  212. package/dist/components/navigation/sidebar/index.d.ts.map +1 -1
  213. package/dist/components/overlays/dropdown-menu/DropdownMenu.d.ts +1 -1
  214. package/dist/components/overlays/dropdown-menu/DropdownMenu.d.ts.map +1 -1
  215. package/dist/components/overlays/dropdown-menu/types.d.ts +1 -0
  216. package/dist/components/overlays/dropdown-menu/types.d.ts.map +1 -1
  217. package/dist/data-table.cjs +1 -1
  218. package/dist/data-table.mjs +1 -1
  219. package/dist/date-picker.cjs +1 -1
  220. package/dist/date-picker.mjs +1 -1
  221. package/dist/docs.cjs.map +1 -1
  222. package/dist/docs.mjs.map +1 -1
  223. package/dist/drawer.cjs +1 -1
  224. package/dist/drawer.mjs +1 -1
  225. package/dist/form.cjs +1 -1
  226. package/dist/form.mjs +1 -1
  227. package/dist/gradual-blur.cjs +1 -1
  228. package/dist/gradual-blur.mjs +1 -1
  229. package/dist/hover-border-gradient.cjs +1 -1
  230. package/dist/hover-border-gradient.mjs +1 -1
  231. package/dist/index.cjs +325 -38
  232. package/dist/index.cjs.map +1 -1
  233. package/dist/index.d.ts +5 -3
  234. package/dist/index.d.ts.map +1 -1
  235. package/dist/index.mjs +315 -39
  236. package/dist/index.mjs.map +1 -1
  237. package/dist/input.cjs +1 -1
  238. package/dist/input.mjs +1 -1
  239. package/dist/label.cjs +1 -1
  240. package/dist/label.mjs +1 -1
  241. package/dist/multi-select-combobox.cjs +1 -1
  242. package/dist/multi-select-combobox.mjs +1 -1
  243. package/dist/password-strength-meter.cjs +1 -1
  244. package/dist/password-strength-meter.mjs +1 -1
  245. package/dist/progress-bar.cjs +1 -1
  246. package/dist/progress-bar.mjs +1 -1
  247. package/dist/radio.cjs +1 -1
  248. package/dist/radio.mjs +1 -1
  249. package/dist/select.cjs +1 -1
  250. package/dist/select.mjs +1 -1
  251. package/dist/sidebar.cjs +1 -1
  252. package/dist/sidebar.mjs +1 -1
  253. package/dist/skeleton.cjs +1 -1
  254. package/dist/skeleton.mjs +1 -1
  255. package/dist/splash-cursor.cjs +1 -1
  256. package/dist/splash-cursor.mjs +1 -1
  257. package/dist/spotlight-card.cjs +1 -1
  258. package/dist/spotlight-card.mjs +1 -1
  259. package/dist/stepper.cjs +1 -1
  260. package/dist/stepper.mjs +1 -1
  261. package/dist/sun-to-moon-button.cjs +1 -1
  262. package/dist/sun-to-moon-button.mjs +1 -1
  263. package/dist/switch.cjs +1 -1
  264. package/dist/switch.mjs +1 -1
  265. package/dist/textarea.cjs +1 -1
  266. package/dist/textarea.mjs +1 -1
  267. package/dist/tooltip.cjs +2 -2
  268. package/dist/tooltip.mjs +1 -1
  269. package/dist/truncated-text.cjs +1 -1
  270. package/dist/truncated-text.mjs +1 -1
  271. package/dist/typography.cjs +1 -1
  272. package/dist/typography.mjs +1 -1
  273. package/dist/utils.cjs +1 -1
  274. package/dist/utils.mjs +1 -1
  275. package/package.json +8 -8
  276. package/dist/chunks/DropdownMenu-C17Zqu_E.mjs.map +0 -1
  277. package/dist/chunks/DropdownMenu-DOvo5pV_.cjs.map +0 -1
  278. package/dist/chunks/calendar-BOBm3dFA.mjs.map +0 -1
  279. package/dist/chunks/calendar-DJkfDhQA.cjs.map +0 -1
  280. package/dist/chunks/charts-C-Qee_JY.mjs.map +0 -1
  281. package/dist/chunks/charts-CZEYcr6X.cjs.map +0 -1
  282. package/dist/chunks/chip-BFg3DJx6.mjs.map +0 -1
  283. package/dist/chunks/chip-CMs73sc5.cjs.map +0 -1
  284. package/dist/chunks/color-palette-BmQC14gE.cjs +0 -789
  285. package/dist/chunks/color-palette-BmQC14gE.cjs.map +0 -1
  286. package/dist/chunks/color-palette-DnX1sODj.mjs +0 -782
  287. package/dist/chunks/color-palette-DnX1sODj.mjs.map +0 -1
  288. package/dist/chunks/combobox-Bcwi33Qx.mjs.map +0 -1
  289. package/dist/chunks/combobox-DRiHHhXL.cjs.map +0 -1
  290. package/dist/chunks/data-table-Biom5rvs.mjs.map +0 -1
  291. package/dist/chunks/data-table-D0BD2sFz.cjs.map +0 -1
  292. package/dist/chunks/drawer-BJsBK6cP.mjs.map +0 -1
  293. package/dist/chunks/drawer-DTRnKChF.cjs.map +0 -1
  294. package/dist/chunks/input-Dox16Ozo.mjs.map +0 -1
  295. package/dist/chunks/input-T4OlFhBc.cjs.map +0 -1
  296. package/dist/chunks/multi-select-combobox-BrFtvCrS.mjs.map +0 -1
  297. package/dist/chunks/multi-select-combobox-BzqYLVpV.cjs.map +0 -1
  298. package/dist/chunks/radio-BiD1ofmq.cjs +0 -50
  299. package/dist/chunks/radio-BiD1ofmq.cjs.map +0 -1
  300. package/dist/chunks/radio-C7Eg3FEp.mjs +0 -44
  301. package/dist/chunks/radio-C7Eg3FEp.mjs.map +0 -1
  302. package/dist/chunks/select-CORFYTvs.cjs.map +0 -1
  303. package/dist/chunks/select-D0GOBB-b.mjs.map +0 -1
  304. package/dist/chunks/sidebar-BrOLz89T.mjs.map +0 -1
  305. package/dist/chunks/sidebar-D9D651F6.cjs.map +0 -1
  306. package/dist/chunks/sun-to-moon-button-DcRX0obV.mjs.map +0 -1
  307. package/dist/chunks/sun-to-moon-button-De0_Sf01.cjs.map +0 -1
  308. package/dist/chunks/switch-C1gKE0m0.mjs.map +0 -1
  309. package/dist/chunks/switch-DPyzVrNh.cjs.map +0 -1
package/README.md CHANGED
@@ -2,6 +2,16 @@
2
2
 
3
3
  Typed React 19 component library for ERP, admin, and SaaS products.
4
4
 
5
+ ## What's New in v0.2.0
6
+
7
+ - **RTL support across all form controls** — `Combobox`, `Select`, `MultiSelectCombobox`, `Label`, `Form`, `PasswordStrengthMeter`, and `Switch` now use CSS logical properties (`ms-*`, `me-*`, `ps-*`, `pe-*`) throughout. No extra configuration needed when the parent carries `dir="rtl"`.
8
+ - **`Switch` RTL + dark mode** — Pass `dir="rtl"` directly on the component (or inherit it from the document). The thumb position and label alignment respond automatically. The unchecked track now uses the correct `--ds-surface-5` design token in both light and dark mode.
9
+ - **`Radio` rewrite** — The native `<input type="radio">` was replaced with a fully custom styled indicator. Selected state and active ring now render correctly in dark mode.
10
+ - **`Drawer` RTL** — Logical CSS properties are used internally so slide direction and spacing flip automatically with `dir="rtl"`.
11
+ - **`DropdownMenu` panel width** — The panel is now `min-w-max`, so it no longer collapses narrower than its content in RTL and tight-layout contexts.
12
+ - **`StatCard` size variants** — Three sizes available: `"sm"`, `"md"` (default), and `"lg"`. `sm` hides the chart slot; `lg` shows a legend row in the header.
13
+ - **`PositiveNegativeBarChart`** — Border radius is now applied to the free end of every bar (away from the zero line), for both positive and negative bars in horizontal layout.
14
+
5
15
  This package is designed to be consumed from a different project, not only inside this monorepo. It ships compiled styles, typed components, root imports, subpath imports, icons, helpers, machine-readable docs metadata, and a publishable npm package surface.
6
16
 
7
17
  Live docs: [daniel-heydari-dev.github.io/erp-pro-ui](https://daniel-heydari-dev.github.io/erp-pro-ui/)
@@ -215,6 +225,86 @@ import { DropdownMenu } from "erp-pro-ui";
215
225
  </DropdownMenu>;
216
226
  ```
217
227
 
228
+ ## Dashboard Sidebar Shell
229
+
230
+ Use `DashboardSidebarShell` when you want the exact dashboard behavior: a top header connected to a responsive sidebar, mobile hamburger control, RTL support, and customization slots.
231
+
232
+ ```tsx
233
+ import {
234
+ BellIcon,
235
+ Button,
236
+ DashboardSidebarShell,
237
+ FullScreenIcon,
238
+ HamburgerIcon,
239
+ type SidebarItem,
240
+ } from "erp-pro-ui";
241
+
242
+ const items: SidebarItem[] = [
243
+ { id: "dashboard", label: "داشبورد", href: "/dashboard", active: true },
244
+ { id: "inventory", label: "انبار", href: "/inventory" },
245
+ { id: "settings", label: "تنظیمات", href: "/settings" },
246
+ ];
247
+
248
+ export function DashboardLayout({ children }: { children: React.ReactNode }) {
249
+ return (
250
+ <DashboardSidebarShell
251
+ items={items}
252
+ direction="rtl"
253
+ breadcrumb="صفحات / داشبورد"
254
+ title="داشبورد"
255
+ brand={<strong>ERPPRO</strong>}
256
+ sidebarFooter={<Button className="w-full">ارتقای پلن</Button>}
257
+ sidebarClassName="border-ds-border-2/60"
258
+ headerActions={({ isSidebarOpen, toggleSidebar, isRtl }) => (
259
+ <>
260
+ <Button
261
+ variant="tertiary"
262
+ size="small"
263
+ className="h-9 w-9 rounded-full p-0! xl:hidden"
264
+ onClick={toggleSidebar}
265
+ aria-label="Toggle sidebar"
266
+ >
267
+ <HamburgerIcon isOpen={isSidebarOpen} />
268
+ </Button>
269
+ <Button
270
+ variant="tertiary"
271
+ size="small"
272
+ className="relative h-9 w-9 rounded-full p-0!"
273
+ aria-label="Open notifications"
274
+ >
275
+ <BellIcon className="h-5 w-5" />
276
+ <span
277
+ className={
278
+ isRtl
279
+ ? "absolute -left-0.5 -top-0.5"
280
+ : "absolute -right-0.5 -top-0.5"
281
+ }
282
+ >
283
+ 3
284
+ </span>
285
+ </Button>
286
+ <Button
287
+ variant="tertiary"
288
+ size="small"
289
+ className="h-9 w-9 rounded-full p-0!"
290
+ >
291
+ <FullScreenIcon className="h-5 w-5" />
292
+ </Button>
293
+ </>
294
+ )}
295
+ >
296
+ {children}
297
+ </DashboardSidebarShell>
298
+ );
299
+ }
300
+ ```
301
+
302
+ Customization props:
303
+
304
+ - Header: `header`, `headerLeading`, `headerActions`, `headerClassName`, `headerTitleClassName`, `headerActionsClassName`
305
+ - Sidebar: `brand`, `sidebarNavbar`, `sidebarFooter`, `sidebarClassName`, `sidebarLinksClassName`, `sidebarItemClassName`, `sidebarActiveItemClassName`, `sidebarOverlayClassName`
306
+ - Behavior: `open`, `defaultOpen`, `onOpenChange`, `direction`, `activePath`, `onItemSelect`
307
+
218
308
  ## Colors And Fonts In Another Project
219
309
 
220
310
  The library now ships a two-layer theme contract so another project can use the same tokens without copying theme config:
@@ -641,6 +731,10 @@ The tables below document the public surface you can use from another project.
641
731
  | `NeonLineChart` | `erp-pro-ui/charts` | Glowing line charts |
642
732
  | `StackedBarChart` | `erp-pro-ui/charts` | Stacked comparisons |
643
733
  | `ThinBreakdownBar` | `erp-pro-ui/charts` | Compact segmented metric bars |
734
+ | `PositiveNegativeBarChart`, `PositiveNegativeBarChartData` | `erp-pro-ui/charts` | Horizontal bar chart with positive/negative bars |
735
+ | `StatCard`, `StatCardProps`, `StatCardSize`, `StatCardLegendItem` | root import only | KPI stat card with sm / md / lg size variants |
736
+ | `ChartCard` | root import only | Dashboard chart container card |
737
+ | `TopProductsCard`, `TopProductsCardProps`, `TopProductItem` | root import only | Ranked list card for top items |
644
738
 
645
739
  ### Visual Effects And Text Components
646
740
 
@@ -1,3 +1,3 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_ascii_text = require("./chunks/ascii-text-OnPOTd2I.cjs");
2
+ const require_ascii_text = require("./chunks/ascii-text-BFnpVur6.cjs");
3
3
  exports.ASCIIText = require_ascii_text.ASCIIText;
@@ -1,2 +1,2 @@
1
- import { t as ASCIIText } from "./chunks/ascii-text-OBwVLFDC.mjs";
1
+ import { t as ASCIIText } from "./chunks/ascii-text-Bdy4C5rU.mjs";
2
2
  export { ASCIIText };
@@ -1,4 +1,4 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_background_gradient_animation = require("./chunks/background-gradient-animation-II9hdrgB.cjs");
2
+ const require_background_gradient_animation = require("./chunks/background-gradient-animation-CiNdmA61.cjs");
3
3
  exports.BackgroundGradientAnimation = require_background_gradient_animation.BackgroundGradientAnimation;
4
4
  exports.BackgroundGradientAnimationDemo = require_background_gradient_animation.BackgroundGradientAnimationDemo;
@@ -1,2 +1,2 @@
1
- import { n as BackgroundGradientAnimation, t as BackgroundGradientAnimationDemo } from "./chunks/background-gradient-animation-DpKJ3ecq.mjs";
1
+ import { n as BackgroundGradientAnimation, t as BackgroundGradientAnimationDemo } from "./chunks/background-gradient-animation-BR9wx6Z8.mjs";
2
2
  export { BackgroundGradientAnimation, BackgroundGradientAnimationDemo };
@@ -1,3 +1,3 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_button_hover_border_gradient = require("./chunks/button-hover-border-gradient-DX2lBG5C.cjs");
2
+ const require_button_hover_border_gradient = require("./chunks/button-hover-border-gradient-ssmwU5-U.cjs");
3
3
  exports.ButtonHoverBorderGradient = require_button_hover_border_gradient.ButtonHoverBorderGradient;
@@ -1,2 +1,2 @@
1
- import { t as ButtonHoverBorderGradient } from "./chunks/button-hover-border-gradient-DFppVRI4.mjs";
1
+ import { t as ButtonHoverBorderGradient } from "./chunks/button-hover-border-gradient-DnFvjNNw.mjs";
2
2
  export { ButtonHoverBorderGradient };
package/dist/button.cjs CHANGED
@@ -1,3 +1,3 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_button = require("./chunks/button-xqernofO.cjs");
2
+ const require_button = require("./chunks/button-C4MXPxsC.cjs");
3
3
  exports.Button = require_button.Button;
package/dist/button.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import { t as Button } from "./chunks/button-DddUhuR-.mjs";
1
+ import { t as Button } from "./chunks/button-A6UTvrOu.mjs";
2
2
  export { Button };
package/dist/calendar.cjs CHANGED
@@ -1,3 +1,3 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_calendar = require("./chunks/calendar-DJkfDhQA.cjs");
2
+ const require_calendar = require("./chunks/calendar-CQJgQ5H_.cjs");
3
3
  exports.Calendar = require_calendar.Calendar;
package/dist/calendar.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import { t as Calendar } from "./chunks/calendar-BOBm3dFA.mjs";
1
+ import { t as Calendar } from "./chunks/calendar-5XzPqKbE.mjs";
2
2
  export { Calendar };
package/dist/carousel.cjs CHANGED
@@ -1,3 +1,3 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_carousel = require("./chunks/carousel-F4drTOr6.cjs");
2
+ const require_carousel = require("./chunks/carousel-Cv0m1Pp5.cjs");
3
3
  exports.Carousel = require_carousel.Carousel;
package/dist/carousel.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import { t as Carousel } from "./chunks/carousel-DUqOaYvs.mjs";
1
+ import { t as Carousel } from "./chunks/carousel-Dd4rp-jr.mjs";
2
2
  export { Carousel };
package/dist/charts.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_charts = require("./chunks/charts-CZEYcr6X.cjs");
2
+ const require_charts = require("./chunks/charts-BmIV-mJy.cjs");
3
3
  exports.AreaChart = require_charts.AreaChart;
4
4
  exports.BarChart = require_charts.BarChart;
5
5
  exports.MiniNeonSparkline = require_charts.MiniNeonSparkline;
package/dist/charts.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import { a as ThinBreakdownBar, c as NeonLineChart, d as getChartPalette, i as AreaChart, l as chartColorTokens, n as PositiveNegativeBarChart, o as StackedBarChart, r as BarChart, s as MiniNeonSparkline, t as PieChart, u as getChartColorVar } from "./chunks/charts-C-Qee_JY.mjs";
1
+ import { a as ThinBreakdownBar, c as NeonLineChart, d as getChartPalette, i as AreaChart, l as chartColorTokens, n as PositiveNegativeBarChart, o as StackedBarChart, r as BarChart, s as MiniNeonSparkline, t as PieChart, u as getChartColorVar } from "./chunks/charts-DkVu0rFc.mjs";
2
2
  export { AreaChart, BarChart, MiniNeonSparkline, NeonLineChart, PieChart, PositiveNegativeBarChart, StackedBarChart, ThinBreakdownBar, chartColorTokens, getChartColorVar, getChartPalette };
package/dist/chip.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_chip = require("./chunks/chip-CMs73sc5.cjs");
2
+ const require_chip = require("./chunks/chip-B0YzBwkz.cjs");
3
3
  exports.Chip = require_chip.Chip;
4
4
  exports.SplitChip = require_chip.SplitChip;
5
5
  exports.StatusDotChip = require_chip.StatusDotChip;
package/dist/chip.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import { n as StatusDotChip, r as Chip, t as SplitChip } from "./chunks/chip-BFg3DJx6.mjs";
1
+ import { n as StatusDotChip, r as Chip, t as SplitChip } from "./chunks/chip-CqcdcSs2.mjs";
2
2
  export { Chip, SplitChip, StatusDotChip };
@@ -1,3 +1,3 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_chroma_grid = require("./chunks/chroma-grid-tJX7CzCS.cjs");
2
+ const require_chroma_grid = require("./chunks/chroma-grid-DcZ9f4Ui.cjs");
3
3
  exports.ChromaGrid = require_chroma_grid.ChromaGrid;
@@ -1,2 +1,2 @@
1
- import { t as ChromaGrid } from "./chunks/chroma-grid-DlY9hIRI.mjs";
1
+ import { t as ChromaGrid } from "./chunks/chroma-grid-opB2DBtS.mjs";
2
2
  export { ChromaGrid };
@@ -1,9 +1,9 @@
1
1
  require("./chunk-B_GkZjkl.cjs");
2
- const require_utils = require("./utils-B4SmmY4J.cjs");
2
+ const require_utils = require("./utils-LRbEQHYs.cjs");
3
3
  let react = require("react");
4
4
  let react_jsx_runtime = require("react/jsx-runtime");
5
5
  //#region src/components/overlays/dropdown-menu/DropdownMenu.tsx
6
- function DropdownMenu({ trigger, children, open, onOpenChange, className, panelClassName, animationClassName, closeOnItemClick = false }) {
6
+ function DropdownMenu({ trigger, children, open, onOpenChange, className, panelClassName, animationClassName, closeOnItemClick = false, align }) {
7
7
  const wrapperRef = (0, react.useRef)(null);
8
8
  const [internalOpen, setInternalOpen] = (0, react.useState)(false);
9
9
  const isControlled = open !== void 0;
@@ -27,18 +27,19 @@ function DropdownMenu({ trigger, children, open, onOpenChange, className, panelC
27
27
  document.removeEventListener("keydown", handleKeyDown);
28
28
  };
29
29
  }, []);
30
+ const defaultAnimation = align === "start" ? "origin-top-right" : "origin-top-right";
30
31
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
31
32
  ref: wrapperRef,
32
33
  className: require_utils.mergeClassNames("relative inline-flex", className),
33
34
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
34
- className: "inline-flex",
35
+ className: "flex w-full",
35
36
  onMouseDown: (event) => {
36
37
  event.preventDefault();
37
38
  setOpen((current) => !current);
38
39
  },
39
40
  children: trigger
40
41
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
41
- className: require_utils.mergeClassNames("absolute z-[1200] transition-all duration-300 ease-in-out", animationClassName ?? "origin-top-right", resolvedOpen ? "scale-100" : "scale-0", panelClassName),
42
+ className: require_utils.mergeClassNames("absolute z-1200 min-w-max rounded-lg border border-ds-border-2 bg-ds-surface-1 shadow-3 backdrop-blur-xl", "top-full mt-1 transition-all duration-300 ease-in-out", align === "end" ? "end-5" : align === "start" ? "start-5" : "", animationClassName ?? defaultAnimation, resolvedOpen ? "scale-100" : "scale-0", panelClassName),
42
43
  onClick: () => {
43
44
  if (closeOnItemClick) setOpen(false);
44
45
  },
@@ -54,4 +55,4 @@ Object.defineProperty(exports, "DropdownMenu", {
54
55
  }
55
56
  });
56
57
 
57
- //# sourceMappingURL=DropdownMenu-DOvo5pV_.cjs.map
58
+ //# sourceMappingURL=DropdownMenu-BDrNYO-D.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DropdownMenu-BDrNYO-D.cjs","names":[],"sources":["../../src/components/overlays/dropdown-menu/DropdownMenu.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\n\nimport { mergeClassNames } from \"../../../utils\";\nimport type { DropdownMenuProps } from \"./types\";\n\nexport function DropdownMenu({\n trigger,\n children,\n open,\n onOpenChange,\n className,\n panelClassName,\n animationClassName,\n closeOnItemClick = false,\n align,\n}: DropdownMenuProps) {\n const wrapperRef = useRef<HTMLDivElement>(null);\n const [internalOpen, setInternalOpen] = useState(false);\n const isControlled = open !== undefined;\n const resolvedOpen = isControlled ? open : internalOpen;\n\n const setOpen = (nextOpen: boolean | ((current: boolean) => boolean)) => {\n const finalValue =\n typeof nextOpen === \"function\"\n ? nextOpen(resolvedOpen)\n : nextOpen;\n\n if (!isControlled) {\n setInternalOpen(finalValue);\n }\n\n onOpenChange?.(finalValue);\n };\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (wrapperRef.current && !wrapperRef.current.contains(event.target as Node)) {\n setOpen(false);\n }\n }\n\n function handleKeyDown(event: KeyboardEvent) {\n if (event.key === \"Escape\") {\n setOpen(false);\n }\n }\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n document.addEventListener(\"keydown\", handleKeyDown);\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, []);\n\n const defaultAnimation = align === \"start\" ? \"origin-top-right\": \"origin-top-right\";\n\n return (\n <div ref={wrapperRef} className={mergeClassNames(\"relative inline-flex\", className)}>\n <div\n className=\"flex w-full\"\n onMouseDown={(event) => {\n event.preventDefault();\n setOpen((current) => !current);\n }}\n >\n {trigger}\n </div>\n\n <div\n className={mergeClassNames(\n \"absolute z-1200 min-w-max rounded-lg border border-ds-border-2 bg-ds-surface-1 shadow-3 backdrop-blur-xl\",\n \"top-full mt-1 transition-all duration-300 ease-in-out\",\n align === \"end\" ? \"end-5\" : align === \"start\" ? \"start-5\" : \"\",\n animationClassName ?? defaultAnimation,\n resolvedOpen ? \"scale-100\" : \"scale-0\",\n panelClassName,\n )}\n onClick={() => {\n if (closeOnItemClick) {\n setOpen(false);\n }\n }}\n >\n {children}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;AAKA,SAAgB,aAAa,EAC3B,SACA,UACA,MACA,cACA,WACA,gBACA,oBACA,mBAAmB,OACnB,SACoB;CACpB,MAAM,cAAA,GAAA,MAAA,QAAoC,KAAK;CAC/C,MAAM,CAAC,cAAc,oBAAA,GAAA,MAAA,UAA4B,MAAM;CACvD,MAAM,eAAe,SAAS,KAAA;CAC9B,MAAM,eAAe,eAAe,OAAO;CAE3C,MAAM,WAAW,aAAwD;EACvE,MAAM,aACJ,OAAO,aAAa,aAChB,SAAS,aAAa,GACtB;AAEN,MAAI,CAAC,aACH,iBAAgB,WAAW;AAG7B,iBAAe,WAAW;;AAG5B,EAAA,GAAA,MAAA,iBAAgB;EACd,SAAS,mBAAmB,OAAmB;AAC7C,OAAI,WAAW,WAAW,CAAC,WAAW,QAAQ,SAAS,MAAM,OAAe,CAC1E,SAAQ,MAAM;;EAIlB,SAAS,cAAc,OAAsB;AAC3C,OAAI,MAAM,QAAQ,SAChB,SAAQ,MAAM;;AAIlB,WAAS,iBAAiB,aAAa,mBAAmB;AAC1D,WAAS,iBAAiB,WAAW,cAAc;AAEnD,eAAa;AACX,YAAS,oBAAoB,aAAa,mBAAmB;AAC7D,YAAS,oBAAoB,WAAW,cAAc;;IAEvD,EAAE,CAAC;CAEN,MAAM,mBAAmB,UAAU,UAAW,qBAAoB;AAElE,QACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;EAAK,KAAK;EAAY,WAAW,cAAA,gBAAgB,wBAAwB,UAAU;YAAnF,CACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;GACE,WAAU;GACV,cAAc,UAAU;AACtB,UAAM,gBAAgB;AACtB,aAAS,YAAY,CAAC,QAAQ;;aAG/B;GACG,CAAA,EAEN,iBAAA,GAAA,kBAAA,KAAC,OAAD;GACE,WAAW,cAAA,gBACT,4GACA,yDACA,UAAU,QAAQ,UAAU,UAAU,UAAU,YAAY,IAC5D,sBAAsB,kBACtB,eAAe,cAAc,WAC7B,eACD;GACD,eAAe;AACb,QAAI,iBACF,SAAQ,MAAM;;GAIjB;GACG,CAAA,CACF"}
@@ -1,8 +1,8 @@
1
- import { n as mergeClassNames } from "./utils-ati1KkDb.mjs";
1
+ import { n as mergeClassNames } from "./utils-7S0u48mU.mjs";
2
2
  import { useEffect, useRef, useState } from "react";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  //#region src/components/overlays/dropdown-menu/DropdownMenu.tsx
5
- function DropdownMenu({ trigger, children, open, onOpenChange, className, panelClassName, animationClassName, closeOnItemClick = false }) {
5
+ function DropdownMenu({ trigger, children, open, onOpenChange, className, panelClassName, animationClassName, closeOnItemClick = false, align }) {
6
6
  const wrapperRef = useRef(null);
7
7
  const [internalOpen, setInternalOpen] = useState(false);
8
8
  const isControlled = open !== void 0;
@@ -26,18 +26,19 @@ function DropdownMenu({ trigger, children, open, onOpenChange, className, panelC
26
26
  document.removeEventListener("keydown", handleKeyDown);
27
27
  };
28
28
  }, []);
29
+ const defaultAnimation = align === "start" ? "origin-top-right" : "origin-top-right";
29
30
  return /* @__PURE__ */ jsxs("div", {
30
31
  ref: wrapperRef,
31
32
  className: mergeClassNames("relative inline-flex", className),
32
33
  children: [/* @__PURE__ */ jsx("div", {
33
- className: "inline-flex",
34
+ className: "flex w-full",
34
35
  onMouseDown: (event) => {
35
36
  event.preventDefault();
36
37
  setOpen((current) => !current);
37
38
  },
38
39
  children: trigger
39
40
  }), /* @__PURE__ */ jsx("div", {
40
- className: mergeClassNames("absolute z-[1200] transition-all duration-300 ease-in-out", animationClassName ?? "origin-top-right", resolvedOpen ? "scale-100" : "scale-0", panelClassName),
41
+ className: mergeClassNames("absolute z-1200 min-w-max rounded-lg border border-ds-border-2 bg-ds-surface-1 shadow-3 backdrop-blur-xl", "top-full mt-1 transition-all duration-300 ease-in-out", align === "end" ? "end-5" : align === "start" ? "start-5" : "", animationClassName ?? defaultAnimation, resolvedOpen ? "scale-100" : "scale-0", panelClassName),
41
42
  onClick: () => {
42
43
  if (closeOnItemClick) setOpen(false);
43
44
  },
@@ -48,4 +49,4 @@ function DropdownMenu({ trigger, children, open, onOpenChange, className, panelC
48
49
  //#endregion
49
50
  export { DropdownMenu as t };
50
51
 
51
- //# sourceMappingURL=DropdownMenu-C17Zqu_E.mjs.map
52
+ //# sourceMappingURL=DropdownMenu-BtTOri-A.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DropdownMenu-BtTOri-A.mjs","names":[],"sources":["../../src/components/overlays/dropdown-menu/DropdownMenu.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\n\nimport { mergeClassNames } from \"../../../utils\";\nimport type { DropdownMenuProps } from \"./types\";\n\nexport function DropdownMenu({\n trigger,\n children,\n open,\n onOpenChange,\n className,\n panelClassName,\n animationClassName,\n closeOnItemClick = false,\n align,\n}: DropdownMenuProps) {\n const wrapperRef = useRef<HTMLDivElement>(null);\n const [internalOpen, setInternalOpen] = useState(false);\n const isControlled = open !== undefined;\n const resolvedOpen = isControlled ? open : internalOpen;\n\n const setOpen = (nextOpen: boolean | ((current: boolean) => boolean)) => {\n const finalValue =\n typeof nextOpen === \"function\"\n ? nextOpen(resolvedOpen)\n : nextOpen;\n\n if (!isControlled) {\n setInternalOpen(finalValue);\n }\n\n onOpenChange?.(finalValue);\n };\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (wrapperRef.current && !wrapperRef.current.contains(event.target as Node)) {\n setOpen(false);\n }\n }\n\n function handleKeyDown(event: KeyboardEvent) {\n if (event.key === \"Escape\") {\n setOpen(false);\n }\n }\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n document.addEventListener(\"keydown\", handleKeyDown);\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, []);\n\n const defaultAnimation = align === \"start\" ? \"origin-top-right\": \"origin-top-right\";\n\n return (\n <div ref={wrapperRef} className={mergeClassNames(\"relative inline-flex\", className)}>\n <div\n className=\"flex w-full\"\n onMouseDown={(event) => {\n event.preventDefault();\n setOpen((current) => !current);\n }}\n >\n {trigger}\n </div>\n\n <div\n className={mergeClassNames(\n \"absolute z-1200 min-w-max rounded-lg border border-ds-border-2 bg-ds-surface-1 shadow-3 backdrop-blur-xl\",\n \"top-full mt-1 transition-all duration-300 ease-in-out\",\n align === \"end\" ? \"end-5\" : align === \"start\" ? \"start-5\" : \"\",\n animationClassName ?? defaultAnimation,\n resolvedOpen ? \"scale-100\" : \"scale-0\",\n panelClassName,\n )}\n onClick={() => {\n if (closeOnItemClick) {\n setOpen(false);\n }\n }}\n >\n {children}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;AAKA,SAAgB,aAAa,EAC3B,SACA,UACA,MACA,cACA,WACA,gBACA,oBACA,mBAAmB,OACnB,SACoB;CACpB,MAAM,aAAa,OAAuB,KAAK;CAC/C,MAAM,CAAC,cAAc,mBAAmB,SAAS,MAAM;CACvD,MAAM,eAAe,SAAS,KAAA;CAC9B,MAAM,eAAe,eAAe,OAAO;CAE3C,MAAM,WAAW,aAAwD;EACvE,MAAM,aACJ,OAAO,aAAa,aAChB,SAAS,aAAa,GACtB;AAEN,MAAI,CAAC,aACH,iBAAgB,WAAW;AAG7B,iBAAe,WAAW;;AAG5B,iBAAgB;EACd,SAAS,mBAAmB,OAAmB;AAC7C,OAAI,WAAW,WAAW,CAAC,WAAW,QAAQ,SAAS,MAAM,OAAe,CAC1E,SAAQ,MAAM;;EAIlB,SAAS,cAAc,OAAsB;AAC3C,OAAI,MAAM,QAAQ,SAChB,SAAQ,MAAM;;AAIlB,WAAS,iBAAiB,aAAa,mBAAmB;AAC1D,WAAS,iBAAiB,WAAW,cAAc;AAEnD,eAAa;AACX,YAAS,oBAAoB,aAAa,mBAAmB;AAC7D,YAAS,oBAAoB,WAAW,cAAc;;IAEvD,EAAE,CAAC;CAEN,MAAM,mBAAmB,UAAU,UAAW,qBAAoB;AAElE,QACE,qBAAC,OAAD;EAAK,KAAK;EAAY,WAAW,gBAAgB,wBAAwB,UAAU;YAAnF,CACE,oBAAC,OAAD;GACE,WAAU;GACV,cAAc,UAAU;AACtB,UAAM,gBAAgB;AACtB,aAAS,YAAY,CAAC,QAAQ;;aAG/B;GACG,CAAA,EAEN,oBAAC,OAAD;GACE,WAAW,gBACT,4GACA,yDACA,UAAU,QAAQ,UAAU,UAAU,UAAU,YAAY,IAC5D,sBAAsB,kBACtB,eAAe,cAAc,WAC7B,eACD;GACD,eAAe;AACb,QAAI,iBACF,SAAQ,MAAM;;GAIjB;GACG,CAAA,CACF"}
@@ -1,5 +1,5 @@
1
1
  require("./chunk-B_GkZjkl.cjs");
2
- const require_utils = require("./utils-B4SmmY4J.cjs");
2
+ const require_utils = require("./utils-LRbEQHYs.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");
@@ -72,4 +72,4 @@ Object.defineProperty(exports, "HoverBorderGradient", {
72
72
  }
73
73
  });
74
74
 
75
- //# sourceMappingURL=HoverBorderGradient-C5D6lGg0.cjs.map
75
+ //# sourceMappingURL=HoverBorderGradient-9pfvBoHR.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"HoverBorderGradient-C5D6lGg0.cjs","names":[],"sources":["../../src/components/effects/hover-border-gradient/HoverBorderGradient.tsx"],"sourcesContent":["import { mergeClassNames } from \"../../../utils\";\nimport { motion } from \"framer-motion\";\nimport { useCallback, useEffect, useState } from \"react\";\n\ntype Direction = \"TOP\" | \"LEFT\" | \"BOTTOM\" | \"RIGHT\";\n\ntype HoverBorderGradientProps =\n React.ButtonHTMLAttributes<HTMLButtonElement> & {\n containerClassName?: string;\n className?: string;\n duration?: number;\n clockwise?: boolean;\n children?: React.ReactNode;\n };\n\nconst movingMap: Record<Direction, string> = {\n TOP: \"radial-gradient(50.7% 50% at 50% 0%, var(--ds-gradient-accent-hover) 0%, transparent 100%)\",\n LEFT: \"radial-gradient(25.6% 43.1% at 0% 50%, var(--ds-gradient-accent-hover) 0%, transparent 100%)\",\n BOTTOM:\n \"radial-gradient(50.7% 50% at 50% 100%, var(--ds-gradient-accent-hover) 0%, transparent 100%)\",\n RIGHT:\n \"radial-gradient(25.2% 41% at 100% 50%, var(--ds-gradient-accent-hover) 0%, transparent 100%)\",\n};\n\nconst highlight = `radial-gradient(85% 181% at 50% 50%, var(--ds-gradient-accent-hover) 0%, transparent 100%)`;\n\nexport function HoverBorderGradient({\n containerClassName,\n className,\n duration = 1,\n clockwise = true,\n children,\n ...props\n}: HoverBorderGradientProps) {\n const [hovered, setHovered] = useState(false);\n const [direction, setDirection] = useState<Direction>(\"TOP\");\n\n const rotateDirection = useCallback(\n (current: Direction): Direction => {\n const directions: Direction[] = [\"TOP\", \"LEFT\", \"BOTTOM\", \"RIGHT\"];\n const index = directions.indexOf(current);\n const nextIndex = clockwise\n ? (index - 1 + directions.length) % directions.length\n : (index + 1) % directions.length;\n return directions[nextIndex];\n },\n [clockwise],\n );\n\n useEffect(() => {\n if (!hovered) {\n const interval = setInterval(() => {\n setDirection((prevState) => rotateDirection(prevState));\n }, duration * 1000);\n return () => clearInterval(interval);\n }\n }, [hovered, duration, rotateDirection]);\n\n const handleMouseEnter = () => setHovered(true);\n const handleMouseLeave = () => setHovered(false);\n\n return (\n <button\n type=\"button\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n className={mergeClassNames(\n \"relative flex h-min w-fit flex-col flex-nowrap content-center items-center justify-center gap-10 overflow-visible rounded-lg border border-ds-border-2 p-px transition duration-500\",\n containerClassName,\n )}\n {...props}\n >\n <div\n className={mergeClassNames(\n \"bg-ds-surface-1 text-ds-1 z-10 w-auto rounded-[inherit] px-4 py-2\",\n className,\n )}\n >\n {children}\n </div>\n <motion.div\n className={mergeClassNames(\n \"absolute inset-0 z-0 flex-none overflow-hidden rounded-[inherit]\",\n )}\n style={{\n filter: \"blur(2px)\",\n position: \"absolute\",\n width: \"100%\",\n height: \"100%\",\n }}\n initial={{ background: movingMap[direction] }}\n animate={{\n background: hovered\n ? [movingMap[direction], highlight]\n : movingMap[direction],\n }}\n transition={{ ease: \"linear\", duration: duration ?? 1 }}\n />\n </button>\n );\n}\n"],"mappings":";;;;;;AAeA,IAAM,YAAuC;CAC3C,KAAK;CACL,MAAM;CACN,QACE;CACF,OACE;CACH;AAED,IAAM,YAAY;AAElB,SAAgB,oBAAoB,EAClC,oBACA,WACA,WAAW,GACX,YAAY,MACZ,UACA,GAAG,SACwB;CAC3B,MAAM,CAAC,SAAS,eAAA,GAAA,MAAA,UAAuB,MAAM;CAC7C,MAAM,CAAC,WAAW,iBAAA,GAAA,MAAA,UAAoC,MAAM;CAE5D,MAAM,mBAAA,GAAA,MAAA,cACH,YAAkC;EACjC,MAAM,aAA0B;GAAC;GAAO;GAAQ;GAAU;GAAQ;EAClE,MAAM,QAAQ,WAAW,QAAQ,QAAQ;AAIzC,SAAO,WAHW,aACb,QAAQ,IAAI,WAAW,UAAU,WAAW,UAC5C,QAAQ,KAAK,WAAW;IAG/B,CAAC,UAAU,CACZ;AAED,EAAA,GAAA,MAAA,iBAAgB;AACd,MAAI,CAAC,SAAS;GACZ,MAAM,WAAW,kBAAkB;AACjC,kBAAc,cAAc,gBAAgB,UAAU,CAAC;MACtD,WAAW,IAAK;AACnB,gBAAa,cAAc,SAAS;;IAErC;EAAC;EAAS;EAAU;EAAgB,CAAC;CAExC,MAAM,yBAAyB,WAAW,KAAK;CAC/C,MAAM,yBAAyB,WAAW,MAAM;AAEhD,QACE,iBAAA,GAAA,kBAAA,MAAC,UAAD;EACE,MAAK;EACL,cAAc;EACd,cAAc;EACd,WAAW,cAAA,gBACT,uLACA,mBACD;EACD,GAAI;YARN,CAUE,iBAAA,GAAA,kBAAA,KAAC,OAAD;GACE,WAAW,cAAA,gBACT,qEACA,UACD;GAEA;GACG,CAAA,EACN,iBAAA,GAAA,kBAAA,KAAC,cAAA,OAAO,KAAR;GACE,WAAW,cAAA,gBACT,mEACD;GACD,OAAO;IACL,QAAQ;IACR,UAAU;IACV,OAAO;IACP,QAAQ;IACT;GACD,SAAS,EAAE,YAAY,UAAU,YAAY;GAC7C,SAAS,EACP,YAAY,UACR,CAAC,UAAU,YAAY,UAAU,GACjC,UAAU,YACf;GACD,YAAY;IAAE,MAAM;IAAU,UAAU,YAAY;IAAG;GACvD,CAAA,CACK"}
1
+ {"version":3,"file":"HoverBorderGradient-9pfvBoHR.cjs","names":[],"sources":["../../src/components/effects/hover-border-gradient/HoverBorderGradient.tsx"],"sourcesContent":["import { mergeClassNames } from \"../../../utils\";\nimport { motion } from \"framer-motion\";\nimport { useCallback, useEffect, useState } from \"react\";\n\ntype Direction = \"TOP\" | \"LEFT\" | \"BOTTOM\" | \"RIGHT\";\n\ntype HoverBorderGradientProps =\n React.ButtonHTMLAttributes<HTMLButtonElement> & {\n containerClassName?: string;\n className?: string;\n duration?: number;\n clockwise?: boolean;\n children?: React.ReactNode;\n };\n\nconst movingMap: Record<Direction, string> = {\n TOP: \"radial-gradient(50.7% 50% at 50% 0%, var(--ds-gradient-accent-hover) 0%, transparent 100%)\",\n LEFT: \"radial-gradient(25.6% 43.1% at 0% 50%, var(--ds-gradient-accent-hover) 0%, transparent 100%)\",\n BOTTOM:\n \"radial-gradient(50.7% 50% at 50% 100%, var(--ds-gradient-accent-hover) 0%, transparent 100%)\",\n RIGHT:\n \"radial-gradient(25.2% 41% at 100% 50%, var(--ds-gradient-accent-hover) 0%, transparent 100%)\",\n};\n\nconst highlight = `radial-gradient(85% 181% at 50% 50%, var(--ds-gradient-accent-hover) 0%, transparent 100%)`;\n\nexport function HoverBorderGradient({\n containerClassName,\n className,\n duration = 1,\n clockwise = true,\n children,\n ...props\n}: HoverBorderGradientProps) {\n const [hovered, setHovered] = useState(false);\n const [direction, setDirection] = useState<Direction>(\"TOP\");\n\n const rotateDirection = useCallback(\n (current: Direction): Direction => {\n const directions: Direction[] = [\"TOP\", \"LEFT\", \"BOTTOM\", \"RIGHT\"];\n const index = directions.indexOf(current);\n const nextIndex = clockwise\n ? (index - 1 + directions.length) % directions.length\n : (index + 1) % directions.length;\n return directions[nextIndex];\n },\n [clockwise],\n );\n\n useEffect(() => {\n if (!hovered) {\n const interval = setInterval(() => {\n setDirection((prevState) => rotateDirection(prevState));\n }, duration * 1000);\n return () => clearInterval(interval);\n }\n }, [hovered, duration, rotateDirection]);\n\n const handleMouseEnter = () => setHovered(true);\n const handleMouseLeave = () => setHovered(false);\n\n return (\n <button\n type=\"button\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n className={mergeClassNames(\n \"relative flex h-min w-fit flex-col flex-nowrap content-center items-center justify-center gap-10 overflow-visible rounded-lg border border-ds-border-2 p-px transition duration-500\",\n containerClassName,\n )}\n {...props}\n >\n <div\n className={mergeClassNames(\n \"bg-ds-surface-1 text-ds-1 z-10 w-auto rounded-[inherit] px-4 py-2\",\n className,\n )}\n >\n {children}\n </div>\n <motion.div\n className={mergeClassNames(\n \"absolute inset-0 z-0 flex-none overflow-hidden rounded-[inherit]\",\n )}\n style={{\n filter: \"blur(2px)\",\n position: \"absolute\",\n width: \"100%\",\n height: \"100%\",\n }}\n initial={{ background: movingMap[direction] }}\n animate={{\n background: hovered\n ? [movingMap[direction], highlight]\n : movingMap[direction],\n }}\n transition={{ ease: \"linear\", duration: duration ?? 1 }}\n />\n </button>\n );\n}\n"],"mappings":";;;;;;AAeA,IAAM,YAAuC;CAC3C,KAAK;CACL,MAAM;CACN,QACE;CACF,OACE;CACH;AAED,IAAM,YAAY;AAElB,SAAgB,oBAAoB,EAClC,oBACA,WACA,WAAW,GACX,YAAY,MACZ,UACA,GAAG,SACwB;CAC3B,MAAM,CAAC,SAAS,eAAA,GAAA,MAAA,UAAuB,MAAM;CAC7C,MAAM,CAAC,WAAW,iBAAA,GAAA,MAAA,UAAoC,MAAM;CAE5D,MAAM,mBAAA,GAAA,MAAA,cACH,YAAkC;EACjC,MAAM,aAA0B;GAAC;GAAO;GAAQ;GAAU;GAAQ;EAClE,MAAM,QAAQ,WAAW,QAAQ,QAAQ;AAIzC,SAAO,WAHW,aACb,QAAQ,IAAI,WAAW,UAAU,WAAW,UAC5C,QAAQ,KAAK,WAAW;IAG/B,CAAC,UAAU,CACZ;AAED,EAAA,GAAA,MAAA,iBAAgB;AACd,MAAI,CAAC,SAAS;GACZ,MAAM,WAAW,kBAAkB;AACjC,kBAAc,cAAc,gBAAgB,UAAU,CAAC;MACtD,WAAW,IAAK;AACnB,gBAAa,cAAc,SAAS;;IAErC;EAAC;EAAS;EAAU;EAAgB,CAAC;CAExC,MAAM,yBAAyB,WAAW,KAAK;CAC/C,MAAM,yBAAyB,WAAW,MAAM;AAEhD,QACE,iBAAA,GAAA,kBAAA,MAAC,UAAD;EACE,MAAK;EACL,cAAc;EACd,cAAc;EACd,WAAW,cAAA,gBACT,uLACA,mBACD;EACD,GAAI;YARN,CAUE,iBAAA,GAAA,kBAAA,KAAC,OAAD;GACE,WAAW,cAAA,gBACT,qEACA,UACD;GAEA;GACG,CAAA,EACN,iBAAA,GAAA,kBAAA,KAAC,cAAA,OAAO,KAAR;GACE,WAAW,cAAA,gBACT,mEACD;GACD,OAAO;IACL,QAAQ;IACR,UAAU;IACV,OAAO;IACP,QAAQ;IACT;GACD,SAAS,EAAE,YAAY,UAAU,YAAY;GAC7C,SAAS,EACP,YAAY,UACR,CAAC,UAAU,YAAY,UAAU,GACjC,UAAU,YACf;GACD,YAAY;IAAE,MAAM;IAAU,UAAU,YAAY;IAAG;GACvD,CAAA,CACK"}
@@ -1,4 +1,4 @@
1
- import { n as mergeClassNames } from "./utils-ati1KkDb.mjs";
1
+ import { n as mergeClassNames } from "./utils-7S0u48mU.mjs";
2
2
  import { useCallback, useEffect, useState } from "react";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  import { motion } from "framer-motion";
@@ -66,4 +66,4 @@ function HoverBorderGradient({ containerClassName, className, duration = 1, cloc
66
66
  //#endregion
67
67
  export { HoverBorderGradient as t };
68
68
 
69
- //# sourceMappingURL=HoverBorderGradient-CduqqQgX.mjs.map
69
+ //# sourceMappingURL=HoverBorderGradient-NbdXeLgC.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"HoverBorderGradient-CduqqQgX.mjs","names":[],"sources":["../../src/components/effects/hover-border-gradient/HoverBorderGradient.tsx"],"sourcesContent":["import { mergeClassNames } from \"../../../utils\";\nimport { motion } from \"framer-motion\";\nimport { useCallback, useEffect, useState } from \"react\";\n\ntype Direction = \"TOP\" | \"LEFT\" | \"BOTTOM\" | \"RIGHT\";\n\ntype HoverBorderGradientProps =\n React.ButtonHTMLAttributes<HTMLButtonElement> & {\n containerClassName?: string;\n className?: string;\n duration?: number;\n clockwise?: boolean;\n children?: React.ReactNode;\n };\n\nconst movingMap: Record<Direction, string> = {\n TOP: \"radial-gradient(50.7% 50% at 50% 0%, var(--ds-gradient-accent-hover) 0%, transparent 100%)\",\n LEFT: \"radial-gradient(25.6% 43.1% at 0% 50%, var(--ds-gradient-accent-hover) 0%, transparent 100%)\",\n BOTTOM:\n \"radial-gradient(50.7% 50% at 50% 100%, var(--ds-gradient-accent-hover) 0%, transparent 100%)\",\n RIGHT:\n \"radial-gradient(25.2% 41% at 100% 50%, var(--ds-gradient-accent-hover) 0%, transparent 100%)\",\n};\n\nconst highlight = `radial-gradient(85% 181% at 50% 50%, var(--ds-gradient-accent-hover) 0%, transparent 100%)`;\n\nexport function HoverBorderGradient({\n containerClassName,\n className,\n duration = 1,\n clockwise = true,\n children,\n ...props\n}: HoverBorderGradientProps) {\n const [hovered, setHovered] = useState(false);\n const [direction, setDirection] = useState<Direction>(\"TOP\");\n\n const rotateDirection = useCallback(\n (current: Direction): Direction => {\n const directions: Direction[] = [\"TOP\", \"LEFT\", \"BOTTOM\", \"RIGHT\"];\n const index = directions.indexOf(current);\n const nextIndex = clockwise\n ? (index - 1 + directions.length) % directions.length\n : (index + 1) % directions.length;\n return directions[nextIndex];\n },\n [clockwise],\n );\n\n useEffect(() => {\n if (!hovered) {\n const interval = setInterval(() => {\n setDirection((prevState) => rotateDirection(prevState));\n }, duration * 1000);\n return () => clearInterval(interval);\n }\n }, [hovered, duration, rotateDirection]);\n\n const handleMouseEnter = () => setHovered(true);\n const handleMouseLeave = () => setHovered(false);\n\n return (\n <button\n type=\"button\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n className={mergeClassNames(\n \"relative flex h-min w-fit flex-col flex-nowrap content-center items-center justify-center gap-10 overflow-visible rounded-lg border border-ds-border-2 p-px transition duration-500\",\n containerClassName,\n )}\n {...props}\n >\n <div\n className={mergeClassNames(\n \"bg-ds-surface-1 text-ds-1 z-10 w-auto rounded-[inherit] px-4 py-2\",\n className,\n )}\n >\n {children}\n </div>\n <motion.div\n className={mergeClassNames(\n \"absolute inset-0 z-0 flex-none overflow-hidden rounded-[inherit]\",\n )}\n style={{\n filter: \"blur(2px)\",\n position: \"absolute\",\n width: \"100%\",\n height: \"100%\",\n }}\n initial={{ background: movingMap[direction] }}\n animate={{\n background: hovered\n ? [movingMap[direction], highlight]\n : movingMap[direction],\n }}\n transition={{ ease: \"linear\", duration: duration ?? 1 }}\n />\n </button>\n );\n}\n"],"mappings":";;;;;AAeA,IAAM,YAAuC;CAC3C,KAAK;CACL,MAAM;CACN,QACE;CACF,OACE;CACH;AAED,IAAM,YAAY;AAElB,SAAgB,oBAAoB,EAClC,oBACA,WACA,WAAW,GACX,YAAY,MACZ,UACA,GAAG,SACwB;CAC3B,MAAM,CAAC,SAAS,cAAc,SAAS,MAAM;CAC7C,MAAM,CAAC,WAAW,gBAAgB,SAAoB,MAAM;CAE5D,MAAM,kBAAkB,aACrB,YAAkC;EACjC,MAAM,aAA0B;GAAC;GAAO;GAAQ;GAAU;GAAQ;EAClE,MAAM,QAAQ,WAAW,QAAQ,QAAQ;AAIzC,SAAO,WAHW,aACb,QAAQ,IAAI,WAAW,UAAU,WAAW,UAC5C,QAAQ,KAAK,WAAW;IAG/B,CAAC,UAAU,CACZ;AAED,iBAAgB;AACd,MAAI,CAAC,SAAS;GACZ,MAAM,WAAW,kBAAkB;AACjC,kBAAc,cAAc,gBAAgB,UAAU,CAAC;MACtD,WAAW,IAAK;AACnB,gBAAa,cAAc,SAAS;;IAErC;EAAC;EAAS;EAAU;EAAgB,CAAC;CAExC,MAAM,yBAAyB,WAAW,KAAK;CAC/C,MAAM,yBAAyB,WAAW,MAAM;AAEhD,QACE,qBAAC,UAAD;EACE,MAAK;EACL,cAAc;EACd,cAAc;EACd,WAAW,gBACT,uLACA,mBACD;EACD,GAAI;YARN,CAUE,oBAAC,OAAD;GACE,WAAW,gBACT,qEACA,UACD;GAEA;GACG,CAAA,EACN,oBAAC,OAAO,KAAR;GACE,WAAW,gBACT,mEACD;GACD,OAAO;IACL,QAAQ;IACR,UAAU;IACV,OAAO;IACP,QAAQ;IACT;GACD,SAAS,EAAE,YAAY,UAAU,YAAY;GAC7C,SAAS,EACP,YAAY,UACR,CAAC,UAAU,YAAY,UAAU,GACjC,UAAU,YACf;GACD,YAAY;IAAE,MAAM;IAAU,UAAU,YAAY;IAAG;GACvD,CAAA,CACK"}
1
+ {"version":3,"file":"HoverBorderGradient-NbdXeLgC.mjs","names":[],"sources":["../../src/components/effects/hover-border-gradient/HoverBorderGradient.tsx"],"sourcesContent":["import { mergeClassNames } from \"../../../utils\";\nimport { motion } from \"framer-motion\";\nimport { useCallback, useEffect, useState } from \"react\";\n\ntype Direction = \"TOP\" | \"LEFT\" | \"BOTTOM\" | \"RIGHT\";\n\ntype HoverBorderGradientProps =\n React.ButtonHTMLAttributes<HTMLButtonElement> & {\n containerClassName?: string;\n className?: string;\n duration?: number;\n clockwise?: boolean;\n children?: React.ReactNode;\n };\n\nconst movingMap: Record<Direction, string> = {\n TOP: \"radial-gradient(50.7% 50% at 50% 0%, var(--ds-gradient-accent-hover) 0%, transparent 100%)\",\n LEFT: \"radial-gradient(25.6% 43.1% at 0% 50%, var(--ds-gradient-accent-hover) 0%, transparent 100%)\",\n BOTTOM:\n \"radial-gradient(50.7% 50% at 50% 100%, var(--ds-gradient-accent-hover) 0%, transparent 100%)\",\n RIGHT:\n \"radial-gradient(25.2% 41% at 100% 50%, var(--ds-gradient-accent-hover) 0%, transparent 100%)\",\n};\n\nconst highlight = `radial-gradient(85% 181% at 50% 50%, var(--ds-gradient-accent-hover) 0%, transparent 100%)`;\n\nexport function HoverBorderGradient({\n containerClassName,\n className,\n duration = 1,\n clockwise = true,\n children,\n ...props\n}: HoverBorderGradientProps) {\n const [hovered, setHovered] = useState(false);\n const [direction, setDirection] = useState<Direction>(\"TOP\");\n\n const rotateDirection = useCallback(\n (current: Direction): Direction => {\n const directions: Direction[] = [\"TOP\", \"LEFT\", \"BOTTOM\", \"RIGHT\"];\n const index = directions.indexOf(current);\n const nextIndex = clockwise\n ? (index - 1 + directions.length) % directions.length\n : (index + 1) % directions.length;\n return directions[nextIndex];\n },\n [clockwise],\n );\n\n useEffect(() => {\n if (!hovered) {\n const interval = setInterval(() => {\n setDirection((prevState) => rotateDirection(prevState));\n }, duration * 1000);\n return () => clearInterval(interval);\n }\n }, [hovered, duration, rotateDirection]);\n\n const handleMouseEnter = () => setHovered(true);\n const handleMouseLeave = () => setHovered(false);\n\n return (\n <button\n type=\"button\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n className={mergeClassNames(\n \"relative flex h-min w-fit flex-col flex-nowrap content-center items-center justify-center gap-10 overflow-visible rounded-lg border border-ds-border-2 p-px transition duration-500\",\n containerClassName,\n )}\n {...props}\n >\n <div\n className={mergeClassNames(\n \"bg-ds-surface-1 text-ds-1 z-10 w-auto rounded-[inherit] px-4 py-2\",\n className,\n )}\n >\n {children}\n </div>\n <motion.div\n className={mergeClassNames(\n \"absolute inset-0 z-0 flex-none overflow-hidden rounded-[inherit]\",\n )}\n style={{\n filter: \"blur(2px)\",\n position: \"absolute\",\n width: \"100%\",\n height: \"100%\",\n }}\n initial={{ background: movingMap[direction] }}\n animate={{\n background: hovered\n ? [movingMap[direction], highlight]\n : movingMap[direction],\n }}\n transition={{ ease: \"linear\", duration: duration ?? 1 }}\n />\n </button>\n );\n}\n"],"mappings":";;;;;AAeA,IAAM,YAAuC;CAC3C,KAAK;CACL,MAAM;CACN,QACE;CACF,OACE;CACH;AAED,IAAM,YAAY;AAElB,SAAgB,oBAAoB,EAClC,oBACA,WACA,WAAW,GACX,YAAY,MACZ,UACA,GAAG,SACwB;CAC3B,MAAM,CAAC,SAAS,cAAc,SAAS,MAAM;CAC7C,MAAM,CAAC,WAAW,gBAAgB,SAAoB,MAAM;CAE5D,MAAM,kBAAkB,aACrB,YAAkC;EACjC,MAAM,aAA0B;GAAC;GAAO;GAAQ;GAAU;GAAQ;EAClE,MAAM,QAAQ,WAAW,QAAQ,QAAQ;AAIzC,SAAO,WAHW,aACb,QAAQ,IAAI,WAAW,UAAU,WAAW,UAC5C,QAAQ,KAAK,WAAW;IAG/B,CAAC,UAAU,CACZ;AAED,iBAAgB;AACd,MAAI,CAAC,SAAS;GACZ,MAAM,WAAW,kBAAkB;AACjC,kBAAc,cAAc,gBAAgB,UAAU,CAAC;MACtD,WAAW,IAAK;AACnB,gBAAa,cAAc,SAAS;;IAErC;EAAC;EAAS;EAAU;EAAgB,CAAC;CAExC,MAAM,yBAAyB,WAAW,KAAK;CAC/C,MAAM,yBAAyB,WAAW,MAAM;AAEhD,QACE,qBAAC,UAAD;EACE,MAAK;EACL,cAAc;EACd,cAAc;EACd,WAAW,gBACT,uLACA,mBACD;EACD,GAAI;YARN,CAUE,oBAAC,OAAD;GACE,WAAW,gBACT,qEACA,UACD;GAEA;GACG,CAAA,EACN,oBAAC,OAAO,KAAR;GACE,WAAW,gBACT,mEACD;GACD,OAAO;IACL,QAAQ;IACR,UAAU;IACV,OAAO;IACP,QAAQ;IACT;GACD,SAAS,EAAE,YAAY,UAAU,YAAY;GAC7C,SAAS,EACP,YAAY,UACR,CAAC,UAAU,YAAY,UAAU,GACjC,UAAU,YACf;GACD,YAAY;IAAE,MAAM;IAAU,UAAU,YAAY;IAAG;GACvD,CAAA,CACK"}
@@ -1 +1 @@
1
- {"version":3,"file":"SunToMoonButton-BkEfkElJ.mjs","names":[],"sources":["../../src/components/effects/sun-to-moon-button/SunToMoonButton.tsx"],"sourcesContent":["import { useThemeContext } from \"../../../foundations/theme\";\nimport { motion } from \"framer-motion\";\n\nexport interface SunToMoonButtonProps {\n showLabelAndImage?: boolean;\n}\n\nexport default function SunToMoonButton({\n showLabelAndImage = true,\n}: SunToMoonButtonProps) {\n const { mode, toggleMode } = useThemeContext();\n\n const raysVariants = {\n hidden: {\n strokeOpacity: 0,\n transition: {\n staggerChildren: 0.05,\n staggerDirection: -1,\n },\n },\n visible: {\n strokeOpacity: 1,\n transition: {\n staggerChildren: 0.05,\n },\n },\n };\n\n const rayVariant = {\n hidden: {\n pathLength: 0,\n opacity: 0,\n // Start from center of the circle\n scale: 0,\n },\n visible: {\n pathLength: 1,\n opacity: 1,\n scale: 1,\n transition: {\n duration: 0.5,\n pathLength: { duration: 0.3 },\n opacity: { duration: 0.2 },\n scale: { duration: 0.3 },\n },\n },\n };\n\n const shineVariant = {\n hidden: {\n opacity: 0,\n scale: 2,\n strokeDasharray: \"20, 1000\",\n strokeDashoffset: 0,\n filter: \"blur(0px)\",\n },\n visible: {\n opacity: [0, 1, 0],\n strokeDashoffset: [0, -50, -100],\n filter: [\"blur(2px)\", \"blur(2px)\", \"blur(0px)\"],\n transition: {\n duration: 0.75,\n },\n },\n };\n\n const sunPath =\n \"M70 49.5C70 60.8218 60.8218 70 49.5 70C38.1782 70 29 60.8218 29 49.5C29 38.1782 38.1782 29 49.5 29C60 29 69.5 38 70 49.5Z\";\n const moonPath =\n \"M70 49.5C70 60.8218 60.8218 70 49.5 70C38.1782 70 29 60.8218 29 49.5C29 38.1782 38.1782 29 49.5 29C39 45 49.5 59.5 70 49.5Z\";\n const fallbackPath = sunPath;\n\n // Ensure we have valid paths at all times\n // Light mode = sun, Dark mode = moon\n const currentPath = mode === \"light\" ? sunPath : moonPath;\n const safeCurrentPath = currentPath || fallbackPath;\n\n return (\n <button\n type=\"button\"\n className=\"flex w-full cursor-pointer flex-col items-center justify-center rounded-xl py-3 text-base font-medium transition duration-200\"\n onClick={() => toggleMode()}\n >\n <span className=\"flex items-center\">\n {showLabelAndImage && (\n <span className=\"mr-2 text-ds-1\">\n {mode === \"light\" ? \"Light\" : \"Dark\"}\n </span>\n )}\n\n <motion.svg\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n width={20}\n height={20}\n viewBox=\"0 0 100 100\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"relative\"\n >\n {/* Shine effect for moon in dark mode */}\n {moonPath && (\n <motion.path\n variants={shineVariant}\n d={moonPath}\n className=\"absolute top-0 left-0 stroke-blue-100\"\n initial=\"hidden\"\n animate={mode === \"light\" ? \"hidden\" : \"visible\"}\n />\n )}\n\n {/* Sun rays - visible in light mode */}\n <motion.g\n variants={raysVariants}\n initial=\"hidden\"\n animate={mode === \"dark\" ? \"hidden\" : \"visible\"}\n style={{\n strokeLinecap: \"round\",\n strokeWidth: 6,\n stroke: \"var(--ds-color-warning)\",\n }}\n >\n <motion.path\n className=\"origin-center\"\n variants={rayVariant}\n d=\"M50 2V11\"\n />\n <motion.path variants={rayVariant} d=\"M85 15L78 22\" />\n <motion.path variants={rayVariant} d=\"M98 50H89\" />\n <motion.path variants={rayVariant} d=\"M85 85L78 78\" />\n <motion.path variants={rayVariant} d=\"M50 98V89\" />\n <motion.path variants={rayVariant} d=\"M23 78L16 84\" />\n <motion.path variants={rayVariant} d=\"M11 50H2\" />\n <motion.path variants={rayVariant} d=\"M23 23L16 16\" />\n </motion.g>\n\n {/* Main path - Light=Sun(yellow), Dark=Moon(blue) */}\n <motion.path\n d={safeCurrentPath}\n fill=\"transparent\"\n transition={{ duration: 1, type: \"spring\" }}\n initial={false}\n animate={\n mode === \"light\"\n ? {\n d: sunPath || fallbackPath,\n rotate: 0,\n scale: 1,\n stroke: \"var(--ds-color-warning)\",\n fill: \"var(--ds-color-warning)\",\n fillOpacity: 0.5,\n strokeOpacity: 1,\n }\n : {\n d: moonPath || fallbackPath,\n rotate: -360,\n scale: 2,\n stroke: \"var(--ds-color-info)\",\n fill: \"var(--ds-color-info)\",\n fillOpacity: 0.35,\n strokeOpacity: 1,\n }\n }\n />\n </motion.svg>\n </span>\n {showLabelAndImage && (\n <span className=\"mt-2 flex h-[90px] w-[180px] flex-col items-center justify-center rounded-md bg-ds-surface-2\">\n <span className=\"my-4 flex w-[150px] flex-col rounded-md\">\n <span className=\"mb-1 w-[80px] rounded-full bg-ds-surface-3 p-1\"></span>\n <span className=\"mb-1 w-[100px] rounded-full bg-ds-surface-3 p-1\"></span>\n <span className=\"w-[150px] rounded-full bg-ds-surface-3 p-1\"></span>\n </span>\n <span className=\"my-1 flex w-[150px] justify-between\">\n <span className=\"mb-1 w-[80px] rounded-full bg-ds-surface-3 p-1\"></span>\n <span className=\"mb-1 w-[30px] rounded-full bg-ds-accent p-1\"></span>\n </span>\n </span>\n )}\n </button>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"SunToMoonButton-BkEfkElJ.mjs","names":[],"sources":["../../src/components/effects/sun-to-moon-button/SunToMoonButton.tsx"],"sourcesContent":["import { useThemeContext } from \"../../../foundations/theme\";\nimport { motion } from \"framer-motion\";\n\nexport interface SunToMoonButtonProps {\n showLabelAndImage?: boolean;\n}\n\nexport default function SunToMoonButton({\n showLabelAndImage = true,\n}: SunToMoonButtonProps) {\n const { mode, toggleMode } = useThemeContext();\n\n const raysVariants = {\n hidden: {\n strokeOpacity: 0,\n transition: {\n staggerChildren: 0.05,\n staggerDirection: -1,\n },\n },\n visible: {\n strokeOpacity: 1,\n transition: {\n staggerChildren: 0.05,\n },\n },\n };\n\n const rayVariant = {\n hidden: {\n pathLength: 0,\n opacity: 0,\n // Start from center of the circle\n scale: 0,\n },\n visible: {\n pathLength: 1,\n opacity: 1,\n scale: 1,\n transition: {\n duration: 0.5,\n pathLength: { duration: 0.3 },\n opacity: { duration: 0.2 },\n scale: { duration: 0.3 },\n },\n },\n };\n\n const shineVariant = {\n hidden: {\n opacity: 0,\n scale: 2,\n strokeDasharray: \"20, 1000\",\n strokeDashoffset: 0,\n filter: \"blur(0px)\",\n },\n visible: {\n opacity: [0, 1, 0],\n strokeDashoffset: [0, -50, -100],\n filter: [\"blur(2px)\", \"blur(2px)\", \"blur(0px)\"],\n transition: {\n duration: 0.75,\n },\n },\n };\n\n const sunPath =\n \"M70 49.5C70 60.8218 60.8218 70 49.5 70C38.1782 70 29 60.8218 29 49.5C29 38.1782 38.1782 29 49.5 29C60 29 69.5 38 70 49.5Z\";\n const moonPath =\n \"M70 49.5C70 60.8218 60.8218 70 49.5 70C38.1782 70 29 60.8218 29 49.5C29 38.1782 38.1782 29 49.5 29C39 45 49.5 59.5 70 49.5Z\";\n const fallbackPath = sunPath;\n\n // Ensure we have valid paths at all times\n // Light mode = sun, Dark mode = moon\n const currentPath = mode === \"light\" ? sunPath : moonPath;\n const safeCurrentPath = currentPath || fallbackPath;\n\n return (\n <button\n type=\"button\"\n className=\"flex w-full cursor-pointer flex-col items-center justify-center rounded-xl py-3 text-base font-medium transition duration-200\"\n onClick={() => toggleMode()}\n >\n <span className=\"flex items-center\">\n {showLabelAndImage && (\n <span className=\"mr-2 text-ds-1\">\n {mode === \"light\" ? \"Light\" : \"Dark\"}\n </span>\n )}\n\n <motion.svg\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n width={20}\n height={20}\n viewBox=\"0 0 100 100\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"relative\"\n >\n {/* Shine effect for moon in dark mode */}\n {moonPath && (\n <motion.path\n variants={shineVariant}\n d={moonPath}\n className=\"absolute top-0 left-0 stroke-blue-100\"\n initial=\"hidden\"\n animate={mode === \"light\" ? \"hidden\" : \"visible\"}\n />\n )}\n\n {/* Sun rays - visible in light mode */}\n <motion.g\n variants={raysVariants}\n initial=\"hidden\"\n animate={mode === \"dark\" ? \"hidden\" : \"visible\"}\n style={{\n strokeLinecap: \"round\",\n strokeWidth: 6,\n stroke: \"var(--ds-color-warning)\",\n }}\n >\n <motion.path\n className=\"origin-center\"\n variants={rayVariant}\n d=\"M50 2V11\"\n />\n <motion.path variants={rayVariant} d=\"M85 15L78 22\" />\n <motion.path variants={rayVariant} d=\"M98 50H89\" />\n <motion.path variants={rayVariant} d=\"M85 85L78 78\" />\n <motion.path variants={rayVariant} d=\"M50 98V89\" />\n <motion.path variants={rayVariant} d=\"M23 78L16 84\" />\n <motion.path variants={rayVariant} d=\"M11 50H2\" />\n <motion.path variants={rayVariant} d=\"M23 23L16 16\" />\n </motion.g>\n\n {/* Main path - Light=Sun(yellow), Dark=Moon(blue) */}\n <motion.path\n d={safeCurrentPath}\n fill=\"transparent\"\n transition={{ duration: 1, type: \"spring\" }}\n initial={false}\n animate={\n mode === \"light\"\n ? {\n d: sunPath || fallbackPath,\n rotate: 0,\n scale: 1,\n stroke: \"var(--ds-color-warning)\",\n fill: \"var(--ds-color-warning)\",\n fillOpacity: 0.5,\n strokeOpacity: 1,\n }\n : {\n d: moonPath || fallbackPath,\n rotate: -360,\n scale: 2,\n stroke: \"var(--ds-color-info)\",\n fill: \"var(--ds-color-info)\",\n fillOpacity: 0.35,\n strokeOpacity: 1,\n }\n }\n />\n </motion.svg>\n </span>\n {showLabelAndImage && (\n <span className=\"mt-2 flex h-[90px] w-[180px] flex-col items-center justify-center rounded-md bg-ds-surface-2\">\n <span className=\"my-4 flex w-[150px] flex-col rounded-md\">\n <span className=\"mb-1 w-[80px] rounded-full bg-ds-surface-3 p-1\"></span>\n <span className=\"mb-1 w-[100px] rounded-full bg-ds-surface-3 p-1\"></span>\n <span className=\"w-[150px] rounded-full bg-ds-surface-3 p-1\"></span>\n </span>\n <span className=\"my-1 flex w-[150px] justify-between\">\n <span className=\"mb-1 w-[80px] rounded-full bg-ds-surface-3 p-1\"></span>\n <span className=\"mb-1 w-[30px] rounded-full bg-ds-accent p-1\"></span>\n </span>\n </span>\n )}\n </button>\n );\n}\n"],"mappings":";;;;AAOA,SAAwB,gBAAgB,EACtC,oBAAoB,QACG;CACvB,MAAM,EAAE,MAAM,eAAe,iBAAiB;CAE9C,MAAM,eAAe;EACnB,QAAQ;GACN,eAAe;GACf,YAAY;IACV,iBAAiB;IACjB,kBAAkB;IACnB;GACF;EACD,SAAS;GACP,eAAe;GACf,YAAY,EACV,iBAAiB,KAClB;GACF;EACF;CAED,MAAM,aAAa;EACjB,QAAQ;GACN,YAAY;GACZ,SAAS;GAET,OAAO;GACR;EACD,SAAS;GACP,YAAY;GACZ,SAAS;GACT,OAAO;GACP,YAAY;IACV,UAAU;IACV,YAAY,EAAE,UAAU,IAAK;IAC7B,SAAS,EAAE,UAAU,IAAK;IAC1B,OAAO,EAAE,UAAU,IAAK;IACzB;GACF;EACF;CAED,MAAM,eAAe;EACnB,QAAQ;GACN,SAAS;GACT,OAAO;GACP,iBAAiB;GACjB,kBAAkB;GAClB,QAAQ;GACT;EACD,SAAS;GACP,SAAS;IAAC;IAAG;IAAG;IAAE;GAClB,kBAAkB;IAAC;IAAG;IAAK;IAAK;GAChC,QAAQ;IAAC;IAAa;IAAa;IAAY;GAC/C,YAAY,EACV,UAAU,KACX;GACF;EACF;CAED,MAAM,UACJ;CACF,MAAM,WACJ;CAMF,MAAM,mBADc,SAAS,UAAU,UAAU,aACV;AAEvC,QACE,qBAAC,UAAD;EACE,MAAK;EACL,WAAU;EACV,eAAe,YAAY;YAH7B,CAKE,qBAAC,QAAD;GAAM,WAAU;aAAhB,CACG,qBACC,oBAAC,QAAD;IAAM,WAAU;cACb,SAAS,UAAU,UAAU;IACzB,CAAA,EAGT,qBAAC,OAAO,KAAR;IACE,aAAY;IACZ,eAAc;IACd,OAAO;IACP,QAAQ;IACR,SAAQ;IACR,MAAK;IACL,OAAM;IACN,WAAU;cARZ;KAYI,oBAAC,OAAO,MAAR;MACE,UAAU;MACV,GAAG;MACH,WAAU;MACV,SAAQ;MACR,SAAS,SAAS,UAAU,WAAW;MACvC,CAAA;KAIJ,qBAAC,OAAO,GAAR;MACE,UAAU;MACV,SAAQ;MACR,SAAS,SAAS,SAAS,WAAW;MACtC,OAAO;OACL,eAAe;OACf,aAAa;OACb,QAAQ;OACT;gBARH;OAUE,oBAAC,OAAO,MAAR;QACE,WAAU;QACV,UAAU;QACV,GAAE;QACF,CAAA;OACF,oBAAC,OAAO,MAAR;QAAa,UAAU;QAAY,GAAE;QAAiB,CAAA;OACtD,oBAAC,OAAO,MAAR;QAAa,UAAU;QAAY,GAAE;QAAc,CAAA;OACnD,oBAAC,OAAO,MAAR;QAAa,UAAU;QAAY,GAAE;QAAiB,CAAA;OACtD,oBAAC,OAAO,MAAR;QAAa,UAAU;QAAY,GAAE;QAAc,CAAA;OACnD,oBAAC,OAAO,MAAR;QAAa,UAAU;QAAY,GAAE;QAAiB,CAAA;OACtD,oBAAC,OAAO,MAAR;QAAa,UAAU;QAAY,GAAE;QAAa,CAAA;OAClD,oBAAC,OAAO,MAAR;QAAa,UAAU;QAAY,GAAE;QAAiB,CAAA;OAC7C;;KAGX,oBAAC,OAAO,MAAR;MACE,GAAG;MACH,MAAK;MACL,YAAY;OAAE,UAAU;OAAG,MAAM;OAAU;MAC3C,SAAS;MACT,SACE,SAAS,UACL;OACE,GAAG;OACH,QAAQ;OACR,OAAO;OACP,QAAQ;OACR,MAAM;OACN,aAAa;OACb,eAAe;OAChB,GACD;OACE,GAAG;OACH,QAAQ;OACR,OAAO;OACP,QAAQ;OACR,MAAM;OACN,aAAa;OACb,eAAe;OAChB;MAEP,CAAA;KACS;MACR;MACN,qBACC,qBAAC,QAAD;GAAM,WAAU;aAAhB,CACE,qBAAC,QAAD;IAAM,WAAU;cAAhB;KACE,oBAAC,QAAD,EAAM,WAAU,kDAAwD,CAAA;KACxE,oBAAC,QAAD,EAAM,WAAU,mDAAyD,CAAA;KACzE,oBAAC,QAAD,EAAM,WAAU,8CAAoD,CAAA;KAC/D;OACP,qBAAC,QAAD;IAAM,WAAU;cAAhB,CACE,oBAAC,QAAD,EAAM,WAAU,kDAAwD,CAAA,EACxE,oBAAC,QAAD,EAAM,WAAU,+CAAqD,CAAA,CAChE;MACF;KAEF"}
@@ -1 +1 @@
1
- {"version":3,"file":"SunToMoonButton-jS4BJD9q.cjs","names":[],"sources":["../../src/components/effects/sun-to-moon-button/SunToMoonButton.tsx"],"sourcesContent":["import { useThemeContext } from \"../../../foundations/theme\";\nimport { motion } from \"framer-motion\";\n\nexport interface SunToMoonButtonProps {\n showLabelAndImage?: boolean;\n}\n\nexport default function SunToMoonButton({\n showLabelAndImage = true,\n}: SunToMoonButtonProps) {\n const { mode, toggleMode } = useThemeContext();\n\n const raysVariants = {\n hidden: {\n strokeOpacity: 0,\n transition: {\n staggerChildren: 0.05,\n staggerDirection: -1,\n },\n },\n visible: {\n strokeOpacity: 1,\n transition: {\n staggerChildren: 0.05,\n },\n },\n };\n\n const rayVariant = {\n hidden: {\n pathLength: 0,\n opacity: 0,\n // Start from center of the circle\n scale: 0,\n },\n visible: {\n pathLength: 1,\n opacity: 1,\n scale: 1,\n transition: {\n duration: 0.5,\n pathLength: { duration: 0.3 },\n opacity: { duration: 0.2 },\n scale: { duration: 0.3 },\n },\n },\n };\n\n const shineVariant = {\n hidden: {\n opacity: 0,\n scale: 2,\n strokeDasharray: \"20, 1000\",\n strokeDashoffset: 0,\n filter: \"blur(0px)\",\n },\n visible: {\n opacity: [0, 1, 0],\n strokeDashoffset: [0, -50, -100],\n filter: [\"blur(2px)\", \"blur(2px)\", \"blur(0px)\"],\n transition: {\n duration: 0.75,\n },\n },\n };\n\n const sunPath =\n \"M70 49.5C70 60.8218 60.8218 70 49.5 70C38.1782 70 29 60.8218 29 49.5C29 38.1782 38.1782 29 49.5 29C60 29 69.5 38 70 49.5Z\";\n const moonPath =\n \"M70 49.5C70 60.8218 60.8218 70 49.5 70C38.1782 70 29 60.8218 29 49.5C29 38.1782 38.1782 29 49.5 29C39 45 49.5 59.5 70 49.5Z\";\n const fallbackPath = sunPath;\n\n // Ensure we have valid paths at all times\n // Light mode = sun, Dark mode = moon\n const currentPath = mode === \"light\" ? sunPath : moonPath;\n const safeCurrentPath = currentPath || fallbackPath;\n\n return (\n <button\n type=\"button\"\n className=\"flex w-full cursor-pointer flex-col items-center justify-center rounded-xl py-3 text-base font-medium transition duration-200\"\n onClick={() => toggleMode()}\n >\n <span className=\"flex items-center\">\n {showLabelAndImage && (\n <span className=\"mr-2 text-ds-1\">\n {mode === \"light\" ? \"Light\" : \"Dark\"}\n </span>\n )}\n\n <motion.svg\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n width={20}\n height={20}\n viewBox=\"0 0 100 100\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"relative\"\n >\n {/* Shine effect for moon in dark mode */}\n {moonPath && (\n <motion.path\n variants={shineVariant}\n d={moonPath}\n className=\"absolute top-0 left-0 stroke-blue-100\"\n initial=\"hidden\"\n animate={mode === \"light\" ? \"hidden\" : \"visible\"}\n />\n )}\n\n {/* Sun rays - visible in light mode */}\n <motion.g\n variants={raysVariants}\n initial=\"hidden\"\n animate={mode === \"dark\" ? \"hidden\" : \"visible\"}\n style={{\n strokeLinecap: \"round\",\n strokeWidth: 6,\n stroke: \"var(--ds-color-warning)\",\n }}\n >\n <motion.path\n className=\"origin-center\"\n variants={rayVariant}\n d=\"M50 2V11\"\n />\n <motion.path variants={rayVariant} d=\"M85 15L78 22\" />\n <motion.path variants={rayVariant} d=\"M98 50H89\" />\n <motion.path variants={rayVariant} d=\"M85 85L78 78\" />\n <motion.path variants={rayVariant} d=\"M50 98V89\" />\n <motion.path variants={rayVariant} d=\"M23 78L16 84\" />\n <motion.path variants={rayVariant} d=\"M11 50H2\" />\n <motion.path variants={rayVariant} d=\"M23 23L16 16\" />\n </motion.g>\n\n {/* Main path - Light=Sun(yellow), Dark=Moon(blue) */}\n <motion.path\n d={safeCurrentPath}\n fill=\"transparent\"\n transition={{ duration: 1, type: \"spring\" }}\n initial={false}\n animate={\n mode === \"light\"\n ? {\n d: sunPath || fallbackPath,\n rotate: 0,\n scale: 1,\n stroke: \"var(--ds-color-warning)\",\n fill: \"var(--ds-color-warning)\",\n fillOpacity: 0.5,\n strokeOpacity: 1,\n }\n : {\n d: moonPath || fallbackPath,\n rotate: -360,\n scale: 2,\n stroke: \"var(--ds-color-info)\",\n fill: \"var(--ds-color-info)\",\n fillOpacity: 0.35,\n strokeOpacity: 1,\n }\n }\n />\n </motion.svg>\n </span>\n {showLabelAndImage && (\n <span className=\"mt-2 flex h-[90px] w-[180px] flex-col items-center justify-center rounded-md bg-ds-surface-2\">\n <span className=\"my-4 flex w-[150px] flex-col rounded-md\">\n <span className=\"mb-1 w-[80px] rounded-full bg-ds-surface-3 p-1\"></span>\n <span className=\"mb-1 w-[100px] rounded-full bg-ds-surface-3 p-1\"></span>\n <span className=\"w-[150px] rounded-full bg-ds-surface-3 p-1\"></span>\n </span>\n <span className=\"my-1 flex w-[150px] justify-between\">\n <span className=\"mb-1 w-[80px] rounded-full bg-ds-surface-3 p-1\"></span>\n <span className=\"mb-1 w-[30px] rounded-full bg-ds-accent p-1\"></span>\n </span>\n </span>\n )}\n </button>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"SunToMoonButton-jS4BJD9q.cjs","names":[],"sources":["../../src/components/effects/sun-to-moon-button/SunToMoonButton.tsx"],"sourcesContent":["import { useThemeContext } from \"../../../foundations/theme\";\nimport { motion } from \"framer-motion\";\n\nexport interface SunToMoonButtonProps {\n showLabelAndImage?: boolean;\n}\n\nexport default function SunToMoonButton({\n showLabelAndImage = true,\n}: SunToMoonButtonProps) {\n const { mode, toggleMode } = useThemeContext();\n\n const raysVariants = {\n hidden: {\n strokeOpacity: 0,\n transition: {\n staggerChildren: 0.05,\n staggerDirection: -1,\n },\n },\n visible: {\n strokeOpacity: 1,\n transition: {\n staggerChildren: 0.05,\n },\n },\n };\n\n const rayVariant = {\n hidden: {\n pathLength: 0,\n opacity: 0,\n // Start from center of the circle\n scale: 0,\n },\n visible: {\n pathLength: 1,\n opacity: 1,\n scale: 1,\n transition: {\n duration: 0.5,\n pathLength: { duration: 0.3 },\n opacity: { duration: 0.2 },\n scale: { duration: 0.3 },\n },\n },\n };\n\n const shineVariant = {\n hidden: {\n opacity: 0,\n scale: 2,\n strokeDasharray: \"20, 1000\",\n strokeDashoffset: 0,\n filter: \"blur(0px)\",\n },\n visible: {\n opacity: [0, 1, 0],\n strokeDashoffset: [0, -50, -100],\n filter: [\"blur(2px)\", \"blur(2px)\", \"blur(0px)\"],\n transition: {\n duration: 0.75,\n },\n },\n };\n\n const sunPath =\n \"M70 49.5C70 60.8218 60.8218 70 49.5 70C38.1782 70 29 60.8218 29 49.5C29 38.1782 38.1782 29 49.5 29C60 29 69.5 38 70 49.5Z\";\n const moonPath =\n \"M70 49.5C70 60.8218 60.8218 70 49.5 70C38.1782 70 29 60.8218 29 49.5C29 38.1782 38.1782 29 49.5 29C39 45 49.5 59.5 70 49.5Z\";\n const fallbackPath = sunPath;\n\n // Ensure we have valid paths at all times\n // Light mode = sun, Dark mode = moon\n const currentPath = mode === \"light\" ? sunPath : moonPath;\n const safeCurrentPath = currentPath || fallbackPath;\n\n return (\n <button\n type=\"button\"\n className=\"flex w-full cursor-pointer flex-col items-center justify-center rounded-xl py-3 text-base font-medium transition duration-200\"\n onClick={() => toggleMode()}\n >\n <span className=\"flex items-center\">\n {showLabelAndImage && (\n <span className=\"mr-2 text-ds-1\">\n {mode === \"light\" ? \"Light\" : \"Dark\"}\n </span>\n )}\n\n <motion.svg\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n width={20}\n height={20}\n viewBox=\"0 0 100 100\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"relative\"\n >\n {/* Shine effect for moon in dark mode */}\n {moonPath && (\n <motion.path\n variants={shineVariant}\n d={moonPath}\n className=\"absolute top-0 left-0 stroke-blue-100\"\n initial=\"hidden\"\n animate={mode === \"light\" ? \"hidden\" : \"visible\"}\n />\n )}\n\n {/* Sun rays - visible in light mode */}\n <motion.g\n variants={raysVariants}\n initial=\"hidden\"\n animate={mode === \"dark\" ? \"hidden\" : \"visible\"}\n style={{\n strokeLinecap: \"round\",\n strokeWidth: 6,\n stroke: \"var(--ds-color-warning)\",\n }}\n >\n <motion.path\n className=\"origin-center\"\n variants={rayVariant}\n d=\"M50 2V11\"\n />\n <motion.path variants={rayVariant} d=\"M85 15L78 22\" />\n <motion.path variants={rayVariant} d=\"M98 50H89\" />\n <motion.path variants={rayVariant} d=\"M85 85L78 78\" />\n <motion.path variants={rayVariant} d=\"M50 98V89\" />\n <motion.path variants={rayVariant} d=\"M23 78L16 84\" />\n <motion.path variants={rayVariant} d=\"M11 50H2\" />\n <motion.path variants={rayVariant} d=\"M23 23L16 16\" />\n </motion.g>\n\n {/* Main path - Light=Sun(yellow), Dark=Moon(blue) */}\n <motion.path\n d={safeCurrentPath}\n fill=\"transparent\"\n transition={{ duration: 1, type: \"spring\" }}\n initial={false}\n animate={\n mode === \"light\"\n ? {\n d: sunPath || fallbackPath,\n rotate: 0,\n scale: 1,\n stroke: \"var(--ds-color-warning)\",\n fill: \"var(--ds-color-warning)\",\n fillOpacity: 0.5,\n strokeOpacity: 1,\n }\n : {\n d: moonPath || fallbackPath,\n rotate: -360,\n scale: 2,\n stroke: \"var(--ds-color-info)\",\n fill: \"var(--ds-color-info)\",\n fillOpacity: 0.35,\n strokeOpacity: 1,\n }\n }\n />\n </motion.svg>\n </span>\n {showLabelAndImage && (\n <span className=\"mt-2 flex h-[90px] w-[180px] flex-col items-center justify-center rounded-md bg-ds-surface-2\">\n <span className=\"my-4 flex w-[150px] flex-col rounded-md\">\n <span className=\"mb-1 w-[80px] rounded-full bg-ds-surface-3 p-1\"></span>\n <span className=\"mb-1 w-[100px] rounded-full bg-ds-surface-3 p-1\"></span>\n <span className=\"w-[150px] rounded-full bg-ds-surface-3 p-1\"></span>\n </span>\n <span className=\"my-1 flex w-[150px] justify-between\">\n <span className=\"mb-1 w-[80px] rounded-full bg-ds-surface-3 p-1\"></span>\n <span className=\"mb-1 w-[30px] rounded-full bg-ds-accent p-1\"></span>\n </span>\n </span>\n )}\n </button>\n );\n}\n"],"mappings":"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"}
@@ -201,4 +201,4 @@ Object.defineProperty(exports, "Tooltip", {
201
201
  }
202
202
  });
203
203
 
204
- //# sourceMappingURL=tooltip-PJaQa8_l.cjs.map
204
+ //# sourceMappingURL=Tooltip-DD30yj3A.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip-PJaQa8_l.cjs","names":[],"sources":["../../src/components/overlays/tooltip/Tooltip.tsx"],"sourcesContent":["import { useState, useRef, useEffect, useCallback } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\n\nexport type TooltipPosition = \"top\" | \"bottom\" | \"left\" | \"right\";\nexport type TooltipTrigger = \"hover\" | \"click\" | \"focus\";\n\nexport interface TooltipProps {\n /** The content to display in the tooltip */\n content: React.ReactNode;\n /** The element that triggers the tooltip */\n children: React.ReactElement;\n /** Position of the tooltip relative to the trigger */\n position?: TooltipPosition;\n /** How the tooltip is triggered */\n trigger?: TooltipTrigger;\n /** Delay before showing tooltip (ms) */\n delayShow?: number;\n /** Delay before hiding tooltip (ms) */\n delayHide?: number;\n /** Whether the tooltip is disabled */\n disabled?: boolean;\n /** Custom className for the tooltip */\n className?: string;\n /** Whether to show an arrow pointing to the trigger */\n arrow?: boolean;\n /** Maximum width of the tooltip */\n maxWidth?: number;\n /** Controlled open state */\n open?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n}\n\nconst positionStyles: Record<TooltipPosition, string> = {\n top: \"bottom-full left-1/2 -translate-x-1/2 mb-2\",\n bottom: \"top-full left-1/2 -translate-x-1/2 mt-2\",\n left: \"right-full top-1/2 -translate-y-1/2 mr-2\",\n right: \"left-full top-1/2 -translate-y-1/2 ml-2\",\n};\n\nconst arrowStyles: Record<TooltipPosition, string> = {\n top: \"top-full left-1/2 -translate-x-1/2 border-t-ds-surface-2 border-x-transparent border-b-transparent border-t-[6px] border-x-[6px] border-b-0\",\n bottom:\n \"bottom-full left-1/2 -translate-x-1/2 border-b-ds-surface-2 border-x-transparent border-t-transparent border-b-[6px] border-x-[6px] border-t-0\",\n left: \"left-full top-1/2 -translate-y-1/2 border-l-ds-surface-2 border-y-transparent border-r-transparent border-l-[6px] border-y-[6px] border-r-0\",\n right:\n \"right-full top-1/2 -translate-y-1/2 border-r-ds-surface-2 border-y-transparent border-l-transparent border-r-[6px] border-y-[6px] border-l-0\",\n};\n\nconst motionVariants = {\n top: {\n initial: { opacity: 0, y: 4, scale: 0.95 },\n animate: { opacity: 1, y: 0, scale: 1 },\n exit: { opacity: 0, y: 4, scale: 0.95 },\n },\n bottom: {\n initial: { opacity: 0, y: -4, scale: 0.95 },\n animate: { opacity: 1, y: 0, scale: 1 },\n exit: { opacity: 0, y: -4, scale: 0.95 },\n },\n left: {\n initial: { opacity: 0, x: 4, scale: 0.95 },\n animate: { opacity: 1, x: 0, scale: 1 },\n exit: { opacity: 0, x: 4, scale: 0.95 },\n },\n right: {\n initial: { opacity: 0, x: -4, scale: 0.95 },\n animate: { opacity: 1, x: 0, scale: 1 },\n exit: { opacity: 0, x: -4, scale: 0.95 },\n },\n} as const;\n\nexport default function Tooltip({\n content,\n children,\n position = \"top\",\n trigger = \"hover\",\n delayShow = 200,\n delayHide = 0,\n disabled = false,\n className = \"\",\n arrow = true,\n maxWidth = 250,\n open: controlledOpen,\n onOpenChange,\n}: TooltipProps) {\n const [internalOpen, setInternalOpen] = useState(false);\n const showTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const hideTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n const setOpen = useCallback(\n (value: boolean) => {\n if (isControlled) {\n onOpenChange?.(value);\n } else {\n setInternalOpen(value);\n }\n },\n [isControlled, onOpenChange],\n );\n\n const clearTimeouts = useCallback(() => {\n if (showTimeoutRef.current) {\n clearTimeout(showTimeoutRef.current);\n showTimeoutRef.current = null;\n }\n if (hideTimeoutRef.current) {\n clearTimeout(hideTimeoutRef.current);\n hideTimeoutRef.current = null;\n }\n }, []);\n\n const showTooltip = useCallback(() => {\n if (disabled) return;\n clearTimeouts();\n if (delayShow > 0) {\n showTimeoutRef.current = setTimeout(() => setOpen(true), delayShow);\n } else {\n setOpen(true);\n }\n }, [disabled, delayShow, setOpen, clearTimeouts]);\n\n const hideTooltip = useCallback(() => {\n clearTimeouts();\n if (delayHide > 0) {\n hideTimeoutRef.current = setTimeout(() => setOpen(false), delayHide);\n } else {\n setOpen(false);\n }\n }, [delayHide, setOpen, clearTimeouts]);\n\n const toggleTooltip = useCallback(() => {\n if (disabled) return;\n setOpen(!isOpen);\n }, [disabled, isOpen, setOpen]);\n\n useEffect(() => {\n return () => clearTimeouts();\n }, [clearTimeouts]);\n\n // Close on click outside for click trigger\n useEffect(() => {\n if (trigger !== \"click\" || !isOpen) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n if (\n triggerRef.current &&\n !triggerRef.current.contains(event.target as Node)\n ) {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, [trigger, isOpen, setOpen]);\n\n // Close on Escape\n useEffect(() => {\n if (!isOpen) return;\n\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"keydown\", handleEscape);\n return () => document.removeEventListener(\"keydown\", handleEscape);\n }, [isOpen, setOpen]);\n\n const triggerProps = {\n ...(trigger === \"hover\" && {\n onMouseEnter: showTooltip,\n onMouseLeave: hideTooltip,\n }),\n ...(trigger === \"click\" && {\n onClick: toggleTooltip,\n }),\n ...(trigger === \"focus\" && {\n onFocus: showTooltip,\n onBlur: hideTooltip,\n }),\n };\n\n return (\n <div ref={triggerRef} className=\"relative inline-flex\" {...triggerProps}>\n {children}\n <AnimatePresence>\n {isOpen && !disabled && (\n <motion.div\n role=\"tooltip\"\n initial={motionVariants[position].initial}\n animate={motionVariants[position].animate}\n exit={motionVariants[position].exit}\n transition={{ duration: 0.15, ease: \"easeOut\" }}\n className={`\n absolute z-50 ${positionStyles[position]}\n px-3 py-2 text-sm font-medium\n rounded-lg border border-ds-border-2 bg-ds-surface-2 text-ds-1 shadow-lg\n whitespace-normal break-words\n ${className}\n `}\n style={{ maxWidth }}\n >\n {content}\n {arrow && (\n <span\n className={`absolute w-0 h-0 ${arrowStyles[position]}`}\n aria-hidden=\"true\"\n />\n )}\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n}\n\nexport { Tooltip };\n"],"mappings":"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"}
1
+ {"version":3,"file":"Tooltip-DD30yj3A.cjs","names":[],"sources":["../../src/components/overlays/tooltip/Tooltip.tsx"],"sourcesContent":["import { useState, useRef, useEffect, useCallback } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\n\nexport type TooltipPosition = \"top\" | \"bottom\" | \"left\" | \"right\";\nexport type TooltipTrigger = \"hover\" | \"click\" | \"focus\";\n\nexport interface TooltipProps {\n /** The content to display in the tooltip */\n content: React.ReactNode;\n /** The element that triggers the tooltip */\n children: React.ReactElement;\n /** Position of the tooltip relative to the trigger */\n position?: TooltipPosition;\n /** How the tooltip is triggered */\n trigger?: TooltipTrigger;\n /** Delay before showing tooltip (ms) */\n delayShow?: number;\n /** Delay before hiding tooltip (ms) */\n delayHide?: number;\n /** Whether the tooltip is disabled */\n disabled?: boolean;\n /** Custom className for the tooltip */\n className?: string;\n /** Whether to show an arrow pointing to the trigger */\n arrow?: boolean;\n /** Maximum width of the tooltip */\n maxWidth?: number;\n /** Controlled open state */\n open?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n}\n\nconst positionStyles: Record<TooltipPosition, string> = {\n top: \"bottom-full left-1/2 -translate-x-1/2 mb-2\",\n bottom: \"top-full left-1/2 -translate-x-1/2 mt-2\",\n left: \"right-full top-1/2 -translate-y-1/2 mr-2\",\n right: \"left-full top-1/2 -translate-y-1/2 ml-2\",\n};\n\nconst arrowStyles: Record<TooltipPosition, string> = {\n top: \"top-full left-1/2 -translate-x-1/2 border-t-ds-surface-2 border-x-transparent border-b-transparent border-t-[6px] border-x-[6px] border-b-0\",\n bottom:\n \"bottom-full left-1/2 -translate-x-1/2 border-b-ds-surface-2 border-x-transparent border-t-transparent border-b-[6px] border-x-[6px] border-t-0\",\n left: \"left-full top-1/2 -translate-y-1/2 border-l-ds-surface-2 border-y-transparent border-r-transparent border-l-[6px] border-y-[6px] border-r-0\",\n right:\n \"right-full top-1/2 -translate-y-1/2 border-r-ds-surface-2 border-y-transparent border-l-transparent border-r-[6px] border-y-[6px] border-l-0\",\n};\n\nconst motionVariants = {\n top: {\n initial: { opacity: 0, y: 4, scale: 0.95 },\n animate: { opacity: 1, y: 0, scale: 1 },\n exit: { opacity: 0, y: 4, scale: 0.95 },\n },\n bottom: {\n initial: { opacity: 0, y: -4, scale: 0.95 },\n animate: { opacity: 1, y: 0, scale: 1 },\n exit: { opacity: 0, y: -4, scale: 0.95 },\n },\n left: {\n initial: { opacity: 0, x: 4, scale: 0.95 },\n animate: { opacity: 1, x: 0, scale: 1 },\n exit: { opacity: 0, x: 4, scale: 0.95 },\n },\n right: {\n initial: { opacity: 0, x: -4, scale: 0.95 },\n animate: { opacity: 1, x: 0, scale: 1 },\n exit: { opacity: 0, x: -4, scale: 0.95 },\n },\n} as const;\n\nexport default function Tooltip({\n content,\n children,\n position = \"top\",\n trigger = \"hover\",\n delayShow = 200,\n delayHide = 0,\n disabled = false,\n className = \"\",\n arrow = true,\n maxWidth = 250,\n open: controlledOpen,\n onOpenChange,\n}: TooltipProps) {\n const [internalOpen, setInternalOpen] = useState(false);\n const showTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const hideTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n const setOpen = useCallback(\n (value: boolean) => {\n if (isControlled) {\n onOpenChange?.(value);\n } else {\n setInternalOpen(value);\n }\n },\n [isControlled, onOpenChange],\n );\n\n const clearTimeouts = useCallback(() => {\n if (showTimeoutRef.current) {\n clearTimeout(showTimeoutRef.current);\n showTimeoutRef.current = null;\n }\n if (hideTimeoutRef.current) {\n clearTimeout(hideTimeoutRef.current);\n hideTimeoutRef.current = null;\n }\n }, []);\n\n const showTooltip = useCallback(() => {\n if (disabled) return;\n clearTimeouts();\n if (delayShow > 0) {\n showTimeoutRef.current = setTimeout(() => setOpen(true), delayShow);\n } else {\n setOpen(true);\n }\n }, [disabled, delayShow, setOpen, clearTimeouts]);\n\n const hideTooltip = useCallback(() => {\n clearTimeouts();\n if (delayHide > 0) {\n hideTimeoutRef.current = setTimeout(() => setOpen(false), delayHide);\n } else {\n setOpen(false);\n }\n }, [delayHide, setOpen, clearTimeouts]);\n\n const toggleTooltip = useCallback(() => {\n if (disabled) return;\n setOpen(!isOpen);\n }, [disabled, isOpen, setOpen]);\n\n useEffect(() => {\n return () => clearTimeouts();\n }, [clearTimeouts]);\n\n // Close on click outside for click trigger\n useEffect(() => {\n if (trigger !== \"click\" || !isOpen) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n if (\n triggerRef.current &&\n !triggerRef.current.contains(event.target as Node)\n ) {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, [trigger, isOpen, setOpen]);\n\n // Close on Escape\n useEffect(() => {\n if (!isOpen) return;\n\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"keydown\", handleEscape);\n return () => document.removeEventListener(\"keydown\", handleEscape);\n }, [isOpen, setOpen]);\n\n const triggerProps = {\n ...(trigger === \"hover\" && {\n onMouseEnter: showTooltip,\n onMouseLeave: hideTooltip,\n }),\n ...(trigger === \"click\" && {\n onClick: toggleTooltip,\n }),\n ...(trigger === \"focus\" && {\n onFocus: showTooltip,\n onBlur: hideTooltip,\n }),\n };\n\n return (\n <div ref={triggerRef} className=\"relative inline-flex\" {...triggerProps}>\n {children}\n <AnimatePresence>\n {isOpen && !disabled && (\n <motion.div\n role=\"tooltip\"\n initial={motionVariants[position].initial}\n animate={motionVariants[position].animate}\n exit={motionVariants[position].exit}\n transition={{ duration: 0.15, ease: \"easeOut\" }}\n className={`\n absolute z-50 ${positionStyles[position]}\n px-3 py-2 text-sm font-medium\n rounded-lg border border-ds-border-2 bg-ds-surface-2 text-ds-1 shadow-lg\n whitespace-normal break-words\n ${className}\n `}\n style={{ maxWidth }}\n >\n {content}\n {arrow && (\n <span\n className={`absolute w-0 h-0 ${arrowStyles[position]}`}\n aria-hidden=\"true\"\n />\n )}\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n}\n\nexport { Tooltip };\n"],"mappings":"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"}
@@ -195,4 +195,4 @@ function Tooltip({ content, children, position = "top", trigger = "hover", delay
195
195
  //#endregion
196
196
  export { Tooltip as t };
197
197
 
198
- //# sourceMappingURL=tooltip-CmB8xKOF.mjs.map
198
+ //# sourceMappingURL=Tooltip-DK3B879v.mjs.map