erp-pro-ui 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (400) hide show
  1. package/README.md +512 -288
  2. package/dist/accordion.cjs +1 -1
  3. package/dist/accordion.mjs +1 -1
  4. package/dist/alert.cjs +1 -1
  5. package/dist/alert.mjs +1 -1
  6. package/dist/ascii-text.cjs +1 -1
  7. package/dist/ascii-text.mjs +1 -1
  8. package/dist/button.cjs +1 -1
  9. package/dist/button.mjs +1 -1
  10. package/dist/card.cjs +1 -1
  11. package/dist/card.mjs +1 -1
  12. package/dist/carousel.cjs +1 -1
  13. package/dist/carousel.mjs +1 -1
  14. package/dist/catalog.cjs +6 -0
  15. package/dist/catalog.cjs.map +1 -1
  16. package/dist/catalog.d.ts +11 -1
  17. package/dist/catalog.d.ts.map +1 -1
  18. package/dist/catalog.mjs +6 -0
  19. package/dist/catalog.mjs.map +1 -1
  20. package/dist/charts.cjs +4 -1
  21. package/dist/charts.mjs +2 -2
  22. package/dist/checkbox.cjs +1 -1
  23. package/dist/checkbox.mjs +1 -1
  24. package/dist/chip.cjs +1 -1
  25. package/dist/chip.mjs +1 -1
  26. package/dist/chroma-grid.cjs +1 -1
  27. package/dist/chroma-grid.mjs +1 -1
  28. package/dist/chunks/{accordion-C_0oGZkZ.mjs → accordion-Cbt-SJhj.mjs} +4 -4
  29. package/dist/chunks/accordion-Cbt-SJhj.mjs.map +1 -0
  30. package/dist/chunks/{accordion-BZ5hyz0_.cjs → accordion-pfJR8YYA.cjs} +4 -4
  31. package/dist/chunks/accordion-pfJR8YYA.cjs.map +1 -0
  32. package/dist/chunks/{alert-DeVa-NR1.mjs → alert-CtdLy4Hv.mjs} +6 -6
  33. package/dist/chunks/alert-CtdLy4Hv.mjs.map +1 -0
  34. package/dist/chunks/{alert-BdBDWqBN.cjs → alert-Dvz1GoL5.cjs} +6 -6
  35. package/dist/chunks/alert-Dvz1GoL5.cjs.map +1 -0
  36. package/dist/chunks/{ascii-text-BzQCLfya.mjs → ascii-text-C5tyNsR3.mjs} +32 -5
  37. package/dist/chunks/ascii-text-C5tyNsR3.mjs.map +1 -0
  38. package/dist/chunks/{ascii-text-D6lVHWph.cjs → ascii-text-DlmArZXh.cjs} +32 -5
  39. package/dist/chunks/ascii-text-DlmArZXh.cjs.map +1 -0
  40. package/dist/chunks/background-gradient-animation-BL-lnrJe.mjs.map +1 -1
  41. package/dist/chunks/background-gradient-animation-CXV9GDH8.cjs.map +1 -1
  42. package/dist/chunks/{button-CmNEMp_O.mjs → button-B0Lhj0AS.mjs} +3 -3
  43. package/dist/chunks/button-B0Lhj0AS.mjs.map +1 -0
  44. package/dist/chunks/{button-BH1eUjae.cjs → button-CZL6kFzT.cjs} +3 -3
  45. package/dist/chunks/button-CZL6kFzT.cjs.map +1 -0
  46. package/dist/chunks/{card-CzstAQYy.mjs → card-CcIF6z2H.mjs} +2 -2
  47. package/dist/chunks/card-CcIF6z2H.mjs.map +1 -0
  48. package/dist/chunks/{card-DZGM4zLx.cjs → card-gt-HZh0h.cjs} +2 -2
  49. package/dist/chunks/card-gt-HZh0h.cjs.map +1 -0
  50. package/dist/chunks/{carousel-47Eiyzwg.cjs → carousel-Cq5uwqQt.cjs} +3 -3
  51. package/dist/chunks/{carousel-BJ3nm2bw.mjs.map → carousel-Cq5uwqQt.cjs.map} +1 -1
  52. package/dist/chunks/{carousel-BJ3nm2bw.mjs → carousel-DJdqBVRK.mjs} +3 -3
  53. package/dist/chunks/{carousel-47Eiyzwg.cjs.map → carousel-DJdqBVRK.mjs.map} +1 -1
  54. package/dist/chunks/charts-BpElnsoR.cjs +687 -0
  55. package/dist/chunks/charts-BpElnsoR.cjs.map +1 -0
  56. package/dist/chunks/charts-DugYWvEf.mjs +632 -0
  57. package/dist/chunks/charts-DugYWvEf.mjs.map +1 -0
  58. package/dist/chunks/{checkbox-B3eIojWs.mjs → checkbox-DvwlGwWe.mjs} +8 -8
  59. package/dist/chunks/checkbox-DvwlGwWe.mjs.map +1 -0
  60. package/dist/chunks/{checkbox-DQmZwRTt.cjs → checkbox-yHuSw-hV.cjs} +8 -8
  61. package/dist/chunks/checkbox-yHuSw-hV.cjs.map +1 -0
  62. package/dist/chunks/{chip-cZ7-HmWw.mjs → chip-BGSUmnlO.mjs} +12 -12
  63. package/dist/chunks/chip-BGSUmnlO.mjs.map +1 -0
  64. package/dist/chunks/{chip-BH6wzwat.cjs → chip-DcBji__g.cjs} +12 -12
  65. package/dist/chunks/chip-DcBji__g.cjs.map +1 -0
  66. package/dist/chunks/{chroma-grid-DtsqM4LW.cjs → chroma-grid-9E9j1s9I.cjs} +10 -10
  67. package/dist/chunks/chroma-grid-9E9j1s9I.cjs.map +1 -0
  68. package/dist/chunks/{chroma-grid-CC_fFzxO.mjs → chroma-grid-Cdeql_2C.mjs} +10 -10
  69. package/dist/chunks/chroma-grid-Cdeql_2C.mjs.map +1 -0
  70. package/dist/chunks/color-palette-BLvDnCOD.cjs +754 -0
  71. package/dist/chunks/color-palette-BLvDnCOD.cjs.map +1 -0
  72. package/dist/chunks/color-palette-CXlCDiZz.mjs +748 -0
  73. package/dist/chunks/color-palette-CXlCDiZz.mjs.map +1 -0
  74. package/dist/chunks/{combobox-mAvOcg-E.cjs → combobox-BXu3s0dt.cjs} +56 -32
  75. package/dist/chunks/combobox-BXu3s0dt.cjs.map +1 -0
  76. package/dist/chunks/combobox-CjK-qG4k.mjs +132 -0
  77. package/dist/chunks/combobox-CjK-qG4k.mjs.map +1 -0
  78. package/dist/chunks/{data-table-BRcGhJDf.cjs → data-table-9HELVsYR.cjs} +197 -292
  79. package/dist/chunks/data-table-9HELVsYR.cjs.map +1 -0
  80. package/dist/chunks/{data-table-Dp0t_I_z.mjs → data-table-DyEQn9Yj.mjs} +197 -292
  81. package/dist/chunks/data-table-DyEQn9Yj.mjs.map +1 -0
  82. package/dist/chunks/{date-picker-BWBkr6LG.mjs → date-picker-D8gaaMlJ.mjs} +39 -16
  83. package/dist/chunks/date-picker-D8gaaMlJ.mjs.map +1 -0
  84. package/dist/chunks/{date-picker-DooielHi.cjs → date-picker-W9om1j7A.cjs} +39 -16
  85. package/dist/chunks/date-picker-W9om1j7A.cjs.map +1 -0
  86. package/dist/chunks/{dialog-Cbuf8V0g.cjs → dialog-CYFiWN8M.cjs} +20 -20
  87. package/dist/chunks/dialog-CYFiWN8M.cjs.map +1 -0
  88. package/dist/chunks/{dialog-C6nxSfIl.mjs → dialog-DUWnV9tN.mjs} +20 -20
  89. package/dist/chunks/dialog-DUWnV9tN.mjs.map +1 -0
  90. package/dist/chunks/{drawer-Dn0u8Sck.cjs → drawer-CLjsYdxN.cjs} +39 -22
  91. package/dist/chunks/drawer-CLjsYdxN.cjs.map +1 -0
  92. package/dist/chunks/drawer-D82Jz6KO.mjs +122 -0
  93. package/dist/chunks/drawer-D82Jz6KO.mjs.map +1 -0
  94. package/dist/chunks/{form-TwlDrshv.mjs → form-B2vcaHwh.mjs} +4 -4
  95. package/dist/chunks/form-B2vcaHwh.mjs.map +1 -0
  96. package/dist/chunks/{form-DcEuk721.cjs → form-CzH9GQc6.cjs} +4 -4
  97. package/dist/chunks/form-CzH9GQc6.cjs.map +1 -0
  98. package/dist/chunks/{gradual-blur-2jVhPcND.cjs → gradual-blur-B9GoY8o1.cjs} +1 -1
  99. package/dist/chunks/{gradual-blur-2jVhPcND.cjs.map → gradual-blur-B9GoY8o1.cjs.map} +1 -1
  100. package/dist/chunks/{gradual-blur-jTzKCmAV.mjs → gradual-blur-Bl3dOMEz.mjs} +1 -1
  101. package/dist/chunks/{gradual-blur-jTzKCmAV.mjs.map → gradual-blur-Bl3dOMEz.mjs.map} +1 -1
  102. package/dist/chunks/{hover-card-KjWMnvt_.cjs → hover-card-v0QwmVBU.cjs} +9 -4
  103. package/dist/chunks/hover-card-v0QwmVBU.cjs.map +1 -0
  104. package/dist/chunks/{hover-card-DwTVfjgN.mjs → hover-card-xqwpmZNm.mjs} +9 -4
  105. package/dist/chunks/{hover-card-KjWMnvt_.cjs.map → hover-card-xqwpmZNm.mjs.map} +1 -1
  106. package/dist/chunks/{icons-DYkpqWYG.cjs → icons-BxIzP2jd.cjs} +131 -8
  107. package/dist/chunks/icons-BxIzP2jd.cjs.map +1 -0
  108. package/dist/chunks/{icons-CrM6pFkv.mjs → icons-DuumN7z-.mjs} +108 -9
  109. package/dist/chunks/icons-DuumN7z-.mjs.map +1 -0
  110. package/dist/chunks/{input-CoRHoZkB.cjs → input-D9qZNqXV.cjs} +8 -8
  111. package/dist/chunks/input-D9qZNqXV.cjs.map +1 -0
  112. package/dist/chunks/{input-ChhwdNGk.mjs → input-wNqevfQ4.mjs} +8 -8
  113. package/dist/chunks/input-wNqevfQ4.mjs.map +1 -0
  114. package/dist/chunks/{label-EciNc4hO.cjs → label-BWPEGVam.cjs} +1 -1
  115. package/dist/chunks/{label-EciNc4hO.cjs.map → label-BWPEGVam.cjs.map} +1 -1
  116. package/dist/chunks/{label-JZn7PmtR.mjs → label-KPA-yYOF.mjs} +1 -1
  117. package/dist/chunks/{label-JZn7PmtR.mjs.map → label-KPA-yYOF.mjs.map} +1 -1
  118. package/dist/chunks/{loading-DPNa_X3c.mjs → loading-S1TdIrbB.mjs} +2 -2
  119. package/dist/chunks/{loading-DPNa_X3c.mjs.map → loading-S1TdIrbB.mjs.map} +1 -1
  120. package/dist/chunks/{loading-Cqgps3nf.cjs → loading-q7IEg56I.cjs} +2 -2
  121. package/dist/chunks/{loading-Cqgps3nf.cjs.map → loading-q7IEg56I.cjs.map} +1 -1
  122. package/dist/chunks/multi-select-combobox-ELSH_Xr4.mjs +132 -0
  123. package/dist/chunks/multi-select-combobox-ELSH_Xr4.mjs.map +1 -0
  124. package/dist/chunks/multi-select-combobox-UW0X15W7.cjs +139 -0
  125. package/dist/chunks/multi-select-combobox-UW0X15W7.cjs.map +1 -0
  126. package/dist/chunks/{otp-input-DaQDfI9C.cjs → otp-input-B6zzOEqw.cjs} +13 -14
  127. package/dist/chunks/otp-input-B6zzOEqw.cjs.map +1 -0
  128. package/dist/chunks/{otp-input-CNungc1j.mjs → otp-input-Bg4nQG6x.mjs} +13 -14
  129. package/dist/chunks/otp-input-Bg4nQG6x.mjs.map +1 -0
  130. package/dist/chunks/{overlay-BfUR77DT.cjs → overlay-DWNTyQzK.cjs} +1 -1
  131. package/dist/chunks/{overlay-BfUR77DT.cjs.map → overlay-DWNTyQzK.cjs.map} +1 -1
  132. package/dist/chunks/{overlay-CpdakhXI.mjs → overlay-TycCIFOu.mjs} +1 -1
  133. package/dist/chunks/{overlay-CpdakhXI.mjs.map → overlay-TycCIFOu.mjs.map} +1 -1
  134. package/dist/chunks/{password-strength-meter-xtMqhhFg.mjs → password-strength-meter-CbNSBuh_.mjs} +10 -10
  135. package/dist/chunks/password-strength-meter-CbNSBuh_.mjs.map +1 -0
  136. package/dist/chunks/{password-strength-meter-u4YI00zE.cjs → password-strength-meter-DxMV6GAs.cjs} +10 -10
  137. package/dist/chunks/password-strength-meter-DxMV6GAs.cjs.map +1 -0
  138. package/dist/chunks/progress-bar-C1OvQ-NI.cjs +96 -0
  139. package/dist/chunks/progress-bar-C1OvQ-NI.cjs.map +1 -0
  140. package/dist/chunks/progress-bar-C9FZDrju.mjs +89 -0
  141. package/dist/chunks/progress-bar-C9FZDrju.mjs.map +1 -0
  142. package/dist/chunks/{radio-C-fPZgSY.mjs → radio-C9w_CoiY.mjs} +9 -9
  143. package/dist/chunks/radio-C9w_CoiY.mjs.map +1 -0
  144. package/dist/chunks/{radio-mCgvEhOR.cjs → radio-jMHDvaMY.cjs} +9 -9
  145. package/dist/chunks/radio-jMHDvaMY.cjs.map +1 -0
  146. package/dist/chunks/select-D71tk6-I.mjs +152 -0
  147. package/dist/chunks/select-D71tk6-I.mjs.map +1 -0
  148. package/dist/chunks/select-WC_kPqUP.cjs +158 -0
  149. package/dist/chunks/select-WC_kPqUP.cjs.map +1 -0
  150. package/dist/chunks/{skeleton-D1S4RyeL.mjs → skeleton-BhYWOp0Q.mjs} +1 -1
  151. package/dist/chunks/{skeleton-D1S4RyeL.mjs.map → skeleton-BhYWOp0Q.mjs.map} +1 -1
  152. package/dist/chunks/{skeleton-C-NHrM-w.cjs → skeleton-DTXpHYYB.cjs} +1 -1
  153. package/dist/chunks/{skeleton-C-NHrM-w.cjs.map → skeleton-DTXpHYYB.cjs.map} +1 -1
  154. package/dist/chunks/{spinners-hf553hP9.mjs → spinners-BBCWD2gw.mjs} +2 -2
  155. package/dist/chunks/{spinners-hf553hP9.mjs.map → spinners-BBCWD2gw.mjs.map} +1 -1
  156. package/dist/chunks/{spinners-CU3bLaoo.cjs → spinners-BL4ERCCw.cjs} +2 -2
  157. package/dist/chunks/{spinners-CU3bLaoo.cjs.map → spinners-BL4ERCCw.cjs.map} +1 -1
  158. package/dist/chunks/{splash-cursor-Dpzl_YXx.cjs → splash-cursor-BVSmbcIX.cjs} +9 -8
  159. package/dist/chunks/splash-cursor-BVSmbcIX.cjs.map +1 -0
  160. package/dist/chunks/{splash-cursor-9BsoQZl0.mjs → splash-cursor-rSrTnawZ.mjs} +9 -8
  161. package/dist/chunks/splash-cursor-rSrTnawZ.mjs.map +1 -0
  162. package/dist/chunks/{spotlight-card-Bl0aXnT4.mjs → spotlight-card-BpZLMOp6.mjs} +1 -1
  163. package/dist/chunks/{spotlight-card-Bl0aXnT4.mjs.map → spotlight-card-BpZLMOp6.mjs.map} +1 -1
  164. package/dist/chunks/{spotlight-card-SUhrgstF.cjs → spotlight-card-DS1dy1W3.cjs} +1 -1
  165. package/dist/chunks/{spotlight-card-SUhrgstF.cjs.map → spotlight-card-DS1dy1W3.cjs.map} +1 -1
  166. package/dist/chunks/{stepper-uz8iRzlY.mjs → stepper-D4yQsQB0.mjs} +14 -14
  167. package/dist/chunks/stepper-D4yQsQB0.mjs.map +1 -0
  168. package/dist/chunks/{stepper-BDz6PkjV.cjs → stepper-fY-Sx72k.cjs} +14 -14
  169. package/dist/chunks/stepper-fY-Sx72k.cjs.map +1 -0
  170. package/dist/chunks/{sun-to-moon-button-3E6qah0o.mjs → sun-to-moon-button-B2Aje05o.mjs} +3 -3
  171. package/dist/chunks/{sun-to-moon-button-3E6qah0o.mjs.map → sun-to-moon-button-B2Aje05o.mjs.map} +1 -1
  172. package/dist/chunks/{sun-to-moon-button-B__3FWnK.cjs → sun-to-moon-button-BmFwRBye.cjs} +3 -3
  173. package/dist/chunks/{sun-to-moon-button-B__3FWnK.cjs.map → sun-to-moon-button-BmFwRBye.cjs.map} +1 -1
  174. package/dist/chunks/{switch-y8oWcyLp.cjs → switch-C5otDb4c.cjs} +3 -3
  175. package/dist/chunks/switch-C5otDb4c.cjs.map +1 -0
  176. package/dist/chunks/{switch-DYLavKgf.mjs → switch-DOVl_i_s.mjs} +3 -3
  177. package/dist/chunks/switch-DOVl_i_s.mjs.map +1 -0
  178. package/dist/chunks/textarea-CAUsyu4-.cjs +63 -0
  179. package/dist/chunks/textarea-CAUsyu4-.cjs.map +1 -0
  180. package/dist/chunks/textarea-CU5C-Zw9.mjs +57 -0
  181. package/dist/chunks/textarea-CU5C-Zw9.mjs.map +1 -0
  182. package/dist/chunks/{theme-CBtWIFMT.cjs → theme-7DWLxJK_.cjs} +4 -2
  183. package/dist/chunks/theme-7DWLxJK_.cjs.map +1 -0
  184. package/dist/chunks/{theme-Bwu0HKqZ.mjs → theme-BceKeYhw.mjs} +4 -2
  185. package/dist/chunks/theme-BceKeYhw.mjs.map +1 -0
  186. package/dist/chunks/{toast-C8JRhbSo.mjs → toast-CvfP7PUP.mjs} +20 -20
  187. package/dist/chunks/toast-CvfP7PUP.mjs.map +1 -0
  188. package/dist/chunks/{toast-DWOwpD2F.cjs → toast-Ds7_19Ap.cjs} +20 -20
  189. package/dist/chunks/toast-Ds7_19Ap.cjs.map +1 -0
  190. package/dist/chunks/{tooltip-YtA_66_1.mjs → tooltip-efHETBo1.mjs} +1 -1
  191. package/dist/chunks/{tooltip-YtA_66_1.mjs.map → tooltip-efHETBo1.mjs.map} +1 -1
  192. package/dist/chunks/{tooltip-BHXNmXsa.cjs → tooltip-nkIqViGk.cjs} +1 -1
  193. package/dist/chunks/{tooltip-BHXNmXsa.cjs.map → tooltip-nkIqViGk.cjs.map} +1 -1
  194. package/dist/chunks/{typography-BzprBnQc.mjs → typography-CLu6Hx9j.mjs} +7 -3
  195. package/dist/chunks/{typography-BzprBnQc.mjs.map → typography-CLu6Hx9j.mjs.map} +1 -1
  196. package/dist/chunks/{typography-3wSx67DZ.cjs → typography-DaLu9tty.cjs} +7 -3
  197. package/dist/chunks/{typography-3wSx67DZ.cjs.map → typography-DaLu9tty.cjs.map} +1 -1
  198. package/dist/color-palette.cjs +1 -1
  199. package/dist/color-palette.mjs +1 -1
  200. package/dist/colors.css +121 -186
  201. package/dist/combobox.cjs +1 -1
  202. package/dist/combobox.mjs +1 -1
  203. package/dist/components/data-display/charts/AreaChart.d.ts.map +1 -1
  204. package/dist/components/data-display/charts/BarChart.d.ts.map +1 -1
  205. package/dist/components/data-display/charts/NeonLineChart.d.ts.map +1 -1
  206. package/dist/components/data-display/charts/PieChart.d.ts.map +1 -1
  207. package/dist/components/data-display/charts/StackedBarChart.d.ts.map +1 -1
  208. package/dist/components/data-display/charts/ThinBreakdownBar.d.ts.map +1 -1
  209. package/dist/components/data-display/charts/chartPalette.d.ts +10 -0
  210. package/dist/components/data-display/charts/chartPalette.d.ts.map +1 -0
  211. package/dist/components/data-display/charts/index.d.ts +2 -0
  212. package/dist/components/data-display/charts/index.d.ts.map +1 -1
  213. package/dist/components/data-display/chip/Chip.d.ts.map +1 -1
  214. package/dist/components/data-display/color-palette/ColorPalette.d.ts.map +1 -1
  215. package/dist/components/data-display/data-table/DataTable.d.ts +17 -10
  216. package/dist/components/data-display/data-table/DataTable.d.ts.map +1 -1
  217. package/dist/components/data-display/data-table/index.d.ts +1 -1
  218. package/dist/components/data-display/data-table/index.d.ts.map +1 -1
  219. package/dist/components/data-display/index.d.ts +1 -0
  220. package/dist/components/data-display/index.d.ts.map +1 -1
  221. package/dist/components/data-display/progress-bar/ProgressBar.d.ts +18 -0
  222. package/dist/components/data-display/progress-bar/ProgressBar.d.ts.map +1 -0
  223. package/dist/components/data-display/progress-bar/index.d.ts +3 -0
  224. package/dist/components/data-display/progress-bar/index.d.ts.map +1 -0
  225. package/dist/components/effects/ascii-text/ASCIIText.d.ts.map +1 -1
  226. package/dist/components/effects/border-beam/BorderBeam.d.ts.map +1 -1
  227. package/dist/components/effects/chroma-grid/ChromaGrid.d.ts.map +1 -1
  228. package/dist/components/effects/splash-cursor/SplashCursor.d.ts.map +1 -1
  229. package/dist/components/forms/combobox/Combobox.d.ts.map +1 -1
  230. package/dist/components/forms/date-picker/DatePicker.d.ts.map +1 -1
  231. package/dist/components/forms/input/Input.d.ts.map +1 -1
  232. package/dist/components/forms/multi-select-combobox/MultiSelectCombobox.d.ts.map +1 -1
  233. package/dist/components/forms/otp-input/OTPInput.d.ts.map +1 -1
  234. package/dist/components/forms/password-strength-meter/PasswordCriteria.d.ts.map +1 -1
  235. package/dist/components/forms/select/Select.d.ts.map +1 -1
  236. package/dist/components/forms/select/types.d.ts +2 -0
  237. package/dist/components/forms/select/types.d.ts.map +1 -1
  238. package/dist/components/forms/textarea/Textarea.d.ts.map +1 -1
  239. package/dist/components/icons/ColumnsIcon.d.ts +9 -0
  240. package/dist/components/icons/ColumnsIcon.d.ts.map +1 -0
  241. package/dist/components/icons/MailIcon.d.ts +9 -0
  242. package/dist/components/icons/MailIcon.d.ts.map +1 -0
  243. package/dist/components/icons/PlayIcon.d.ts +9 -0
  244. package/dist/components/icons/PlayIcon.d.ts.map +1 -0
  245. package/dist/components/icons/ZapIcon.d.ts +9 -0
  246. package/dist/components/icons/ZapIcon.d.ts.map +1 -0
  247. package/dist/components/icons/index.d.ts +4 -0
  248. package/dist/components/icons/index.d.ts.map +1 -1
  249. package/dist/components/navigation/accordion/Accordion.d.ts.map +1 -1
  250. package/dist/components/overlays/drawer/Drawer.d.ts.map +1 -1
  251. package/dist/components/overlays/hover-card/HoverCard.d.ts.map +1 -1
  252. package/dist/components/typography/Typography.d.ts.map +1 -1
  253. package/dist/data-table.cjs +1 -1
  254. package/dist/data-table.mjs +1 -1
  255. package/dist/date-picker.cjs +1 -1
  256. package/dist/date-picker.mjs +1 -1
  257. package/dist/dialog.cjs +1 -1
  258. package/dist/dialog.mjs +1 -1
  259. package/dist/docs.cjs +50 -4
  260. package/dist/docs.cjs.map +1 -1
  261. package/dist/docs.d.ts +59 -9
  262. package/dist/docs.d.ts.map +1 -1
  263. package/dist/docs.mjs +50 -4
  264. package/dist/docs.mjs.map +1 -1
  265. package/dist/drawer.cjs +1 -1
  266. package/dist/drawer.mjs +1 -1
  267. package/dist/fonts.css +5 -0
  268. package/dist/form.cjs +1 -1
  269. package/dist/form.mjs +1 -1
  270. package/dist/foundation.css +3 -3
  271. package/dist/foundations/theme/ThemeProvider.d.ts +1 -0
  272. package/dist/foundations/theme/ThemeProvider.d.ts.map +1 -1
  273. package/dist/gradual-blur.cjs +1 -1
  274. package/dist/gradual-blur.mjs +1 -1
  275. package/dist/hover-card.cjs +1 -1
  276. package/dist/hover-card.mjs +1 -1
  277. package/dist/icons.cjs +5 -1
  278. package/dist/icons.mjs +2 -2
  279. package/dist/index.cjs +50 -41
  280. package/dist/index.cjs.map +1 -1
  281. package/dist/index.d.ts +5 -3
  282. package/dist/index.d.ts.map +1 -1
  283. package/dist/index.mjs +43 -42
  284. package/dist/index.mjs.map +1 -1
  285. package/dist/input.cjs +1 -1
  286. package/dist/input.mjs +1 -1
  287. package/dist/label.cjs +1 -1
  288. package/dist/label.mjs +1 -1
  289. package/dist/loading.cjs +1 -1
  290. package/dist/loading.mjs +1 -1
  291. package/dist/multi-select-combobox.cjs +1 -1
  292. package/dist/multi-select-combobox.mjs +1 -1
  293. package/dist/otp-input.cjs +1 -1
  294. package/dist/otp-input.mjs +1 -1
  295. package/dist/password-strength-meter.cjs +1 -1
  296. package/dist/password-strength-meter.mjs +1 -1
  297. package/dist/progress-bar.cjs +3 -0
  298. package/dist/progress-bar.d.ts +2 -0
  299. package/dist/progress-bar.mjs +2 -0
  300. package/dist/radio.cjs +1 -1
  301. package/dist/radio.mjs +1 -1
  302. package/dist/select.cjs +1 -1
  303. package/dist/select.mjs +1 -1
  304. package/dist/skeleton.cjs +1 -1
  305. package/dist/skeleton.mjs +1 -1
  306. package/dist/spinners.cjs +1 -1
  307. package/dist/spinners.mjs +1 -1
  308. package/dist/splash-cursor.cjs +1 -1
  309. package/dist/splash-cursor.mjs +1 -1
  310. package/dist/spotlight-card.cjs +1 -1
  311. package/dist/spotlight-card.mjs +1 -1
  312. package/dist/stepper.cjs +1 -1
  313. package/dist/stepper.mjs +1 -1
  314. package/dist/sun-to-moon-button.cjs +1 -1
  315. package/dist/sun-to-moon-button.mjs +1 -1
  316. package/dist/switch.cjs +1 -1
  317. package/dist/switch.mjs +1 -1
  318. package/dist/textarea.cjs +1 -1
  319. package/dist/textarea.mjs +1 -1
  320. package/dist/theme.cjs +1 -1
  321. package/dist/theme.mjs +1 -1
  322. package/dist/toast.cjs +1 -1
  323. package/dist/toast.mjs +1 -1
  324. package/dist/tokens.css +592 -0
  325. package/dist/tooltip.cjs +1 -1
  326. package/dist/tooltip.mjs +1 -1
  327. package/dist/typography.cjs +1 -1
  328. package/dist/typography.mjs +1 -1
  329. package/package.json +19 -5
  330. package/dist/chunks/accordion-BZ5hyz0_.cjs.map +0 -1
  331. package/dist/chunks/accordion-C_0oGZkZ.mjs.map +0 -1
  332. package/dist/chunks/alert-BdBDWqBN.cjs.map +0 -1
  333. package/dist/chunks/alert-DeVa-NR1.mjs.map +0 -1
  334. package/dist/chunks/ascii-text-BzQCLfya.mjs.map +0 -1
  335. package/dist/chunks/ascii-text-D6lVHWph.cjs.map +0 -1
  336. package/dist/chunks/button-BH1eUjae.cjs.map +0 -1
  337. package/dist/chunks/button-CmNEMp_O.mjs.map +0 -1
  338. package/dist/chunks/card-CzstAQYy.mjs.map +0 -1
  339. package/dist/chunks/card-DZGM4zLx.cjs.map +0 -1
  340. package/dist/chunks/charts-Bynf6x07.mjs +0 -448
  341. package/dist/chunks/charts-Bynf6x07.mjs.map +0 -1
  342. package/dist/chunks/charts-UYl7Ecqv.cjs +0 -485
  343. package/dist/chunks/charts-UYl7Ecqv.cjs.map +0 -1
  344. package/dist/chunks/checkbox-B3eIojWs.mjs.map +0 -1
  345. package/dist/chunks/checkbox-DQmZwRTt.cjs.map +0 -1
  346. package/dist/chunks/chip-BH6wzwat.cjs.map +0 -1
  347. package/dist/chunks/chip-cZ7-HmWw.mjs.map +0 -1
  348. package/dist/chunks/chroma-grid-CC_fFzxO.mjs.map +0 -1
  349. package/dist/chunks/chroma-grid-DtsqM4LW.cjs.map +0 -1
  350. package/dist/chunks/color-palette-Cz7vqbil.cjs +0 -1156
  351. package/dist/chunks/color-palette-Cz7vqbil.cjs.map +0 -1
  352. package/dist/chunks/color-palette-yadpDCUw.mjs +0 -1150
  353. package/dist/chunks/color-palette-yadpDCUw.mjs.map +0 -1
  354. package/dist/chunks/combobox-B9Nzlhu3.mjs +0 -108
  355. package/dist/chunks/combobox-B9Nzlhu3.mjs.map +0 -1
  356. package/dist/chunks/combobox-mAvOcg-E.cjs.map +0 -1
  357. package/dist/chunks/data-table-BRcGhJDf.cjs.map +0 -1
  358. package/dist/chunks/data-table-Dp0t_I_z.mjs.map +0 -1
  359. package/dist/chunks/date-picker-BWBkr6LG.mjs.map +0 -1
  360. package/dist/chunks/date-picker-DooielHi.cjs.map +0 -1
  361. package/dist/chunks/dialog-C6nxSfIl.mjs.map +0 -1
  362. package/dist/chunks/dialog-Cbuf8V0g.cjs.map +0 -1
  363. package/dist/chunks/drawer-DIuvgqTA.mjs +0 -105
  364. package/dist/chunks/drawer-DIuvgqTA.mjs.map +0 -1
  365. package/dist/chunks/drawer-Dn0u8Sck.cjs.map +0 -1
  366. package/dist/chunks/form-DcEuk721.cjs.map +0 -1
  367. package/dist/chunks/form-TwlDrshv.mjs.map +0 -1
  368. package/dist/chunks/hover-card-DwTVfjgN.mjs.map +0 -1
  369. package/dist/chunks/icons-CrM6pFkv.mjs.map +0 -1
  370. package/dist/chunks/icons-DYkpqWYG.cjs.map +0 -1
  371. package/dist/chunks/input-ChhwdNGk.mjs.map +0 -1
  372. package/dist/chunks/input-CoRHoZkB.cjs.map +0 -1
  373. package/dist/chunks/multi-select-combobox-BPRTZVF6.mjs +0 -108
  374. package/dist/chunks/multi-select-combobox-BPRTZVF6.mjs.map +0 -1
  375. package/dist/chunks/multi-select-combobox-DiMwJxj_.cjs +0 -115
  376. package/dist/chunks/multi-select-combobox-DiMwJxj_.cjs.map +0 -1
  377. package/dist/chunks/otp-input-CNungc1j.mjs.map +0 -1
  378. package/dist/chunks/otp-input-DaQDfI9C.cjs.map +0 -1
  379. package/dist/chunks/password-strength-meter-u4YI00zE.cjs.map +0 -1
  380. package/dist/chunks/password-strength-meter-xtMqhhFg.mjs.map +0 -1
  381. package/dist/chunks/radio-C-fPZgSY.mjs.map +0 -1
  382. package/dist/chunks/radio-mCgvEhOR.cjs.map +0 -1
  383. package/dist/chunks/select-BB-pOzI2.mjs +0 -116
  384. package/dist/chunks/select-BB-pOzI2.mjs.map +0 -1
  385. package/dist/chunks/select-BwelAQc1.cjs +0 -122
  386. package/dist/chunks/select-BwelAQc1.cjs.map +0 -1
  387. package/dist/chunks/splash-cursor-9BsoQZl0.mjs.map +0 -1
  388. package/dist/chunks/splash-cursor-Dpzl_YXx.cjs.map +0 -1
  389. package/dist/chunks/stepper-BDz6PkjV.cjs.map +0 -1
  390. package/dist/chunks/stepper-uz8iRzlY.mjs.map +0 -1
  391. package/dist/chunks/switch-DYLavKgf.mjs.map +0 -1
  392. package/dist/chunks/switch-y8oWcyLp.cjs.map +0 -1
  393. package/dist/chunks/textarea-BWkUVpm3.cjs +0 -66
  394. package/dist/chunks/textarea-BWkUVpm3.cjs.map +0 -1
  395. package/dist/chunks/textarea-Bxqe70TW.mjs +0 -60
  396. package/dist/chunks/textarea-Bxqe70TW.mjs.map +0 -1
  397. package/dist/chunks/theme-Bwu0HKqZ.mjs.map +0 -1
  398. package/dist/chunks/theme-CBtWIFMT.cjs.map +0 -1
  399. package/dist/chunks/toast-C8JRhbSo.mjs.map +0 -1
  400. package/dist/chunks/toast-DWOwpD2F.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"loading-DPNa_X3c.mjs","names":[],"sources":["../../src/components/data-display/loading/Loading.tsx"],"sourcesContent":["import { LoaderIcon, RingLoaderIcon } from \"../../icons\";\n\nexport type LoadingVariant =\n | \"spinner\"\n | \"dots\"\n | \"pulse\"\n | \"bars\"\n | \"ring\"\n | \"bounce\"\n | \"wave\"\n | \"skeleton\";\n\nexport type LoadingSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nexport interface LoadingProps {\n /** The variant/style of the loading indicator */\n variant?: LoadingVariant;\n /** Size of the loading indicator */\n size?: LoadingSize;\n /** Custom color for the loading indicator */\n color?: string;\n /** Text to display alongside the loading indicator */\n text?: string;\n /** Position of the text relative to the indicator */\n textPosition?: \"right\" | \"bottom\";\n /** Whether to show as a full-screen overlay */\n fullScreen?: boolean;\n /** Whether to show as an overlay within parent container */\n overlay?: boolean;\n /** Custom className */\n className?: string;\n /** Skeleton specific: width */\n skeletonWidth?: string;\n /** Skeleton specific: height */\n skeletonHeight?: string;\n /** Skeleton specific: rounded style */\n skeletonRounded?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"full\";\n}\n\nconst sizeMap: Record<LoadingSize, { container: string; text: string }> = {\n xs: { container: \"w-4 h-4\", text: \"text-xs\" },\n sm: { container: \"w-6 h-6\", text: \"text-sm\" },\n md: { container: \"w-8 h-8\", text: \"text-sm\" },\n lg: { container: \"w-12 h-12\", text: \"text-base\" },\n xl: { container: \"w-16 h-16\", text: \"text-lg\" },\n};\n\n// Spinner - Classic rotating circle\nfunction Spinner({\n size = \"md\",\n color = \"currentColor\",\n}: {\n size?: LoadingSize;\n color?: string;\n}) {\n return (\n <LoaderIcon\n className={`animate-spin ${sizeMap[size].container}`}\n color={color}\n aria-hidden=\"true\"\n />\n );\n}\n\n// Dots - Three bouncing dots\nfunction Dots({\n size = \"md\",\n color = \"currentColor\",\n}: {\n size?: LoadingSize;\n color?: string;\n}) {\n const dotSize = {\n xs: \"w-1.5 h-1.5\",\n sm: \"w-2 h-2\",\n md: \"w-2.5 h-2.5\",\n lg: \"w-3 h-3\",\n xl: \"w-4 h-4\",\n };\n\n return (\n <div className=\"flex items-center gap-1\">\n {[0, 1, 2].map((i) => (\n <div\n key={i}\n className={`${dotSize[size]} rounded-full animate-bounce`}\n style={{\n backgroundColor: color,\n animationDelay: `${i * 0.15}s`,\n animationDuration: \"0.6s\",\n }}\n />\n ))}\n </div>\n );\n}\n\n// Pulse - Pulsing circle\nfunction Pulse({\n size = \"md\",\n color = \"currentColor\",\n}: {\n size?: LoadingSize;\n color?: string;\n}) {\n return (\n <div className={`relative ${sizeMap[size].container}`}>\n <div\n className=\"absolute inset-0 rounded-full animate-ping opacity-75\"\n style={{ backgroundColor: color }}\n />\n <div\n className=\"absolute inset-2 rounded-full\"\n style={{ backgroundColor: color }}\n />\n </div>\n );\n}\n\n// Bars - Audio-style animated bars\nfunction Bars({\n size = \"md\",\n color = \"currentColor\",\n}: {\n size?: LoadingSize;\n color?: string;\n}) {\n const barWidth = {\n xs: \"w-0.5\",\n sm: \"w-1\",\n md: \"w-1.5\",\n lg: \"w-2\",\n xl: \"w-2.5\",\n };\n\n return (\n <div className={`flex items-end gap-0.5 ${sizeMap[size].container}`}>\n {[0, 1, 2, 3, 4].map((i) => (\n <div\n key={i}\n className={`${barWidth[size]} rounded-sm`}\n style={{\n backgroundColor: color,\n animation: \"loading-bars 1s ease-in-out infinite\",\n animationDelay: `${i * 0.1}s`,\n height: \"40%\",\n }}\n />\n ))}\n <style>{`\n @keyframes loading-bars {\n 0%, 100% { height: 40%; }\n 50% { height: 100%; }\n }\n `}</style>\n </div>\n );\n}\n\n// Ring - Rotating ring with gradient\nfunction Ring({\n size = \"md\",\n color = \"currentColor\",\n}: {\n size?: LoadingSize;\n color?: string;\n}) {\n const strokeWidth = {\n xs: 3,\n sm: 3,\n md: 4,\n lg: 4,\n xl: 5,\n };\n\n return (\n <RingLoaderIcon\n className={`animate-spin ${sizeMap[size].container}`}\n color={color}\n strokeWidth={strokeWidth[size]}\n aria-hidden=\"true\"\n />\n );\n}\n\n// Bounce - Three bouncing circles\nfunction Bounce({\n size = \"md\",\n color = \"currentColor\",\n}: {\n size?: LoadingSize;\n color?: string;\n}) {\n const dotSize = {\n xs: \"w-2 h-2\",\n sm: \"w-3 h-3\",\n md: \"w-4 h-4\",\n lg: \"w-5 h-5\",\n xl: \"w-6 h-6\",\n };\n\n return (\n <div className=\"flex items-center gap-1\">\n {[0, 1, 2].map((i) => (\n <div\n key={i}\n className={`${dotSize[size]} rounded-full`}\n style={{\n backgroundColor: color,\n animation: \"loading-bounce 1.4s ease-in-out infinite both\",\n animationDelay: `${i * 0.16}s`,\n }}\n />\n ))}\n <style>{`\n @keyframes loading-bounce {\n 0%, 80%, 100% { transform: scale(0); }\n 40% { transform: scale(1); }\n }\n `}</style>\n </div>\n );\n}\n\n// Wave - Wave animation\nfunction Wave({\n size = \"md\",\n color = \"currentColor\",\n}: {\n size?: LoadingSize;\n color?: string;\n}) {\n const barHeight = {\n xs: \"h-3\",\n sm: \"h-4\",\n md: \"h-6\",\n lg: \"h-8\",\n xl: \"h-10\",\n };\n const barWidth = {\n xs: \"w-0.5\",\n sm: \"w-1\",\n md: \"w-1\",\n lg: \"w-1.5\",\n xl: \"w-2\",\n };\n\n return (\n <div className=\"flex items-center gap-0.5\">\n {[0, 1, 2, 3, 4].map((i) => (\n <div\n key={i}\n className={`${barWidth[size]} ${barHeight[size]} rounded-full`}\n style={{\n backgroundColor: color,\n animation: \"loading-wave 1.2s ease-in-out infinite\",\n animationDelay: `${i * 0.1}s`,\n }}\n />\n ))}\n <style>{`\n @keyframes loading-wave {\n 0%, 40%, 100% { transform: scaleY(0.4); }\n 20% { transform: scaleY(1); }\n }\n `}</style>\n </div>\n );\n}\n\n// Skeleton - Loading placeholder\nfunction Skeleton({\n width = \"100%\",\n height = \"1rem\",\n rounded = \"md\",\n}: {\n width?: string;\n height?: string;\n rounded?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"full\";\n}) {\n const roundedMap = {\n none: \"\",\n sm: \"rounded-sm\",\n md: \"rounded-md\",\n lg: \"rounded-lg\",\n full: \"rounded-full\",\n };\n\n return (\n <div\n className={`animate-pulse bg-neutral-200 dark:bg-neutral-700 ${roundedMap[rounded]}`}\n style={{ width, height }}\n />\n );\n}\n\nexport default function Loading({\n variant = \"spinner\",\n size = \"md\",\n color = \"#7367f0\",\n text,\n textPosition = \"right\",\n fullScreen = false,\n overlay = false,\n className = \"\",\n skeletonWidth,\n skeletonHeight,\n skeletonRounded = \"md\",\n}: LoadingProps) {\n const renderLoader = () => {\n switch (variant) {\n case \"spinner\":\n return <Spinner size={size} color={color} />;\n case \"dots\":\n return <Dots size={size} color={color} />;\n case \"pulse\":\n return <Pulse size={size} color={color} />;\n case \"bars\":\n return <Bars size={size} color={color} />;\n case \"ring\":\n return <Ring size={size} color={color} />;\n case \"bounce\":\n return <Bounce size={size} color={color} />;\n case \"wave\":\n return <Wave size={size} color={color} />;\n case \"skeleton\":\n return (\n <Skeleton\n width={skeletonWidth}\n height={skeletonHeight}\n rounded={skeletonRounded}\n />\n );\n default:\n return <Spinner size={size} color={color} />;\n }\n };\n\n const content = (\n <div\n className={`inline-flex items-center ${\n textPosition === \"bottom\" ? \"flex-col gap-2\" : \"flex-row gap-3\"\n } ${className}`}\n >\n {renderLoader()}\n {text && (\n <span\n className={`${sizeMap[size].text} text-neutral-600 dark:text-neutral-400 font-medium`}\n >\n {text}\n </span>\n )}\n </div>\n );\n\n if (fullScreen) {\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-white/80 dark:bg-neutral-950/80 backdrop-blur-sm\">\n {content}\n </div>\n );\n }\n\n if (overlay) {\n return (\n <div className=\"absolute inset-0 z-10 flex items-center justify-center bg-white/70 dark:bg-neutral-900/70 backdrop-blur-sm rounded-inherit\">\n {content}\n </div>\n );\n }\n\n return content;\n}\n\n// Export individual components for direct use\nexport { Spinner, Dots, Pulse, Bars, Ring, Bounce, Wave, Skeleton };\n"],"mappings":"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"}
1
+ {"version":3,"file":"loading-S1TdIrbB.mjs","names":[],"sources":["../../src/components/data-display/loading/Loading.tsx"],"sourcesContent":["import { LoaderIcon, RingLoaderIcon } from \"../../icons\";\n\nexport type LoadingVariant =\n | \"spinner\"\n | \"dots\"\n | \"pulse\"\n | \"bars\"\n | \"ring\"\n | \"bounce\"\n | \"wave\"\n | \"skeleton\";\n\nexport type LoadingSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nexport interface LoadingProps {\n /** The variant/style of the loading indicator */\n variant?: LoadingVariant;\n /** Size of the loading indicator */\n size?: LoadingSize;\n /** Custom color for the loading indicator */\n color?: string;\n /** Text to display alongside the loading indicator */\n text?: string;\n /** Position of the text relative to the indicator */\n textPosition?: \"right\" | \"bottom\";\n /** Whether to show as a full-screen overlay */\n fullScreen?: boolean;\n /** Whether to show as an overlay within parent container */\n overlay?: boolean;\n /** Custom className */\n className?: string;\n /** Skeleton specific: width */\n skeletonWidth?: string;\n /** Skeleton specific: height */\n skeletonHeight?: string;\n /** Skeleton specific: rounded style */\n skeletonRounded?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"full\";\n}\n\nconst sizeMap: Record<LoadingSize, { container: string; text: string }> = {\n xs: { container: \"w-4 h-4\", text: \"text-xs\" },\n sm: { container: \"w-6 h-6\", text: \"text-sm\" },\n md: { container: \"w-8 h-8\", text: \"text-sm\" },\n lg: { container: \"w-12 h-12\", text: \"text-base\" },\n xl: { container: \"w-16 h-16\", text: \"text-lg\" },\n};\n\n// Spinner - Classic rotating circle\nfunction Spinner({\n size = \"md\",\n color = \"currentColor\",\n}: {\n size?: LoadingSize;\n color?: string;\n}) {\n return (\n <LoaderIcon\n className={`animate-spin ${sizeMap[size].container}`}\n color={color}\n aria-hidden=\"true\"\n />\n );\n}\n\n// Dots - Three bouncing dots\nfunction Dots({\n size = \"md\",\n color = \"currentColor\",\n}: {\n size?: LoadingSize;\n color?: string;\n}) {\n const dotSize = {\n xs: \"w-1.5 h-1.5\",\n sm: \"w-2 h-2\",\n md: \"w-2.5 h-2.5\",\n lg: \"w-3 h-3\",\n xl: \"w-4 h-4\",\n };\n\n return (\n <div className=\"flex items-center gap-1\">\n {[0, 1, 2].map((i) => (\n <div\n key={i}\n className={`${dotSize[size]} rounded-full animate-bounce`}\n style={{\n backgroundColor: color,\n animationDelay: `${i * 0.15}s`,\n animationDuration: \"0.6s\",\n }}\n />\n ))}\n </div>\n );\n}\n\n// Pulse - Pulsing circle\nfunction Pulse({\n size = \"md\",\n color = \"currentColor\",\n}: {\n size?: LoadingSize;\n color?: string;\n}) {\n return (\n <div className={`relative ${sizeMap[size].container}`}>\n <div\n className=\"absolute inset-0 rounded-full animate-ping opacity-75\"\n style={{ backgroundColor: color }}\n />\n <div\n className=\"absolute inset-2 rounded-full\"\n style={{ backgroundColor: color }}\n />\n </div>\n );\n}\n\n// Bars - Audio-style animated bars\nfunction Bars({\n size = \"md\",\n color = \"currentColor\",\n}: {\n size?: LoadingSize;\n color?: string;\n}) {\n const barWidth = {\n xs: \"w-0.5\",\n sm: \"w-1\",\n md: \"w-1.5\",\n lg: \"w-2\",\n xl: \"w-2.5\",\n };\n\n return (\n <div className={`flex items-end gap-0.5 ${sizeMap[size].container}`}>\n {[0, 1, 2, 3, 4].map((i) => (\n <div\n key={i}\n className={`${barWidth[size]} rounded-sm`}\n style={{\n backgroundColor: color,\n animation: \"loading-bars 1s ease-in-out infinite\",\n animationDelay: `${i * 0.1}s`,\n height: \"40%\",\n }}\n />\n ))}\n <style>{`\n @keyframes loading-bars {\n 0%, 100% { height: 40%; }\n 50% { height: 100%; }\n }\n `}</style>\n </div>\n );\n}\n\n// Ring - Rotating ring with gradient\nfunction Ring({\n size = \"md\",\n color = \"currentColor\",\n}: {\n size?: LoadingSize;\n color?: string;\n}) {\n const strokeWidth = {\n xs: 3,\n sm: 3,\n md: 4,\n lg: 4,\n xl: 5,\n };\n\n return (\n <RingLoaderIcon\n className={`animate-spin ${sizeMap[size].container}`}\n color={color}\n strokeWidth={strokeWidth[size]}\n aria-hidden=\"true\"\n />\n );\n}\n\n// Bounce - Three bouncing circles\nfunction Bounce({\n size = \"md\",\n color = \"currentColor\",\n}: {\n size?: LoadingSize;\n color?: string;\n}) {\n const dotSize = {\n xs: \"w-2 h-2\",\n sm: \"w-3 h-3\",\n md: \"w-4 h-4\",\n lg: \"w-5 h-5\",\n xl: \"w-6 h-6\",\n };\n\n return (\n <div className=\"flex items-center gap-1\">\n {[0, 1, 2].map((i) => (\n <div\n key={i}\n className={`${dotSize[size]} rounded-full`}\n style={{\n backgroundColor: color,\n animation: \"loading-bounce 1.4s ease-in-out infinite both\",\n animationDelay: `${i * 0.16}s`,\n }}\n />\n ))}\n <style>{`\n @keyframes loading-bounce {\n 0%, 80%, 100% { transform: scale(0); }\n 40% { transform: scale(1); }\n }\n `}</style>\n </div>\n );\n}\n\n// Wave - Wave animation\nfunction Wave({\n size = \"md\",\n color = \"currentColor\",\n}: {\n size?: LoadingSize;\n color?: string;\n}) {\n const barHeight = {\n xs: \"h-3\",\n sm: \"h-4\",\n md: \"h-6\",\n lg: \"h-8\",\n xl: \"h-10\",\n };\n const barWidth = {\n xs: \"w-0.5\",\n sm: \"w-1\",\n md: \"w-1\",\n lg: \"w-1.5\",\n xl: \"w-2\",\n };\n\n return (\n <div className=\"flex items-center gap-0.5\">\n {[0, 1, 2, 3, 4].map((i) => (\n <div\n key={i}\n className={`${barWidth[size]} ${barHeight[size]} rounded-full`}\n style={{\n backgroundColor: color,\n animation: \"loading-wave 1.2s ease-in-out infinite\",\n animationDelay: `${i * 0.1}s`,\n }}\n />\n ))}\n <style>{`\n @keyframes loading-wave {\n 0%, 40%, 100% { transform: scaleY(0.4); }\n 20% { transform: scaleY(1); }\n }\n `}</style>\n </div>\n );\n}\n\n// Skeleton - Loading placeholder\nfunction Skeleton({\n width = \"100%\",\n height = \"1rem\",\n rounded = \"md\",\n}: {\n width?: string;\n height?: string;\n rounded?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"full\";\n}) {\n const roundedMap = {\n none: \"\",\n sm: \"rounded-sm\",\n md: \"rounded-md\",\n lg: \"rounded-lg\",\n full: \"rounded-full\",\n };\n\n return (\n <div\n className={`animate-pulse bg-neutral-200 dark:bg-neutral-700 ${roundedMap[rounded]}`}\n style={{ width, height }}\n />\n );\n}\n\nexport default function Loading({\n variant = \"spinner\",\n size = \"md\",\n color = \"#7367f0\",\n text,\n textPosition = \"right\",\n fullScreen = false,\n overlay = false,\n className = \"\",\n skeletonWidth,\n skeletonHeight,\n skeletonRounded = \"md\",\n}: LoadingProps) {\n const renderLoader = () => {\n switch (variant) {\n case \"spinner\":\n return <Spinner size={size} color={color} />;\n case \"dots\":\n return <Dots size={size} color={color} />;\n case \"pulse\":\n return <Pulse size={size} color={color} />;\n case \"bars\":\n return <Bars size={size} color={color} />;\n case \"ring\":\n return <Ring size={size} color={color} />;\n case \"bounce\":\n return <Bounce size={size} color={color} />;\n case \"wave\":\n return <Wave size={size} color={color} />;\n case \"skeleton\":\n return (\n <Skeleton\n width={skeletonWidth}\n height={skeletonHeight}\n rounded={skeletonRounded}\n />\n );\n default:\n return <Spinner size={size} color={color} />;\n }\n };\n\n const content = (\n <div\n className={`inline-flex items-center ${\n textPosition === \"bottom\" ? \"flex-col gap-2\" : \"flex-row gap-3\"\n } ${className}`}\n >\n {renderLoader()}\n {text && (\n <span\n className={`${sizeMap[size].text} text-neutral-600 dark:text-neutral-400 font-medium`}\n >\n {text}\n </span>\n )}\n </div>\n );\n\n if (fullScreen) {\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-white/80 dark:bg-neutral-950/80 backdrop-blur-sm\">\n {content}\n </div>\n );\n }\n\n if (overlay) {\n return (\n <div className=\"absolute inset-0 z-10 flex items-center justify-center bg-white/70 dark:bg-neutral-900/70 backdrop-blur-sm rounded-inherit\">\n {content}\n </div>\n );\n }\n\n return content;\n}\n\n// Export individual components for direct use\nexport { Spinner, Dots, Pulse, Bars, Ring, Bounce, Wave, Skeleton };\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  require("./chunk-B_GkZjkl.cjs");
2
- const require_icons = require("./icons-DYkpqWYG.cjs");
2
+ const require_icons = require("./icons-BxIzP2jd.cjs");
3
3
  let react_jsx_runtime = require("react/jsx-runtime");
4
4
  //#region src/components/data-display/loading/Loading.tsx
5
5
  var sizeMap = {
@@ -310,4 +310,4 @@ Object.defineProperty(exports, "Wave", {
310
310
  }
311
311
  });
312
312
 
313
- //# sourceMappingURL=loading-Cqgps3nf.cjs.map
313
+ //# sourceMappingURL=loading-q7IEg56I.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"loading-Cqgps3nf.cjs","names":[],"sources":["../../src/components/data-display/loading/Loading.tsx"],"sourcesContent":["import { LoaderIcon, RingLoaderIcon } from \"../../icons\";\n\nexport type LoadingVariant =\n | \"spinner\"\n | \"dots\"\n | \"pulse\"\n | \"bars\"\n | \"ring\"\n | \"bounce\"\n | \"wave\"\n | \"skeleton\";\n\nexport type LoadingSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nexport interface LoadingProps {\n /** The variant/style of the loading indicator */\n variant?: LoadingVariant;\n /** Size of the loading indicator */\n size?: LoadingSize;\n /** Custom color for the loading indicator */\n color?: string;\n /** Text to display alongside the loading indicator */\n text?: string;\n /** Position of the text relative to the indicator */\n textPosition?: \"right\" | \"bottom\";\n /** Whether to show as a full-screen overlay */\n fullScreen?: boolean;\n /** Whether to show as an overlay within parent container */\n overlay?: boolean;\n /** Custom className */\n className?: string;\n /** Skeleton specific: width */\n skeletonWidth?: string;\n /** Skeleton specific: height */\n skeletonHeight?: string;\n /** Skeleton specific: rounded style */\n skeletonRounded?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"full\";\n}\n\nconst sizeMap: Record<LoadingSize, { container: string; text: string }> = {\n xs: { container: \"w-4 h-4\", text: \"text-xs\" },\n sm: { container: \"w-6 h-6\", text: \"text-sm\" },\n md: { container: \"w-8 h-8\", text: \"text-sm\" },\n lg: { container: \"w-12 h-12\", text: \"text-base\" },\n xl: { container: \"w-16 h-16\", text: \"text-lg\" },\n};\n\n// Spinner - Classic rotating circle\nfunction Spinner({\n size = \"md\",\n color = \"currentColor\",\n}: {\n size?: LoadingSize;\n color?: string;\n}) {\n return (\n <LoaderIcon\n className={`animate-spin ${sizeMap[size].container}`}\n color={color}\n aria-hidden=\"true\"\n />\n );\n}\n\n// Dots - Three bouncing dots\nfunction Dots({\n size = \"md\",\n color = \"currentColor\",\n}: {\n size?: LoadingSize;\n color?: string;\n}) {\n const dotSize = {\n xs: \"w-1.5 h-1.5\",\n sm: \"w-2 h-2\",\n md: \"w-2.5 h-2.5\",\n lg: \"w-3 h-3\",\n xl: \"w-4 h-4\",\n };\n\n return (\n <div className=\"flex items-center gap-1\">\n {[0, 1, 2].map((i) => (\n <div\n key={i}\n className={`${dotSize[size]} rounded-full animate-bounce`}\n style={{\n backgroundColor: color,\n animationDelay: `${i * 0.15}s`,\n animationDuration: \"0.6s\",\n }}\n />\n ))}\n </div>\n );\n}\n\n// Pulse - Pulsing circle\nfunction Pulse({\n size = \"md\",\n color = \"currentColor\",\n}: {\n size?: LoadingSize;\n color?: string;\n}) {\n return (\n <div className={`relative ${sizeMap[size].container}`}>\n <div\n className=\"absolute inset-0 rounded-full animate-ping opacity-75\"\n style={{ backgroundColor: color }}\n />\n <div\n className=\"absolute inset-2 rounded-full\"\n style={{ backgroundColor: color }}\n />\n </div>\n );\n}\n\n// Bars - Audio-style animated bars\nfunction Bars({\n size = \"md\",\n color = \"currentColor\",\n}: {\n size?: LoadingSize;\n color?: string;\n}) {\n const barWidth = {\n xs: \"w-0.5\",\n sm: \"w-1\",\n md: \"w-1.5\",\n lg: \"w-2\",\n xl: \"w-2.5\",\n };\n\n return (\n <div className={`flex items-end gap-0.5 ${sizeMap[size].container}`}>\n {[0, 1, 2, 3, 4].map((i) => (\n <div\n key={i}\n className={`${barWidth[size]} rounded-sm`}\n style={{\n backgroundColor: color,\n animation: \"loading-bars 1s ease-in-out infinite\",\n animationDelay: `${i * 0.1}s`,\n height: \"40%\",\n }}\n />\n ))}\n <style>{`\n @keyframes loading-bars {\n 0%, 100% { height: 40%; }\n 50% { height: 100%; }\n }\n `}</style>\n </div>\n );\n}\n\n// Ring - Rotating ring with gradient\nfunction Ring({\n size = \"md\",\n color = \"currentColor\",\n}: {\n size?: LoadingSize;\n color?: string;\n}) {\n const strokeWidth = {\n xs: 3,\n sm: 3,\n md: 4,\n lg: 4,\n xl: 5,\n };\n\n return (\n <RingLoaderIcon\n className={`animate-spin ${sizeMap[size].container}`}\n color={color}\n strokeWidth={strokeWidth[size]}\n aria-hidden=\"true\"\n />\n );\n}\n\n// Bounce - Three bouncing circles\nfunction Bounce({\n size = \"md\",\n color = \"currentColor\",\n}: {\n size?: LoadingSize;\n color?: string;\n}) {\n const dotSize = {\n xs: \"w-2 h-2\",\n sm: \"w-3 h-3\",\n md: \"w-4 h-4\",\n lg: \"w-5 h-5\",\n xl: \"w-6 h-6\",\n };\n\n return (\n <div className=\"flex items-center gap-1\">\n {[0, 1, 2].map((i) => (\n <div\n key={i}\n className={`${dotSize[size]} rounded-full`}\n style={{\n backgroundColor: color,\n animation: \"loading-bounce 1.4s ease-in-out infinite both\",\n animationDelay: `${i * 0.16}s`,\n }}\n />\n ))}\n <style>{`\n @keyframes loading-bounce {\n 0%, 80%, 100% { transform: scale(0); }\n 40% { transform: scale(1); }\n }\n `}</style>\n </div>\n );\n}\n\n// Wave - Wave animation\nfunction Wave({\n size = \"md\",\n color = \"currentColor\",\n}: {\n size?: LoadingSize;\n color?: string;\n}) {\n const barHeight = {\n xs: \"h-3\",\n sm: \"h-4\",\n md: \"h-6\",\n lg: \"h-8\",\n xl: \"h-10\",\n };\n const barWidth = {\n xs: \"w-0.5\",\n sm: \"w-1\",\n md: \"w-1\",\n lg: \"w-1.5\",\n xl: \"w-2\",\n };\n\n return (\n <div className=\"flex items-center gap-0.5\">\n {[0, 1, 2, 3, 4].map((i) => (\n <div\n key={i}\n className={`${barWidth[size]} ${barHeight[size]} rounded-full`}\n style={{\n backgroundColor: color,\n animation: \"loading-wave 1.2s ease-in-out infinite\",\n animationDelay: `${i * 0.1}s`,\n }}\n />\n ))}\n <style>{`\n @keyframes loading-wave {\n 0%, 40%, 100% { transform: scaleY(0.4); }\n 20% { transform: scaleY(1); }\n }\n `}</style>\n </div>\n );\n}\n\n// Skeleton - Loading placeholder\nfunction Skeleton({\n width = \"100%\",\n height = \"1rem\",\n rounded = \"md\",\n}: {\n width?: string;\n height?: string;\n rounded?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"full\";\n}) {\n const roundedMap = {\n none: \"\",\n sm: \"rounded-sm\",\n md: \"rounded-md\",\n lg: \"rounded-lg\",\n full: \"rounded-full\",\n };\n\n return (\n <div\n className={`animate-pulse bg-neutral-200 dark:bg-neutral-700 ${roundedMap[rounded]}`}\n style={{ width, height }}\n />\n );\n}\n\nexport default function Loading({\n variant = \"spinner\",\n size = \"md\",\n color = \"#7367f0\",\n text,\n textPosition = \"right\",\n fullScreen = false,\n overlay = false,\n className = \"\",\n skeletonWidth,\n skeletonHeight,\n skeletonRounded = \"md\",\n}: LoadingProps) {\n const renderLoader = () => {\n switch (variant) {\n case \"spinner\":\n return <Spinner size={size} color={color} />;\n case \"dots\":\n return <Dots size={size} color={color} />;\n case \"pulse\":\n return <Pulse size={size} color={color} />;\n case \"bars\":\n return <Bars size={size} color={color} />;\n case \"ring\":\n return <Ring size={size} color={color} />;\n case \"bounce\":\n return <Bounce size={size} color={color} />;\n case \"wave\":\n return <Wave size={size} color={color} />;\n case \"skeleton\":\n return (\n <Skeleton\n width={skeletonWidth}\n height={skeletonHeight}\n rounded={skeletonRounded}\n />\n );\n default:\n return <Spinner size={size} color={color} />;\n }\n };\n\n const content = (\n <div\n className={`inline-flex items-center ${\n textPosition === \"bottom\" ? \"flex-col gap-2\" : \"flex-row gap-3\"\n } ${className}`}\n >\n {renderLoader()}\n {text && (\n <span\n className={`${sizeMap[size].text} text-neutral-600 dark:text-neutral-400 font-medium`}\n >\n {text}\n </span>\n )}\n </div>\n );\n\n if (fullScreen) {\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-white/80 dark:bg-neutral-950/80 backdrop-blur-sm\">\n {content}\n </div>\n );\n }\n\n if (overlay) {\n return (\n <div className=\"absolute inset-0 z-10 flex items-center justify-center bg-white/70 dark:bg-neutral-900/70 backdrop-blur-sm rounded-inherit\">\n {content}\n </div>\n );\n }\n\n return content;\n}\n\n// Export individual components for direct use\nexport { Spinner, Dots, Pulse, Bars, Ring, Bounce, Wave, Skeleton };\n"],"mappings":"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"}
1
+ {"version":3,"file":"loading-q7IEg56I.cjs","names":[],"sources":["../../src/components/data-display/loading/Loading.tsx"],"sourcesContent":["import { LoaderIcon, RingLoaderIcon } from \"../../icons\";\n\nexport type LoadingVariant =\n | \"spinner\"\n | \"dots\"\n | \"pulse\"\n | \"bars\"\n | \"ring\"\n | \"bounce\"\n | \"wave\"\n | \"skeleton\";\n\nexport type LoadingSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nexport interface LoadingProps {\n /** The variant/style of the loading indicator */\n variant?: LoadingVariant;\n /** Size of the loading indicator */\n size?: LoadingSize;\n /** Custom color for the loading indicator */\n color?: string;\n /** Text to display alongside the loading indicator */\n text?: string;\n /** Position of the text relative to the indicator */\n textPosition?: \"right\" | \"bottom\";\n /** Whether to show as a full-screen overlay */\n fullScreen?: boolean;\n /** Whether to show as an overlay within parent container */\n overlay?: boolean;\n /** Custom className */\n className?: string;\n /** Skeleton specific: width */\n skeletonWidth?: string;\n /** Skeleton specific: height */\n skeletonHeight?: string;\n /** Skeleton specific: rounded style */\n skeletonRounded?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"full\";\n}\n\nconst sizeMap: Record<LoadingSize, { container: string; text: string }> = {\n xs: { container: \"w-4 h-4\", text: \"text-xs\" },\n sm: { container: \"w-6 h-6\", text: \"text-sm\" },\n md: { container: \"w-8 h-8\", text: \"text-sm\" },\n lg: { container: \"w-12 h-12\", text: \"text-base\" },\n xl: { container: \"w-16 h-16\", text: \"text-lg\" },\n};\n\n// Spinner - Classic rotating circle\nfunction Spinner({\n size = \"md\",\n color = \"currentColor\",\n}: {\n size?: LoadingSize;\n color?: string;\n}) {\n return (\n <LoaderIcon\n className={`animate-spin ${sizeMap[size].container}`}\n color={color}\n aria-hidden=\"true\"\n />\n );\n}\n\n// Dots - Three bouncing dots\nfunction Dots({\n size = \"md\",\n color = \"currentColor\",\n}: {\n size?: LoadingSize;\n color?: string;\n}) {\n const dotSize = {\n xs: \"w-1.5 h-1.5\",\n sm: \"w-2 h-2\",\n md: \"w-2.5 h-2.5\",\n lg: \"w-3 h-3\",\n xl: \"w-4 h-4\",\n };\n\n return (\n <div className=\"flex items-center gap-1\">\n {[0, 1, 2].map((i) => (\n <div\n key={i}\n className={`${dotSize[size]} rounded-full animate-bounce`}\n style={{\n backgroundColor: color,\n animationDelay: `${i * 0.15}s`,\n animationDuration: \"0.6s\",\n }}\n />\n ))}\n </div>\n );\n}\n\n// Pulse - Pulsing circle\nfunction Pulse({\n size = \"md\",\n color = \"currentColor\",\n}: {\n size?: LoadingSize;\n color?: string;\n}) {\n return (\n <div className={`relative ${sizeMap[size].container}`}>\n <div\n className=\"absolute inset-0 rounded-full animate-ping opacity-75\"\n style={{ backgroundColor: color }}\n />\n <div\n className=\"absolute inset-2 rounded-full\"\n style={{ backgroundColor: color }}\n />\n </div>\n );\n}\n\n// Bars - Audio-style animated bars\nfunction Bars({\n size = \"md\",\n color = \"currentColor\",\n}: {\n size?: LoadingSize;\n color?: string;\n}) {\n const barWidth = {\n xs: \"w-0.5\",\n sm: \"w-1\",\n md: \"w-1.5\",\n lg: \"w-2\",\n xl: \"w-2.5\",\n };\n\n return (\n <div className={`flex items-end gap-0.5 ${sizeMap[size].container}`}>\n {[0, 1, 2, 3, 4].map((i) => (\n <div\n key={i}\n className={`${barWidth[size]} rounded-sm`}\n style={{\n backgroundColor: color,\n animation: \"loading-bars 1s ease-in-out infinite\",\n animationDelay: `${i * 0.1}s`,\n height: \"40%\",\n }}\n />\n ))}\n <style>{`\n @keyframes loading-bars {\n 0%, 100% { height: 40%; }\n 50% { height: 100%; }\n }\n `}</style>\n </div>\n );\n}\n\n// Ring - Rotating ring with gradient\nfunction Ring({\n size = \"md\",\n color = \"currentColor\",\n}: {\n size?: LoadingSize;\n color?: string;\n}) {\n const strokeWidth = {\n xs: 3,\n sm: 3,\n md: 4,\n lg: 4,\n xl: 5,\n };\n\n return (\n <RingLoaderIcon\n className={`animate-spin ${sizeMap[size].container}`}\n color={color}\n strokeWidth={strokeWidth[size]}\n aria-hidden=\"true\"\n />\n );\n}\n\n// Bounce - Three bouncing circles\nfunction Bounce({\n size = \"md\",\n color = \"currentColor\",\n}: {\n size?: LoadingSize;\n color?: string;\n}) {\n const dotSize = {\n xs: \"w-2 h-2\",\n sm: \"w-3 h-3\",\n md: \"w-4 h-4\",\n lg: \"w-5 h-5\",\n xl: \"w-6 h-6\",\n };\n\n return (\n <div className=\"flex items-center gap-1\">\n {[0, 1, 2].map((i) => (\n <div\n key={i}\n className={`${dotSize[size]} rounded-full`}\n style={{\n backgroundColor: color,\n animation: \"loading-bounce 1.4s ease-in-out infinite both\",\n animationDelay: `${i * 0.16}s`,\n }}\n />\n ))}\n <style>{`\n @keyframes loading-bounce {\n 0%, 80%, 100% { transform: scale(0); }\n 40% { transform: scale(1); }\n }\n `}</style>\n </div>\n );\n}\n\n// Wave - Wave animation\nfunction Wave({\n size = \"md\",\n color = \"currentColor\",\n}: {\n size?: LoadingSize;\n color?: string;\n}) {\n const barHeight = {\n xs: \"h-3\",\n sm: \"h-4\",\n md: \"h-6\",\n lg: \"h-8\",\n xl: \"h-10\",\n };\n const barWidth = {\n xs: \"w-0.5\",\n sm: \"w-1\",\n md: \"w-1\",\n lg: \"w-1.5\",\n xl: \"w-2\",\n };\n\n return (\n <div className=\"flex items-center gap-0.5\">\n {[0, 1, 2, 3, 4].map((i) => (\n <div\n key={i}\n className={`${barWidth[size]} ${barHeight[size]} rounded-full`}\n style={{\n backgroundColor: color,\n animation: \"loading-wave 1.2s ease-in-out infinite\",\n animationDelay: `${i * 0.1}s`,\n }}\n />\n ))}\n <style>{`\n @keyframes loading-wave {\n 0%, 40%, 100% { transform: scaleY(0.4); }\n 20% { transform: scaleY(1); }\n }\n `}</style>\n </div>\n );\n}\n\n// Skeleton - Loading placeholder\nfunction Skeleton({\n width = \"100%\",\n height = \"1rem\",\n rounded = \"md\",\n}: {\n width?: string;\n height?: string;\n rounded?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"full\";\n}) {\n const roundedMap = {\n none: \"\",\n sm: \"rounded-sm\",\n md: \"rounded-md\",\n lg: \"rounded-lg\",\n full: \"rounded-full\",\n };\n\n return (\n <div\n className={`animate-pulse bg-neutral-200 dark:bg-neutral-700 ${roundedMap[rounded]}`}\n style={{ width, height }}\n />\n );\n}\n\nexport default function Loading({\n variant = \"spinner\",\n size = \"md\",\n color = \"#7367f0\",\n text,\n textPosition = \"right\",\n fullScreen = false,\n overlay = false,\n className = \"\",\n skeletonWidth,\n skeletonHeight,\n skeletonRounded = \"md\",\n}: LoadingProps) {\n const renderLoader = () => {\n switch (variant) {\n case \"spinner\":\n return <Spinner size={size} color={color} />;\n case \"dots\":\n return <Dots size={size} color={color} />;\n case \"pulse\":\n return <Pulse size={size} color={color} />;\n case \"bars\":\n return <Bars size={size} color={color} />;\n case \"ring\":\n return <Ring size={size} color={color} />;\n case \"bounce\":\n return <Bounce size={size} color={color} />;\n case \"wave\":\n return <Wave size={size} color={color} />;\n case \"skeleton\":\n return (\n <Skeleton\n width={skeletonWidth}\n height={skeletonHeight}\n rounded={skeletonRounded}\n />\n );\n default:\n return <Spinner size={size} color={color} />;\n }\n };\n\n const content = (\n <div\n className={`inline-flex items-center ${\n textPosition === \"bottom\" ? \"flex-col gap-2\" : \"flex-row gap-3\"\n } ${className}`}\n >\n {renderLoader()}\n {text && (\n <span\n className={`${sizeMap[size].text} text-neutral-600 dark:text-neutral-400 font-medium`}\n >\n {text}\n </span>\n )}\n </div>\n );\n\n if (fullScreen) {\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-white/80 dark:bg-neutral-950/80 backdrop-blur-sm\">\n {content}\n </div>\n );\n }\n\n if (overlay) {\n return (\n <div className=\"absolute inset-0 z-10 flex items-center justify-center bg-white/70 dark:bg-neutral-900/70 backdrop-blur-sm rounded-inherit\">\n {content}\n </div>\n );\n }\n\n return content;\n}\n\n// Export individual components for direct use\nexport { Spinner, Dots, Pulse, Bars, Ring, Bounce, Wave, Skeleton };\n"],"mappings":"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"}
@@ -0,0 +1,132 @@
1
+ import { n as mergeClassNames } from "./utils-ati1KkDb.mjs";
2
+ import { J as CheckIcon, N as ChevronDownIcon, q as CloseIcon } from "./icons-DuumN7z-.mjs";
3
+ import { useEffect, useRef, useState } from "react";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { motion, useMotionTemplate, useMotionValue } from "framer-motion";
6
+ //#region src/components/forms/multi-select-combobox/MultiSelectCombobox.tsx
7
+ var MultiSelectCombobox = ({ options, value = [], onChange, placeholder = "Select...", className, bgClassName = "bg-background-secondary" }) => {
8
+ const [open, setOpen] = useState(false);
9
+ const [search, setSearch] = useState("");
10
+ const [visible, setVisible] = useState(false);
11
+ const ref = useRef(null);
12
+ const mouseX = useMotionValue(0);
13
+ const mouseY = useMotionValue(0);
14
+ const radius = 100;
15
+ const filteredOptions = options.filter((opt) => opt.label.toLowerCase().includes(search.toLowerCase()));
16
+ useEffect(() => {
17
+ const handleClick = (e) => {
18
+ if (ref.current && !ref.current.contains(e.target)) {
19
+ setOpen(false);
20
+ setSearch("");
21
+ }
22
+ };
23
+ if (open) document.addEventListener("mousedown", handleClick);
24
+ return () => document.removeEventListener("mousedown", handleClick);
25
+ }, [open]);
26
+ const handleMouseMove = (event) => {
27
+ const { left, top } = event.currentTarget.getBoundingClientRect();
28
+ mouseX.set(event.clientX - left);
29
+ mouseY.set(event.clientY - top);
30
+ };
31
+ const handleOptionClick = (optionValue) => {
32
+ if (value.includes(optionValue)) onChange(value.filter((v) => v !== optionValue));
33
+ else onChange([...value, optionValue]);
34
+ };
35
+ const handleRemoveTag = (optionValue, e) => {
36
+ e.stopPropagation();
37
+ onChange(value.filter((v) => v !== optionValue));
38
+ };
39
+ const selectedLabels = value.map((v) => options.find((opt) => opt.value === v)?.label).filter(Boolean);
40
+ return /* @__PURE__ */ jsxs("div", {
41
+ ref,
42
+ className: mergeClassNames("relative w-full", className),
43
+ tabIndex: 0,
44
+ children: [/* @__PURE__ */ jsx(motion.div, {
45
+ style: { backgroundImage: useMotionTemplate`
46
+ radial-gradient(
47
+ ${visible ? `${radius}px` : "0px"} circle at ${mouseX}px ${mouseY}px,
48
+ var(--ds-color-accent),
49
+ transparent 90%
50
+ )
51
+ ` },
52
+ onMouseMove: handleMouseMove,
53
+ onMouseEnter: () => setVisible(true),
54
+ onMouseLeave: () => setVisible(false),
55
+ className: "group/multi-combobox rounded-lg border-border p-[2px] transition duration-300 hover:border-accent",
56
+ children: /* @__PURE__ */ jsxs("div", {
57
+ className: mergeClassNames("shadow-input flex min-h-10 w-full cursor-pointer items-center justify-between rounded-md border border-input px-3 py-2 text-sm text-foreground transition duration-400 ease-in-out group-hover/multi-combobox:shadow-none", bgClassName),
58
+ onClick: () => {
59
+ setOpen((o) => {
60
+ if (o) setSearch("");
61
+ return !o;
62
+ });
63
+ },
64
+ children: [/* @__PURE__ */ jsx("div", {
65
+ className: "flex flex-1 flex-wrap gap-1",
66
+ children: selectedLabels.length > 0 ? selectedLabels.map((label, index) => /* @__PURE__ */ jsxs("span", {
67
+ className: "inline-flex items-center gap-1 rounded-md bg-accent-subtle px-2 py-0.5 text-xs font-medium text-accent",
68
+ children: [label, /* @__PURE__ */ jsx("button", {
69
+ type: "button",
70
+ onClick: (e) => handleRemoveTag(value[index], e),
71
+ className: "ml-0.5 rounded-full p-0.5 transition-colors hover:bg-accent/10",
72
+ children: /* @__PURE__ */ jsx(CloseIcon, {
73
+ className: "w-3 h-3",
74
+ "aria-hidden": "true"
75
+ })
76
+ })]
77
+ }, value[index])) : /* @__PURE__ */ jsx("span", {
78
+ className: "text-muted-foreground",
79
+ children: placeholder
80
+ })
81
+ }), /* @__PURE__ */ jsx("span", {
82
+ className: mergeClassNames("ml-2 shrink-0 text-muted-foreground transition-transform duration-300", open ? "rotate-180" : "rotate-0"),
83
+ children: /* @__PURE__ */ jsx(ChevronDownIcon, {
84
+ width: 24,
85
+ height: 24,
86
+ color: "currentColor",
87
+ className: "h-5 w-5"
88
+ })
89
+ })]
90
+ })
91
+ }), open && /* @__PURE__ */ jsxs("div", {
92
+ className: "absolute right-0 left-0 z-20 mt-1 flex max-h-60 flex-col rounded-lg border border-border bg-background-secondary shadow-3 backdrop-blur-xl transition",
93
+ children: [/* @__PURE__ */ jsx("div", {
94
+ className: "sticky top-0 z-10 rounded-t-lg border-b border-border-muted bg-elevated/95 backdrop-blur-sm",
95
+ children: /* @__PURE__ */ jsx("input", {
96
+ autoFocus: true,
97
+ className: "w-full bg-transparent px-3 py-2 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-2 focus-visible:ring-accent",
98
+ placeholder: "Type to search...",
99
+ value: search,
100
+ onChange: (e) => setSearch(e.target.value),
101
+ onClick: (e) => e.stopPropagation()
102
+ })
103
+ }), /* @__PURE__ */ jsxs("div", {
104
+ className: "max-h-80 flex-1 overflow-auto",
105
+ children: [filteredOptions.length === 0 && /* @__PURE__ */ jsx("div", {
106
+ className: "p-3 text-center text-muted-foreground text-sm",
107
+ children: "No options found"
108
+ }), filteredOptions.map((option) => {
109
+ const isSelected = value.includes(option.value);
110
+ return /* @__PURE__ */ jsxs("div", {
111
+ className: mergeClassNames("flex cursor-pointer items-center gap-2 px-3 py-2 text-sm transition", isSelected ? "bg-accent-subtle text-accent" : "text-foreground hover:bg-accent hover:text-on-accent"),
112
+ onClick: () => handleOptionClick(option.value),
113
+ children: [/* @__PURE__ */ jsx("span", {
114
+ className: mergeClassNames("flex h-4 w-4 items-center justify-center rounded border transition", isSelected ? "border-accent bg-accent text-on-accent" : "border-border"),
115
+ children: isSelected && /* @__PURE__ */ jsx(CheckIcon, {
116
+ width: 12,
117
+ height: 12
118
+ })
119
+ }), /* @__PURE__ */ jsx("span", {
120
+ className: "flex-1",
121
+ children: option.label
122
+ })]
123
+ }, option.value);
124
+ })]
125
+ })]
126
+ })]
127
+ });
128
+ };
129
+ //#endregion
130
+ export { MultiSelectCombobox as t };
131
+
132
+ //# sourceMappingURL=multi-select-combobox-ELSH_Xr4.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-select-combobox-ELSH_Xr4.mjs","names":[],"sources":["../../src/components/forms/multi-select-combobox/MultiSelectCombobox.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from \"react\";\nimport { motion, useMotionTemplate, useMotionValue } from \"framer-motion\";\n\nimport { CheckIcon, ChevronDownIcon, CloseIcon } from \"../../icons\";\nimport { mergeClassNames } from \"../../../utils\";\n\nexport interface MultiSelectOption {\n label: string;\n value: string;\n}\n\nexport interface MultiSelectComboboxProps {\n options: MultiSelectOption[];\n value: string[];\n onChange: (values: string[]) => void;\n placeholder?: string;\n className?: string;\n bgClassName?: string;\n}\n\nconst MultiSelectCombobox: React.FC<MultiSelectComboboxProps> = ({\n options,\n value = [],\n onChange,\n placeholder = \"Select...\",\n className,\n bgClassName = \"bg-background-secondary\",\n}) => {\n const [open, setOpen] = useState(false);\n const [search, setSearch] = useState(\"\");\n const [visible, setVisible] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n const mouseX = useMotionValue(0);\n const mouseY = useMotionValue(0);\n const radius = 100;\n\n // Filter options by search\n const filteredOptions = options.filter((opt) =>\n opt.label.toLowerCase().includes(search.toLowerCase()),\n );\n\n // Close dropdown on outside click\n useEffect(() => {\n const handleClick = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) {\n setOpen(false);\n setSearch(\"\");\n }\n };\n if (open) {\n document.addEventListener(\"mousedown\", handleClick);\n }\n return () => document.removeEventListener(\"mousedown\", handleClick);\n }, [open]);\n\n const handleMouseMove = (event: React.MouseEvent<HTMLDivElement>) => {\n const { left, top } = event.currentTarget.getBoundingClientRect();\n mouseX.set(event.clientX - left);\n mouseY.set(event.clientY - top);\n };\n\n const handleOptionClick = (optionValue: string) => {\n if (value.includes(optionValue)) {\n onChange(value.filter((v) => v !== optionValue));\n } else {\n onChange([...value, optionValue]);\n }\n };\n\n const handleRemoveTag = (optionValue: string, e: React.MouseEvent) => {\n e.stopPropagation();\n onChange(value.filter((v) => v !== optionValue));\n };\n\n const selectedLabels = value\n .map((v) => options.find((opt) => opt.value === v)?.label)\n .filter(Boolean);\n\n return (\n <div\n ref={ref}\n className={mergeClassNames(\"relative w-full\", className)}\n tabIndex={0}\n >\n <motion.div\n style={{\n backgroundImage: useMotionTemplate`\n radial-gradient(\n ${visible ? `${radius}px` : \"0px\"} circle at ${mouseX}px ${mouseY}px,\n var(--ds-color-accent),\n transparent 90%\n )\n `,\n }}\n onMouseMove={handleMouseMove}\n onMouseEnter={() => setVisible(true)}\n onMouseLeave={() => setVisible(false)}\n className=\"group/multi-combobox rounded-lg border-border p-[2px] transition duration-300 hover:border-accent\"\n >\n <div\n className={mergeClassNames(\n \"shadow-input flex min-h-10 w-full cursor-pointer items-center justify-between rounded-md border border-input px-3 py-2 text-sm text-foreground transition duration-400 ease-in-out group-hover/multi-combobox:shadow-none\",\n bgClassName,\n )}\n onClick={() => {\n setOpen((o) => {\n if (o) setSearch(\"\");\n return !o;\n });\n }}\n >\n <div className=\"flex flex-1 flex-wrap gap-1\">\n {selectedLabels.length > 0 ? (\n selectedLabels.map((label, index) => (\n <span\n key={value[index]}\n className=\"inline-flex items-center gap-1 rounded-md bg-accent-subtle px-2 py-0.5 text-xs font-medium text-accent\"\n >\n {label}\n <button\n type=\"button\"\n onClick={(e) => handleRemoveTag(value[index], e)}\n className=\"ml-0.5 rounded-full p-0.5 transition-colors hover:bg-accent/10\"\n >\n <CloseIcon className=\"w-3 h-3\" aria-hidden=\"true\" />\n </button>\n </span>\n ))\n ) : (\n <span className=\"text-muted-foreground\">{placeholder}</span>\n )}\n </div>\n <span\n className={mergeClassNames(\n \"ml-2 shrink-0 text-muted-foreground transition-transform duration-300\",\n open ? \"rotate-180\" : \"rotate-0\",\n )}\n >\n <ChevronDownIcon\n width={24}\n height={24}\n color=\"currentColor\"\n className=\"h-5 w-5\"\n />\n </span>\n </div>\n </motion.div>\n {open && (\n <div className=\"absolute right-0 left-0 z-20 mt-1 flex max-h-60 flex-col rounded-lg border border-border bg-background-secondary shadow-3 backdrop-blur-xl transition\">\n {/* Sticky search input */}\n <div className=\"sticky top-0 z-10 rounded-t-lg border-b border-border-muted bg-elevated/95 backdrop-blur-sm\">\n <input\n autoFocus\n className=\"w-full bg-transparent px-3 py-2 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-2 focus-visible:ring-accent\"\n placeholder=\"Type to search...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n onClick={(e) => e.stopPropagation()}\n />\n </div>\n {/* Scrollable options */}\n <div className=\"max-h-80 flex-1 overflow-auto\">\n {filteredOptions.length === 0 && (\n <div className=\"p-3 text-center text-muted-foreground text-sm\">\n No options found\n </div>\n )}\n {filteredOptions.map((option) => {\n const isSelected = value.includes(option.value);\n return (\n <div\n key={option.value}\n className={mergeClassNames(\n \"flex cursor-pointer items-center gap-2 px-3 py-2 text-sm transition\",\n isSelected\n ? \"bg-accent-subtle text-accent\"\n : \"text-foreground hover:bg-accent hover:text-on-accent\",\n )}\n onClick={() => handleOptionClick(option.value)}\n >\n <span\n className={mergeClassNames(\n \"flex h-4 w-4 items-center justify-center rounded border transition\",\n isSelected\n ? \"border-accent bg-accent text-on-accent\"\n : \"border-border\",\n )}\n >\n {isSelected && <CheckIcon width={12} height={12} />}\n </span>\n <span className=\"flex-1\">{option.label}</span>\n </div>\n );\n })}\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport default MultiSelectCombobox;\n"],"mappings":"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"}
@@ -0,0 +1,139 @@
1
+ const require_chunk = require("./chunk-B_GkZjkl.cjs");
2
+ const require_utils = require("./utils-B4SmmY4J.cjs");
3
+ const require_icons = require("./icons-BxIzP2jd.cjs");
4
+ let react = require("react");
5
+ react = require_chunk.__toESM(react);
6
+ let react_jsx_runtime = require("react/jsx-runtime");
7
+ let framer_motion = require("framer-motion");
8
+ //#region src/components/forms/multi-select-combobox/MultiSelectCombobox.tsx
9
+ var MultiSelectCombobox = ({ options, value = [], onChange, placeholder = "Select...", className, bgClassName = "bg-background-secondary" }) => {
10
+ const [open, setOpen] = (0, react.useState)(false);
11
+ const [search, setSearch] = (0, react.useState)("");
12
+ const [visible, setVisible] = (0, react.useState)(false);
13
+ const ref = (0, react.useRef)(null);
14
+ const mouseX = (0, framer_motion.useMotionValue)(0);
15
+ const mouseY = (0, framer_motion.useMotionValue)(0);
16
+ const radius = 100;
17
+ const filteredOptions = options.filter((opt) => opt.label.toLowerCase().includes(search.toLowerCase()));
18
+ (0, react.useEffect)(() => {
19
+ const handleClick = (e) => {
20
+ if (ref.current && !ref.current.contains(e.target)) {
21
+ setOpen(false);
22
+ setSearch("");
23
+ }
24
+ };
25
+ if (open) document.addEventListener("mousedown", handleClick);
26
+ return () => document.removeEventListener("mousedown", handleClick);
27
+ }, [open]);
28
+ const handleMouseMove = (event) => {
29
+ const { left, top } = event.currentTarget.getBoundingClientRect();
30
+ mouseX.set(event.clientX - left);
31
+ mouseY.set(event.clientY - top);
32
+ };
33
+ const handleOptionClick = (optionValue) => {
34
+ if (value.includes(optionValue)) onChange(value.filter((v) => v !== optionValue));
35
+ else onChange([...value, optionValue]);
36
+ };
37
+ const handleRemoveTag = (optionValue, e) => {
38
+ e.stopPropagation();
39
+ onChange(value.filter((v) => v !== optionValue));
40
+ };
41
+ const selectedLabels = value.map((v) => options.find((opt) => opt.value === v)?.label).filter(Boolean);
42
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
43
+ ref,
44
+ className: require_utils.mergeClassNames("relative w-full", className),
45
+ tabIndex: 0,
46
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(framer_motion.motion.div, {
47
+ style: { backgroundImage: framer_motion.useMotionTemplate`
48
+ radial-gradient(
49
+ ${visible ? `${radius}px` : "0px"} circle at ${mouseX}px ${mouseY}px,
50
+ var(--ds-color-accent),
51
+ transparent 90%
52
+ )
53
+ ` },
54
+ onMouseMove: handleMouseMove,
55
+ onMouseEnter: () => setVisible(true),
56
+ onMouseLeave: () => setVisible(false),
57
+ className: "group/multi-combobox rounded-lg border-border p-[2px] transition duration-300 hover:border-accent",
58
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
59
+ className: require_utils.mergeClassNames("shadow-input flex min-h-10 w-full cursor-pointer items-center justify-between rounded-md border border-input px-3 py-2 text-sm text-foreground transition duration-400 ease-in-out group-hover/multi-combobox:shadow-none", bgClassName),
60
+ onClick: () => {
61
+ setOpen((o) => {
62
+ if (o) setSearch("");
63
+ return !o;
64
+ });
65
+ },
66
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
67
+ className: "flex flex-1 flex-wrap gap-1",
68
+ children: selectedLabels.length > 0 ? selectedLabels.map((label, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
69
+ className: "inline-flex items-center gap-1 rounded-md bg-accent-subtle px-2 py-0.5 text-xs font-medium text-accent",
70
+ children: [label, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
71
+ type: "button",
72
+ onClick: (e) => handleRemoveTag(value[index], e),
73
+ className: "ml-0.5 rounded-full p-0.5 transition-colors hover:bg-accent/10",
74
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons.CloseIcon, {
75
+ className: "w-3 h-3",
76
+ "aria-hidden": "true"
77
+ })
78
+ })]
79
+ }, value[index])) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
80
+ className: "text-muted-foreground",
81
+ children: placeholder
82
+ })
83
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
84
+ className: require_utils.mergeClassNames("ml-2 shrink-0 text-muted-foreground transition-transform duration-300", open ? "rotate-180" : "rotate-0"),
85
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons.ChevronDownIcon, {
86
+ width: 24,
87
+ height: 24,
88
+ color: "currentColor",
89
+ className: "h-5 w-5"
90
+ })
91
+ })]
92
+ })
93
+ }), open && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
94
+ className: "absolute right-0 left-0 z-20 mt-1 flex max-h-60 flex-col rounded-lg border border-border bg-background-secondary shadow-3 backdrop-blur-xl transition",
95
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
96
+ className: "sticky top-0 z-10 rounded-t-lg border-b border-border-muted bg-elevated/95 backdrop-blur-sm",
97
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
98
+ autoFocus: true,
99
+ className: "w-full bg-transparent px-3 py-2 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-2 focus-visible:ring-accent",
100
+ placeholder: "Type to search...",
101
+ value: search,
102
+ onChange: (e) => setSearch(e.target.value),
103
+ onClick: (e) => e.stopPropagation()
104
+ })
105
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
106
+ className: "max-h-80 flex-1 overflow-auto",
107
+ children: [filteredOptions.length === 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
108
+ className: "p-3 text-center text-muted-foreground text-sm",
109
+ children: "No options found"
110
+ }), filteredOptions.map((option) => {
111
+ const isSelected = value.includes(option.value);
112
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
113
+ className: require_utils.mergeClassNames("flex cursor-pointer items-center gap-2 px-3 py-2 text-sm transition", isSelected ? "bg-accent-subtle text-accent" : "text-foreground hover:bg-accent hover:text-on-accent"),
114
+ onClick: () => handleOptionClick(option.value),
115
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
116
+ className: require_utils.mergeClassNames("flex h-4 w-4 items-center justify-center rounded border transition", isSelected ? "border-accent bg-accent text-on-accent" : "border-border"),
117
+ children: isSelected && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons.CheckIcon, {
118
+ width: 12,
119
+ height: 12
120
+ })
121
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
122
+ className: "flex-1",
123
+ children: option.label
124
+ })]
125
+ }, option.value);
126
+ })]
127
+ })]
128
+ })]
129
+ });
130
+ };
131
+ //#endregion
132
+ Object.defineProperty(exports, "MultiSelectCombobox", {
133
+ enumerable: true,
134
+ get: function() {
135
+ return MultiSelectCombobox;
136
+ }
137
+ });
138
+
139
+ //# sourceMappingURL=multi-select-combobox-UW0X15W7.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-select-combobox-UW0X15W7.cjs","names":[],"sources":["../../src/components/forms/multi-select-combobox/MultiSelectCombobox.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from \"react\";\nimport { motion, useMotionTemplate, useMotionValue } from \"framer-motion\";\n\nimport { CheckIcon, ChevronDownIcon, CloseIcon } from \"../../icons\";\nimport { mergeClassNames } from \"../../../utils\";\n\nexport interface MultiSelectOption {\n label: string;\n value: string;\n}\n\nexport interface MultiSelectComboboxProps {\n options: MultiSelectOption[];\n value: string[];\n onChange: (values: string[]) => void;\n placeholder?: string;\n className?: string;\n bgClassName?: string;\n}\n\nconst MultiSelectCombobox: React.FC<MultiSelectComboboxProps> = ({\n options,\n value = [],\n onChange,\n placeholder = \"Select...\",\n className,\n bgClassName = \"bg-background-secondary\",\n}) => {\n const [open, setOpen] = useState(false);\n const [search, setSearch] = useState(\"\");\n const [visible, setVisible] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n const mouseX = useMotionValue(0);\n const mouseY = useMotionValue(0);\n const radius = 100;\n\n // Filter options by search\n const filteredOptions = options.filter((opt) =>\n opt.label.toLowerCase().includes(search.toLowerCase()),\n );\n\n // Close dropdown on outside click\n useEffect(() => {\n const handleClick = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) {\n setOpen(false);\n setSearch(\"\");\n }\n };\n if (open) {\n document.addEventListener(\"mousedown\", handleClick);\n }\n return () => document.removeEventListener(\"mousedown\", handleClick);\n }, [open]);\n\n const handleMouseMove = (event: React.MouseEvent<HTMLDivElement>) => {\n const { left, top } = event.currentTarget.getBoundingClientRect();\n mouseX.set(event.clientX - left);\n mouseY.set(event.clientY - top);\n };\n\n const handleOptionClick = (optionValue: string) => {\n if (value.includes(optionValue)) {\n onChange(value.filter((v) => v !== optionValue));\n } else {\n onChange([...value, optionValue]);\n }\n };\n\n const handleRemoveTag = (optionValue: string, e: React.MouseEvent) => {\n e.stopPropagation();\n onChange(value.filter((v) => v !== optionValue));\n };\n\n const selectedLabels = value\n .map((v) => options.find((opt) => opt.value === v)?.label)\n .filter(Boolean);\n\n return (\n <div\n ref={ref}\n className={mergeClassNames(\"relative w-full\", className)}\n tabIndex={0}\n >\n <motion.div\n style={{\n backgroundImage: useMotionTemplate`\n radial-gradient(\n ${visible ? `${radius}px` : \"0px\"} circle at ${mouseX}px ${mouseY}px,\n var(--ds-color-accent),\n transparent 90%\n )\n `,\n }}\n onMouseMove={handleMouseMove}\n onMouseEnter={() => setVisible(true)}\n onMouseLeave={() => setVisible(false)}\n className=\"group/multi-combobox rounded-lg border-border p-[2px] transition duration-300 hover:border-accent\"\n >\n <div\n className={mergeClassNames(\n \"shadow-input flex min-h-10 w-full cursor-pointer items-center justify-between rounded-md border border-input px-3 py-2 text-sm text-foreground transition duration-400 ease-in-out group-hover/multi-combobox:shadow-none\",\n bgClassName,\n )}\n onClick={() => {\n setOpen((o) => {\n if (o) setSearch(\"\");\n return !o;\n });\n }}\n >\n <div className=\"flex flex-1 flex-wrap gap-1\">\n {selectedLabels.length > 0 ? (\n selectedLabels.map((label, index) => (\n <span\n key={value[index]}\n className=\"inline-flex items-center gap-1 rounded-md bg-accent-subtle px-2 py-0.5 text-xs font-medium text-accent\"\n >\n {label}\n <button\n type=\"button\"\n onClick={(e) => handleRemoveTag(value[index], e)}\n className=\"ml-0.5 rounded-full p-0.5 transition-colors hover:bg-accent/10\"\n >\n <CloseIcon className=\"w-3 h-3\" aria-hidden=\"true\" />\n </button>\n </span>\n ))\n ) : (\n <span className=\"text-muted-foreground\">{placeholder}</span>\n )}\n </div>\n <span\n className={mergeClassNames(\n \"ml-2 shrink-0 text-muted-foreground transition-transform duration-300\",\n open ? \"rotate-180\" : \"rotate-0\",\n )}\n >\n <ChevronDownIcon\n width={24}\n height={24}\n color=\"currentColor\"\n className=\"h-5 w-5\"\n />\n </span>\n </div>\n </motion.div>\n {open && (\n <div className=\"absolute right-0 left-0 z-20 mt-1 flex max-h-60 flex-col rounded-lg border border-border bg-background-secondary shadow-3 backdrop-blur-xl transition\">\n {/* Sticky search input */}\n <div className=\"sticky top-0 z-10 rounded-t-lg border-b border-border-muted bg-elevated/95 backdrop-blur-sm\">\n <input\n autoFocus\n className=\"w-full bg-transparent px-3 py-2 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-2 focus-visible:ring-accent\"\n placeholder=\"Type to search...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n onClick={(e) => e.stopPropagation()}\n />\n </div>\n {/* Scrollable options */}\n <div className=\"max-h-80 flex-1 overflow-auto\">\n {filteredOptions.length === 0 && (\n <div className=\"p-3 text-center text-muted-foreground text-sm\">\n No options found\n </div>\n )}\n {filteredOptions.map((option) => {\n const isSelected = value.includes(option.value);\n return (\n <div\n key={option.value}\n className={mergeClassNames(\n \"flex cursor-pointer items-center gap-2 px-3 py-2 text-sm transition\",\n isSelected\n ? \"bg-accent-subtle text-accent\"\n : \"text-foreground hover:bg-accent hover:text-on-accent\",\n )}\n onClick={() => handleOptionClick(option.value)}\n >\n <span\n className={mergeClassNames(\n \"flex h-4 w-4 items-center justify-center rounded border transition\",\n isSelected\n ? \"border-accent bg-accent text-on-accent\"\n : \"border-border\",\n )}\n >\n {isSelected && <CheckIcon width={12} height={12} />}\n </span>\n <span className=\"flex-1\">{option.label}</span>\n </div>\n );\n })}\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport default MultiSelectCombobox;\n"],"mappings":"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"}
@@ -9,19 +9,19 @@ var sizeStyles = {
9
9
  };
10
10
  var variantStyles = {
11
11
  outlined: {
12
- base: "border border-neutral-300 dark:border-neutral-600 bg-transparent rounded-lg",
13
- focus: "focus:border-primary-500 focus:ring-2 focus:ring-primary-500/20",
14
- error: "border-red-500 dark:border-red-500"
12
+ base: "border border-input bg-background-secondary rounded-lg shadow-input text-foreground",
13
+ focus: "focus:border-accent focus:ring-2 focus:ring-accent",
14
+ error: "border-destructive"
15
15
  },
16
16
  filled: {
17
- base: "border border-transparent bg-neutral-100 dark:bg-neutral-800 rounded-lg",
18
- focus: "focus:border-primary-500 focus:bg-transparent focus:ring-2 focus:ring-primary-500/20",
19
- error: "bg-red-50 dark:bg-red-900/20 border-red-500"
17
+ base: "border border-transparent bg-accent-subtle rounded-lg text-foreground",
18
+ focus: "focus:border-accent focus:bg-background-secondary focus:ring-2 focus:ring-accent",
19
+ error: "bg-danger-subtle border-danger-border"
20
20
  },
21
21
  underlined: {
22
- base: "border-b-2 border-neutral-300 dark:border-neutral-600 bg-transparent rounded-none",
23
- focus: "focus:border-primary-500",
24
- error: "border-red-500 dark:border-red-500"
22
+ base: "border-b-2 border-border-strong bg-transparent rounded-none text-foreground",
23
+ focus: "focus:border-accent",
24
+ error: "border-destructive"
25
25
  }
26
26
  };
27
27
  var OTPInput = (0, react.forwardRef)(({ length = 6, onChange, onComplete, value: controlledValue, defaultValue = "", size = "md", variant = "outlined", disabled = false, error = false, errorMessage, placeholder = "", mask = false, autoFocus = false, type = "number", className = "", inputClassName = "", separator = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -148,13 +148,12 @@ var OTPInput = (0, react.forwardRef)(({ length = 6, onChange, onComplete, value:
148
148
  "aria-label": `${ariaLabel} digit ${i + 1}`,
149
149
  className: `
150
150
  text-center font-semibold outline-none transition-all
151
- text-neutral-900 dark:text-white
152
- placeholder:text-neutral-300 dark:placeholder:text-neutral-600
151
+ placeholder:text-muted-foreground
153
152
  ${sizeStyles[size]}
154
153
  ${variantStyles[variant].base}
155
154
  ${!error ? variantStyles[variant].focus : ""}
156
155
  ${error ? variantStyles[variant].error : ""}
157
- ${disabled ? "opacity-50 cursor-not-allowed bg-neutral-100 dark:bg-neutral-800" : ""}
156
+ ${disabled ? "opacity-50 cursor-not-allowed bg-muted" : ""}
158
157
  ${inputClassName}
159
158
  `
160
159
  }, i));
@@ -170,7 +169,7 @@ var OTPInput = (0, react.forwardRef)(({ length = 6, onChange, onComplete, value:
170
169
  "aria-label": ariaLabel,
171
170
  children: renderInputs()
172
171
  }), error && errorMessage && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
173
- className: "text-sm text-red-500 dark:text-red-400",
172
+ className: "text-sm text-destructive",
174
173
  children: errorMessage
175
174
  })]
176
175
  });
@@ -184,4 +183,4 @@ Object.defineProperty(exports, "OTPInput", {
184
183
  }
185
184
  });
186
185
 
187
- //# sourceMappingURL=otp-input-DaQDfI9C.cjs.map
186
+ //# sourceMappingURL=otp-input-B6zzOEqw.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otp-input-B6zzOEqw.cjs","names":[],"sources":["../../src/components/forms/otp-input/OTPInput.tsx"],"sourcesContent":["import {\n forwardRef,\n useState,\n useRef,\n useCallback,\n useEffect,\n type KeyboardEvent,\n type ClipboardEvent,\n type ChangeEvent,\n} from \"react\";\n\nexport type OTPInputSize = \"sm\" | \"md\" | \"lg\";\nexport type OTPInputVariant = \"outlined\" | \"filled\" | \"underlined\";\n\nexport interface OTPInputProps {\n /** Number of OTP digits */\n length?: number;\n /** Callback when OTP value changes */\n onChange?: (value: string) => void;\n /** Callback when all digits are filled */\n onComplete?: (value: string) => void;\n /** The current value (controlled) */\n value?: string;\n /** Default value (uncontrolled) */\n defaultValue?: string;\n /** Size of the input boxes */\n size?: OTPInputSize;\n /** Visual variant */\n variant?: OTPInputVariant;\n /** Whether the input is disabled */\n disabled?: boolean;\n /** Whether there's an error */\n error?: boolean;\n /** Error message to display */\n errorMessage?: string;\n /** Placeholder character */\n placeholder?: string;\n /** Whether to mask the input (like password) */\n mask?: boolean;\n /** Whether to auto-focus the first input */\n autoFocus?: boolean;\n /** Input type - number only or alphanumeric */\n type?: \"number\" | \"text\";\n /** Custom className for the container */\n className?: string;\n /** Custom className for each input box */\n inputClassName?: string;\n /** Separator to show between groups of digits */\n separator?: React.ReactNode;\n /** Position(s) to show separator (e.g., [3] means after 3rd digit) */\n separatorPositions?: number[];\n /** Accessible label */\n \"aria-label\"?: string;\n}\n\nconst sizeStyles: Record<OTPInputSize, string> = {\n sm: \"w-9 h-10 text-base\",\n md: \"w-12 h-14 text-xl\",\n lg: \"w-14 h-16 text-2xl\",\n};\n\nconst variantStyles: Record<\n OTPInputVariant,\n { base: string; focus: string; error: string }\n> = {\n outlined: {\n base: \"border border-input bg-background-secondary rounded-lg shadow-input text-foreground\",\n focus: \"focus:border-accent focus:ring-2 focus:ring-accent\",\n error: \"border-destructive\",\n },\n filled: {\n base: \"border border-transparent bg-accent-subtle rounded-lg text-foreground\",\n focus:\n \"focus:border-accent focus:bg-background-secondary focus:ring-2 focus:ring-accent\",\n error: \"bg-danger-subtle border-danger-border\",\n },\n underlined: {\n base: \"border-b-2 border-border-strong bg-transparent rounded-none text-foreground\",\n focus: \"focus:border-accent\",\n error: \"border-destructive\",\n },\n};\n\nconst OTPInput = forwardRef<HTMLDivElement, OTPInputProps>(\n (\n {\n length = 6,\n onChange,\n onComplete,\n value: controlledValue,\n defaultValue = \"\",\n size = \"md\",\n variant = \"outlined\",\n disabled = false,\n error = false,\n errorMessage,\n placeholder = \"\",\n mask = false,\n autoFocus = false,\n type = \"number\",\n className = \"\",\n inputClassName = \"\",\n separator = <span className=\"text-neutral-400 text-2xl mx-2\">—</span>,\n separatorPositions = [],\n \"aria-label\": ariaLabel = \"One-time password\",\n },\n ref,\n ) => {\n const [values, setValues] = useState<string[]>(() => {\n const initial = controlledValue ?? defaultValue;\n return initial\n .split(\"\")\n .slice(0, length)\n .concat(Array(length).fill(\"\"))\n .slice(0, length);\n });\n\n const inputRefs = useRef<(HTMLInputElement | null)[]>([]);\n\n // Sync with controlled value\n useEffect(() => {\n if (controlledValue !== undefined) {\n const newValues = controlledValue\n .split(\"\")\n .slice(0, length)\n .concat(Array(length).fill(\"\"))\n .slice(0, length);\n setValues(newValues);\n }\n }, [controlledValue, length]);\n\n // Auto-focus first input\n useEffect(() => {\n if (autoFocus && inputRefs.current[0]) {\n inputRefs.current[0].focus();\n }\n }, [autoFocus]);\n\n const focusInput = useCallback(\n (index: number) => {\n if (index >= 0 && index < length && inputRefs.current[index]) {\n inputRefs.current[index]?.focus();\n inputRefs.current[index]?.select();\n }\n },\n [length],\n );\n\n const handleChange = useCallback(\n (index: number, e: ChangeEvent<HTMLInputElement>) => {\n const inputValue = e.target.value;\n const char = inputValue.slice(-1);\n\n // Validate input based on type\n if (type === \"number\" && char && !/^\\d$/.test(char)) {\n return;\n }\n\n const newValues = [...values];\n newValues[index] = char;\n setValues(newValues);\n\n const otpValue = newValues.join(\"\");\n onChange?.(otpValue);\n\n // Move to next input if value entered\n if (char && index < length - 1) {\n focusInput(index + 1);\n }\n\n // Check if complete\n if (newValues.every((v) => v !== \"\") && newValues.length === length) {\n onComplete?.(otpValue);\n }\n },\n [values, onChange, onComplete, length, type, focusInput],\n );\n\n const handleKeyDown = useCallback(\n (index: number, e: KeyboardEvent<HTMLInputElement>) => {\n switch (e.key) {\n case \"Backspace\":\n e.preventDefault();\n const newValues = [...values];\n if (values[index]) {\n // Clear current value\n newValues[index] = \"\";\n setValues(newValues);\n onChange?.(newValues.join(\"\"));\n } else if (index > 0) {\n // Move to previous and clear\n newValues[index - 1] = \"\";\n setValues(newValues);\n onChange?.(newValues.join(\"\"));\n focusInput(index - 1);\n }\n break;\n case \"ArrowLeft\":\n e.preventDefault();\n focusInput(index - 1);\n break;\n case \"ArrowRight\":\n e.preventDefault();\n focusInput(index + 1);\n break;\n case \"Delete\":\n e.preventDefault();\n const deleteValues = [...values];\n deleteValues[index] = \"\";\n setValues(deleteValues);\n onChange?.(deleteValues.join(\"\"));\n break;\n }\n },\n [values, onChange, focusInput],\n );\n\n const handlePaste = useCallback(\n (e: ClipboardEvent<HTMLInputElement>) => {\n e.preventDefault();\n const pastedData = e.clipboardData.getData(\"text\").slice(0, length);\n\n // Validate pasted content\n if (type === \"number\" && !/^\\d*$/.test(pastedData)) {\n return;\n }\n\n const newValues = pastedData\n .split(\"\")\n .slice(0, length)\n .concat(Array(length).fill(\"\"))\n .slice(0, length);\n\n setValues(newValues);\n const otpValue = newValues.join(\"\");\n onChange?.(otpValue);\n\n // Focus last filled input or last input\n const lastFilledIndex = newValues.findLastIndex((v) => v !== \"\");\n focusInput(Math.min(lastFilledIndex + 1, length - 1));\n\n // Check if complete\n if (newValues.every((v) => v !== \"\") && pastedData.length >= length) {\n onComplete?.(otpValue);\n }\n },\n [length, type, onChange, onComplete, focusInput],\n );\n\n const handleFocus = useCallback((e: React.FocusEvent<HTMLInputElement>) => {\n e.target.select();\n }, []);\n\n const renderInputs = () => {\n const inputs: React.ReactNode[] = [];\n\n for (let i = 0; i < length; i++) {\n // Add separator if needed\n if (separatorPositions.includes(i) && i > 0) {\n inputs.push(\n <div key={`separator-${i}`} className=\"flex items-center\">\n {separator}\n </div>,\n );\n }\n\n inputs.push(\n <input\n key={i}\n ref={(el) => {\n inputRefs.current[i] = el;\n // React 19: Return cleanup function\n return () => {\n inputRefs.current[i] = null;\n };\n }}\n type={mask ? \"password\" : \"text\"}\n inputMode={type === \"number\" ? \"numeric\" : \"text\"}\n pattern={type === \"number\" ? \"\\\\d*\" : undefined}\n maxLength={1}\n value={values[i] || \"\"}\n placeholder={placeholder}\n disabled={disabled}\n onChange={(e) => handleChange(i, e)}\n onKeyDown={(e) => handleKeyDown(i, e)}\n onPaste={handlePaste}\n onFocus={handleFocus}\n aria-label={`${ariaLabel} digit ${i + 1}`}\n className={`\n text-center font-semibold outline-none transition-all\n placeholder:text-muted-foreground\n ${sizeStyles[size]}\n ${variantStyles[variant].base}\n ${!error ? variantStyles[variant].focus : \"\"}\n ${error ? variantStyles[variant].error : \"\"}\n ${disabled ? \"opacity-50 cursor-not-allowed bg-muted\" : \"\"}\n ${inputClassName}\n `}\n />,\n );\n }\n\n return inputs;\n };\n\n return (\n <div ref={ref} className={`flex flex-col gap-2 ${className}`}>\n <div\n className=\"flex items-center gap-2\"\n role=\"group\"\n aria-label={ariaLabel}\n >\n {renderInputs()}\n </div>\n {error && errorMessage && (\n <span className=\"text-sm text-destructive\">{errorMessage}</span>\n )}\n </div>\n );\n },\n);\n\nOTPInput.displayName = \"OTPInput\";\n\nexport default OTPInput;\nexport { OTPInput };\n"],"mappings":"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"}