@stfrigerio/sito-template 0.1.35 → 0.1.37

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 (258) hide show
  1. package/dist/__tests__/setup.d.ts +2 -0
  2. package/dist/__tests__/setup.d.ts.map +1 -0
  3. package/dist/components/atoms/AllAtoms.stories.d.ts +1 -1
  4. package/dist/components/atoms/AllAtoms.stories.d.ts.map +1 -1
  5. package/dist/components/atoms/Button/Button.stories.d.ts +2 -14
  6. package/dist/components/atoms/Button/Button.stories.d.ts.map +1 -1
  7. package/dist/components/atoms/Card/Card.stories.d.ts +4 -23
  8. package/dist/components/atoms/Card/Card.stories.d.ts.map +1 -1
  9. package/dist/components/atoms/Checkbox/Checkbox.stories.d.ts +1 -1
  10. package/dist/components/atoms/Checkbox/Checkbox.stories.d.ts.map +1 -1
  11. package/dist/components/atoms/DateInput/DateInput.d.ts +1 -1
  12. package/dist/components/atoms/DateInput/DateInput.d.ts.map +1 -1
  13. package/dist/components/atoms/DateInput/DateInput.stories.d.ts +1 -1
  14. package/dist/components/atoms/DateInput/DateInput.stories.d.ts.map +1 -1
  15. package/dist/components/atoms/DecryptedText/DecryptedText.d.ts +50 -0
  16. package/dist/components/atoms/DecryptedText/DecryptedText.d.ts.map +1 -0
  17. package/dist/components/atoms/DecryptedText/index.d.ts +3 -0
  18. package/dist/components/atoms/DecryptedText/index.d.ts.map +1 -0
  19. package/dist/components/atoms/EmptyState/EmptyState.d.ts +53 -0
  20. package/dist/components/atoms/EmptyState/EmptyState.d.ts.map +1 -0
  21. package/dist/components/atoms/EmptyState/index.d.ts +3 -0
  22. package/dist/components/atoms/EmptyState/index.d.ts.map +1 -0
  23. package/dist/components/atoms/LoadingSpinner/LoadingSpinner.d.ts.map +1 -1
  24. package/dist/components/atoms/LoadingSpinner/LoadingSpinner.stories.d.ts +1 -1
  25. package/dist/components/atoms/LoadingSpinner/LoadingSpinner.stories.d.ts.map +1 -1
  26. package/dist/components/atoms/Modal/Modal.d.ts +61 -0
  27. package/dist/components/atoms/Modal/Modal.d.ts.map +1 -0
  28. package/dist/components/atoms/Modal/index.d.ts +3 -0
  29. package/dist/components/atoms/Modal/index.d.ts.map +1 -0
  30. package/dist/components/atoms/NumberStepper/NumberStepper.d.ts.map +1 -1
  31. package/dist/components/atoms/NumberStepper/NumberStepper.stories.d.ts +1 -1
  32. package/dist/components/atoms/NumberStepper/NumberStepper.stories.d.ts.map +1 -1
  33. package/dist/components/atoms/SearchableDropdown/SearchableDropdown.stories.d.ts +1 -1
  34. package/dist/components/atoms/SearchableDropdown/SearchableDropdown.stories.d.ts.map +1 -1
  35. package/dist/components/atoms/SelectInput/SelectInput.d.ts +4 -2
  36. package/dist/components/atoms/SelectInput/SelectInput.d.ts.map +1 -1
  37. package/dist/components/atoms/Slider/Slider.stories.d.ts +2 -10
  38. package/dist/components/atoms/Slider/Slider.stories.d.ts.map +1 -1
  39. package/dist/components/atoms/SoundDemo/SoundDemo.d.ts +11 -0
  40. package/dist/components/atoms/SoundDemo/SoundDemo.d.ts.map +1 -0
  41. package/dist/components/atoms/SoundDemo/SoundDemo.stories.d.ts +1 -1
  42. package/dist/components/atoms/SoundDemo/SoundDemo.stories.d.ts.map +1 -1
  43. package/dist/components/atoms/TextArea/TextArea.d.ts.map +1 -1
  44. package/dist/components/atoms/TextArea/TextArea.stories.d.ts +1 -1
  45. package/dist/components/atoms/TextArea/TextArea.stories.d.ts.map +1 -1
  46. package/dist/components/atoms/TextInput/TextInput.d.ts +1 -1
  47. package/dist/components/atoms/TextInput/TextInput.d.ts.map +1 -1
  48. package/dist/components/atoms/TextInput/TextInput.stories.d.ts +1 -4
  49. package/dist/components/atoms/TextInput/TextInput.stories.d.ts.map +1 -1
  50. package/dist/components/atoms/Toggle/Toggle.d.ts +5 -4
  51. package/dist/components/atoms/Toggle/Toggle.d.ts.map +1 -1
  52. package/dist/components/atoms/Toggle/Toggle.stories.d.ts +1 -1
  53. package/dist/components/atoms/Toggle/Toggle.stories.d.ts.map +1 -1
  54. package/dist/components/atoms/ToggleButton/ToggleButton.stories.d.ts +1 -1
  55. package/dist/components/atoms/ToggleButton/ToggleButton.stories.d.ts.map +1 -1
  56. package/dist/components/atoms/index.d.ts +6 -0
  57. package/dist/components/atoms/index.d.ts.map +1 -1
  58. package/dist/components/molecules/ArrayInput/ArrayInput.d.ts +3 -3
  59. package/dist/components/molecules/ArrayInput/ArrayInput.d.ts.map +1 -1
  60. package/dist/components/molecules/ArrayInput/ArrayInput.stories.d.ts +1 -1
  61. package/dist/components/molecules/ArrayInput/ArrayInput.stories.d.ts.map +1 -1
  62. package/dist/components/molecules/Breadcrumb/Breadcrumb.d.ts +28 -0
  63. package/dist/components/molecules/Breadcrumb/Breadcrumb.d.ts.map +1 -0
  64. package/dist/components/molecules/Breadcrumb/index.d.ts +3 -0
  65. package/dist/components/molecules/Breadcrumb/index.d.ts.map +1 -0
  66. package/dist/components/molecules/EditFAB/EditFAB.stories.d.ts +1 -1
  67. package/dist/components/molecules/EditFAB/EditFAB.stories.d.ts.map +1 -1
  68. package/dist/components/molecules/LiquidButton/LiquidButton.d.ts +33 -0
  69. package/dist/components/molecules/LiquidButton/LiquidButton.d.ts.map +1 -0
  70. package/dist/components/molecules/LiquidButton/index.d.ts +3 -0
  71. package/dist/components/molecules/LiquidButton/index.d.ts.map +1 -0
  72. package/dist/components/molecules/SearchBar/SearchBar.stories.d.ts +1 -1
  73. package/dist/components/molecules/SearchBar/SearchBar.stories.d.ts.map +1 -1
  74. package/dist/components/molecules/Tabs/Tabs.d.ts +1 -1
  75. package/dist/components/molecules/Tabs/Tabs.d.ts.map +1 -1
  76. package/dist/components/molecules/Tabs/Tabs.stories.d.ts +1 -1
  77. package/dist/components/molecules/Tabs/Tabs.stories.d.ts.map +1 -1
  78. package/dist/components/molecules/ThemeSwitcher/ThemeSwitcher.d.ts +4 -3
  79. package/dist/components/molecules/ThemeSwitcher/ThemeSwitcher.d.ts.map +1 -1
  80. package/dist/components/molecules/ThemeSwitcher/ThemeSwitcher.stories.d.ts +1 -1
  81. package/dist/components/molecules/ThemeSwitcher/ThemeSwitcher.stories.d.ts.map +1 -1
  82. package/dist/components/molecules/TimeInput/TimeInput.stories.d.ts +1 -1
  83. package/dist/components/molecules/TimeInput/TimeInput.stories.d.ts.map +1 -1
  84. package/dist/components/molecules/Toast/Toast.d.ts +16 -0
  85. package/dist/components/molecules/Toast/Toast.d.ts.map +1 -0
  86. package/dist/components/molecules/Toast/index.d.ts +3 -0
  87. package/dist/components/molecules/Toast/index.d.ts.map +1 -0
  88. package/dist/components/molecules/index.d.ts +6 -0
  89. package/dist/components/molecules/index.d.ts.map +1 -1
  90. package/dist/components/organisms/Calendar/Calendar.d.ts +1 -1
  91. package/dist/components/organisms/Calendar/Calendar.d.ts.map +1 -1
  92. package/dist/components/organisms/Calendar/Calendar.stories.d.ts +1 -1
  93. package/dist/components/organisms/Calendar/Calendar.stories.d.ts.map +1 -1
  94. package/dist/components/organisms/ConfirmationModal/ConfirmationModal.d.ts +30 -0
  95. package/dist/components/organisms/ConfirmationModal/ConfirmationModal.d.ts.map +1 -0
  96. package/dist/components/organisms/ConfirmationModal/index.d.ts +3 -0
  97. package/dist/components/organisms/ConfirmationModal/index.d.ts.map +1 -0
  98. package/dist/components/organisms/ImageSlideshow/ImageSlideshow.d.ts +1 -1
  99. package/dist/components/organisms/ImageSlideshow/ImageSlideshow.d.ts.map +1 -1
  100. package/dist/components/organisms/ImageSlideshow/ImageSlideshow.stories.d.ts +1 -6
  101. package/dist/components/organisms/ImageSlideshow/ImageSlideshow.stories.d.ts.map +1 -1
  102. package/dist/components/organisms/Navbar/Navbar.d.ts +3 -2
  103. package/dist/components/organisms/Navbar/Navbar.d.ts.map +1 -1
  104. package/dist/components/organisms/Navbar/Navbar.stories.d.ts +1 -1
  105. package/dist/components/organisms/Navbar/Navbar.stories.d.ts.map +1 -1
  106. package/dist/components/organisms/Table/Table.d.ts +6 -6
  107. package/dist/components/organisms/Table/Table.d.ts.map +1 -1
  108. package/dist/components/organisms/Table/Table.stories.d.ts +26 -14
  109. package/dist/components/organisms/Table/Table.stories.d.ts.map +1 -1
  110. package/dist/components/organisms/ThemeProvider/ThemeProvider.d.ts +3 -1
  111. package/dist/components/organisms/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  112. package/dist/components/organisms/charts/BooleansHeatmap/BooleansHeatmap.d.ts.map +1 -1
  113. package/dist/components/organisms/charts/BooleansHeatmap/BooleansHeatmap.stories.d.ts +1 -1
  114. package/dist/components/organisms/charts/BooleansHeatmap/BooleansHeatmap.stories.d.ts.map +1 -1
  115. package/dist/components/organisms/charts/MoodChart/MoodChart.stories.d.ts +1 -1
  116. package/dist/components/organisms/charts/MoodChart/MoodChart.stories.d.ts.map +1 -1
  117. package/dist/components/organisms/charts/PieChart/PieChart.d.ts.map +1 -1
  118. package/dist/components/organisms/charts/PieChart/PieChart.stories.d.ts +1 -1
  119. package/dist/components/organisms/charts/PieChart/PieChart.stories.d.ts.map +1 -1
  120. package/dist/components/organisms/charts/QuantifiableHabitsChart/QuantifiableHabitsChart.d.ts +2 -0
  121. package/dist/components/organisms/charts/QuantifiableHabitsChart/QuantifiableHabitsChart.d.ts.map +1 -1
  122. package/dist/components/organisms/charts/QuantifiableHabitsChart/QuantifiableHabitsChart.stories.d.ts +1 -1
  123. package/dist/components/organisms/charts/QuantifiableHabitsChart/QuantifiableHabitsChart.stories.d.ts.map +1 -1
  124. package/dist/components/organisms/charts/SleepChart/SleepChart.stories.d.ts +1 -1
  125. package/dist/components/organisms/charts/SleepChart/SleepChart.stories.d.ts.map +1 -1
  126. package/dist/components/organisms/charts/SunburstChart/SunburstChart.d.ts.map +1 -1
  127. package/dist/components/organisms/charts/SunburstChart/SunburstChart.stories.d.ts +1 -1
  128. package/dist/components/organisms/charts/SunburstChart/SunburstChart.stories.d.ts.map +1 -1
  129. package/dist/components/organisms/index.d.ts +3 -1
  130. package/dist/components/organisms/index.d.ts.map +1 -1
  131. package/dist/index.d.ts +0 -1
  132. package/dist/index.d.ts.map +1 -1
  133. package/dist/index.esm.js +813 -465
  134. package/dist/index.esm.js.map +1 -1
  135. package/dist/index.js +833 -477
  136. package/dist/index.js.map +1 -1
  137. package/dist/stories/utils.d.ts +2 -2
  138. package/dist/stories/utils.d.ts.map +1 -1
  139. package/dist/styles.css +1 -1
  140. package/dist/styles.css.map +1 -1
  141. package/dist/themes/default.css +47 -0
  142. package/dist/themes/dmood.css +46 -0
  143. package/dist/themes/globals.css +110 -0
  144. package/dist/themes/lossito.css +52 -0
  145. package/dist/tokens/tokens.css +79 -0
  146. package/dist/utils/formUtils.d.ts +0 -5
  147. package/dist/utils/formUtils.d.ts.map +1 -1
  148. package/package.json +32 -10
  149. package/storybook-static/addon-visual-tests-assets/visual-test-illustration.mp4 +0 -0
  150. package/storybook-static/assets/AllAtoms.stories-DBoQZmq-.js +109 -0
  151. package/storybook-static/assets/AnimationPlayer-UXJjBKtF.css +1 -0
  152. package/storybook-static/assets/AnimationPlayer.stories-yXQ8fqUT.js +379 -0
  153. package/storybook-static/assets/ArrayInput-CkUpk1TR.css +1 -0
  154. package/storybook-static/assets/ArrayInput.stories-CRqKExgm.js +221 -0
  155. package/storybook-static/assets/BooleansHeatmap-BV4VTyo6.css +1 -0
  156. package/storybook-static/assets/BooleansHeatmap.stories-2u4SThph.js +123 -0
  157. package/storybook-static/assets/Button-O-w2-ag3.css +1 -0
  158. package/storybook-static/assets/Button-VfdDKp2T.js +37 -0
  159. package/storybook-static/assets/Button.stories-BeeBKHoX.js +117 -0
  160. package/storybook-static/assets/Calendar-BTQfDDfP.css +1 -0
  161. package/storybook-static/assets/Calendar.stories-CKOG4XAn.js +545 -0
  162. package/storybook-static/assets/Card-Bc7TyfBx.css +1 -0
  163. package/storybook-static/assets/Card-D-kcaQHV.js +49 -0
  164. package/storybook-static/assets/Card.stories-CpcboxKs.js +130 -0
  165. package/storybook-static/assets/Checkbox-BHwlDfRP.js +33 -0
  166. package/storybook-static/assets/Checkbox-DMUHtq9s.css +1 -0
  167. package/storybook-static/assets/Checkbox.stories-DxTQrFgm.js +83 -0
  168. package/storybook-static/assets/Color-AVL7NMMY-BzNNgCT5.js +1 -0
  169. package/storybook-static/assets/DateInput-C4-Rlnpy.css +1 -0
  170. package/storybook-static/assets/DateInput-Cu3PZYc0.js +33 -0
  171. package/storybook-static/assets/DateInput.stories-BGB5zJBm.js +119 -0
  172. package/storybook-static/assets/DocsRenderer-PQXLIZUC-q9kcQxfH.js +1243 -0
  173. package/storybook-static/assets/EditFAB-CntUhqRB.css +1 -0
  174. package/storybook-static/assets/EditFAB.stories-CmfJxWns.js +408 -0
  175. package/storybook-static/assets/MoodChart-2hr_Y2GI.css +1 -0
  176. package/storybook-static/assets/MoodChart.stories-V-wKOSu-.js +40 -0
  177. package/storybook-static/assets/Navbar-B8vEvGnB.css +1 -0
  178. package/storybook-static/assets/Navbar.stories-Dkf77idX.js +235 -0
  179. package/storybook-static/assets/NumberStepper-BVHPJutJ.css +1 -0
  180. package/storybook-static/assets/NumberStepper-BZGlrWCN.js +30 -0
  181. package/storybook-static/assets/NumberStepper.stories-NZw7r4Oh.js +127 -0
  182. package/storybook-static/assets/PieChart-OfDGlJ4g.css +1 -0
  183. package/storybook-static/assets/PieChart.stories-BkfNODjW.js +199 -0
  184. package/storybook-static/assets/QuantifiableHabitsChart-BEfzqND4.css +1 -0
  185. package/storybook-static/assets/QuantifiableHabitsChart.stories-Df6rcrdD.js +105 -0
  186. package/storybook-static/assets/SearchBar-CYhuHFt7.css +1 -0
  187. package/storybook-static/assets/SearchBar.stories-DmHIaDZB.js +154 -0
  188. package/storybook-static/assets/SearchableDropdown-ByAXm1md.js +38 -0
  189. package/storybook-static/assets/SearchableDropdown-CLYLzeoj.css +1 -0
  190. package/storybook-static/assets/SearchableDropdown.stories-ByZj6lJu.js +282 -0
  191. package/storybook-static/assets/SelectInput-BTPptV1H.css +1 -0
  192. package/storybook-static/assets/SelectInput-D-AwfWVz.js +31 -0
  193. package/storybook-static/assets/SelectInput.stories-MyE-GqOw.js +112 -0
  194. package/storybook-static/assets/SleepChart-yGsG5RlQ.css +1 -0
  195. package/storybook-static/assets/SleepChart.stories-Dsz1U6F9.js +58 -0
  196. package/storybook-static/assets/SunburstChart-ChXvU9py.css +1 -0
  197. package/storybook-static/assets/SunburstChart.stories-CphfyDsR.js +285 -0
  198. package/storybook-static/assets/Tabs-BfJ7skOE.css +1 -0
  199. package/storybook-static/assets/Tabs.stories-c24Ffu3K.js +49 -0
  200. package/storybook-static/assets/TextArea-B2UrQsuf.css +1 -0
  201. package/storybook-static/assets/TextArea-B_sATPlw.js +28 -0
  202. package/storybook-static/assets/TextArea.stories-CCqRRpwq.js +145 -0
  203. package/storybook-static/assets/TextInput-BjVJQEYN.css +1 -0
  204. package/storybook-static/assets/TextInput-ZGg8LTL_.js +28 -0
  205. package/storybook-static/assets/TextInput.stories-CtvOb60q.js +203 -0
  206. package/storybook-static/assets/ThemeSwitcher-XCVQ6hhy.css +1 -0
  207. package/storybook-static/assets/ThemeSwitcher.stories-BvkX1SDm.js +62 -0
  208. package/storybook-static/assets/TimeInput-C3enPYoV.css +1 -0
  209. package/storybook-static/assets/TimeInput.stories-BchhRfKo.js +50 -0
  210. package/storybook-static/assets/Toggle-BQ2KHBDr.js +39 -0
  211. package/storybook-static/assets/Toggle-DhKq5lh5.css +1 -0
  212. package/storybook-static/assets/Toggle.stories-BUSZc6m3.js +194 -0
  213. package/storybook-static/assets/ToggleButton-Dl6hvkJv.js +32 -0
  214. package/storybook-static/assets/ToggleButton-gfPoPxTQ.css +1 -0
  215. package/storybook-static/assets/ToggleButton.stories-BKN4zU3N.js +143 -0
  216. package/storybook-static/assets/arc-DgcIQOLP.js +1 -0
  217. package/storybook-static/assets/array-BKyUJesY.js +1 -0
  218. package/storybook-static/assets/defaultLocale-DJ2q5QjE.js +1 -0
  219. package/storybook-static/assets/iframe-BOc1hSA-.css +1 -0
  220. package/storybook-static/assets/iframe-BUaP2gIF.js +1087 -0
  221. package/storybook-static/assets/index-5bdJXrkD.js +1 -0
  222. package/storybook-static/assets/index-CBmvvqzc.js +1 -0
  223. package/storybook-static/assets/index-CZs7_DA6.js +9 -0
  224. package/storybook-static/assets/linear-4t_RuQok.js +1 -0
  225. package/storybook-static/assets/monotone-BYG7Mesf.js +1 -0
  226. package/storybook-static/assets/path-CbwjOpE9.js +1 -0
  227. package/storybook-static/assets/preload-helper-C1FmrZbK.js +1 -0
  228. package/storybook-static/assets/proxy-9Y4F2rF8.js +1 -0
  229. package/storybook-static/assets/react-18-D4c-_GAk.js +24 -0
  230. package/storybook-static/assets/transform-NloTqvdv.js +1 -0
  231. package/storybook-static/favicon-wrapper.svg +46 -0
  232. package/storybook-static/favicon.svg +1 -0
  233. package/storybook-static/iframe.html +726 -0
  234. package/storybook-static/index.html +164 -0
  235. package/storybook-static/index.json +1 -0
  236. package/storybook-static/nunito-sans-bold-italic.woff2 +0 -0
  237. package/storybook-static/nunito-sans-bold.woff2 +0 -0
  238. package/storybook-static/nunito-sans-italic.woff2 +0 -0
  239. package/storybook-static/nunito-sans-regular.woff2 +0 -0
  240. package/storybook-static/project.json +1 -0
  241. package/storybook-static/sb-addons/chromatic-com-storybook-4/manager-bundle.js +356 -0
  242. package/storybook-static/sb-addons/chromatic-com-storybook-4/manager-bundle.js.LEGAL.txt +40 -0
  243. package/storybook-static/sb-addons/docs-2/manager-bundle.js +151 -0
  244. package/storybook-static/sb-addons/links-3/manager-bundle.js +3 -0
  245. package/storybook-static/sb-addons/onboarding-1/manager-bundle.js +127 -0
  246. package/storybook-static/sb-addons/storybook-5/manager-bundle.js +3 -0
  247. package/storybook-static/sb-addons/storybook-core-server-presets-0/common-manager-bundle.js +971 -0
  248. package/storybook-static/sb-common-assets/favicon-wrapper.svg +46 -0
  249. package/storybook-static/sb-common-assets/favicon.svg +1 -0
  250. package/storybook-static/sb-common-assets/nunito-sans-bold-italic.woff2 +0 -0
  251. package/storybook-static/sb-common-assets/nunito-sans-bold.woff2 +0 -0
  252. package/storybook-static/sb-common-assets/nunito-sans-italic.woff2 +0 -0
  253. package/storybook-static/sb-common-assets/nunito-sans-regular.woff2 +0 -0
  254. package/storybook-static/sb-manager/globals-module-info.js +797 -0
  255. package/storybook-static/sb-manager/globals-runtime.js +69653 -0
  256. package/storybook-static/sb-manager/globals.js +34 -0
  257. package/storybook-static/sb-manager/runtime.js +13181 -0
  258. package/storybook-static/vite-inject-mocker-entry.js +18 -0
package/dist/index.esm.js CHANGED
@@ -1,36 +1,11 @@
1
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
- import React, { createContext, useContext, useState, useEffect, useRef, useCallback, useMemo, memo } from 'react';
1
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
3
2
  import { motion, AnimatePresence, LayoutGroup } from 'framer-motion';
4
- import { Check, X, Edit } from 'lucide-react';
3
+ import React, { useRef, useEffect, useCallback, useState, createContext, useContext, useMemo, memo } from 'react';
4
+ import { createPortal } from 'react-dom';
5
+ import { X, Calendar as Calendar$1, ChevronDown, Search, Check, Edit, Folder, Users, Book, MessageSquare, UserPlus, Clock, Sun, Moon, Info, Github, SquareKanban, ChevronRight, Plus, Menu, ChevronLeft, Maximize, Download, Share2, Pause, Play } from 'lucide-react';
5
6
  import * as d3 from 'd3';
6
7
 
7
- const ThemeContext$1 = createContext(undefined);
8
- const useTheme$1 = () => {
9
- const context = useContext(ThemeContext$1);
10
- if (!context) {
11
- throw new Error('useTheme must be used within a ThemeProvider');
12
- }
13
- return context;
14
- };
15
- const ThemeProvider = ({ children, defaultTheme = 'light' }) => {
16
- const [theme, setTheme] = useState(defaultTheme);
17
- useEffect(() => {
18
- const savedTheme = localStorage.getItem('theme');
19
- if (savedTheme) {
20
- setTheme(savedTheme);
21
- }
22
- }, []);
23
- useEffect(() => {
24
- document.documentElement.setAttribute('data-theme', theme);
25
- localStorage.setItem('theme', theme);
26
- }, [theme]);
27
- const toggleTheme = () => {
28
- setTheme(prevTheme => prevTheme === 'light' ? 'dark' : 'light');
29
- };
30
- return (jsx(ThemeContext$1.Provider, { value: { theme, toggleTheme, setTheme }, children: children }));
31
- };
32
-
33
- var styles$s = {"button":"Button-module_button__c6nkW","primary":"Button-module_primary__pMqAs","secondary":"Button-module_secondary__mBWx9","outline":"Button-module_outline__NGGGN","ghost":"Button-module_ghost__u2QBF","danger":"Button-module_danger__2ewhr","small":"Button-module_small__ZI9RX","medium":"Button-module_medium__Wnf9t","large":"Button-module_large__cQCpA","fullWidth":"Button-module_fullWidth__N8vYg","loading":"Button-module_loading__hcSI4","spinner":"Button-module_spinner__HtM96","spin":"Button-module_spin__jblrj","iconLeft":"Button-module_iconLeft__Fpz-y","iconRight":"Button-module_iconRight__kTfjS"};
8
+ var styles$z = {"button":"Button-module_button__c6nkW","primary":"Button-module_primary__pMqAs","secondary":"Button-module_secondary__mBWx9","outline":"Button-module_outline__NGGGN","ghost":"Button-module_ghost__u2QBF","danger":"Button-module_danger__2ewhr","small":"Button-module_small__ZI9RX","medium":"Button-module_medium__Wnf9t","large":"Button-module_large__cQCpA","fullWidth":"Button-module_fullWidth__N8vYg","loading":"Button-module_loading__hcSI4","spinner":"Button-module_spinner__HtM96","spin":"Button-module_spin__jblrj","iconLeft":"Button-module_iconLeft__Fpz-y","iconRight":"Button-module_iconRight__kTfjS"};
34
9
 
35
10
  const SOUND_PACKS = {
36
11
  digital: {
@@ -595,11 +570,11 @@ function useComponentSound(config, options) {
595
570
  const Button = ({ variant = 'primary', size = 'medium', fullWidth = false, loading = false, iconLeft, iconRight, children, className = '', disabled, motionProps, soundConfig, onClick, onMouseEnter, onFocus, ...rest }) => {
596
571
  const { handlers } = useComponentSound(soundConfig);
597
572
  const buttonClasses = [
598
- styles$s.button,
599
- styles$s[variant],
600
- styles$s[size],
601
- fullWidth && styles$s.fullWidth,
602
- loading && styles$s.loading,
573
+ styles$z.button,
574
+ styles$z[variant],
575
+ styles$z[size],
576
+ fullWidth && styles$z.fullWidth,
577
+ loading && styles$z.loading,
603
578
  className
604
579
  ].filter(Boolean).join(' ');
605
580
  const handleClick = (e) => {
@@ -610,10 +585,10 @@ const Button = ({ variant = 'primary', size = 'medium', fullWidth = false, loadi
610
585
  handlers.onMouseEnter?.();
611
586
  onMouseEnter?.(e);
612
587
  };
613
- return (jsxs(motion.button, { className: buttonClasses, disabled: disabled || loading, whileHover: { scale: disabled || loading ? 1 : 1.02 }, whileTap: { scale: disabled || loading ? 1 : 0.98 }, transition: { type: "spring", stiffness: 400, damping: 17 }, onClick: handleClick, onMouseEnter: handleMouseEnter, onFocus: onFocus, ...motionProps, ...rest, children: [loading && jsx("span", { className: styles$s.spinner }), iconLeft && jsx("span", { className: styles$s.iconLeft, children: iconLeft }), children, iconRight && jsx("span", { className: styles$s.iconRight, children: iconRight })] }));
588
+ return (jsxs(motion.button, { className: buttonClasses, disabled: disabled || loading, whileHover: { scale: disabled || loading ? 1 : 1.02 }, whileTap: { scale: disabled || loading ? 1 : 0.98 }, transition: { type: "spring", stiffness: 400, damping: 17 }, onClick: handleClick, onMouseEnter: handleMouseEnter, onFocus: onFocus, ...motionProps, ...rest, children: [loading && jsx("span", { className: styles$z.spinner }), iconLeft && jsx("span", { className: styles$z.iconLeft, children: iconLeft }), children, iconRight && jsx("span", { className: styles$z.iconRight, children: iconRight })] }));
614
589
  };
615
590
 
616
- var styles$r = {"card":"Card-module_card__r2DB2","hoverable":"Card-module_hoverable__X3OpS","elevated":"Card-module_elevated__hGV6-","outlined":"Card-module_outlined__ngRag","flat":"Card-module_flat__xy-xt","glass":"Card-module_glass__Sv-Vs","imageContainer":"Card-module_imageContainer__L4ma6","image":"Card-module_image__bQBt6","header":"Card-module_header__0dtj3","headerContent":"Card-module_headerContent__W7-jD","expandButton":"Card-module_expandButton__I7f49","expandIcon":"Card-module_expandIcon__Lu-OY","expandableContent":"Card-module_expandableContent__BFgO5","expandable":"Card-module_expandable__GMXzo","body":"Card-module_body__K7eL3","footer":"Card-module_footer__L5wO-","title":"Card-module_title__pW9g8","subtitle":"Card-module_subtitle__gejH4","clickable":"Card-module_clickable__Y6fm8","padding":"Card-module_padding__wtyDo","noPadding":"Card-module_noPadding__r5Qq0","loading":"Card-module_loading__S4Wng","loadingShimmer":"Card-module_loadingShimmer__Q1Osr","loadingPulse":"Card-module_loadingPulse__bXQmC"};
591
+ var styles$y = {"card":"Card-module_card__r2DB2","hoverable":"Card-module_hoverable__X3OpS","elevated":"Card-module_elevated__hGV6-","outlined":"Card-module_outlined__ngRag","flat":"Card-module_flat__xy-xt","glass":"Card-module_glass__Sv-Vs","imageContainer":"Card-module_imageContainer__L4ma6","image":"Card-module_image__bQBt6","header":"Card-module_header__0dtj3","headerContent":"Card-module_headerContent__W7-jD","expandButton":"Card-module_expandButton__I7f49","expandIcon":"Card-module_expandIcon__Lu-OY","expandableContent":"Card-module_expandableContent__BFgO5","expandable":"Card-module_expandable__GMXzo","body":"Card-module_body__K7eL3","footer":"Card-module_footer__L5wO-","title":"Card-module_title__pW9g8","subtitle":"Card-module_subtitle__gejH4","clickable":"Card-module_clickable__Y6fm8","padding":"Card-module_padding__wtyDo","noPadding":"Card-module_noPadding__r5Qq0","loading":"Card-module_loading__S4Wng","loadingShimmer":"Card-module_loadingShimmer__Q1Osr","loadingPulse":"Card-module_loadingPulse__bXQmC"};
617
592
 
618
593
  /**
619
594
  * Card Component
@@ -678,28 +653,132 @@ const Card = ({ variant = 'elevated', hoverable = false, clickable = false, padd
678
653
  onExpandChange?.(newExpanded);
679
654
  };
680
655
  const cardClasses = [
681
- styles$r.card,
682
- styles$r[variant],
683
- hoverable && styles$r.hoverable,
684
- clickable && styles$r.clickable,
685
- !padding && styles$r.noPadding,
686
- expandable && styles$r.expandable,
656
+ styles$y.card,
657
+ styles$y[variant],
658
+ hoverable && styles$y.hoverable,
659
+ clickable && styles$y.clickable,
660
+ !padding && styles$y.noPadding,
661
+ expandable && styles$y.expandable,
687
662
  className
688
663
  ].filter(Boolean).join(' ');
689
664
  const renderHeader = () => {
690
665
  if (header) {
691
- return (jsxs("div", { className: styles$r.header, children: [jsx("div", { className: styles$r.headerContent, children: header }), expandable && (jsx("button", { className: styles$r.expandButton, onClick: handleToggleExpand, "aria-label": isExpanded ? 'Collapse card' : 'Expand card', children: jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: styles$r.expandIcon, style: { transform: isExpanded ? 'rotate(180deg)' : 'rotate(0deg)' }, children: jsx("path", { d: "M6 9l6 6 6-6" }) }) }))] }));
666
+ return (jsxs("div", { className: styles$y.header, children: [jsx("div", { className: styles$y.headerContent, children: header }), expandable && (jsx("button", { className: styles$y.expandButton, onClick: handleToggleExpand, "aria-label": isExpanded ? 'Collapse card' : 'Expand card', children: jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: styles$y.expandIcon, style: { transform: isExpanded ? 'rotate(180deg)' : 'rotate(0deg)' }, children: jsx("path", { d: "M6 9l6 6 6-6" }) }) }))] }));
692
667
  }
693
668
  if (title || subtitle) {
694
- return (jsxs("div", { className: styles$r.header, children: [jsxs("div", { className: styles$r.headerContent, children: [title && jsx("h3", { className: styles$r.title, children: title }), subtitle && jsx("p", { className: styles$r.subtitle, children: subtitle })] }), expandable && (jsx("button", { className: styles$r.expandButton, onClick: handleToggleExpand, "aria-label": isExpanded ? 'Collapse card' : 'Expand card', children: jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: styles$r.expandIcon, style: { transform: isExpanded ? 'rotate(180deg)' : 'rotate(0deg)' }, children: jsx("path", { d: "M6 9l6 6 6-6" }) }) }))] }));
669
+ return (jsxs("div", { className: styles$y.header, children: [jsxs("div", { className: styles$y.headerContent, children: [title && jsx("h3", { className: styles$y.title, children: title }), subtitle && jsx("p", { className: styles$y.subtitle, children: subtitle })] }), expandable && (jsx("button", { className: styles$y.expandButton, onClick: handleToggleExpand, "aria-label": isExpanded ? 'Collapse card' : 'Expand card', children: jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: styles$y.expandIcon, style: { transform: isExpanded ? 'rotate(180deg)' : 'rotate(0deg)' }, children: jsx("path", { d: "M6 9l6 6 6-6" }) }) }))] }));
695
670
  }
696
671
  return null;
697
672
  };
698
- const cardContent = (jsxs(Fragment, { children: [image && (jsx("div", { className: styles$r.imageContainer, children: jsx("img", { src: image, alt: imageAlt, className: styles$r.image }) })), renderHeader(), jsx(AnimatePresence, { initial: false, children: (!expandable || isExpanded) && (jsxs(motion.div, { initial: expandable ? { height: 0, opacity: 0 } : undefined, animate: expandable ? { height: 'auto', opacity: 1 } : undefined, exit: expandable ? { height: 0, opacity: 0 } : undefined, transition: { duration: 0.3, ease: "easeInOut" }, className: styles$r.expandableContent, children: [children && (jsx("div", { className: padding ? styles$r.body : undefined, children: children })), footer && jsx("div", { className: styles$r.footer, children: footer })] }, "content")) })] }));
673
+ const cardContent = (jsxs(Fragment, { children: [image && (jsx("div", { className: styles$y.imageContainer, children: jsx("img", { src: image, alt: imageAlt, className: styles$y.image }) })), renderHeader(), jsx(AnimatePresence, { initial: false, children: (!expandable || isExpanded) && (jsxs(motion.div, { initial: expandable ? { height: 0, opacity: 0 } : undefined, animate: expandable ? { height: 'auto', opacity: 1 } : undefined, exit: expandable ? { height: 0, opacity: 0 } : undefined, transition: { duration: 0.3, ease: "easeInOut" }, className: styles$y.expandableContent, children: [children && (jsx("div", { className: padding ? styles$y.body : undefined, children: children })), footer && jsx("div", { className: styles$y.footer, children: footer })] }, "content")) })] }));
699
674
  return (jsx(motion.div, { className: cardClasses, onClick: clickable ? onClick : undefined, whileHover: hoverable ? { y: -4 } : undefined, transition: { type: "spring", stiffness: 400, damping: 17 }, ...motionProps, ...rest, children: cardContent }));
700
675
  };
701
676
 
702
- var styles$q = {"checkboxLabel":"Checkbox-module_checkboxLabel__4tBVg","checkbox":"Checkbox-module_checkbox__BbJul","checkboxText":"Checkbox-module_checkboxText__oJsc9"};
677
+ var styles$x = {"wrapper":"EmptyState-module_wrapper__h3Y2E","compact":"EmptyState-module_compact__HdYu1","default":"EmptyState-module_default__ACAbn","large":"EmptyState-module_large__H3ELo","icon":"EmptyState-module_icon__i7-3M","title":"EmptyState-module_title__xCyfH","message":"EmptyState-module_message__Bc5xK","action":"EmptyState-module_action__UpnvZ"};
678
+
679
+ /**
680
+ * EmptyState Component
681
+ *
682
+ * @component
683
+ * @description
684
+ * A composable placeholder for empty lists, empty sidebars, and
685
+ * "nothing to show" panels. Renders an icon, optional title, message,
686
+ * and optional action CTA in a vertically-centered stack. Pure layout —
687
+ * no fetching, no state.
688
+ *
689
+ * @example
690
+ * // Minimal: just a message
691
+ * <EmptyState message="No documents yet." />
692
+ *
693
+ * @example
694
+ * // With an icon
695
+ * import { FileText } from 'lucide-react';
696
+ * <EmptyState
697
+ * icon={<FileText size={32} />}
698
+ * message="Select a document from the sidebar to start editing."
699
+ * />
700
+ *
701
+ * @example
702
+ * // Full: icon + title + message + action
703
+ * <EmptyState
704
+ * icon={<FolderKanban size={40} />}
705
+ * title="No projects"
706
+ * message="Create your first project to get started."
707
+ * action={<Button onClick={handleCreate}>New project</Button>}
708
+ * />
709
+ *
710
+ * @param {EmptyStateProps} props - The props for the EmptyState component
711
+ * @returns {JSX.Element} The rendered EmptyState component
712
+ */
713
+ const EmptyState = ({ icon, title, message, action, size = 'default', }) => {
714
+ const wrapperClass = [styles$x.wrapper, styles$x[size]].filter(Boolean).join(' ');
715
+ return (jsxs("div", { className: wrapperClass, children: [icon && jsx("div", { className: styles$x.icon, children: icon }), title && jsx("h3", { className: styles$x.title, children: title }), jsx("p", { className: styles$x.message, children: message }), action && jsx("div", { className: styles$x.action, children: action })] }));
716
+ };
717
+
718
+ var styles$w = {"backdrop":"Modal-module_backdrop__yOx-a","dialog":"Modal-module_dialog__yEXTq","dialogCompact":"Modal-module_dialogCompact__z1Wxp","dialogWide":"Modal-module_dialogWide__9PTXK","header":"Modal-module_header__NHHKd","title":"Modal-module_title__i3R0x","headerActions":"Modal-module_headerActions__g28UN","closeButton":"Modal-module_closeButton__siC-1","body":"Modal-module_body__U7jvM","bodyFlush":"Modal-module_bodyFlush__wtk3q"};
719
+
720
+ /**
721
+ * Modal Component
722
+ *
723
+ * @component
724
+ * @description
725
+ * An accessible overlay dialog with a backdrop, title header, optional
726
+ * header actions, and a flexible body. Renders into a React portal on
727
+ * `document.body`, animates in/out with Framer Motion, closes on Escape
728
+ * key or backdrop click, and clicks inside the dialog don't propagate
729
+ * to the backdrop.
730
+ *
731
+ * @example
732
+ * // Basic usage
733
+ * <Modal open={isOpen} title="Confirm" onClose={() => setIsOpen(false)}>
734
+ * <p>Are you sure?</p>
735
+ * </Modal>
736
+ *
737
+ * @example
738
+ * // With header actions and wide size
739
+ * <Modal
740
+ * open={isOpen}
741
+ * title="Edit profile"
742
+ * size="wide"
743
+ * actions={<button onClick={save}>Save</button>}
744
+ * onClose={handleClose}
745
+ * >
746
+ * <ProfileForm />
747
+ * </Modal>
748
+ *
749
+ * @example
750
+ * // Flush body (no padding) for editors and full-bleed content
751
+ * <Modal open={isOpen} title="Document" padding={false} onClose={handleClose}>
752
+ * <DocEditor content={content} onSave={save} />
753
+ * </Modal>
754
+ *
755
+ * @param {ModalProps} props - The props for the Modal component
756
+ * @returns {React.ReactPortal | null} A portal rendering the modal, or null on the server
757
+ */
758
+ const Modal = ({ open, title, onClose, children, size = 'default', actions, padding = true, }) => {
759
+ useEffect(() => {
760
+ if (!open)
761
+ return;
762
+ const onKey = (e) => {
763
+ if (e.key === 'Escape')
764
+ onClose();
765
+ };
766
+ document.addEventListener('keydown', onKey);
767
+ return () => document.removeEventListener('keydown', onKey);
768
+ }, [open, onClose]);
769
+ if (typeof document === 'undefined')
770
+ return null;
771
+ const dialogClass = [
772
+ styles$w.dialog,
773
+ size === 'compact' && styles$w.dialogCompact,
774
+ size === 'wide' && styles$w.dialogWide,
775
+ ]
776
+ .filter(Boolean)
777
+ .join(' ');
778
+ return createPortal(jsx(AnimatePresence, { children: open && (jsx(motion.div, { className: styles$w.backdrop, initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, transition: { duration: 0.15 }, onClick: onClose, "aria-hidden": "true", children: jsxs(motion.div, { className: dialogClass, role: "dialog", "aria-modal": "true", "aria-label": title, initial: { opacity: 0, scale: 0.96, y: 8 }, animate: { opacity: 1, scale: 1, y: 0 }, exit: { opacity: 0, scale: 0.96, y: 8 }, transition: { duration: 0.15, ease: 'easeOut' }, onClick: (e) => e.stopPropagation(), children: [jsxs("div", { className: styles$w.header, children: [jsx("span", { className: styles$w.title, children: title }), actions && jsx("div", { className: styles$w.headerActions, children: actions }), jsx("button", { className: styles$w.closeButton, onClick: onClose, "aria-label": "Close modal", type: "button", children: jsx(X, { size: 16 }) })] }), jsx("div", { className: padding ? styles$w.body : styles$w.bodyFlush, children: children })] }) })) }), document.body);
779
+ };
780
+
781
+ var styles$v = {"checkboxLabel":"Checkbox-module_checkboxLabel__4tBVg","checkbox":"Checkbox-module_checkbox__BbJul","checkboxText":"Checkbox-module_checkboxText__oJsc9"};
703
782
 
704
783
  /**
705
784
  * Checkbox component - Modern interactive checkbox with animations
@@ -738,126 +817,20 @@ var styles$q = {"checkboxLabel":"Checkbox-module_checkboxLabel__4tBVg","checkbox
738
817
  */
739
818
  const Checkbox = ({ checked, onChange, label, disabled = false, indeterminate = false, id, name, value, soundConfig }) => {
740
819
  const checkboxRef = useRef(null);
741
- const { handlers, playSound } = useComponentSound(soundConfig);
820
+ const { playSound } = useComponentSound(soundConfig);
742
821
  useEffect(() => {
743
822
  if (checkboxRef.current) {
744
823
  checkboxRef.current.indeterminate = indeterminate;
745
824
  }
746
825
  }, [indeterminate]);
747
- return (jsxs("label", { className: styles$q.checkboxLabel, children: [jsx("input", { ref: checkboxRef, type: "checkbox", checked: checked, onChange: (e) => {
826
+ return (jsxs("label", { className: styles$v.checkboxLabel, children: [jsx("input", { ref: checkboxRef, type: "checkbox", checked: checked, onChange: (e) => {
748
827
  const isChecked = e.target.checked;
749
828
  onChange(isChecked);
750
829
  if (soundConfig?.onClick !== false) {
751
830
  playSound('toggle');
752
831
  }
753
- }, className: styles$q.checkbox, disabled: disabled, id: id, name: name, value: value, "aria-checked": indeterminate ? 'mixed' : checked }), label && jsx("span", { className: styles$q.checkboxText, children: label })] }));
754
- };
755
-
756
- var DefaultContext = {
757
- color: undefined,
758
- size: undefined,
759
- className: undefined,
760
- style: undefined,
761
- attr: undefined
832
+ }, className: styles$v.checkbox, disabled: disabled, id: id, name: name, value: value, "aria-checked": indeterminate ? 'mixed' : checked }), label && jsx("span", { className: styles$v.checkboxText, children: label })] }));
762
833
  };
763
- var IconContext = React.createContext && /*#__PURE__*/React.createContext(DefaultContext);
764
-
765
- var _excluded = ["attr", "size", "title"];
766
- function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
767
- function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } } return target; }
768
- function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
769
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
770
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
771
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
772
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
773
- function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
774
- function Tree2Element(tree) {
775
- return tree && tree.map((node, i) => /*#__PURE__*/React.createElement(node.tag, _objectSpread({
776
- key: i
777
- }, node.attr), Tree2Element(node.child)));
778
- }
779
- function GenIcon(data) {
780
- return props => /*#__PURE__*/React.createElement(IconBase, _extends({
781
- attr: _objectSpread({}, data.attr)
782
- }, props), Tree2Element(data.child));
783
- }
784
- function IconBase(props) {
785
- var elem = conf => {
786
- var {
787
- attr,
788
- size,
789
- title
790
- } = props,
791
- svgProps = _objectWithoutProperties(props, _excluded);
792
- var computedSize = size || conf.size || "1em";
793
- var className;
794
- if (conf.className) className = conf.className;
795
- if (props.className) className = (className ? className + " " : "") + props.className;
796
- return /*#__PURE__*/React.createElement("svg", _extends({
797
- stroke: "currentColor",
798
- fill: "currentColor",
799
- strokeWidth: "0"
800
- }, conf.attr, attr, svgProps, {
801
- className: className,
802
- style: _objectSpread(_objectSpread({
803
- color: props.color || conf.color
804
- }, conf.style), props.style),
805
- height: computedSize,
806
- width: computedSize,
807
- xmlns: "http://www.w3.org/2000/svg"
808
- }), title && /*#__PURE__*/React.createElement("title", null, title), props.children);
809
- };
810
- return IconContext !== undefined ? /*#__PURE__*/React.createElement(IconContext.Consumer, null, conf => elem(conf)) : elem(DefaultContext);
811
- }
812
-
813
- // THIS FILE IS AUTO GENERATED
814
- function FiBook (props) {
815
- return GenIcon({"attr":{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round"},"child":[{"tag":"path","attr":{"d":"M4 19.5A2.5 2.5 0 0 1 6.5 17H20"},"child":[]},{"tag":"path","attr":{"d":"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"},"child":[]}]})(props);
816
- }function FiCalendar (props) {
817
- return GenIcon({"attr":{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round"},"child":[{"tag":"rect","attr":{"x":"3","y":"4","width":"18","height":"18","rx":"2","ry":"2"},"child":[]},{"tag":"line","attr":{"x1":"16","y1":"2","x2":"16","y2":"6"},"child":[]},{"tag":"line","attr":{"x1":"8","y1":"2","x2":"8","y2":"6"},"child":[]},{"tag":"line","attr":{"x1":"3","y1":"10","x2":"21","y2":"10"},"child":[]}]})(props);
818
- }function FiCheck (props) {
819
- return GenIcon({"attr":{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round"},"child":[{"tag":"polyline","attr":{"points":"20 6 9 17 4 12"},"child":[]}]})(props);
820
- }function FiChevronDown (props) {
821
- return GenIcon({"attr":{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round"},"child":[{"tag":"polyline","attr":{"points":"6 9 12 15 18 9"},"child":[]}]})(props);
822
- }function FiChevronLeft (props) {
823
- return GenIcon({"attr":{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round"},"child":[{"tag":"polyline","attr":{"points":"15 18 9 12 15 6"},"child":[]}]})(props);
824
- }function FiChevronRight (props) {
825
- return GenIcon({"attr":{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round"},"child":[{"tag":"polyline","attr":{"points":"9 18 15 12 9 6"},"child":[]}]})(props);
826
- }function FiClock (props) {
827
- return GenIcon({"attr":{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round"},"child":[{"tag":"circle","attr":{"cx":"12","cy":"12","r":"10"},"child":[]},{"tag":"polyline","attr":{"points":"12 6 12 12 16 14"},"child":[]}]})(props);
828
- }function FiDownload (props) {
829
- return GenIcon({"attr":{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round"},"child":[{"tag":"path","attr":{"d":"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"},"child":[]},{"tag":"polyline","attr":{"points":"7 10 12 15 17 10"},"child":[]},{"tag":"line","attr":{"x1":"12","y1":"15","x2":"12","y2":"3"},"child":[]}]})(props);
830
- }function FiFolder (props) {
831
- return GenIcon({"attr":{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round"},"child":[{"tag":"path","attr":{"d":"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"},"child":[]}]})(props);
832
- }function FiGithub (props) {
833
- return GenIcon({"attr":{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round"},"child":[{"tag":"path","attr":{"d":"M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"},"child":[]}]})(props);
834
- }function FiInfo (props) {
835
- return GenIcon({"attr":{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round"},"child":[{"tag":"circle","attr":{"cx":"12","cy":"12","r":"10"},"child":[]},{"tag":"line","attr":{"x1":"12","y1":"16","x2":"12","y2":"12"},"child":[]},{"tag":"line","attr":{"x1":"12","y1":"8","x2":"12.01","y2":"8"},"child":[]}]})(props);
836
- }function FiMaximize (props) {
837
- return GenIcon({"attr":{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round"},"child":[{"tag":"path","attr":{"d":"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3"},"child":[]}]})(props);
838
- }function FiMenu (props) {
839
- return GenIcon({"attr":{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round"},"child":[{"tag":"line","attr":{"x1":"3","y1":"12","x2":"21","y2":"12"},"child":[]},{"tag":"line","attr":{"x1":"3","y1":"6","x2":"21","y2":"6"},"child":[]},{"tag":"line","attr":{"x1":"3","y1":"18","x2":"21","y2":"18"},"child":[]}]})(props);
840
- }function FiMessageSquare (props) {
841
- return GenIcon({"attr":{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round"},"child":[{"tag":"path","attr":{"d":"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"},"child":[]}]})(props);
842
- }function FiMoon (props) {
843
- return GenIcon({"attr":{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round"},"child":[{"tag":"path","attr":{"d":"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"},"child":[]}]})(props);
844
- }function FiPause (props) {
845
- return GenIcon({"attr":{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round"},"child":[{"tag":"rect","attr":{"x":"6","y":"4","width":"4","height":"16"},"child":[]},{"tag":"rect","attr":{"x":"14","y":"4","width":"4","height":"16"},"child":[]}]})(props);
846
- }function FiPlay (props) {
847
- return GenIcon({"attr":{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round"},"child":[{"tag":"polygon","attr":{"points":"5 3 19 12 5 21 5 3"},"child":[]}]})(props);
848
- }function FiSearch (props) {
849
- return GenIcon({"attr":{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round"},"child":[{"tag":"circle","attr":{"cx":"11","cy":"11","r":"8"},"child":[]},{"tag":"line","attr":{"x1":"21","y1":"21","x2":"16.65","y2":"16.65"},"child":[]}]})(props);
850
- }function FiShare2 (props) {
851
- return GenIcon({"attr":{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round"},"child":[{"tag":"circle","attr":{"cx":"18","cy":"5","r":"3"},"child":[]},{"tag":"circle","attr":{"cx":"6","cy":"12","r":"3"},"child":[]},{"tag":"circle","attr":{"cx":"18","cy":"19","r":"3"},"child":[]},{"tag":"line","attr":{"x1":"8.59","y1":"13.51","x2":"15.42","y2":"17.49"},"child":[]},{"tag":"line","attr":{"x1":"15.41","y1":"6.51","x2":"8.59","y2":"10.49"},"child":[]}]})(props);
852
- }function FiSun (props) {
853
- return GenIcon({"attr":{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round"},"child":[{"tag":"circle","attr":{"cx":"12","cy":"12","r":"5"},"child":[]},{"tag":"line","attr":{"x1":"12","y1":"1","x2":"12","y2":"3"},"child":[]},{"tag":"line","attr":{"x1":"12","y1":"21","x2":"12","y2":"23"},"child":[]},{"tag":"line","attr":{"x1":"4.22","y1":"4.22","x2":"5.64","y2":"5.64"},"child":[]},{"tag":"line","attr":{"x1":"18.36","y1":"18.36","x2":"19.78","y2":"19.78"},"child":[]},{"tag":"line","attr":{"x1":"1","y1":"12","x2":"3","y2":"12"},"child":[]},{"tag":"line","attr":{"x1":"21","y1":"12","x2":"23","y2":"12"},"child":[]},{"tag":"line","attr":{"x1":"4.22","y1":"19.78","x2":"5.64","y2":"18.36"},"child":[]},{"tag":"line","attr":{"x1":"18.36","y1":"5.64","x2":"19.78","y2":"4.22"},"child":[]}]})(props);
854
- }function FiUserPlus (props) {
855
- return GenIcon({"attr":{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round"},"child":[{"tag":"path","attr":{"d":"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"},"child":[]},{"tag":"circle","attr":{"cx":"8.5","cy":"7","r":"4"},"child":[]},{"tag":"line","attr":{"x1":"20","y1":"8","x2":"20","y2":"14"},"child":[]},{"tag":"line","attr":{"x1":"23","y1":"11","x2":"17","y2":"11"},"child":[]}]})(props);
856
- }function FiUsers (props) {
857
- return GenIcon({"attr":{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round"},"child":[{"tag":"path","attr":{"d":"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"},"child":[]},{"tag":"circle","attr":{"cx":"9","cy":"7","r":"4"},"child":[]},{"tag":"path","attr":{"d":"M23 21v-2a4 4 0 0 0-3-3.87"},"child":[]},{"tag":"path","attr":{"d":"M16 3.13a4 4 0 0 1 0 7.75"},"child":[]}]})(props);
858
- }function FiX (props) {
859
- return GenIcon({"attr":{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round"},"child":[{"tag":"line","attr":{"x1":"18","y1":"6","x2":"6","y2":"18"},"child":[]},{"tag":"line","attr":{"x1":"6","y1":"6","x2":"18","y2":"18"},"child":[]}]})(props);
860
- }
861
834
 
862
835
  const formatDateToEuropean = (date) => {
863
836
  if (!date)
@@ -887,7 +860,7 @@ const parseEuropeanDate = (dateString) => {
887
860
  return '';
888
861
  };
889
862
 
890
- var styles$p = {"dateInput":"DateInput-module_dateInput__54VPD","label":"DateInput-module_label__yDdUw","inputWrapper":"DateInput-module_inputWrapper__x-r1d","textInput":"DateInput-module_textInput__ToOSX","calendarButton":"DateInput-module_calendarButton__JzDGD","hiddenDateInput":"DateInput-module_hiddenDateInput__IWNg3","error":"DateInput-module_error__ieuPO","success":"DateInput-module_success__rPA93","loading":"DateInput-module_loading__1DAmD"};
863
+ var styles$u = {"dateInput":"DateInput-module_dateInput__54VPD","label":"DateInput-module_label__yDdUw","inputWrapper":"DateInput-module_inputWrapper__x-r1d","textInput":"DateInput-module_textInput__ToOSX","calendarButton":"DateInput-module_calendarButton__JzDGD","hiddenDateInput":"DateInput-module_hiddenDateInput__IWNg3","error":"DateInput-module_error__ieuPO","success":"DateInput-module_success__rPA93","loading":"DateInput-module_loading__1DAmD"};
891
864
 
892
865
  /**
893
866
  * DateInput component - European format date picker with manual input support
@@ -976,19 +949,19 @@ function DateInput({ label, value, onChange, placeholder = "25/12/2024", onFocus
976
949
  }
977
950
  };
978
951
  const getClassName = () => {
979
- const classes = [styles$p.dateInput];
952
+ const classes = [styles$u.dateInput];
980
953
  if (error)
981
- classes.push(styles$p.error);
954
+ classes.push(styles$u.error);
982
955
  if (success)
983
- classes.push(styles$p.success);
956
+ classes.push(styles$u.success);
984
957
  if (loading)
985
- classes.push(styles$p.loading);
958
+ classes.push(styles$u.loading);
986
959
  return classes.join(' ');
987
960
  };
988
- return (jsxs("div", { className: getClassName(), children: [jsx("label", { className: styles$p.label, children: label }), jsxs("div", { className: styles$p.inputWrapper, children: [jsx("input", { type: "text", value: value.includes('-') ? formatDateToEuropean(value) : value, onChange: (e) => handleTextChange(e.target.value), onFocus: onFocus, onBlur: onBlur, placeholder: placeholder, className: styles$p.textInput, disabled: disabled || loading, ...handlers }), jsx("button", { type: "button", onClick: handleCalendarClick, className: styles$p.calendarButton, title: "Select date from calendar", disabled: disabled || loading, children: jsx(FiCalendar, {}) }), jsx("input", { ref: hiddenDateInputRef, type: "date", onChange: handleCalendarChange, className: styles$p.hiddenDateInput, tabIndex: -1, disabled: disabled || loading })] })] }));
961
+ return (jsxs("div", { className: getClassName(), children: [jsx("label", { className: styles$u.label, children: label }), jsxs("div", { className: styles$u.inputWrapper, children: [jsx("input", { type: "text", value: value.includes('-') ? formatDateToEuropean(value) : value, onChange: (e) => handleTextChange(e.target.value), onFocus: onFocus, onBlur: onBlur, placeholder: placeholder, className: styles$u.textInput, disabled: disabled || loading, ...handlers }), jsx("button", { type: "button", onClick: handleCalendarClick, className: styles$u.calendarButton, title: "Select date from calendar", disabled: disabled || loading, children: jsx(Calendar$1, {}) }), jsx("input", { ref: hiddenDateInputRef, type: "date", onChange: handleCalendarChange, className: styles$u.hiddenDateInput, tabIndex: -1, disabled: disabled || loading })] })] }));
989
962
  }
990
963
 
991
- var styles$o = {"searchableDropdown":"SearchableDropdown-module_searchableDropdown__S2Nh5","dropdownTrigger":"SearchableDropdown-module_dropdownTrigger__dihdr","open":"SearchableDropdown-module_open__P7mRt","dropdownValue":"SearchableDropdown-module_dropdownValue__ydrc2","placeholder":"SearchableDropdown-module_placeholder__BwM2W","dropdownArrow":"SearchableDropdown-module_dropdownArrow__yd5fp","dropdownMenu":"SearchableDropdown-module_dropdownMenu__2Z5cc","dropdownSearch":"SearchableDropdown-module_dropdownSearch__NRk7j","searchInput":"SearchableDropdown-module_searchInput__VS2Hw","searchIcon":"SearchableDropdown-module_searchIcon__2vKFF","dropdownOptions":"SearchableDropdown-module_dropdownOptions__6YXqF","dropdownOption":"SearchableDropdown-module_dropdownOption__YwDr-","selected":"SearchableDropdown-module_selected__31JeB","highlighted":"SearchableDropdown-module_highlighted__P0bBq","checkIcon":"SearchableDropdown-module_checkIcon__YxowK","dropdownNoResults":"SearchableDropdown-module_dropdownNoResults__WW-Da","loading":"SearchableDropdown-module_loading__xlYf0"};
964
+ var styles$t = {"searchableDropdown":"SearchableDropdown-module_searchableDropdown__S2Nh5","dropdownTrigger":"SearchableDropdown-module_dropdownTrigger__dihdr","open":"SearchableDropdown-module_open__P7mRt","dropdownValue":"SearchableDropdown-module_dropdownValue__ydrc2","placeholder":"SearchableDropdown-module_placeholder__BwM2W","dropdownArrow":"SearchableDropdown-module_dropdownArrow__yd5fp","dropdownMenu":"SearchableDropdown-module_dropdownMenu__2Z5cc","dropdownSearch":"SearchableDropdown-module_dropdownSearch__NRk7j","searchInput":"SearchableDropdown-module_searchInput__VS2Hw","searchIcon":"SearchableDropdown-module_searchIcon__2vKFF","dropdownOptions":"SearchableDropdown-module_dropdownOptions__6YXqF","dropdownOption":"SearchableDropdown-module_dropdownOption__YwDr-","selected":"SearchableDropdown-module_selected__31JeB","highlighted":"SearchableDropdown-module_highlighted__P0bBq","checkIcon":"SearchableDropdown-module_checkIcon__YxowK","dropdownNoResults":"SearchableDropdown-module_dropdownNoResults__WW-Da","loading":"SearchableDropdown-module_loading__xlYf0"};
992
965
 
993
966
  /**
994
967
  * SearchableDropdown component - Modern filterable dropdown with animations
@@ -1093,23 +1066,23 @@ function SearchableDropdown({ label, value, onChange, options, placeholder = "Se
1093
1066
  }
1094
1067
  };
1095
1068
  const getTriggerClassName = () => {
1096
- const classes = [styles$o.dropdownTrigger];
1069
+ const classes = [styles$t.dropdownTrigger];
1097
1070
  if (isOpen)
1098
- classes.push(styles$o.open);
1071
+ classes.push(styles$t.open);
1099
1072
  if (loading)
1100
- classes.push(styles$o.loading);
1073
+ classes.push(styles$t.loading);
1101
1074
  if (error)
1102
- classes.push(styles$o.error);
1075
+ classes.push(styles$t.error);
1103
1076
  return classes.join(' ');
1104
1077
  };
1105
- return (jsxs("div", { className: styles$o.searchableDropdown, ref: dropdownRef, onKeyDown: handleKeyDown, children: [jsx("label", { children: label }), jsxs(motion.button, { type: "button", className: getTriggerClassName(), onClick: () => !disabled && !loading && setIsOpen(!isOpen), whileTap: { scale: disabled ? 1 : 0.98 }, style: { willChange: 'transform' }, disabled: disabled, children: [jsx("span", { className: `${styles$o.dropdownValue} ${!displayValue ? styles$o.placeholder : ''}`, children: displayValue || placeholder }), jsx(FiChevronDown, { className: styles$o.dropdownArrow })] }), jsx(AnimatePresence, { children: isOpen && (jsxs(motion.div, { className: styles$o.dropdownMenu, initial: { opacity: 0, y: -10, scale: 0.95 }, animate: { opacity: 1, y: 0, scale: 1 }, exit: { opacity: 0, y: -10, scale: 0.95 }, transition: { duration: 0.2, ease: "easeOut" }, children: [jsxs("div", { className: styles$o.dropdownSearch, children: [jsx(FiSearch, { className: styles$o.searchIcon }), jsx("input", { ref: inputRef, type: "text", className: styles$o.searchInput, placeholder: "Cerca...", value: searchTerm, onChange: (e) => setSearchTerm(e.target.value), onClick: (e) => e.stopPropagation() })] }), jsxs("div", { className: styles$o.dropdownOptions, children: [allOptions.map((opt, index) => {
1078
+ return (jsxs("div", { className: styles$t.searchableDropdown, ref: dropdownRef, onKeyDown: handleKeyDown, children: [jsx("label", { children: label }), jsxs(motion.button, { type: "button", className: getTriggerClassName(), onClick: () => !disabled && !loading && setIsOpen(!isOpen), whileTap: { scale: disabled ? 1 : 0.98 }, style: { willChange: 'transform' }, disabled: disabled, children: [jsx("span", { className: `${styles$t.dropdownValue} ${!displayValue ? styles$t.placeholder : ''}`, children: displayValue || placeholder }), jsx(ChevronDown, { className: styles$t.dropdownArrow })] }), jsx(AnimatePresence, { children: isOpen && (jsxs(motion.div, { className: styles$t.dropdownMenu, initial: { opacity: 0, y: -10, scale: 0.95 }, animate: { opacity: 1, y: 0, scale: 1 }, exit: { opacity: 0, y: -10, scale: 0.95 }, transition: { duration: 0.2, ease: "easeOut" }, children: [jsxs("div", { className: styles$t.dropdownSearch, children: [jsx(Search, { className: styles$t.searchIcon }), jsx("input", { ref: inputRef, type: "text", className: styles$t.searchInput, placeholder: "Cerca...", value: searchTerm, onChange: (e) => setSearchTerm(e.target.value), onClick: (e) => e.stopPropagation() })] }), jsxs("div", { className: styles$t.dropdownOptions, children: [allOptions.map((opt, index) => {
1106
1079
  const isSelected = value === opt.value;
1107
1080
  const isHighlighted = highlightedIndex === index;
1108
- return (jsxs(motion.button, { type: "button", className: `${styles$o.dropdownOption} ${isSelected ? styles$o.selected : ''} ${isHighlighted ? styles$o.highlighted : ''}`, onClick: () => handleSelect(opt.value), onMouseEnter: () => setHighlightedIndex(index), initial: { opacity: 0, x: -20 }, animate: { opacity: 1, x: 0 }, transition: { delay: index * 0.02 }, whileTap: { scale: 0.98 }, style: { willChange: 'transform' }, children: [jsx("span", { children: opt.label }), isSelected && jsx(FiCheck, { className: styles$o.checkIcon })] }, `${opt.value}-${index}`));
1109
- }), allOptions.length === 0 && (jsx(motion.div, { className: styles$o.dropdownNoResults, initial: { opacity: 0 }, animate: { opacity: 1 }, children: "No results found" }))] })] })) })] }));
1081
+ return (jsxs(motion.button, { type: "button", className: `${styles$t.dropdownOption} ${isSelected ? styles$t.selected : ''} ${isHighlighted ? styles$t.highlighted : ''}`, onClick: () => handleSelect(opt.value), onMouseEnter: () => setHighlightedIndex(index), initial: { opacity: 0, x: -20 }, animate: { opacity: 1, x: 0 }, transition: { delay: index * 0.02 }, whileTap: { scale: 0.98 }, style: { willChange: 'transform' }, children: [jsx("span", { children: opt.label }), isSelected && jsx(Check, { className: styles$t.checkIcon })] }, `${opt.value}-${index}`));
1082
+ }), allOptions.length === 0 && (jsx(motion.div, { className: styles$t.dropdownNoResults, initial: { opacity: 0 }, animate: { opacity: 1 }, children: "No results found" }))] })] })) })] }));
1110
1083
  }
1111
1084
 
1112
- var styles$n = {"selectInput":"SelectInput-module_selectInput__s6zEg","selectWrapper":"SelectInput-module_selectWrapper__Qr4pl","selectIcon":"SelectInput-module_selectIcon__9pjhf","error":"SelectInput-module_error__3WNJc","success":"SelectInput-module_success__WJ5ga","loading":"SelectInput-module_loading__n35N9"};
1085
+ var styles$s = {"selectInput":"SelectInput-module_selectInput__s6zEg","selectWrapper":"SelectInput-module_selectWrapper__Qr4pl","selectIcon":"SelectInput-module_selectIcon__9pjhf","error":"SelectInput-module_error__3WNJc","success":"SelectInput-module_success__WJ5ga","loading":"SelectInput-module_loading__n35N9"};
1113
1086
 
1114
1087
  /**
1115
1088
  * SelectInput component - Styled dropdown selector with flexible option format
@@ -1144,29 +1117,29 @@ var styles$n = {"selectInput":"SelectInput-module_selectInput__s6zEg","selectWra
1144
1117
  * ]}
1145
1118
  * />
1146
1119
  */
1147
- function SelectInput({ label, value, onChange, options, placeholder = "Select...", disabled = false, error = false, success = false, loading = false, required = false, soundConfig }) {
1120
+ function SelectInput({ label, value, onChange, options, placeholder = "Select...", disabled = false, error = false, success = false, loading = false, required = false, soundConfig, className }) {
1148
1121
  const { handlers, playSound } = useComponentSound(soundConfig);
1149
1122
  const getClassName = () => {
1150
- const classes = [styles$n.selectInput];
1123
+ const classes = [styles$s.selectInput];
1151
1124
  if (error)
1152
- classes.push(styles$n.error);
1125
+ classes.push(styles$s.error);
1153
1126
  if (success)
1154
- classes.push(styles$n.success);
1127
+ classes.push(styles$s.success);
1155
1128
  if (loading)
1156
- classes.push(styles$n.loading);
1129
+ classes.push(styles$s.loading);
1157
1130
  return classes.join(' ');
1158
1131
  };
1159
- return (jsxs("div", { className: getClassName(), children: [jsxs("label", { children: [label, required && jsx("span", { style: { color: 'var(--color-error)' }, children: " *" })] }), jsxs("div", { className: styles$n.selectWrapper, children: [jsxs("select", { value: value, onChange: e => {
1132
+ return (jsxs("div", { className: `${getClassName()}${className ? ` ${className}` : ''}`, children: [jsxs("label", { children: [label, required && jsx("span", { style: { color: 'var(--color-error)' }, children: " *" })] }), jsxs("div", { className: styles$s.selectWrapper, children: [jsxs("select", { value: value, onChange: e => {
1160
1133
  playSound('click');
1161
1134
  onChange(e.target.value);
1162
1135
  }, disabled: disabled || loading, required: required, ...handlers, children: [jsx("option", { value: "", children: placeholder }), options.map(opt => {
1163
1136
  const optionValue = typeof opt === 'string' ? opt : opt.value;
1164
1137
  const optionLabel = typeof opt === 'string' ? opt : opt.label;
1165
1138
  return (jsx("option", { value: optionValue, children: optionLabel }, optionValue));
1166
- })] }), jsx(FiChevronDown, { className: styles$n.selectIcon })] })] }));
1139
+ })] }), jsx(ChevronDown, { className: styles$s.selectIcon })] })] }));
1167
1140
  }
1168
1141
 
1169
- var styles$m = {"textareaContainer":"TextArea-module_textareaContainer__AquFj","compact":"TextArea-module_compact__U5lPn","textareaLabel":"TextArea-module_textareaLabel__7Vmyx","requiredIndicator":"TextArea-module_requiredIndicator__3Fxyy","textareaInput":"TextArea-module_textareaInput__VCDZA","characterCount":"TextArea-module_characterCount__9FO5N","nearLimit":"TextArea-module_nearLimit__cUdnw","atLimit":"TextArea-module_atLimit__GoWCC","error":"TextArea-module_error__ciHgb","success":"TextArea-module_success__a0-xD","loading":"TextArea-module_loading__CSFBR","focusMode":"TextArea-module_focusMode__9A8U-"};
1142
+ var styles$r = {"textareaContainer":"TextArea-module_textareaContainer__AquFj","compact":"TextArea-module_compact__U5lPn","textareaLabel":"TextArea-module_textareaLabel__7Vmyx","requiredIndicator":"TextArea-module_requiredIndicator__3Fxyy","textareaInput":"TextArea-module_textareaInput__VCDZA","characterCount":"TextArea-module_characterCount__9FO5N","nearLimit":"TextArea-module_nearLimit__cUdnw","atLimit":"TextArea-module_atLimit__GoWCC","error":"TextArea-module_error__ciHgb","success":"TextArea-module_success__a0-xD","loading":"TextArea-module_loading__CSFBR","focusMode":"TextArea-module_focusMode__9A8U-"};
1170
1143
 
1171
1144
  /**
1172
1145
  * TextArea component - Multi-line text input with character counting
@@ -1201,38 +1174,38 @@ var styles$m = {"textareaContainer":"TextArea-module_textareaContainer__AquFj","
1201
1174
  function TextArea({ label, value, onChange, rows = 5, placeholder = "", required = false, maxLength, disabled = false, error = false, success = false, loading = false, focusMode = false, compact = false, className = "" }) {
1202
1175
  const textareaId = `textarea-${Math.random().toString(36).substr(2, 9)}`;
1203
1176
  const getContainerClassName = () => {
1204
- const classes = [styles$m.textareaContainer];
1177
+ const classes = [styles$r.textareaContainer];
1205
1178
  if (error)
1206
- classes.push(styles$m.error);
1179
+ classes.push(styles$r.error);
1207
1180
  if (success)
1208
- classes.push(styles$m.success);
1181
+ classes.push(styles$r.success);
1209
1182
  if (loading)
1210
- classes.push(styles$m.loading);
1183
+ classes.push(styles$r.loading);
1211
1184
  if (focusMode)
1212
- classes.push(styles$m.focusMode);
1185
+ classes.push(styles$r.focusMode);
1213
1186
  if (compact)
1214
- classes.push(styles$m.compact);
1187
+ classes.push(styles$r.compact);
1215
1188
  if (className)
1216
1189
  classes.push(className);
1217
1190
  return classes.join(' ');
1218
1191
  };
1219
1192
  const getCharCountClassName = () => {
1220
1193
  if (!maxLength)
1221
- return styles$m.characterCount;
1222
- const classes = [styles$m.characterCount];
1194
+ return styles$r.characterCount;
1195
+ const classes = [styles$r.characterCount];
1223
1196
  const percentage = (value.length / maxLength) * 100;
1224
1197
  if (percentage >= 100) {
1225
- classes.push(styles$m.atLimit);
1198
+ classes.push(styles$r.atLimit);
1226
1199
  }
1227
1200
  else if (percentage >= 80) {
1228
- classes.push(styles$m.nearLimit);
1201
+ classes.push(styles$r.nearLimit);
1229
1202
  }
1230
1203
  return classes.join(' ');
1231
1204
  };
1232
- return (jsxs("div", { className: getContainerClassName(), children: [label && (jsxs("label", { htmlFor: textareaId, className: styles$m.textareaLabel, children: [label, required && jsx("span", { className: styles$m.requiredIndicator, children: "*" })] })), jsx("textarea", { id: textareaId, value: value, onChange: (e) => onChange(e.target.value), rows: rows, placeholder: placeholder, maxLength: maxLength, className: styles$m.textareaInput, "aria-required": required, disabled: disabled || loading, "aria-invalid": error }), maxLength && (jsxs("div", { className: getCharCountClassName(), children: [jsx("span", { children: value.length }), jsx("span", { style: { opacity: 0.7 }, children: " / " }), jsx("span", { children: maxLength })] }))] }));
1205
+ return (jsxs("div", { className: getContainerClassName(), children: [label && (jsxs("label", { htmlFor: textareaId, className: styles$r.textareaLabel, children: [label, required && jsx("span", { className: styles$r.requiredIndicator, children: "*" })] })), jsx("textarea", { id: textareaId, value: value, onChange: (e) => onChange(e.target.value), rows: rows, placeholder: placeholder, maxLength: maxLength, className: styles$r.textareaInput, "aria-required": required, disabled: disabled || loading, "aria-invalid": error }), maxLength && (jsxs("div", { className: getCharCountClassName(), children: [jsx("span", { children: value.length }), jsx("span", { style: { opacity: 0.7 }, children: " / " }), jsx("span", { children: maxLength })] }))] }));
1233
1206
  }
1234
1207
 
1235
- var styles$l = {"textInput":"TextInput-module_textInput__b2LVM","required":"TextInput-module_required__7uLiM","inputError":"TextInput-module_inputError__QD0a-","errorMessage":"TextInput-module_errorMessage__nIDoQ","success":"TextInput-module_success__KbSS3","loading":"TextInput-module_loading__qXaca","withIcon":"TextInput-module_withIcon__-8swm","inputIcon":"TextInput-module_inputIcon__B4czN","withAction":"TextInput-module_withAction__JD3ku","actionButton":"TextInput-module_actionButton__zFJel"};
1208
+ var styles$q = {"textInput":"TextInput-module_textInput__b2LVM","required":"TextInput-module_required__7uLiM","inputError":"TextInput-module_inputError__QD0a-","errorMessage":"TextInput-module_errorMessage__nIDoQ","success":"TextInput-module_success__KbSS3","loading":"TextInput-module_loading__qXaca","withIcon":"TextInput-module_withIcon__-8swm","inputIcon":"TextInput-module_inputIcon__B4czN","withAction":"TextInput-module_withAction__JD3ku","actionButton":"TextInput-module_actionButton__zFJel"};
1236
1209
 
1237
1210
  /**
1238
1211
  * TextInput component - A versatile text input field with label and error handling
@@ -1269,21 +1242,21 @@ function TextInput({ label, value, onChange, type = "text", onBlur, placeholder,
1269
1242
  const { handlers, playSound } = useComponentSound(soundConfig);
1270
1243
  const prevValueRef = React.useRef(value);
1271
1244
  const getContainerClassName = () => {
1272
- const classes = [styles$l.textInput];
1245
+ const classes = [styles$q.textInput];
1273
1246
  if (success)
1274
- classes.push(styles$l.success);
1247
+ classes.push(styles$q.success);
1275
1248
  if (loading)
1276
- classes.push(styles$l.loading);
1249
+ classes.push(styles$q.loading);
1277
1250
  if (icon)
1278
- classes.push(styles$l.withIcon);
1251
+ classes.push(styles$q.withIcon);
1279
1252
  if (actionButton)
1280
- classes.push(styles$l.withAction);
1253
+ classes.push(styles$q.withAction);
1281
1254
  return classes.join(' ');
1282
1255
  };
1283
1256
  React.useEffect(() => {
1284
1257
  prevValueRef.current = value;
1285
1258
  }, [value]);
1286
- return (jsxs("div", { className: getContainerClassName(), children: [jsxs("label", { htmlFor: inputId, children: [label, required && jsx("span", { className: styles$l.required, children: "*" })] }), jsxs("div", { style: { position: 'relative' }, children: [icon && jsx("div", { className: styles$l.inputIcon, children: icon }), jsx("input", { id: inputId, type: type, value: value, onChange: (e) => {
1259
+ return (jsxs("div", { className: getContainerClassName(), children: [jsxs("label", { htmlFor: inputId, children: [label, required && jsx("span", { className: styles$q.required, children: "*" })] }), jsxs("div", { style: { position: 'relative' }, children: [icon && jsx("div", { className: styles$q.inputIcon, children: icon }), jsx("input", { id: inputId, type: type, value: value, onChange: (e) => {
1287
1260
  const newValue = e.target.value;
1288
1261
  const oldValue = prevValueRef.current;
1289
1262
  onChange(newValue);
@@ -1299,13 +1272,13 @@ function TextInput({ label, value, onChange, type = "text", onBlur, placeholder,
1299
1272
  if (error && soundConfig?.onError) {
1300
1273
  playSound(typeof soundConfig.onError === 'string' ? soundConfig.onError : 'error');
1301
1274
  }
1302
- }, onBlur: onBlur, placeholder: placeholder, className: error ? styles$l.inputError : '', "aria-invalid": !!error, "aria-describedby": error ? `${inputId}-error` : undefined, disabled: disabled || loading, maxLength: maxLength, autoComplete: autoComplete }), actionButton && (jsx("button", { type: "button", className: styles$l.actionButton, onClick: () => {
1275
+ }, onBlur: onBlur, placeholder: placeholder, className: error ? styles$q.inputError : '', "aria-invalid": !!error, "aria-describedby": error ? `${inputId}-error` : undefined, disabled: disabled || loading, maxLength: maxLength, autoComplete: autoComplete }), actionButton && (jsx("button", { type: "button", className: styles$q.actionButton, onClick: () => {
1303
1276
  handlers.onClick?.();
1304
1277
  actionButton.onClick();
1305
- }, disabled: disabled || loading, children: actionButton.label }))] }), error && (jsx("span", { id: `${inputId}-error`, className: styles$l.errorMessage, children: error }))] }));
1278
+ }, disabled: disabled || loading, children: actionButton.label }))] }), error && (jsx("span", { id: `${inputId}-error`, className: styles$q.errorMessage, children: error }))] }));
1306
1279
  }
1307
1280
 
1308
- var styles$k = {"toggleContainer":"Toggle-module_toggleContainer__QxqQb","toggleButton":"Toggle-module_toggleButton__WUUf-","active":"Toggle-module_active__fX6Io"};
1281
+ var styles$p = {"toggleContainer":"Toggle-module_toggleContainer__QxqQb","toggleButton":"Toggle-module_toggleButton__WUUf-","active":"Toggle-module_active__fX6Io"};
1309
1282
 
1310
1283
  /**
1311
1284
  * Toggle Component
@@ -1323,7 +1296,7 @@ var styles$k = {"toggleContainer":"Toggle-module_toggleContainer__QxqQb","toggle
1323
1296
  * onToggle={setDarkMode}
1324
1297
  * leftLabel="Light"
1325
1298
  * rightLabel="Dark"
1326
- * soundTheme="cozy"
1299
+ * soundTheme="digital"
1327
1300
  * enableCelebration={true}
1328
1301
  * />
1329
1302
  *
@@ -1351,14 +1324,14 @@ var styles$k = {"toggleContainer":"Toggle-module_toggleContainer__QxqQb","toggle
1351
1324
  * @returns {JSX.Element} The rendered Toggle component
1352
1325
  */
1353
1326
  function Toggle(props) {
1354
- const { isOn, onToggle, leftLabel, rightLabel, leftIcon, rightIcon, className, style, soundConfig, soundTheme, enableCelebration = false } = props;
1327
+ const { isOn, onToggle, leftLabel, rightLabel, leftIcon, rightIcon, className, style, soundConfig, enableCelebration = false } = props;
1355
1328
  const leftButtonRef = useRef(null);
1356
1329
  const rightButtonRef = useRef(null);
1357
- const { handlers, playSound, triggerCelebration } = useComponentSound({
1330
+ const { handlers, playSound } = useComponentSound({
1358
1331
  ...soundConfig,
1359
- onToggle: soundConfig?.onToggle ?? 'toggle',
1332
+ onClick: soundConfig?.onClick ?? 'toggle',
1360
1333
  onHover: soundConfig?.onHover ?? 'hover'
1361
- }, { });
1334
+ });
1362
1335
  // Ensure content stays centered by merging styles
1363
1336
  const buttonStyle = {
1364
1337
  display: 'flex',
@@ -1366,42 +1339,40 @@ function Toggle(props) {
1366
1339
  justifyContent: 'center',
1367
1340
  ...style
1368
1341
  };
1369
- return (jsxs("div", { className: `${styles$k.toggleContainer} ${className || ''}`, children: [jsxs(motion.button, { ref: leftButtonRef, className: `${styles$k.toggleButton} ${!isOn ? styles$k.active : ''}`, whileHover: { scale: 1.05 }, whileTap: { scale: 0.95 }, transition: { type: "spring", stiffness: 400, damping: 17 }, onClick: () => {
1370
- const element = leftButtonRef.current;
1342
+ return (jsxs("div", { className: `${styles$p.toggleContainer} ${className || ''}`, children: [jsxs(motion.button, { ref: leftButtonRef, className: `${styles$p.toggleButton} ${!isOn ? styles$p.active : ''}`, whileHover: { scale: 1.05 }, whileTap: { scale: 0.95 }, transition: { type: "spring", stiffness: 400, damping: 17 }, onClick: () => {
1371
1343
  if (!isOn) {
1372
- // Already on left, celebration!
1344
+ // Already on left
1373
1345
  if (enableCelebration) {
1374
- triggerCelebration(element || undefined);
1346
+ playSound('success');
1375
1347
  }
1376
1348
  else {
1377
- playSound('boop', element || undefined);
1349
+ playSound('click');
1378
1350
  }
1379
1351
  }
1380
1352
  else {
1381
1353
  // Switching to left
1382
- playSound('toggle', element || undefined);
1354
+ playSound('toggle');
1383
1355
  }
1384
1356
  onToggle(false);
1385
- }, onMouseEnter: () => handlers.onMouseEnter?.(leftButtonRef.current || undefined), style: buttonStyle, children: [jsx(motion.div, { animate: { scale: !isOn ? 1.1 : 1, rotate: !isOn ? [0, -5, 5, 0] : 0 }, transition: { duration: 0.3 }, children: leftIcon }), leftLabel] }), jsxs(motion.button, { ref: rightButtonRef, className: `${styles$k.toggleButton} ${isOn ? styles$k.active : ''}`, whileHover: { scale: 1.05 }, whileTap: { scale: 0.95 }, transition: { type: "spring", stiffness: 400, damping: 17 }, onClick: () => {
1386
- const element = rightButtonRef.current;
1357
+ }, onMouseEnter: () => handlers.onMouseEnter?.(), style: buttonStyle, children: [jsx(motion.div, { animate: { scale: !isOn ? 1.1 : 1, rotate: !isOn ? [0, -5, 5, 0] : 0 }, transition: { duration: 0.3 }, children: leftIcon }), leftLabel] }), jsxs(motion.button, { ref: rightButtonRef, className: `${styles$p.toggleButton} ${isOn ? styles$p.active : ''}`, whileHover: { scale: 1.05 }, whileTap: { scale: 0.95 }, transition: { type: "spring", stiffness: 400, damping: 17 }, onClick: () => {
1387
1358
  if (isOn) {
1388
- // Already on right, celebration!
1359
+ // Already on right
1389
1360
  if (enableCelebration) {
1390
- triggerCelebration(element || undefined);
1361
+ playSound('success');
1391
1362
  }
1392
1363
  else {
1393
- playSound('ding', element || undefined);
1364
+ playSound('click');
1394
1365
  }
1395
1366
  }
1396
1367
  else {
1397
- // Switching to right
1398
- playSound('success', element || undefined);
1368
+ // Switching to right
1369
+ playSound('success');
1399
1370
  }
1400
1371
  onToggle(true);
1401
- }, onMouseEnter: () => handlers.onMouseEnter?.(rightButtonRef.current || undefined), style: buttonStyle, children: [jsx(motion.div, { animate: { scale: isOn ? 1.1 : 1, rotate: isOn ? [0, 5, -5, 0] : 0 }, transition: { duration: 0.3 }, children: rightIcon }), rightLabel] })] }));
1372
+ }, onMouseEnter: () => handlers.onMouseEnter?.(), style: buttonStyle, children: [jsx(motion.div, { animate: { scale: isOn ? 1.1 : 1, rotate: isOn ? [0, 5, -5, 0] : 0 }, transition: { duration: 0.3 }, children: rightIcon }), rightLabel] })] }));
1402
1373
  }
1403
1374
 
1404
- var styles$j = {"container":"NumberStepper-module_container__WSGlU","header":"NumberStepper-module_header__qXI1Y","icon":"NumberStepper-module_icon__vHgsw","label":"NumberStepper-module_label__AYr3g","stepper":"NumberStepper-module_stepper__oQhTp","disabled":"NumberStepper-module_disabled__kGB-g","button":"NumberStepper-module_button__YcjRt","buttonIcon":"NumberStepper-module_buttonIcon__odXec","valueContainer":"NumberStepper-module_valueContainer__87w2D","valueWrapper":"NumberStepper-module_valueWrapper__TH65N","value":"NumberStepper-module_value__BxJeD","limits":"NumberStepper-module_limits__-UrRE","limit":"NumberStepper-module_limit__7nbIP","small":"NumberStepper-module_small__P-k96","large":"NumberStepper-module_large__Lz6lk","outlined":"NumberStepper-module_outlined__CIXv7","filled":"NumberStepper-module_filled__IxOg-","minimal":"NumberStepper-module_minimal__y47-W","custom":"NumberStepper-module_custom__XGSVg","vertical":"NumberStepper-module_vertical__nBcL7","pulse":"NumberStepper-module_pulse__51oUo"};
1375
+ var styles$o = {"container":"NumberStepper-module_container__WSGlU","header":"NumberStepper-module_header__qXI1Y","icon":"NumberStepper-module_icon__vHgsw","label":"NumberStepper-module_label__AYr3g","stepper":"NumberStepper-module_stepper__oQhTp","disabled":"NumberStepper-module_disabled__kGB-g","button":"NumberStepper-module_button__YcjRt","buttonIcon":"NumberStepper-module_buttonIcon__odXec","valueContainer":"NumberStepper-module_valueContainer__87w2D","valueWrapper":"NumberStepper-module_valueWrapper__TH65N","value":"NumberStepper-module_value__BxJeD","limits":"NumberStepper-module_limits__-UrRE","limit":"NumberStepper-module_limit__7nbIP","small":"NumberStepper-module_small__P-k96","large":"NumberStepper-module_large__Lz6lk","outlined":"NumberStepper-module_outlined__CIXv7","filled":"NumberStepper-module_filled__IxOg-","minimal":"NumberStepper-module_minimal__y47-W","custom":"NumberStepper-module_custom__XGSVg","vertical":"NumberStepper-module_vertical__nBcL7","pulse":"NumberStepper-module_pulse__51oUo"};
1405
1376
 
1406
1377
  /**
1407
1378
  * NumberStepper Component
@@ -1538,16 +1509,18 @@ const NumberStepper = ({ value, onChange, min = -Infinity, max = Infinity, step
1538
1509
  e.preventDefault();
1539
1510
  handleDecrement();
1540
1511
  break;
1541
- case 'PageUp':
1512
+ case 'PageUp': {
1542
1513
  e.preventDefault();
1543
1514
  const bigIncrease = Math.min(value + (step * 10), max);
1544
1515
  onChange(bigIncrease);
1545
1516
  break;
1546
- case 'PageDown':
1517
+ }
1518
+ case 'PageDown': {
1547
1519
  e.preventDefault();
1548
1520
  const bigDecrease = Math.max(value - (step * 10), min);
1549
1521
  onChange(bigDecrease);
1550
1522
  break;
1523
+ }
1551
1524
  case 'Home':
1552
1525
  e.preventDefault();
1553
1526
  if (min !== -Infinity)
@@ -1586,32 +1559,32 @@ const NumberStepper = ({ value, onChange, min = -Infinity, max = Infinity, step
1586
1559
  setDisplayValue(finalValue);
1587
1560
  }, [displayValue, min, max, step, onChange]);
1588
1561
  const containerClasses = [
1589
- styles$j.container,
1590
- styles$j[size],
1591
- styles$j[variant],
1592
- layout === 'vertical' && styles$j.vertical,
1593
- disabled && styles$j.disabled,
1562
+ styles$o.container,
1563
+ styles$o[size],
1564
+ styles$o[variant],
1565
+ layout === 'vertical' && styles$o.vertical,
1566
+ disabled && styles$o.disabled,
1594
1567
  className
1595
1568
  ].filter(Boolean).join(' ');
1596
1569
  // Merge custom styles with hover states
1597
1570
  const [isButtonHovered, setIsButtonHovered] = useState(null);
1598
1571
  const isDecrementDisabled = disabled || value <= min;
1599
1572
  const isIncrementDisabled = disabled || value >= max;
1600
- const stepperContent = (jsxs("div", { className: styles$j.stepper, style: customStyles.stepper, onKeyDown: handleKeyDown, tabIndex: disabled ? -1 : 0, ...handlers, children: [jsx(motion.button, { className: styles$j.button, style: {
1573
+ const stepperContent = (jsxs("div", { className: styles$o.stepper, style: customStyles.stepper, onKeyDown: handleKeyDown, tabIndex: disabled ? -1 : 0, ...handlers, children: [jsx(motion.button, { className: styles$o.button, style: {
1601
1574
  ...customStyles.button,
1602
1575
  ...(isButtonHovered === 'decrement' && customStyles.buttonHover)
1603
- }, onMouseEnter: () => setIsButtonHovered('decrement'), onMouseLeave: () => setIsButtonHovered(null), onClick: handleDecrement, disabled: isDecrementDisabled, whileTap: !isDecrementDisabled ? { scale: 0.9 } : undefined, animate: isDecrementing ? { scale: [1, 1.2, 1] } : undefined, transition: { duration: 0.2 }, "aria-label": "Decrease value", children: customButtons.decrement || (showPlusMinus ? (jsx("span", { className: styles$j.buttonIcon, style: customStyles.buttonIcon, children: "\u2212" })) : (jsx("svg", { className: styles$j.buttonIcon, style: customStyles.buttonIcon, viewBox: "0 0 24 24", fill: "none", children: jsx("path", { d: "M15 18L9 12L15 6", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }))) }), jsx("div", { className: styles$j.valueContainer, style: customStyles.valueContainer, children: jsx(AnimatePresence, { mode: "wait", children: jsx(motion.div, { initial: { y: isIncrementing ? 10 : isDecrementing ? -10 : 0, opacity: 0 }, animate: { y: 0, opacity: 1 }, exit: { y: isIncrementing ? -10 : isDecrementing ? 10 : 0, opacity: 0 }, transition: { duration: 0.15 }, className: styles$j.valueWrapper, children: jsx("input", { type: "text", className: styles$j.value, style: customStyles.value, value: displayValue, onChange: handleInputChange, onBlur: handleInputBlur, disabled: disabled, "aria-label": label || "Number input", "aria-valuemin": min, "aria-valuemax": max, "aria-valuenow": value }) }, value) }) }), jsx(motion.button, { className: styles$j.button, style: {
1576
+ }, onMouseEnter: () => setIsButtonHovered('decrement'), onMouseLeave: () => setIsButtonHovered(null), onClick: handleDecrement, disabled: isDecrementDisabled, whileTap: !isDecrementDisabled ? { scale: 0.9 } : undefined, animate: isDecrementing ? { scale: [1, 1.2, 1] } : undefined, transition: { duration: 0.2 }, "aria-label": "Decrease value", children: customButtons.decrement || (showPlusMinus ? (jsx("span", { className: styles$o.buttonIcon, style: customStyles.buttonIcon, children: "\u2212" })) : (jsx("svg", { className: styles$o.buttonIcon, style: customStyles.buttonIcon, viewBox: "0 0 24 24", fill: "none", children: jsx("path", { d: "M15 18L9 12L15 6", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }))) }), jsx("div", { className: styles$o.valueContainer, style: customStyles.valueContainer, children: jsx(AnimatePresence, { mode: "wait", children: jsx(motion.div, { initial: { y: isIncrementing ? 10 : isDecrementing ? -10 : 0, opacity: 0 }, animate: { y: 0, opacity: 1 }, exit: { y: isIncrementing ? -10 : isDecrementing ? 10 : 0, opacity: 0 }, transition: { duration: 0.15 }, className: styles$o.valueWrapper, children: jsx("input", { type: "text", className: styles$o.value, style: customStyles.value, value: displayValue, onChange: handleInputChange, onBlur: handleInputBlur, disabled: disabled, "aria-label": label || "Number input", "aria-valuemin": min, "aria-valuemax": max, "aria-valuenow": value }) }, value) }) }), jsx(motion.button, { className: styles$o.button, style: {
1604
1577
  ...customStyles.button,
1605
1578
  ...(isButtonHovered === 'increment' && customStyles.buttonHover)
1606
- }, onMouseEnter: () => setIsButtonHovered('increment'), onMouseLeave: () => setIsButtonHovered(null), onClick: handleIncrement, disabled: isIncrementDisabled, whileTap: !isIncrementDisabled ? { scale: 0.9 } : undefined, animate: isIncrementing ? { scale: [1, 1.2, 1] } : undefined, transition: { duration: 0.2 }, "aria-label": "Increase value", children: customButtons.increment || (showPlusMinus ? (jsx("span", { className: styles$j.buttonIcon, style: customStyles.buttonIcon, children: "+" })) : (jsx("svg", { className: styles$j.buttonIcon, style: customStyles.buttonIcon, viewBox: "0 0 24 24", fill: "none", children: jsx("path", { d: "M9 18L15 12L9 6", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }))) })] }));
1579
+ }, onMouseEnter: () => setIsButtonHovered('increment'), onMouseLeave: () => setIsButtonHovered(null), onClick: handleIncrement, disabled: isIncrementDisabled, whileTap: !isIncrementDisabled ? { scale: 0.9 } : undefined, animate: isIncrementing ? { scale: [1, 1.2, 1] } : undefined, transition: { duration: 0.2 }, "aria-label": "Increase value", children: customButtons.increment || (showPlusMinus ? (jsx("span", { className: styles$o.buttonIcon, style: customStyles.buttonIcon, children: "+" })) : (jsx("svg", { className: styles$o.buttonIcon, style: customStyles.buttonIcon, viewBox: "0 0 24 24", fill: "none", children: jsx("path", { d: "M9 18L15 12L9 6", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }))) })] }));
1607
1580
  // For custom variant with horizontal layout, render differently
1608
1581
  if (variant === 'custom' && (label || icon)) {
1609
- return (jsxs("div", { className: containerClasses, style: { ...customStyles.container, display: 'flex', alignItems: 'center' }, children: [jsxs("div", { className: styles$j.header, style: { ...customStyles.header, flex: 1, marginBottom: 0 }, children: [icon && jsx("span", { className: styles$j.icon, style: customStyles.icon, children: icon }), label && jsx("label", { className: styles$j.label, style: customStyles.label, children: label })] }), stepperContent, !hideLimits && (min !== -Infinity || max !== Infinity) && (jsxs("div", { className: styles$j.limits, style: customStyles.limits, children: [jsx("span", { className: styles$j.limit, children: min !== -Infinity && `Min: ${min}` }), jsx("span", { className: styles$j.limit, children: max !== Infinity && `Max: ${max}` })] }))] }));
1582
+ return (jsxs("div", { className: containerClasses, style: { ...customStyles.container, display: 'flex', alignItems: 'center' }, children: [jsxs("div", { className: styles$o.header, style: { ...customStyles.header, flex: 1, marginBottom: 0 }, children: [icon && jsx("span", { className: styles$o.icon, style: customStyles.icon, children: icon }), label && jsx("label", { className: styles$o.label, style: customStyles.label, children: label })] }), stepperContent, !hideLimits && (min !== -Infinity || max !== Infinity) && (jsxs("div", { className: styles$o.limits, style: customStyles.limits, children: [jsx("span", { className: styles$o.limit, children: min !== -Infinity && `Min: ${min}` }), jsx("span", { className: styles$o.limit, children: max !== Infinity && `Max: ${max}` })] }))] }));
1610
1583
  }
1611
- return (jsxs("div", { className: containerClasses, style: customStyles.container, children: [(label || icon) && (jsxs("div", { className: styles$j.header, style: customStyles.header, children: [icon && jsx("span", { className: styles$j.icon, style: customStyles.icon, children: icon }), label && jsx("label", { className: styles$j.label, style: customStyles.label, children: label })] })), stepperContent, !hideLimits && (min !== -Infinity || max !== Infinity) && (jsxs("div", { className: styles$j.limits, style: customStyles.limits, children: [jsx("span", { className: styles$j.limit, children: min !== -Infinity && `Min: ${min}` }), jsx("span", { className: styles$j.limit, children: max !== Infinity && `Max: ${max}` })] }))] }));
1584
+ return (jsxs("div", { className: containerClasses, style: customStyles.container, children: [(label || icon) && (jsxs("div", { className: styles$o.header, style: customStyles.header, children: [icon && jsx("span", { className: styles$o.icon, style: customStyles.icon, children: icon }), label && jsx("label", { className: styles$o.label, style: customStyles.label, children: label })] })), stepperContent, !hideLimits && (min !== -Infinity || max !== Infinity) && (jsxs("div", { className: styles$o.limits, style: customStyles.limits, children: [jsx("span", { className: styles$o.limit, children: min !== -Infinity && `Min: ${min}` }), jsx("span", { className: styles$o.limit, children: max !== Infinity && `Max: ${max}` })] }))] }));
1612
1585
  };
1613
1586
 
1614
- var styles$i = {"button":"ToggleButton-module_button__DTuyY","background":"ToggleButton-module_background__NwfTp","content":"ToggleButton-module_content__NHqIN","iconWrapper":"ToggleButton-module_iconWrapper__yN4sP","icon":"ToggleButton-module_icon__r8juX","label":"ToggleButton-module_label__4mPJP","hideMobile":"ToggleButton-module_hideMobile__GFAc3","checkmark":"ToggleButton-module_checkmark__ZJwf-","ripple":"ToggleButton-module_ripple__2-faB","small":"ToggleButton-module_small__MhfoN","large":"ToggleButton-module_large__A3naL","default":"ToggleButton-module_default__q8QaZ","active":"ToggleButton-module_active__4DjlR","outlined":"ToggleButton-module_outlined__OtqJB","filled":"ToggleButton-module_filled__LySNn","ghost":"ToggleButton-module_ghost__9KXcb","active-primary":"ToggleButton-module_active-primary__vXMP7","active-secondary":"ToggleButton-module_active-secondary__9Ttdx","active-success":"ToggleButton-module_active-success__oi0rr","active-danger":"ToggleButton-module_active-danger__VUdxr","active-warning":"ToggleButton-module_active-warning__77nSu","animation-scale":"ToggleButton-module_animation-scale__j-3mJ","scaleAnimation":"ToggleButton-module_scaleAnimation__Ms1j2","animation-rotate":"ToggleButton-module_animation-rotate__pBmfc","rotateAnimation":"ToggleButton-module_rotateAnimation__xWZJ5","animation-flip":"ToggleButton-module_animation-flip__ErAbm","flipAnimation":"ToggleButton-module_flipAnimation__qwDTb","disabled":"ToggleButton-module_disabled__Gv5ji"};
1587
+ var styles$n = {"button":"ToggleButton-module_button__DTuyY","background":"ToggleButton-module_background__NwfTp","content":"ToggleButton-module_content__NHqIN","iconWrapper":"ToggleButton-module_iconWrapper__yN4sP","icon":"ToggleButton-module_icon__r8juX","label":"ToggleButton-module_label__4mPJP","hideMobile":"ToggleButton-module_hideMobile__GFAc3","checkmark":"ToggleButton-module_checkmark__ZJwf-","ripple":"ToggleButton-module_ripple__2-faB","small":"ToggleButton-module_small__MhfoN","large":"ToggleButton-module_large__A3naL","default":"ToggleButton-module_default__q8QaZ","active":"ToggleButton-module_active__4DjlR","outlined":"ToggleButton-module_outlined__OtqJB","filled":"ToggleButton-module_filled__LySNn","ghost":"ToggleButton-module_ghost__9KXcb","active-primary":"ToggleButton-module_active-primary__vXMP7","active-secondary":"ToggleButton-module_active-secondary__9Ttdx","active-success":"ToggleButton-module_active-success__oi0rr","active-danger":"ToggleButton-module_active-danger__VUdxr","active-warning":"ToggleButton-module_active-warning__77nSu","animation-scale":"ToggleButton-module_animation-scale__j-3mJ","scaleAnimation":"ToggleButton-module_scaleAnimation__Ms1j2","animation-rotate":"ToggleButton-module_animation-rotate__pBmfc","rotateAnimation":"ToggleButton-module_rotateAnimation__xWZJ5","animation-flip":"ToggleButton-module_animation-flip__ErAbm","flipAnimation":"ToggleButton-module_flipAnimation__qwDTb","disabled":"ToggleButton-module_disabled__Gv5ji"};
1615
1588
 
1616
1589
  /**
1617
1590
  * ToggleButton Component
@@ -1650,18 +1623,18 @@ var styles$i = {"button":"ToggleButton-module_button__DTuyY","background":"Toggl
1650
1623
  const ToggleButton = ({ active, onClick, icon, label, disabled = false, size = 'medium', variant = 'default', activeColor = 'primary', showCheckmark = false, animation = 'scale', className = '', style = {}, color, tooltip, hideLabelOnMobile = false, soundConfig }) => {
1651
1624
  const { handlers, playSound } = useComponentSound(soundConfig);
1652
1625
  const buttonClasses = [
1653
- styles$i.button,
1654
- styles$i[size],
1655
- styles$i[variant],
1656
- active && styles$i.active,
1657
- active && styles$i[`active-${activeColor}`],
1658
- disabled && styles$i.disabled,
1659
- animation !== 'none' && styles$i[`animation-${animation}`],
1626
+ styles$n.button,
1627
+ styles$n[size],
1628
+ styles$n[variant],
1629
+ active && styles$n.active,
1630
+ active && styles$n[`active-${activeColor}`],
1631
+ disabled && styles$n.disabled,
1632
+ animation !== 'none' && styles$n[`animation-${animation}`],
1660
1633
  className
1661
1634
  ].filter(Boolean).join(' ');
1662
1635
  const labelClasses = [
1663
- styles$i.label,
1664
- hideLabelOnMobile && styles$i.hideMobile
1636
+ styles$n.label,
1637
+ hideLabelOnMobile && styles$n.hideMobile
1665
1638
  ].filter(Boolean).join(' ');
1666
1639
  const iconVariants = {
1667
1640
  scale: {
@@ -1725,10 +1698,10 @@ const ToggleButton = ({ active, onClick, icon, label, disabled = false, size = '
1725
1698
  return (jsxs(motion.button, { className: buttonClasses, style: dynamicStyle, onClick: () => {
1726
1699
  playSound('toggle');
1727
1700
  onClick();
1728
- }, disabled: disabled, whileHover: !disabled ? { scale: 1.05 } : undefined, whileTap: !disabled ? { scale: 0.95 } : undefined, title: tooltip, "aria-pressed": active, "aria-label": label, ...handlers, children: [jsx(motion.div, { className: styles$i.background, variants: backgroundVariants, initial: "inactive", animate: active ? "active" : "inactive" }), jsxs("div", { className: styles$i.content, children: [icon && (jsx(motion.div, { className: styles$i.iconWrapper, variants: iconVariants[animation], initial: "inactive", animate: active ? "active" : "inactive", transition: { duration: 0.3 }, children: typeof icon === 'string' ? (jsx("span", { className: styles$i.icon, children: icon })) : (jsx("div", { className: styles$i.icon, children: icon })) })), label && jsx("span", { className: labelClasses, children: label }), jsx(AnimatePresence, { children: showCheckmark && active && (jsx(motion.div, { className: styles$i.checkmark, variants: checkmarkVariants, initial: "hidden", animate: "visible", exit: "hidden", children: jsx("svg", { viewBox: "0 0 24 24", fill: "none", children: jsx("path", { d: "M20 6L9 17L4 12", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round", strokeLinejoin: "round" }) }) })) })] }), jsx(AnimatePresence, { children: active && (jsx(motion.div, { className: styles$i.ripple, initial: { scale: 0, opacity: 0.5 }, animate: { scale: 2, opacity: 0 }, exit: { scale: 0, opacity: 0 }, transition: { duration: 0.6 } })) })] }));
1701
+ }, disabled: disabled, whileHover: !disabled ? { scale: 1.05 } : undefined, whileTap: !disabled ? { scale: 0.95 } : undefined, title: tooltip, "aria-pressed": active, "aria-label": label, ...handlers, children: [jsx(motion.div, { className: styles$n.background, variants: backgroundVariants, initial: "inactive", animate: active ? "active" : "inactive" }), jsxs("div", { className: styles$n.content, children: [icon && (jsx(motion.div, { className: styles$n.iconWrapper, variants: iconVariants[animation], initial: "inactive", animate: active ? "active" : "inactive", transition: { duration: 0.3 }, children: typeof icon === 'string' ? (jsx("span", { className: styles$n.icon, children: icon })) : (jsx("div", { className: styles$n.icon, children: icon })) })), label && jsx("span", { className: labelClasses, children: label }), jsx(AnimatePresence, { children: showCheckmark && active && (jsx(motion.div, { className: styles$n.checkmark, variants: checkmarkVariants, initial: "hidden", animate: "visible", exit: "hidden", children: jsx("svg", { viewBox: "0 0 24 24", fill: "none", children: jsx("path", { d: "M20 6L9 17L4 12", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round", strokeLinejoin: "round" }) }) })) })] }), jsx(AnimatePresence, { children: active && (jsx(motion.div, { className: styles$n.ripple, initial: { scale: 0, opacity: 0.5 }, animate: { scale: 2, opacity: 0 }, exit: { scale: 0, opacity: 0 }, transition: { duration: 0.6 } })) })] }));
1729
1702
  };
1730
1703
 
1731
- var styles$h = {"slider":"Slider-module_slider__RD4G7","label":"Slider-module_label__j4H8M","sliderContainer":"Slider-module_sliderContainer__kQICC","track":"Slider-module_track__fQ-oP","fill":"Slider-module_fill__AYR4-","shimmer":"Slider-module_shimmer__271tL","input":"Slider-module_input__fqY-G","thumb":"Slider-module_thumb__yQJho","ripple":"Slider-module_ripple__gVS04","tooltip":"Slider-module_tooltip__ZubHR","tooltipArrow":"Slider-module_tooltipArrow__1aV9s","valueDisplay":"Slider-module_valueDisplay__V6caL","labelsContainer":"Slider-module_labelsContainer__F6ojF","labelItem":"Slider-module_labelItem__FuEaY","size-sm":"Slider-module_size-sm__Y2bmS","size-lg":"Slider-module_size-lg__RSnPf","disabled":"Slider-module_disabled__gxYoH","loading":"Slider-module_loading__6FkKb","loadingTrack":"Slider-module_loadingTrack__8ItT2","loadingIndicator":"Slider-module_loadingIndicator__Elydq"};
1704
+ var styles$m = {"slider":"Slider-module_slider__RD4G7","label":"Slider-module_label__j4H8M","sliderContainer":"Slider-module_sliderContainer__kQICC","track":"Slider-module_track__fQ-oP","fill":"Slider-module_fill__AYR4-","shimmer":"Slider-module_shimmer__271tL","input":"Slider-module_input__fqY-G","thumb":"Slider-module_thumb__yQJho","ripple":"Slider-module_ripple__gVS04","tooltip":"Slider-module_tooltip__ZubHR","tooltipArrow":"Slider-module_tooltipArrow__1aV9s","valueDisplay":"Slider-module_valueDisplay__V6caL","labelsContainer":"Slider-module_labelsContainer__F6ojF","labelItem":"Slider-module_labelItem__FuEaY","size-sm":"Slider-module_size-sm__Y2bmS","size-lg":"Slider-module_size-lg__RSnPf","disabled":"Slider-module_disabled__gxYoH","loading":"Slider-module_loading__6FkKb","loadingTrack":"Slider-module_loadingTrack__8ItT2","loadingIndicator":"Slider-module_loadingIndicator__Elydq"};
1732
1705
 
1733
1706
  /**
1734
1707
  * Slider component - A beautiful, animated range input
@@ -1816,16 +1789,16 @@ function Slider({ value, onChange, min = 0, max = 100, step = 1, label, showValu
1816
1789
  setShowTooltipState(false);
1817
1790
  };
1818
1791
  const dynamicColor = getDynamicColor();
1819
- const sizeClass = styles$h[`size-${size}`];
1820
- const stateClass = disabled ? styles$h.disabled : loading ? styles$h.loading : '';
1792
+ const sizeClass = styles$m[`size-${size}`];
1793
+ const stateClass = disabled ? styles$m.disabled : loading ? styles$m.loading : '';
1821
1794
  if (loading) {
1822
- return (jsxs("div", { className: `${styles$h.slider} ${sizeClass} ${styles$h.loading} ${className}`, style: style, children: [label && jsx("label", { className: styles$h.label, children: label }), jsx("div", { className: styles$h.loadingTrack, children: jsx(motion.div, { className: styles$h.loadingIndicator, animate: { x: ['-100%', '200%'] }, transition: {
1795
+ return (jsxs("div", { className: `${styles$m.slider} ${sizeClass} ${styles$m.loading} ${className}`, style: style, children: [label && jsx("label", { className: styles$m.label, children: label }), jsx("div", { className: styles$m.loadingTrack, children: jsx(motion.div, { className: styles$m.loadingIndicator, animate: { x: ['-100%', '200%'] }, transition: {
1823
1796
  repeat: Infinity,
1824
1797
  duration: 1.5,
1825
1798
  ease: "easeInOut"
1826
1799
  } }) })] }));
1827
1800
  }
1828
- return (jsxs("div", { className: `${styles$h.slider} ${sizeClass} ${stateClass} ${className}`, style: style, children: [label && (jsx(motion.label, { className: styles$h.label, initial: { opacity: 0, y: -10 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.3 }, children: label })), jsxs(motion.div, { className: styles$h.sliderContainer, ref: sliderRef, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, whileHover: { scale: 1.02 }, transition: { duration: 0.1 }, children: [jsx(motion.div, { className: styles$h.track, whileHover: { height: 8, marginTop: -1 }, transition: { duration: 0.1 }, children: jsx(motion.div, { className: styles$h.fill, style: {
1801
+ return (jsxs("div", { className: `${styles$m.slider} ${sizeClass} ${stateClass} ${className}`, style: style, children: [label && (jsx(motion.label, { className: styles$m.label, initial: { opacity: 0, y: -10 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.3 }, children: label })), jsxs(motion.div, { className: styles$m.sliderContainer, ref: sliderRef, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, whileHover: { scale: 1.02 }, transition: { duration: 0.1 }, children: [jsx(motion.div, { className: styles$m.track, whileHover: { height: 8, marginTop: -1 }, transition: { duration: 0.1 }, children: jsx(motion.div, { className: styles$m.fill, style: {
1829
1802
  width: `${percentage}%`,
1830
1803
  backgroundColor: dynamicColor
1831
1804
  }, initial: { width: 0 }, animate: { width: `${percentage}%` }, transition: {
@@ -1835,7 +1808,7 @@ function Slider({ value, onChange, min = 0, max = 100, step = 1, label, showValu
1835
1808
  damping: 30
1836
1809
  }, whileHover: {
1837
1810
  boxShadow: `inset 0 0 0 1px rgba(255,255,255,0.2)`
1838
- } }) }), jsx("input", { type: "range", min: min, max: max, step: step, value: value, onChange: handleChange, onMouseDown: handleMouseDown, onMouseUp: handleMouseUp, ...handlers, className: styles$h.input, disabled: disabled, "aria-label": label }), jsx(motion.div, { className: styles$h.thumb, style: {
1811
+ } }) }), jsx("input", { type: "range", min: min, max: max, step: step, value: value, onChange: handleChange, onMouseDown: handleMouseDown, onMouseUp: handleMouseUp, ...handlers, className: styles$m.input, disabled: disabled, "aria-label": label }), jsx(motion.div, { className: styles$m.thumb, style: {
1839
1812
  left: `${percentage}%`,
1840
1813
  backgroundColor: dynamicColor,
1841
1814
  borderColor: colors.thumb || dynamicColor
@@ -1852,14 +1825,14 @@ function Slider({ value, onChange, min = 0, max = 100, step = 1, label, showValu
1852
1825
  }, whileHover: {
1853
1826
  scale: 1.1,
1854
1827
  transition: { duration: 0.1 }
1855
- }, children: isDragging && (jsx(motion.div, { className: styles$h.ripple, initial: { scale: 0, opacity: 0.6 }, animate: { scale: 2, opacity: 0 }, transition: { duration: 0.5 } })) }), jsx(AnimatePresence, { children: showTooltipState && (jsxs(motion.div, { className: styles$h.tooltip, style: {
1828
+ }, children: isDragging && (jsx(motion.div, { className: styles$m.ripple, initial: { scale: 0, opacity: 0.6 }, animate: { scale: 2, opacity: 0 }, transition: { duration: 0.5 } })) }), jsx(AnimatePresence, { children: showTooltipState && (jsxs(motion.div, { className: styles$m.tooltip, style: {
1856
1829
  left: `${percentage}%`,
1857
1830
  backgroundColor: dynamicColor
1858
- }, initial: { opacity: 0, y: 10, scale: 0.8 }, animate: { opacity: 1, y: 0, scale: 1 }, exit: { opacity: 0, y: 10, scale: 0.8 }, transition: { duration: 0.2 }, children: [tooltipContent ? tooltipContent(value) : formatValue(value), jsx("div", { className: styles$h.tooltipArrow, style: { borderTopColor: dynamicColor } })] })) })] }), showValue && (jsx(motion.div, { className: styles$h.valueDisplay, style: { color: dynamicColor }, initial: { scale: 0.8 }, animate: { scale: 1 }, transition: {
1831
+ }, initial: { opacity: 0, y: 10, scale: 0.8 }, animate: { opacity: 1, y: 0, scale: 1 }, exit: { opacity: 0, y: 10, scale: 0.8 }, transition: { duration: 0.2 }, children: [tooltipContent ? tooltipContent(value) : formatValue(value), jsx("div", { className: styles$m.tooltipArrow, style: { borderTopColor: dynamicColor } })] })) })] }), showValue && (jsx(motion.div, { className: styles$m.valueDisplay, style: { color: dynamicColor }, initial: { scale: 0.8 }, animate: { scale: 1 }, transition: {
1859
1832
  duration: 0.2,
1860
1833
  type: "spring",
1861
1834
  stiffness: 300
1862
- }, children: formatValue(value) }, value)), labels.length > 0 && (jsx("div", { className: styles$h.labelsContainer, children: labels.map((labelConfig, index) => {
1835
+ }, children: formatValue(value) }, value)), labels.length > 0 && (jsx("div", { className: styles$m.labelsContainer, children: labels.map((labelConfig, index) => {
1863
1836
  let position = 0;
1864
1837
  if (labelConfig.position === 'start')
1865
1838
  position = 0;
@@ -1867,7 +1840,7 @@ function Slider({ value, onChange, min = 0, max = 100, step = 1, label, showValu
1867
1840
  position = 100;
1868
1841
  else if (typeof labelConfig.position === 'number')
1869
1842
  position = labelConfig.position;
1870
- return (jsx(motion.div, { className: styles$h.labelItem, style: {
1843
+ return (jsx(motion.div, { className: styles$m.labelItem, style: {
1871
1844
  left: `${position}%`,
1872
1845
  color: labelConfig.color
1873
1846
  }, initial: { opacity: 0, y: 5 }, animate: { opacity: 1, y: 0 }, transition: {
@@ -1880,7 +1853,7 @@ function Slider({ value, onChange, min = 0, max = 100, step = 1, label, showValu
1880
1853
  }) }))] }));
1881
1854
  }
1882
1855
 
1883
- var styles$g = {"loadingContainer":"LoadingSpinner-module_loadingContainer__m5u51","fullScreen":"LoadingSpinner-module_fullScreen__TuAem","overlay":"LoadingSpinner-module_overlay__X7FTa","shimmer":"LoadingSpinner-module_shimmer__xw4AH","small":"LoadingSpinner-module_small__nq8A3","loadingText":"LoadingSpinner-module_loadingText__wWwna","medium":"LoadingSpinner-module_medium__3JC1S","large":"LoadingSpinner-module_large__4MvAc","dotsSpinner":"LoadingSpinner-module_dotsSpinner__PXtfs","dot1":"LoadingSpinner-module_dot1__5YKSi","dot2":"LoadingSpinner-module_dot2__l6Rbu","dot3":"LoadingSpinner-module_dot3__b9YPW","circleSpinner":"LoadingSpinner-module_circleSpinner__ZmmWs","pulseSpinner":"LoadingSpinner-module_pulseSpinner__wTtDJ","textGradient":"LoadingSpinner-module_textGradient__QDrTY","sparkleContainer":"LoadingSpinner-module_sparkleContainer__9XLJG","sparkle":"LoadingSpinner-module_sparkle__LtFFf"};
1856
+ var styles$l = {"loadingContainer":"LoadingSpinner-module_loadingContainer__m5u51","fullScreen":"LoadingSpinner-module_fullScreen__TuAem","overlay":"LoadingSpinner-module_overlay__X7FTa","shimmer":"LoadingSpinner-module_shimmer__xw4AH","small":"LoadingSpinner-module_small__nq8A3","loadingText":"LoadingSpinner-module_loadingText__wWwna","medium":"LoadingSpinner-module_medium__3JC1S","large":"LoadingSpinner-module_large__4MvAc","dotsSpinner":"LoadingSpinner-module_dotsSpinner__PXtfs","dot1":"LoadingSpinner-module_dot1__5YKSi","dot2":"LoadingSpinner-module_dot2__l6Rbu","dot3":"LoadingSpinner-module_dot3__b9YPW","circleSpinner":"LoadingSpinner-module_circleSpinner__ZmmWs","pulseSpinner":"LoadingSpinner-module_pulseSpinner__wTtDJ","textGradient":"LoadingSpinner-module_textGradient__QDrTY","sparkleContainer":"LoadingSpinner-module_sparkleContainer__9XLJG","sparkle":"LoadingSpinner-module_sparkle__LtFFf"};
1884
1857
 
1885
1858
  const defaultMessages = [
1886
1859
  'Loading your content...',
@@ -1956,6 +1929,7 @@ const LoadingSpinner = ({ message, size = 'medium', variant = 'dots', className
1956
1929
  }, messageRotationInterval);
1957
1930
  return () => clearInterval(interval);
1958
1931
  }
1932
+ return undefined;
1959
1933
  }, [message, showMessage, messagesToUse.length, messageRotationInterval]);
1960
1934
  useEffect(() => {
1961
1935
  if (!message && showMessage) {
@@ -1963,22 +1937,22 @@ const LoadingSpinner = ({ message, size = 'medium', variant = 'dots', className
1963
1937
  }
1964
1938
  }, [currentMessageIndex, message, messagesToUse, showMessage]);
1965
1939
  const containerClasses = [
1966
- styles$g.loadingContainer,
1967
- styles$g[size],
1968
- styles$g[variant],
1969
- fullScreen && styles$g.fullScreen,
1970
- overlay && styles$g.overlay,
1940
+ styles$l.loadingContainer,
1941
+ styles$l[size],
1942
+ styles$l[variant],
1943
+ fullScreen && styles$l.fullScreen,
1944
+ overlay && styles$l.overlay,
1971
1945
  className
1972
1946
  ].filter(Boolean).join(' ');
1973
1947
  const customStyle = {
1974
1948
  ...(color && { '--spinner-color': color }),
1975
1949
  ...(backgroundColor && { '--spinner-background': backgroundColor }),
1976
1950
  };
1977
- const renderDots = () => (jsxs(motion.div, { className: styles$g.dotsSpinner, animate: { rotate: 360 }, transition: {
1951
+ const renderDots = () => (jsxs(motion.div, { className: styles$l.dotsSpinner, animate: { rotate: 360 }, transition: {
1978
1952
  duration: 2,
1979
1953
  repeat: Infinity,
1980
1954
  ease: 'linear'
1981
- }, children: [jsx(motion.div, { className: styles$g.dot1, animate: {
1955
+ }, children: [jsx(motion.div, { className: styles$l.dot1, animate: {
1982
1956
  scale: [1, 1.3, 1],
1983
1957
  y: [0, -6, 0]
1984
1958
  }, transition: {
@@ -1986,7 +1960,7 @@ const LoadingSpinner = ({ message, size = 'medium', variant = 'dots', className
1986
1960
  repeat: Infinity,
1987
1961
  ease: 'easeInOut',
1988
1962
  delay: 0
1989
- } }), jsx(motion.div, { className: styles$g.dot2, animate: {
1963
+ } }), jsx(motion.div, { className: styles$l.dot2, animate: {
1990
1964
  scale: [1, 1.3, 1],
1991
1965
  y: [0, -6, 0]
1992
1966
  }, transition: {
@@ -1994,7 +1968,7 @@ const LoadingSpinner = ({ message, size = 'medium', variant = 'dots', className
1994
1968
  repeat: Infinity,
1995
1969
  ease: 'easeInOut',
1996
1970
  delay: 0.5
1997
- } }), jsx(motion.div, { className: styles$g.dot3, animate: {
1971
+ } }), jsx(motion.div, { className: styles$l.dot3, animate: {
1998
1972
  scale: [1, 1.3, 1],
1999
1973
  y: [0, -6, 0]
2000
1974
  }, transition: {
@@ -2003,12 +1977,12 @@ const LoadingSpinner = ({ message, size = 'medium', variant = 'dots', className
2003
1977
  ease: 'easeInOut',
2004
1978
  delay: 1
2005
1979
  } })] }));
2006
- const renderSpinner = () => (jsx(motion.div, { className: styles$g.circleSpinner, animate: { rotate: 360 }, transition: {
1980
+ const renderSpinner = () => (jsx(motion.div, { className: styles$l.circleSpinner, animate: { rotate: 360 }, transition: {
2007
1981
  duration: 1,
2008
1982
  repeat: Infinity,
2009
1983
  ease: 'linear'
2010
1984
  } }));
2011
- const renderPulse = () => (jsx(motion.div, { className: styles$g.pulseSpinner, animate: {
1985
+ const renderPulse = () => (jsx(motion.div, { className: styles$l.pulseSpinner, animate: {
2012
1986
  scale: [1, 1.2, 1],
2013
1987
  opacity: [1, 0.7, 1]
2014
1988
  }, transition: {
@@ -2027,10 +2001,10 @@ const LoadingSpinner = ({ message, size = 'medium', variant = 'dots', className
2027
2001
  return renderDots();
2028
2002
  }
2029
2003
  };
2030
- return (jsxs("div", { className: containerClasses, style: customStyle, children: [renderSpinnerVariant(), showMessage && (jsx(AnimatePresence, { mode: "wait", children: jsx(motion.p, { className: styles$g.loadingText, initial: { opacity: 0, y: 10 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: -10 }, transition: {
2004
+ return (jsxs("div", { className: containerClasses, style: customStyle, children: [renderSpinnerVariant(), showMessage && (jsx(AnimatePresence, { mode: "wait", children: jsx(motion.p, { className: styles$l.loadingText, initial: { opacity: 0, y: 10 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: -10 }, transition: {
2031
2005
  duration: 0.4,
2032
2006
  ease: 'easeOut'
2033
- }, children: currentMessage }, currentMessage) })), showSparkles && (jsx("div", { className: styles$g.sparkleContainer, children: [...Array(4)].map((_, i) => (jsx(motion.div, { className: styles$g.sparkle, animate: {
2007
+ }, children: currentMessage }, currentMessage) })), showSparkles && (jsx("div", { className: styles$l.sparkleContainer, children: [...Array(4)].map((_, i) => (jsx(motion.div, { className: styles$l.sparkle, animate: {
2034
2008
  opacity: [0, 1, 0],
2035
2009
  scale: [0.5, 1, 0.5],
2036
2010
  rotate: [0, 180, 360]
@@ -2045,7 +2019,197 @@ const LoadingSpinner = ({ message, size = 'medium', variant = 'dots', className
2045
2019
  } }, i))) }))] }));
2046
2020
  };
2047
2021
 
2048
- var styles$f = {"arrayInput":"ArrayInput-module_arrayInput__q1x7A","arrayInputLabel":"ArrayInput-module_arrayInputLabel__HyUC7","arrayInputItem":"ArrayInput-module_arrayInputItem__bFtgl","inputWrapper":"ArrayInput-module_inputWrapper__ajhbW","input":"ArrayInput-module_input__1uywi","complexItem":"ArrayInput-module_complexItem__zr-Q-","fieldsWrapper":"ArrayInput-module_fieldsWrapper__7BVPa","removeButton":"ArrayInput-module_removeButton__gYf8Y","addButton":"ArrayInput-module_addButton__mia29"};
2022
+ var styles$k = {"wrapper":"DecryptedText-module_wrapper__tuLvf","srOnly":"DecryptedText-module_srOnly__A-K2T"};
2023
+
2024
+ /**
2025
+ * DecryptedText Component
2026
+ *
2027
+ * Creates an animated text reveal effect where characters progressively
2028
+ * decrypt from scrambled characters to the final text.
2029
+ *
2030
+ * @example
2031
+ * // Basic usage - animates on hover
2032
+ * <DecryptedText text="Hello World" />
2033
+ *
2034
+ * @example
2035
+ * // Animate when scrolled into view
2036
+ * <DecryptedText text="Welcome" animateOn="view" />
2037
+ *
2038
+ * @example
2039
+ * // Sequential reveal from center
2040
+ * <DecryptedText
2041
+ * text="Decrypt Me"
2042
+ * sequential
2043
+ * revealDirection="center"
2044
+ * speed={30}
2045
+ * />
2046
+ */
2047
+ const DecryptedText = ({ text, speed = 50, maxIterations = 10, sequential = false, revealDirection = 'start', useOriginalCharsOnly = false, characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', className = '', parentClassName = '', encryptedClassName = '', animateOn = 'hover', ...props }) => {
2048
+ const [displayText, setDisplayText] = useState(text);
2049
+ const [isHovering, setIsHovering] = useState(false);
2050
+ const [isScrambling, setIsScrambling] = useState(false);
2051
+ const [revealedIndices, setRevealedIndices] = useState(new Set());
2052
+ const [hasAnimated, setHasAnimated] = useState(false);
2053
+ const containerRef = useRef(null);
2054
+ useEffect(() => {
2055
+ let interval;
2056
+ let currentIteration = 0;
2057
+ const getNextIndex = (revealedSet) => {
2058
+ const textLength = text.length;
2059
+ switch (revealDirection) {
2060
+ case 'start':
2061
+ return revealedSet.size;
2062
+ case 'end':
2063
+ return textLength - 1 - revealedSet.size;
2064
+ case 'center': {
2065
+ const middle = Math.floor(textLength / 2);
2066
+ const offset = Math.floor(revealedSet.size / 2);
2067
+ const nextIndex = revealedSet.size % 2 === 0 ? middle + offset : middle - offset - 1;
2068
+ if (nextIndex >= 0 && nextIndex < textLength && !revealedSet.has(nextIndex)) {
2069
+ return nextIndex;
2070
+ }
2071
+ for (let i = 0; i < textLength; i++) {
2072
+ if (!revealedSet.has(i))
2073
+ return i;
2074
+ }
2075
+ return 0;
2076
+ }
2077
+ default:
2078
+ return revealedSet.size;
2079
+ }
2080
+ };
2081
+ const availableChars = useOriginalCharsOnly
2082
+ ? Array.from(new Set(text.split(''))).filter((char) => char !== ' ')
2083
+ : characters.split('');
2084
+ const shuffleText = (originalText, currentRevealed) => {
2085
+ if (useOriginalCharsOnly) {
2086
+ const positions = originalText.split('').map((char, i) => ({
2087
+ char,
2088
+ isSpace: char === ' ',
2089
+ index: i,
2090
+ isRevealed: currentRevealed.has(i),
2091
+ }));
2092
+ const nonSpaceChars = positions
2093
+ .filter((p) => !p.isSpace && !p.isRevealed)
2094
+ .map((p) => p.char);
2095
+ for (let i = nonSpaceChars.length - 1; i > 0; i--) {
2096
+ const j = Math.floor(Math.random() * (i + 1));
2097
+ [nonSpaceChars[i], nonSpaceChars[j]] = [nonSpaceChars[j], nonSpaceChars[i]];
2098
+ }
2099
+ let charIndex = 0;
2100
+ return positions
2101
+ .map((p) => {
2102
+ if (p.isSpace)
2103
+ return ' ';
2104
+ if (p.isRevealed)
2105
+ return originalText[p.index];
2106
+ return nonSpaceChars[charIndex++];
2107
+ })
2108
+ .join('');
2109
+ }
2110
+ else {
2111
+ return originalText
2112
+ .split('')
2113
+ .map((char, i) => {
2114
+ if (char === ' ')
2115
+ return ' ';
2116
+ if (currentRevealed.has(i))
2117
+ return originalText[i];
2118
+ return availableChars[Math.floor(Math.random() * availableChars.length)];
2119
+ })
2120
+ .join('');
2121
+ }
2122
+ };
2123
+ if (isHovering) {
2124
+ setIsScrambling(true);
2125
+ interval = setInterval(() => {
2126
+ setRevealedIndices((prevRevealed) => {
2127
+ if (sequential) {
2128
+ if (prevRevealed.size < text.length) {
2129
+ const nextIndex = getNextIndex(prevRevealed);
2130
+ const newRevealed = new Set(prevRevealed);
2131
+ newRevealed.add(nextIndex);
2132
+ setDisplayText(shuffleText(text, newRevealed));
2133
+ return newRevealed;
2134
+ }
2135
+ else {
2136
+ clearInterval(interval);
2137
+ setIsScrambling(false);
2138
+ return prevRevealed;
2139
+ }
2140
+ }
2141
+ else {
2142
+ setDisplayText(shuffleText(text, prevRevealed));
2143
+ currentIteration++;
2144
+ if (currentIteration >= maxIterations) {
2145
+ clearInterval(interval);
2146
+ setIsScrambling(false);
2147
+ setDisplayText(text);
2148
+ }
2149
+ return prevRevealed;
2150
+ }
2151
+ });
2152
+ }, speed);
2153
+ }
2154
+ else {
2155
+ setDisplayText(text);
2156
+ setRevealedIndices(new Set());
2157
+ setIsScrambling(false);
2158
+ }
2159
+ return () => {
2160
+ if (interval)
2161
+ clearInterval(interval);
2162
+ };
2163
+ }, [
2164
+ isHovering,
2165
+ text,
2166
+ speed,
2167
+ maxIterations,
2168
+ sequential,
2169
+ revealDirection,
2170
+ characters,
2171
+ useOriginalCharsOnly,
2172
+ ]);
2173
+ useEffect(() => {
2174
+ if (animateOn !== 'view' && animateOn !== 'both')
2175
+ return;
2176
+ const observerCallback = (entries) => {
2177
+ entries.forEach((entry) => {
2178
+ if (entry.isIntersecting && !hasAnimated) {
2179
+ setIsHovering(true);
2180
+ setHasAnimated(true);
2181
+ }
2182
+ });
2183
+ };
2184
+ const observerOptions = {
2185
+ root: null,
2186
+ rootMargin: '0px',
2187
+ threshold: 0.1,
2188
+ };
2189
+ const observer = new IntersectionObserver(observerCallback, observerOptions);
2190
+ const currentRef = containerRef.current;
2191
+ if (currentRef) {
2192
+ observer.observe(currentRef);
2193
+ }
2194
+ return () => {
2195
+ if (currentRef) {
2196
+ observer.unobserve(currentRef);
2197
+ }
2198
+ };
2199
+ }, [animateOn, hasAnimated]);
2200
+ const hoverProps = animateOn === 'hover' || animateOn === 'both'
2201
+ ? {
2202
+ onMouseEnter: () => setIsHovering(true),
2203
+ onMouseLeave: () => setIsHovering(false),
2204
+ }
2205
+ : {};
2206
+ return (jsxs(motion.span, { className: `${styles$k.wrapper} ${parentClassName}`, ref: containerRef, ...hoverProps, ...props, children: [jsx("span", { className: styles$k.srOnly, children: displayText }), jsx("span", { "aria-hidden": "true", children: displayText.split('').map((char, index) => {
2207
+ const isRevealedOrDone = revealedIndices.has(index) || !isScrambling || !isHovering;
2208
+ return (jsx("span", { className: isRevealedOrDone ? className : encryptedClassName, children: char }, index));
2209
+ }) })] }));
2210
+ };
2211
+
2212
+ var styles$j = {"arrayInput":"ArrayInput-module_arrayInput__q1x7A","arrayInputLabel":"ArrayInput-module_arrayInputLabel__HyUC7","arrayInputItem":"ArrayInput-module_arrayInputItem__bFtgl","inputWrapper":"ArrayInput-module_inputWrapper__ajhbW","input":"ArrayInput-module_input__1uywi","complexItem":"ArrayInput-module_complexItem__zr-Q-","fieldsWrapper":"ArrayInput-module_fieldsWrapper__7BVPa","removeButton":"ArrayInput-module_removeButton__gYf8Y","addButton":"ArrayInput-module_addButton__mia29"};
2049
2213
 
2050
2214
  /**
2051
2215
  * ArrayInput component - Versatile dynamic list manager
@@ -2112,11 +2276,11 @@ function SimpleArrayInput({ label, values, onChange, placeholder, itemStyle, inp
2112
2276
  itemIdsRef.current.splice(index, 1);
2113
2277
  onChange(newValues);
2114
2278
  };
2115
- return (jsxs("div", { className: styles$f.arrayInput, children: [jsx("h3", { className: styles$f.arrayInputLabel, children: label }), jsx("div", { children: jsx(AnimatePresence, { children: values.map((value, index) => (jsxs(motion.div, { className: styles$f.arrayInputItem, style: itemStyle, initial: { opacity: 0, y: 10 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0 }, transition: {
2279
+ return (jsxs("div", { className: styles$j.arrayInput, children: [jsx("h3", { className: styles$j.arrayInputLabel, children: label }), jsx("div", { children: jsx(AnimatePresence, { children: values.map((value, index) => (jsxs(motion.div, { className: styles$j.arrayInputItem, style: itemStyle, initial: { opacity: 0, y: 10 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0 }, transition: {
2116
2280
  duration: 0.3,
2117
2281
  ease: "easeInOut",
2118
2282
  layout: { duration: 0.2 }
2119
- }, children: [jsx("div", { className: styles$f.inputWrapper, children: multiline ? (jsx("div", { style: inputStyle, children: jsx(TextArea, { label: "", value: value, onChange: (newValue) => handleChange(index, newValue), placeholder: placeholder, rows: rows, compact: true }) })) : (jsx("input", { type: "text", value: value, onChange: (e) => handleChange(index, e.target.value), placeholder: placeholder, className: styles$f.input, style: inputStyle })) }), jsx(Button, { variant: "ghost", size: "small", onClick: () => handleRemove(index), "aria-label": "Remove item", className: styles$f.removeButton, children: jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "currentColor", children: jsx("path", { d: "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z" }) }) })] }, itemIdsRef.current[index]))) }) }), jsx(Button, { variant: buttonVariant, size: "small", onClick: handleAdd, className: styles$f.addButton, children: label })] }));
2283
+ }, children: [jsx("div", { className: styles$j.inputWrapper, children: multiline ? (jsx("div", { style: inputStyle, children: jsx(TextArea, { label: "", value: value, onChange: (newValue) => handleChange(index, newValue), placeholder: placeholder, rows: rows, compact: true }) })) : (jsx("input", { type: "text", value: value, onChange: (e) => handleChange(index, e.target.value), placeholder: placeholder, className: styles$j.input, style: inputStyle })) }), jsx(Button, { variant: "ghost", size: "small", onClick: () => handleRemove(index), "aria-label": "Remove item", className: styles$j.removeButton, children: jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "currentColor", children: jsx("path", { d: "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z" }) }) })] }, itemIdsRef.current[index]))) }) }), jsx(Button, { variant: buttonVariant, size: "small", onClick: handleAdd, className: styles$j.addButton, children: label })] }));
2120
2284
  }
2121
2285
  // Complex object array implementation
2122
2286
  function ComplexArrayInput({ label, values, onChange, fields, getKey, itemStyle, inputStyle, buttonVariant = 'primary' }) {
@@ -2141,14 +2305,14 @@ function ComplexArrayInput({ label, values, onChange, fields, getKey, itemStyle,
2141
2305
  // Generate key from all field values
2142
2306
  return fields.map(f => item[f.name] || '').join('-') + `-${index}`;
2143
2307
  };
2144
- return (jsxs("div", { className: styles$f.arrayInput, children: [jsx("h3", { className: styles$f.arrayInputLabel, children: label }), jsx("div", { children: jsx(AnimatePresence, { children: values.map((value, index) => (jsxs(motion.div, { className: `${styles$f.arrayInputItem} ${fields.length > 1 ? styles$f.complexItem : ''}`, style: itemStyle, initial: { opacity: 0, y: 10 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0 }, transition: {
2308
+ return (jsxs("div", { className: styles$j.arrayInput, children: [jsx("h3", { className: styles$j.arrayInputLabel, children: label }), jsx("div", { children: jsx(AnimatePresence, { children: values.map((value, index) => (jsxs(motion.div, { className: `${styles$j.arrayInputItem} ${fields.length > 1 ? styles$j.complexItem : ''}`, style: itemStyle, initial: { opacity: 0, y: 10 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0 }, transition: {
2145
2309
  duration: 0.3,
2146
2310
  ease: "easeInOut",
2147
2311
  layout: { duration: 0.2 }
2148
- }, children: [jsx("div", { className: styles$f.fieldsWrapper, children: fields.map((field) => (jsx("div", { style: inputStyle, children: field.multiline ? (jsx(TextArea, { value: value[field.name] || '', onChange: (newValue) => handleChange(index, field.name, newValue), label: field.label, placeholder: field.placeholder, rows: field.rows, compact: true })) : (jsx(TextInput, { value: value[field.name] || '', onChange: (newValue) => handleChange(index, field.name, newValue), label: field.label, type: field.type, placeholder: field.placeholder })) }, field.name))) }), jsx(Button, { variant: "ghost", size: "small", onClick: () => handleRemove(index), "aria-label": "Remove item", className: styles$f.removeButton, children: jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "currentColor", children: jsx("path", { d: "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z" }) }) })] }, generateKey(value, index)))) }) }), jsxs(Button, { variant: buttonVariant, size: "small", onClick: handleAdd, className: styles$f.addButton, children: ["Add ", label] })] }));
2312
+ }, children: [jsx("div", { className: styles$j.fieldsWrapper, children: fields.map((field) => (jsx("div", { style: inputStyle, children: field.multiline ? (jsx(TextArea, { value: value[field.name] || '', onChange: (newValue) => handleChange(index, field.name, newValue), label: field.label, placeholder: field.placeholder, rows: field.rows, compact: true })) : (jsx(TextInput, { value: value[field.name] || '', onChange: (newValue) => handleChange(index, field.name, newValue), label: field.label, type: field.type, placeholder: field.placeholder })) }, field.name))) }), jsx(Button, { variant: "ghost", size: "small", onClick: () => handleRemove(index), "aria-label": "Remove item", className: styles$j.removeButton, children: jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "currentColor", children: jsx("path", { d: "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z" }) }) })] }, generateKey(value, index)))) }) }), jsxs(Button, { variant: buttonVariant, size: "small", onClick: handleAdd, className: styles$j.addButton, children: ["Add ", label] })] }));
2149
2313
  }
2150
2314
 
2151
- var styles$e = {"fab":"EditFAB-module_fab__nSrTJ","primary":"EditFAB-module_primary__zbA9n","secondary":"EditFAB-module_secondary__BnXs0","success":"EditFAB-module_success__kcLg3","loader":"EditFAB-module_loader__TaJOm","draggable":"EditFAB-module_draggable__eE2vE","dragging":"EditFAB-module_dragging__btRJe"};
2315
+ var styles$i = {"fab":"EditFAB-module_fab__nSrTJ","primary":"EditFAB-module_primary__zbA9n","secondary":"EditFAB-module_secondary__BnXs0","success":"EditFAB-module_success__kcLg3","loader":"EditFAB-module_loader__TaJOm","draggable":"EditFAB-module_draggable__eE2vE","dragging":"EditFAB-module_dragging__btRJe"};
2152
2316
 
2153
2317
  const EditFAB = ({ canEdit, isEditMode, hasUnsavedChanges = false, isSaving = false, onEnterEditMode, onExitEditMode, position = { bottom: 32, right: 32 } }) => {
2154
2318
  const [isMobile, setIsMobile] = useState(false);
@@ -2233,15 +2397,15 @@ const EditFAB = ({ canEdit, isEditMode, hasUnsavedChanges = false, isSaving = fa
2233
2397
  };
2234
2398
  const getVariantClass = () => {
2235
2399
  if (isSaving)
2236
- return styles$e.primary;
2400
+ return styles$i.primary;
2237
2401
  if (isEditMode) {
2238
- return hasUnsavedChanges ? styles$e.success : styles$e.secondary;
2402
+ return hasUnsavedChanges ? styles$i.success : styles$i.secondary;
2239
2403
  }
2240
- return styles$e.primary;
2404
+ return styles$i.primary;
2241
2405
  };
2242
2406
  const getIcon = () => {
2243
2407
  if (isSaving) {
2244
- return jsx("div", { className: styles$e.loader });
2408
+ return jsx("div", { className: styles$i.loader });
2245
2409
  }
2246
2410
  if (isEditMode) {
2247
2411
  return hasUnsavedChanges ? jsx(Check, { size: 24 }) : jsx(X, { size: 24 });
@@ -2256,30 +2420,30 @@ const EditFAB = ({ canEdit, isEditMode, hasUnsavedChanges = false, isSaving = fa
2256
2420
  }
2257
2421
  return "Enter edit mode";
2258
2422
  };
2259
- return (jsx(motion.button, { ref: fabRef, className: `${styles$e.fab} ${getVariantClass()} ${isMobile ? styles$e.draggable : ''} ${isDragging ? styles$e.dragging : ''}`, style: getPositionStyles(), onClick: handleClick, onTouchStart: handleTouchStart, onTouchMove: handleTouchMove, onTouchEnd: handleTouchEnd, disabled: isSaving, "aria-label": getAriaLabel(), initial: { scale: 0, opacity: 0 }, animate: { scale: 1, opacity: 1 }, exit: { scale: 0, opacity: 0 }, whileHover: !isSaving && !isDragging ? { scale: 1.1 } : {}, whileTap: !isSaving && !isDragging ? { scale: 0.9 } : {}, transition: {
2423
+ return (jsx(motion.button, { ref: fabRef, className: `${styles$i.fab} ${getVariantClass()} ${isMobile ? styles$i.draggable : ''} ${isDragging ? styles$i.dragging : ''}`, style: getPositionStyles(), onClick: handleClick, onTouchStart: handleTouchStart, onTouchMove: handleTouchMove, onTouchEnd: handleTouchEnd, disabled: isSaving, "aria-label": getAriaLabel(), initial: { scale: 0, opacity: 0 }, animate: { scale: 1, opacity: 1 }, exit: { scale: 0, opacity: 0 }, whileHover: !isSaving && !isDragging ? { scale: 1.1 } : {}, whileTap: !isSaving && !isDragging ? { scale: 0.9 } : {}, transition: {
2260
2424
  type: "spring",
2261
2425
  stiffness: 260,
2262
2426
  damping: 20
2263
2427
  }, children: getIcon() }));
2264
2428
  };
2265
2429
 
2266
- var styles$d = {"searchContainer":"SearchBar-module_searchContainer__TdM1w","searchInputWrapper":"SearchBar-module_searchInputWrapper__kCZLU","searchIcon":"SearchBar-module_searchIcon__IIxEu","searchInput":"SearchBar-module_searchInput__V4gkE","clearButton":"SearchBar-module_clearButton__7fNIY","filterSelect":"SearchBar-module_filterSelect__xIVE4","resultsDropdown":"SearchBar-module_resultsDropdown__yh6NF","loadingState":"SearchBar-module_loadingState__4gidK","emptyState":"SearchBar-module_emptyState__RbI4s","spinner":"SearchBar-module_spinner__PMc6-","resultsGroups":"SearchBar-module_resultsGroups__U24DC","resultGroup":"SearchBar-module_resultGroup__SoTQH","groupHeader":"SearchBar-module_groupHeader__bFRHA","groupIcon":"SearchBar-module_groupIcon__9ENM-","groupTitle":"SearchBar-module_groupTitle__ZekZs","groupCount":"SearchBar-module_groupCount__PQIqw","groupResults":"SearchBar-module_groupResults__xTF52","resultItem":"SearchBar-module_resultItem__VaKKy","highlighted":"SearchBar-module_highlighted__Q-3sH","resultTitle":"SearchBar-module_resultTitle__i1uqL","resultSubtitle":"SearchBar-module_resultSubtitle__LQOJ1","resultMeta":"SearchBar-module_resultMeta__Kmkrn","resultContent":"SearchBar-module_resultContent__TzVzL","highlight":"SearchBar-module_highlight__Q3PSP"};
2430
+ var styles$h = {"searchContainer":"SearchBar-module_searchContainer__TdM1w","searchInputWrapper":"SearchBar-module_searchInputWrapper__kCZLU","searchIcon":"SearchBar-module_searchIcon__IIxEu","searchInput":"SearchBar-module_searchInput__V4gkE","clearButton":"SearchBar-module_clearButton__7fNIY","filterSelect":"SearchBar-module_filterSelect__xIVE4","resultsDropdown":"SearchBar-module_resultsDropdown__yh6NF","loadingState":"SearchBar-module_loadingState__4gidK","emptyState":"SearchBar-module_emptyState__RbI4s","spinner":"SearchBar-module_spinner__PMc6-","resultsGroups":"SearchBar-module_resultsGroups__U24DC","resultGroup":"SearchBar-module_resultGroup__SoTQH","groupHeader":"SearchBar-module_groupHeader__bFRHA","groupIcon":"SearchBar-module_groupIcon__9ENM-","groupTitle":"SearchBar-module_groupTitle__ZekZs","groupCount":"SearchBar-module_groupCount__PQIqw","groupResults":"SearchBar-module_groupResults__xTF52","resultItem":"SearchBar-module_resultItem__VaKKy","highlighted":"SearchBar-module_highlighted__Q-3sH","resultTitle":"SearchBar-module_resultTitle__i1uqL","resultSubtitle":"SearchBar-module_resultSubtitle__LQOJ1","resultMeta":"SearchBar-module_resultMeta__Kmkrn","resultContent":"SearchBar-module_resultContent__TzVzL","highlight":"SearchBar-module_highlight__Q3PSP"};
2267
2431
 
2268
2432
  // Default filter options for backwards compatibility
2269
2433
  const defaultFilterOptions = [
2270
- { value: 'all', label: 'All', icon: FiSearch },
2271
- { value: 'projects', label: 'Projects', icon: FiFolder },
2272
- { value: 'clients', label: 'Clients', icon: FiUsers },
2273
- { value: 'contacts', label: 'Contacts', icon: FiBook },
2274
- { value: 'interactions', label: 'Interactions', icon: FiMessageSquare },
2275
- { value: 'team', label: 'Team', icon: FiUserPlus },
2434
+ { value: 'all', label: 'All', icon: Search },
2435
+ { value: 'projects', label: 'Projects', icon: Folder },
2436
+ { value: 'clients', label: 'Clients', icon: Users },
2437
+ { value: 'contacts', label: 'Contacts', icon: Book },
2438
+ { value: 'interactions', label: 'Interactions', icon: MessageSquare },
2439
+ { value: 'team', label: 'Team', icon: UserPlus },
2276
2440
  ];
2277
2441
  const defaultEntityIcons = {
2278
- projects: FiFolder,
2279
- clients: FiUsers,
2280
- contacts: FiBook,
2281
- interactions: FiMessageSquare,
2282
- team: FiUserPlus,
2442
+ projects: Folder,
2443
+ clients: Users,
2444
+ contacts: Book,
2445
+ interactions: MessageSquare,
2446
+ team: UserPlus,
2283
2447
  };
2284
2448
  const SearchBar = ({ className, placeholder = "Search (Ctrl+Space)...", onSearch, onResultClick, onClear, debounceDelay = 300, minSearchLength = 2, showFilter = true, enableKeyboardShortcut = true, filterOptions: customFilterOptions, entityIcons: customEntityIcons }) => {
2285
2449
  const filterOptions = customFilterOptions ?? defaultFilterOptions;
@@ -2456,18 +2620,18 @@ const SearchBar = ({ className, placeholder = "Search (Ctrl+Space)...", onSearch
2456
2620
  return text || '';
2457
2621
  const regex = new RegExp(`(${highlight.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')})`, 'gi');
2458
2622
  const parts = text.split(regex);
2459
- return parts.map((part, index) => regex.test(part) ? (jsx("mark", { className: styles$d.highlight, children: part }, index)) : (part));
2623
+ return parts.map((part, index) => regex.test(part) ? (jsx("mark", { className: styles$h.highlight, children: part }, index)) : (part));
2460
2624
  };
2461
- return (jsxs("div", { ref: searchRef, className: `${styles$d.searchContainer} ${className || ''}`, children: [jsxs("div", { className: styles$d.searchInputWrapper, children: [jsx(FiSearch, { className: styles$d.searchIcon }), jsx("input", { ref: inputRef, type: "text", value: query, onChange: (e) => setQuery(e.target.value), onKeyDown: handleKeyDown, onFocus: () => query.trim() && results.length > 0 && setIsDropdownOpen(true), placeholder: placeholder, className: styles$d.searchInput, "aria-label": "Search", "aria-expanded": isDropdownOpen, "aria-controls": "search-results", "aria-autocomplete": "list" }), query && (jsx(motion.button, { className: styles$d.clearButton, onClick: handleClear, whileHover: { scale: 1.1 }, whileTap: { scale: 0.9 }, initial: { opacity: 0, scale: 0.8 }, animate: { opacity: 1, scale: 1 }, exit: { opacity: 0, scale: 0.8 }, children: jsx(FiX, {}) })), showFilter && (jsx("select", { value: filter, onChange: (e) => setFilter(e.target.value), className: styles$d.filterSelect, "aria-label": "Filter search results", children: filterOptions.map(option => (jsx("option", { value: option.value, children: option.label }, option.value))) }))] }), jsx(AnimatePresence, { children: isDropdownOpen && (jsx(motion.div, { ref: resultsRef, id: "search-results", className: styles$d.resultsDropdown, initial: { opacity: 0, y: -10 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: -10 }, transition: { duration: 0.2 }, children: isLoading ? (jsxs("div", { className: styles$d.loadingState, children: [jsx("div", { className: styles$d.spinner }), jsx("span", { children: "Searching..." })] })) : results.length === 0 ? (jsxs("div", { className: styles$d.emptyState, children: ["No results found for \"", query, "\""] })) : (jsx("div", { className: styles$d.resultsGroups, children: Object.entries(groupedResults).map(([type, groupResults]) => {
2625
+ return (jsxs("div", { ref: searchRef, className: `${styles$h.searchContainer} ${className || ''}`, children: [jsxs("div", { className: styles$h.searchInputWrapper, children: [jsx(Search, { className: styles$h.searchIcon }), jsx("input", { ref: inputRef, type: "text", value: query, onChange: (e) => setQuery(e.target.value), onKeyDown: handleKeyDown, onFocus: () => query.trim() && results.length > 0 && setIsDropdownOpen(true), placeholder: placeholder, className: styles$h.searchInput, "aria-label": "Search", "aria-expanded": isDropdownOpen, "aria-controls": "search-results", "aria-autocomplete": "list" }), query && (jsx(motion.button, { className: styles$h.clearButton, onClick: handleClear, whileHover: { scale: 1.1 }, whileTap: { scale: 0.9 }, initial: { opacity: 0, scale: 0.8 }, animate: { opacity: 1, scale: 1 }, exit: { opacity: 0, scale: 0.8 }, children: jsx(X, {}) })), showFilter && (jsx("select", { value: filter, onChange: (e) => setFilter(e.target.value), className: styles$h.filterSelect, "aria-label": "Filter search results", children: filterOptions.map(option => (jsx("option", { value: option.value, children: option.label }, option.value))) }))] }), jsx(AnimatePresence, { children: isDropdownOpen && (jsx(motion.div, { ref: resultsRef, id: "search-results", className: styles$h.resultsDropdown, initial: { opacity: 0, y: -10 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: -10 }, transition: { duration: 0.2 }, children: isLoading ? (jsxs("div", { className: styles$h.loadingState, children: [jsx("div", { className: styles$h.spinner }), jsx("span", { children: "Searching..." })] })) : results.length === 0 ? (jsxs("div", { className: styles$h.emptyState, children: ["No results found for \"", query, "\""] })) : (jsx("div", { className: styles$h.resultsGroups, children: Object.entries(groupedResults).map(([type, groupResults]) => {
2462
2626
  const Icon = entityIcons[type];
2463
- return (jsxs("div", { className: styles$d.resultGroup, children: [jsxs("div", { className: styles$d.groupHeader, children: [Icon && jsx(Icon, { className: styles$d.groupIcon }), jsx("span", { className: styles$d.groupTitle, children: type.charAt(0).toUpperCase() + type.slice(1) }), jsx("span", { className: styles$d.groupCount, children: groupResults.length })] }), jsx("div", { className: styles$d.groupResults, children: groupResults.map((result) => {
2627
+ return (jsxs("div", { className: styles$h.resultGroup, children: [jsxs("div", { className: styles$h.groupHeader, children: [Icon && jsx(Icon, { className: styles$h.groupIcon }), jsx("span", { className: styles$h.groupTitle, children: type.charAt(0).toUpperCase() + type.slice(1) }), jsx("span", { className: styles$h.groupCount, children: groupResults.length })] }), jsx("div", { className: styles$h.groupResults, children: groupResults.map((result) => {
2464
2628
  const globalIndex = results.indexOf(result);
2465
- return (jsxs(motion.button, { "data-result-index": globalIndex, className: `${styles$d.resultItem} ${highlightedIndex === globalIndex ? styles$d.highlighted : ''}`, onClick: () => handleResultClick(result), whileHover: { x: 4 }, onMouseEnter: () => setHighlightedIndex(globalIndex), children: [jsxs("div", { className: styles$d.resultContent, children: [jsx("div", { className: styles$d.resultTitle, children: highlightMatch(result.title || 'Untitled', query) }), result.subtitle && (jsx("div", { className: styles$d.resultSubtitle, children: highlightMatch(result.subtitle, query) }))] }), result.meta && (jsx("div", { className: styles$d.resultMeta, children: result.meta }))] }, `${result.type}-${result.id}`));
2629
+ return (jsxs(motion.button, { "data-result-index": globalIndex, className: `${styles$h.resultItem} ${highlightedIndex === globalIndex ? styles$h.highlighted : ''}`, onClick: () => handleResultClick(result), whileHover: { x: 4 }, onMouseEnter: () => setHighlightedIndex(globalIndex), children: [jsxs("div", { className: styles$h.resultContent, children: [jsx("div", { className: styles$h.resultTitle, children: highlightMatch(result.title || 'Untitled', query) }), result.subtitle && (jsx("div", { className: styles$h.resultSubtitle, children: highlightMatch(result.subtitle, query) }))] }), result.meta && (jsx("div", { className: styles$h.resultMeta, children: result.meta }))] }, `${result.type}-${result.id}`));
2466
2630
  }) })] }, type));
2467
2631
  }) })) })) })] }));
2468
2632
  };
2469
2633
 
2470
- var styles$c = {"modalOverlay":"TimePickerModal-module_modalOverlay__Cbq5-","modalContent":"TimePickerModal-module_modalContent__e6py2","modalHeader":"TimePickerModal-module_modalHeader__XhTgK","closeButton":"TimePickerModal-module_closeButton__qsRAG","timeDisplay":"TimePickerModal-module_timeDisplay__voGP4","pickerContainer":"TimePickerModal-module_pickerContainer__4qn3r","pickerColumn":"TimePickerModal-module_pickerColumn__0-kWf","pickerLabel":"TimePickerModal-module_pickerLabel__e7zQ2","pickerScroll":"TimePickerModal-module_pickerScroll__5Dcvw","pickerItem":"TimePickerModal-module_pickerItem__n8sC2","selected":"TimePickerModal-module_selected__oQA8Z","pickerDivider":"TimePickerModal-module_pickerDivider__eg83F","modalActions":"TimePickerModal-module_modalActions__eJRWU","cancelButton":"TimePickerModal-module_cancelButton__zri81","confirmButton":"TimePickerModal-module_confirmButton__q2p3Q"};
2634
+ var styles$g = {"modalOverlay":"TimePickerModal-module_modalOverlay__Cbq5-","modalContent":"TimePickerModal-module_modalContent__e6py2","modalHeader":"TimePickerModal-module_modalHeader__XhTgK","closeButton":"TimePickerModal-module_closeButton__qsRAG","timeDisplay":"TimePickerModal-module_timeDisplay__voGP4","pickerContainer":"TimePickerModal-module_pickerContainer__4qn3r","pickerColumn":"TimePickerModal-module_pickerColumn__0-kWf","pickerLabel":"TimePickerModal-module_pickerLabel__e7zQ2","pickerScroll":"TimePickerModal-module_pickerScroll__5Dcvw","pickerItem":"TimePickerModal-module_pickerItem__n8sC2","selected":"TimePickerModal-module_selected__oQA8Z","pickerDivider":"TimePickerModal-module_pickerDivider__eg83F","modalActions":"TimePickerModal-module_modalActions__eJRWU","cancelButton":"TimePickerModal-module_cancelButton__zri81","confirmButton":"TimePickerModal-module_confirmButton__q2p3Q"};
2471
2635
 
2472
2636
  function TimePickerModal({ isOpen, onClose, value, onChange }) {
2473
2637
  const [hours, minutes] = value ? value.split(':').map(Number) : [12, 0];
@@ -2488,10 +2652,10 @@ function TimePickerModal({ isOpen, onClose, value, onChange }) {
2488
2652
  };
2489
2653
  if (!isOpen)
2490
2654
  return null;
2491
- return (jsx("div", { className: styles$c.modalOverlay, onClick: onClose, children: jsxs("div", { className: styles$c.modalContent, onClick: (e) => e.stopPropagation(), children: [jsxs("div", { className: styles$c.modalHeader, children: [jsx("h3", { children: "Select Time" }), jsx("button", { className: styles$c.closeButton, onClick: onClose, "aria-label": "Close", children: jsx(FiX, {}) })] }), jsxs("div", { className: styles$c.timeDisplay, children: [selectedHour.toString().padStart(2, '0'), ":", selectedMinute.toString().padStart(2, '0')] }), jsxs("div", { className: styles$c.pickerContainer, children: [jsxs("div", { className: styles$c.pickerColumn, children: [jsx("div", { className: styles$c.pickerLabel, children: "Hours" }), jsx("div", { className: styles$c.pickerScroll, children: Array.from({ length: 24 }, (_, i) => (jsx("button", { className: `${styles$c.pickerItem} ${selectedHour === i ? styles$c.selected : ''}`, onClick: () => setSelectedHour(i), children: i.toString().padStart(2, '0') }, i))) })] }), jsx("div", { className: styles$c.pickerDivider, children: ":" }), jsxs("div", { className: styles$c.pickerColumn, children: [jsx("div", { className: styles$c.pickerLabel, children: "Minutes" }), jsx("div", { className: styles$c.pickerScroll, children: Array.from({ length: 60 }, (_, i) => (jsx("button", { className: `${styles$c.pickerItem} ${selectedMinute === i ? styles$c.selected : ''}`, onClick: () => setSelectedMinute(i), children: i.toString().padStart(2, '0') }, i))) })] })] }), jsxs("div", { className: styles$c.modalActions, children: [jsx("button", { className: styles$c.cancelButton, onClick: onClose, children: "Cancel" }), jsx("button", { className: styles$c.confirmButton, onClick: handleConfirm, children: "Confirm" })] })] }) }));
2655
+ return (jsx("div", { className: styles$g.modalOverlay, onClick: onClose, children: jsxs("div", { className: styles$g.modalContent, onClick: (e) => e.stopPropagation(), children: [jsxs("div", { className: styles$g.modalHeader, children: [jsx("h3", { children: "Select Time" }), jsx("button", { className: styles$g.closeButton, onClick: onClose, "aria-label": "Close", children: jsx(X, {}) })] }), jsxs("div", { className: styles$g.timeDisplay, children: [selectedHour.toString().padStart(2, '0'), ":", selectedMinute.toString().padStart(2, '0')] }), jsxs("div", { className: styles$g.pickerContainer, children: [jsxs("div", { className: styles$g.pickerColumn, children: [jsx("div", { className: styles$g.pickerLabel, children: "Hours" }), jsx("div", { className: styles$g.pickerScroll, children: Array.from({ length: 24 }, (_, i) => (jsx("button", { className: `${styles$g.pickerItem} ${selectedHour === i ? styles$g.selected : ''}`, onClick: () => setSelectedHour(i), children: i.toString().padStart(2, '0') }, i))) })] }), jsx("div", { className: styles$g.pickerDivider, children: ":" }), jsxs("div", { className: styles$g.pickerColumn, children: [jsx("div", { className: styles$g.pickerLabel, children: "Minutes" }), jsx("div", { className: styles$g.pickerScroll, children: Array.from({ length: 60 }, (_, i) => (jsx("button", { className: `${styles$g.pickerItem} ${selectedMinute === i ? styles$g.selected : ''}`, onClick: () => setSelectedMinute(i), children: i.toString().padStart(2, '0') }, i))) })] })] }), jsxs("div", { className: styles$g.modalActions, children: [jsx("button", { className: styles$g.cancelButton, onClick: onClose, children: "Cancel" }), jsx("button", { className: styles$g.confirmButton, onClick: handleConfirm, children: "Confirm" })] })] }) }));
2492
2656
  }
2493
2657
 
2494
- var styles$b = {"timeInput":"TimeInput-module_timeInput__h1DpT","label":"TimeInput-module_label__d4rZw","required":"TimeInput-module_required__rc1vq","inputWrapper":"TimeInput-module_inputWrapper__4RPAn","textInput":"TimeInput-module_textInput__M3eBZ","clockButton":"TimeInput-module_clockButton__3qoub","error":"TimeInput-module_error__gJnpk","success":"TimeInput-module_success__np-lF","loading":"TimeInput-module_loading__Wb1DC","disabled":"TimeInput-module_disabled__wxiZ-"};
2658
+ var styles$f = {"timeInput":"TimeInput-module_timeInput__h1DpT","label":"TimeInput-module_label__d4rZw","required":"TimeInput-module_required__rc1vq","inputWrapper":"TimeInput-module_inputWrapper__4RPAn","textInput":"TimeInput-module_textInput__M3eBZ","clockButton":"TimeInput-module_clockButton__3qoub","error":"TimeInput-module_error__gJnpk","success":"TimeInput-module_success__np-lF","loading":"TimeInput-module_loading__Wb1DC","disabled":"TimeInput-module_disabled__wxiZ-"};
2495
2659
 
2496
2660
  function TimeInput({ label, value, onChange, placeholder = "14:30", onFocus, onBlur, error = false, success = false, loading = false, disabled = false, required = false, className = "" }) {
2497
2661
  const [showPicker, setShowPicker] = useState(false);
@@ -2544,20 +2708,20 @@ function TimeInput({ label, value, onChange, placeholder = "14:30", onFocus, onB
2544
2708
  }
2545
2709
  };
2546
2710
  const getContainerClassName = () => {
2547
- const classes = [styles$b.timeInput];
2711
+ const classes = [styles$f.timeInput];
2548
2712
  if (error)
2549
- classes.push(styles$b.error);
2713
+ classes.push(styles$f.error);
2550
2714
  if (success)
2551
- classes.push(styles$b.success);
2715
+ classes.push(styles$f.success);
2552
2716
  if (loading)
2553
- classes.push(styles$b.loading);
2717
+ classes.push(styles$f.loading);
2554
2718
  if (disabled)
2555
- classes.push(styles$b.disabled);
2719
+ classes.push(styles$f.disabled);
2556
2720
  if (className)
2557
2721
  classes.push(className);
2558
2722
  return classes.join(' ');
2559
2723
  };
2560
- return (jsxs(Fragment, { children: [jsxs("div", { className: getContainerClassName(), children: [jsxs("label", { className: styles$b.label, children: [label, required && jsx("span", { className: styles$b.required, children: "*" })] }), jsxs("div", { className: styles$b.inputWrapper, children: [jsx("input", { type: "text", value: value, onChange: (e) => handleTextChange(e.target.value), onFocus: onFocus, onBlur: onBlur, placeholder: placeholder, className: styles$b.textInput, maxLength: 5, disabled: disabled || loading, "aria-invalid": error, "aria-required": required, inputMode: "numeric", pattern: "[0-9:]*" }), jsx("button", { type: "button", onClick: handleClockClick, className: styles$b.clockButton, title: "Open time picker", disabled: disabled || loading, "aria-label": "Open time picker", children: jsx(FiClock, { size: 20 }) })] })] }), jsx(TimePickerModal, { isOpen: showPicker, onClose: () => setShowPicker(false), value: value, onChange: onChange })] }));
2724
+ return (jsxs(Fragment, { children: [jsxs("div", { className: getContainerClassName(), children: [jsxs("label", { className: styles$f.label, children: [label, required && jsx("span", { className: styles$f.required, children: "*" })] }), jsxs("div", { className: styles$f.inputWrapper, children: [jsx("input", { type: "text", value: value, onChange: (e) => handleTextChange(e.target.value), onFocus: onFocus, onBlur: onBlur, placeholder: placeholder, className: styles$f.textInput, maxLength: 5, disabled: disabled || loading, "aria-invalid": error, "aria-required": required, inputMode: "numeric", pattern: "[0-9:]*" }), jsx("button", { type: "button", onClick: handleClockClick, className: styles$f.clockButton, title: "Open time picker", disabled: disabled || loading, "aria-label": "Open time picker", children: jsx(Clock, { size: 20 }) })] })] }), jsx(TimePickerModal, { isOpen: showPicker, onClose: () => setShowPicker(false), value: value, onChange: onChange })] }));
2561
2725
  }
2562
2726
 
2563
2727
  const ThemeContext = createContext(undefined);
@@ -2568,24 +2732,70 @@ const useTheme = () => {
2568
2732
  }
2569
2733
  return context;
2570
2734
  };
2735
+ /** Safe version of useTheme that returns null when outside a ThemeProvider */
2736
+ const useThemeSafe = () => {
2737
+ return useContext(ThemeContext) ?? null;
2738
+ };
2739
+ const ThemeProvider = ({ children, defaultTheme = 'light', storageKey = 'app-theme', }) => {
2740
+ const [theme, setThemeState] = useState(() => {
2741
+ // Check localStorage first
2742
+ const stored = localStorage.getItem(storageKey);
2743
+ if (stored && ['light', 'dark', 'lossito', 'lossito-dark', 'dmood', 'dmood-dark', 'crt'].includes(stored)) {
2744
+ return stored;
2745
+ }
2746
+ // Check system preference
2747
+ if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
2748
+ return 'dark';
2749
+ }
2750
+ return defaultTheme;
2751
+ });
2752
+ const setTheme = (newTheme) => {
2753
+ setThemeState(newTheme);
2754
+ localStorage.setItem(storageKey, newTheme);
2755
+ };
2756
+ const toggleTheme = () => {
2757
+ const themeOrder = ['light', 'dark', 'lossito', 'lossito-dark', 'dmood', 'dmood-dark', 'crt'];
2758
+ const currentIndex = themeOrder.indexOf(theme);
2759
+ const nextIndex = (currentIndex + 1) % themeOrder.length;
2760
+ setTheme(themeOrder[nextIndex]);
2761
+ };
2762
+ useEffect(() => {
2763
+ const root = document.documentElement;
2764
+ // Apply theme attribute
2765
+ root.setAttribute('data-theme', theme);
2766
+ // Apply dark class if needed
2767
+ if (theme.includes('dark')) {
2768
+ root.classList.add('dark');
2769
+ }
2770
+ else {
2771
+ root.classList.remove('dark');
2772
+ }
2773
+ }, [theme]);
2774
+ // Listen for system theme changes
2775
+ useEffect(() => {
2776
+ const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
2777
+ const handleChange = (e) => {
2778
+ const stored = localStorage.getItem(storageKey);
2779
+ if (!stored) {
2780
+ setThemeState(e.matches ? 'dark' : 'light');
2781
+ }
2782
+ };
2783
+ mediaQuery.addEventListener('change', handleChange);
2784
+ return () => mediaQuery.removeEventListener('change', handleChange);
2785
+ }, [storageKey]);
2786
+ return (jsx(ThemeContext.Provider, { value: { theme, setTheme, toggleTheme }, children: children }));
2787
+ };
2571
2788
 
2572
- var styles$a = {"button":"ThemeSwitcher-module_button__VfRjU","iconWrapper":"ThemeSwitcher-module_iconWrapper__FpHo8","label":"ThemeSwitcher-module_label__2Hfkp","toggle":"ThemeSwitcher-module_toggle__ATXx4","toggleTrack":"ThemeSwitcher-module_toggleTrack__x28Rv","toggleThumb":"ThemeSwitcher-module_toggleThumb__V8QeN","dropdown":"ThemeSwitcher-module_dropdown__3qLdt","dropdownTrigger":"ThemeSwitcher-module_dropdownTrigger__UzYV5","dropdownMenu":"ThemeSwitcher-module_dropdownMenu__3L5hT","dropdownItem":"ThemeSwitcher-module_dropdownItem__inw-K","active":"ThemeSwitcher-module_active__OHP19","icon":"ThemeSwitcher-module_icon__iRZiJ","text":"ThemeSwitcher-module_text__OCOoA"};
2789
+ var styles$e = {"button":"ThemeSwitcher-module_button__VfRjU","iconWrapper":"ThemeSwitcher-module_iconWrapper__FpHo8","label":"ThemeSwitcher-module_label__2Hfkp","toggle":"ThemeSwitcher-module_toggle__ATXx4","toggleTrack":"ThemeSwitcher-module_toggleTrack__x28Rv","toggleThumb":"ThemeSwitcher-module_toggleThumb__V8QeN","dropdown":"ThemeSwitcher-module_dropdown__3qLdt","dropdownTrigger":"ThemeSwitcher-module_dropdownTrigger__UzYV5","dropdownMenu":"ThemeSwitcher-module_dropdownMenu__3L5hT","dropdownItem":"ThemeSwitcher-module_dropdownItem__inw-K","active":"ThemeSwitcher-module_active__OHP19","icon":"ThemeSwitcher-module_icon__iRZiJ","text":"ThemeSwitcher-module_text__OCOoA"};
2573
2790
 
2574
2791
  const ThemeSwitcher = ({ variant = 'button', showLabel = false, className = '', currentTheme, onThemeChange, themes: customThemes, }) => {
2575
- // Try to use internal context if available, otherwise use props
2576
- const contextTheme = (() => {
2577
- try {
2578
- return useTheme();
2579
- }
2580
- catch {
2581
- return null;
2582
- }
2583
- })();
2792
+ // Use safe version that returns null when outside a ThemeProvider
2793
+ const contextTheme = useThemeSafe();
2584
2794
  const theme = currentTheme ?? contextTheme?.theme ?? 'light';
2585
2795
  const setTheme = onThemeChange ?? contextTheme?.setTheme ?? (() => { });
2586
2796
  const defaultThemes = [
2587
- { value: 'light', label: 'Light', icon: jsx(FiSun, {}) },
2588
- { value: 'dark', label: 'Dark', icon: jsx(FiMoon, {}) },
2797
+ { value: 'light', label: 'Light', icon: jsx(Sun, {}) },
2798
+ { value: 'dark', label: 'Dark', icon: jsx(Moon, {}) },
2589
2799
  { value: 'lossito', label: 'Lossito Light', icon: '✨' },
2590
2800
  { value: 'lossito-dark', label: 'Lossito Dark', icon: '🌑' },
2591
2801
  { value: 'dmood', label: 'Dmood Light', icon: '💙' },
@@ -2597,48 +2807,154 @@ const ThemeSwitcher = ({ variant = 'button', showLabel = false, className = '',
2597
2807
  if (variant === 'toggle') {
2598
2808
  // Simple toggle between light and dark
2599
2809
  const isDark = theme.includes('dark');
2600
- return (jsxs(motion.button, { className: `${styles$a.toggle} ${className}`, onClick: () => setTheme(isDark ? 'light' : 'dark'), whileTap: { scale: 0.95 }, "aria-label": "Toggle theme", children: [jsx(motion.div, { className: styles$a.toggleTrack, animate: { backgroundColor: isDark ? 'var(--color-primary)' : 'var(--color-border)' }, children: jsx(motion.div, { className: styles$a.toggleThumb, animate: { x: isDark ? 24 : 0 }, transition: { type: 'spring', stiffness: 500, damping: 30 }, children: isDark ? jsx(FiMoon, { size: 14 }) : jsx(FiSun, { size: 14 }) }) }), showLabel && jsx("span", { className: styles$a.label, children: isDark ? 'Dark' : 'Light' })] }));
2810
+ return (jsxs(motion.button, { className: `${styles$e.toggle} ${className}`, onClick: () => setTheme(isDark ? 'light' : 'dark'), whileTap: { scale: 0.95 }, "aria-label": "Toggle theme", children: [jsx(motion.div, { className: styles$e.toggleTrack, animate: { backgroundColor: isDark ? 'var(--color-primary)' : 'var(--color-border)' }, children: jsx(motion.div, { className: styles$e.toggleThumb, animate: { x: isDark ? 24 : 0 }, transition: { type: 'spring', stiffness: 500, damping: 30 }, children: isDark ? jsx(Moon, { size: 14 }) : jsx(Sun, { size: 14 }) }) }), showLabel && jsx("span", { className: styles$e.label, children: isDark ? 'Dark' : 'Light' })] }));
2601
2811
  }
2602
2812
  if (variant === 'dropdown') {
2603
- return (jsxs("div", { className: `${styles$a.dropdown} ${className}`, children: [jsxs(motion.button, { className: styles$a.dropdownTrigger, whileTap: { scale: 0.98 }, children: [currentThemeData.icon, showLabel && jsx("span", { className: styles$a.label, children: currentThemeData.label })] }), jsx(motion.div, { className: styles$a.dropdownMenu, initial: { opacity: 0, y: -10 }, animate: { opacity: 1, y: 0 }, children: themes.map((t) => (jsxs(motion.button, { className: `${styles$a.dropdownItem} ${theme === t.value ? styles$a.active : ''}`, onClick: () => setTheme(t.value), whileHover: { x: 4 }, whileTap: { scale: 0.98 }, children: [jsx("span", { className: styles$a.icon, children: t.icon }), jsx("span", { className: styles$a.text, children: t.label })] }, t.value))) })] }));
2813
+ return (jsxs("div", { className: `${styles$e.dropdown} ${className}`, children: [jsxs(motion.button, { className: styles$e.dropdownTrigger, whileTap: { scale: 0.98 }, children: [currentThemeData.icon, showLabel && jsx("span", { className: styles$e.label, children: currentThemeData.label })] }), jsx(motion.div, { className: styles$e.dropdownMenu, initial: { opacity: 0, y: -10 }, animate: { opacity: 1, y: 0 }, children: themes.map((t) => (jsxs(motion.button, { className: `${styles$e.dropdownItem} ${theme === t.value ? styles$e.active : ''}`, onClick: () => setTheme(t.value), whileHover: { x: 4 }, whileTap: { scale: 0.98 }, children: [jsx("span", { className: styles$e.icon, children: t.icon }), jsx("span", { className: styles$e.text, children: t.label })] }, t.value))) })] }));
2604
2814
  }
2605
2815
  // Default button variant - cycles through themes
2606
- return (jsxs(motion.button, { className: `${styles$a.button} ${className}`, onClick: () => {
2816
+ return (jsxs(motion.button, { className: `${styles$e.button} ${className}`, onClick: () => {
2607
2817
  const nextIndex = (currentThemeIndex + 1) % themes.length;
2608
2818
  setTheme(themes[nextIndex].value);
2609
- }, whileTap: { scale: 0.95 }, whileHover: { scale: 1.05 }, "aria-label": `Current theme: ${currentThemeData.label}. Click to change.`, children: [jsx(motion.div, { initial: { rotate: -180, opacity: 0 }, animate: { rotate: 0, opacity: 1 }, exit: { rotate: 180, opacity: 0 }, transition: { duration: 0.3 }, className: styles$a.iconWrapper, children: currentThemeData.icon }, theme), showLabel && jsx("span", { className: styles$a.label, children: currentThemeData.label })] }));
2819
+ }, whileTap: { scale: 0.95 }, whileHover: { scale: 1.05 }, "aria-label": `Current theme: ${currentThemeData.label}. Click to change.`, children: [jsx(motion.div, { initial: { rotate: -180, opacity: 0 }, animate: { rotate: 0, opacity: 1 }, exit: { rotate: 180, opacity: 0 }, transition: { duration: 0.3 }, className: styles$e.iconWrapper, children: currentThemeData.icon }, theme), showLabel && jsx("span", { className: styles$e.label, children: currentThemeData.label })] }));
2610
2820
  };
2611
2821
 
2612
- // THIS FILE IS AUTO GENERATED
2613
- function SiJira (props) {
2614
- return GenIcon({"attr":{"role":"img","viewBox":"0 0 24 24"},"child":[{"tag":"path","attr":{"d":"M11.571 11.513H0a5.218 5.218 0 0 0 5.232 5.215h2.13v2.057A5.215 5.215 0 0 0 12.575 24V12.518a1.005 1.005 0 0 0-1.005-1.005zm5.723-5.756H5.736a5.215 5.215 0 0 0 5.215 5.214h2.129v2.058a5.218 5.218 0 0 0 5.215 5.214V6.758a1.001 1.001 0 0 0-1.001-1.001zM23.013 0H11.455a5.215 5.215 0 0 0 5.215 5.215h2.129v2.057A5.215 5.215 0 0 0 24 12.483V1.005A1.001 1.001 0 0 0 23.013 0Z"},"child":[]}]})(props);
2615
- }
2616
-
2617
- var styles$9 = {"tabs":"Tabs-module_tabs__Vlvn7","tab":"Tabs-module_tab__uQKim","tabIcon":"Tabs-module_tabIcon__AgN-O"};
2822
+ var styles$d = {"tabs":"Tabs-module_tabs__Vlvn7","tab":"Tabs-module_tab__uQKim","tabIcon":"Tabs-module_tabIcon__AgN-O"};
2618
2823
 
2619
2824
  // Default tabs for backwards compatibility
2620
2825
  const defaultTabs = [
2621
- { id: 'details', icon: FiInfo, label: 'Dettagli' },
2622
- { id: 'github', icon: FiGithub, label: 'GitHub' },
2623
- { id: 'jira', icon: SiJira, label: 'Jira' },
2624
- { id: 'functional', icon: FiInfo, label: 'Analisi funzionale' }
2826
+ { id: 'details', icon: Info, label: 'Dettagli' },
2827
+ { id: 'github', icon: Github, label: 'GitHub' },
2828
+ { id: 'jira', icon: SquareKanban, label: 'Jira' },
2829
+ { id: 'functional', icon: Info, label: 'Analisi funzionale' }
2625
2830
  ];
2626
2831
  const Tabs = ({ activeTab, onTabChange, tabs: customTabs, className = '' }) => {
2627
2832
  const tabs = customTabs ?? defaultTabs;
2628
- return (jsx("div", { className: `${styles$9.tabs} ${className}`, children: tabs.map((tab) => {
2833
+ return (jsx("div", { className: `${styles$d.tabs} ${className}`, children: tabs.map((tab) => {
2629
2834
  const isActive = activeTab === tab.id;
2630
- return (jsxs(motion.button, { className: styles$9.tab, "data-active": isActive, onClick: () => onTabChange(tab.id), style: { position: 'relative' }, children: [jsx(motion.div, { animate: {
2835
+ return (jsxs(motion.button, { className: styles$d.tab, "data-active": isActive, onClick: () => onTabChange(tab.id), style: { position: 'relative' }, children: [jsx(motion.div, { animate: {
2631
2836
  rotate: isActive ? [0, -10, 10, -5, 5, 0] : 0,
2632
2837
  }, transition: {
2633
2838
  rotate: {
2634
2839
  duration: 0.5,
2635
2840
  ease: 'easeInOut'
2636
2841
  }
2637
- }, children: tab.icon && (typeof tab.icon === 'function' ? (jsx("span", { className: styles$9.tabIcon, children: React.createElement(tab.icon) })) : (jsx("span", { className: styles$9.tabIcon, children: tab.icon }))) }), jsx("span", { children: tab.label })] }, tab.id));
2842
+ }, children: tab.icon && (React.isValidElement(tab.icon) ? (jsx("span", { className: styles$d.tabIcon, children: tab.icon })) : (jsx("span", { className: styles$d.tabIcon, children: React.createElement(tab.icon) }))) }), jsx("span", { children: tab.label })] }, tab.id));
2843
+ }) }));
2844
+ };
2845
+
2846
+ var styles$c = {"toastContainer":"Toast-module_toastContainer__gp5C0","toast":"Toast-module_toast__eenNR","toastSuccess":"Toast-module_toastSuccess__e-cSx","toastError":"Toast-module_toastError__6JO9w","toastWarning":"Toast-module_toastWarning__pJoF1","toastInfo":"Toast-module_toastInfo__y33kR","icon":"Toast-module_icon__Z-D6i","iconSuccess":"Toast-module_iconSuccess__ehY27","iconError":"Toast-module_iconError__nXhZz","iconWarning":"Toast-module_iconWarning__Ie8oD","iconInfo":"Toast-module_iconInfo__8vOf5","content":"Toast-module_content__eBhK8","title":"Toast-module_title__EfUfZ","message":"Toast-module_message__l4pyr","closeButton":"Toast-module_closeButton__UWOVG","progressBar":"Toast-module_progressBar__fGwBU"};
2847
+
2848
+ const getIcon = (type) => {
2849
+ switch (type) {
2850
+ case 'success':
2851
+ return (jsx("svg", { className: `${styles$c.icon} ${styles$c.iconSuccess}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 13l4 4L19 7" }) }));
2852
+ case 'error':
2853
+ return (jsx("svg", { className: `${styles$c.icon} ${styles$c.iconError}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }));
2854
+ case 'warning':
2855
+ return (jsx("svg", { className: `${styles$c.icon} ${styles$c.iconWarning}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" }) }));
2856
+ case 'info':
2857
+ return (jsx("svg", { className: `${styles$c.icon} ${styles$c.iconInfo}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" }) }));
2858
+ }
2859
+ };
2860
+ const getToastStyle = (type) => {
2861
+ switch (type) {
2862
+ case 'success': return styles$c.toastSuccess;
2863
+ case 'error': return styles$c.toastError;
2864
+ case 'warning': return styles$c.toastWarning;
2865
+ case 'info': return styles$c.toastInfo;
2866
+ default: return '';
2867
+ }
2868
+ };
2869
+ const ToastItem = ({ toast, removeToast, }) => {
2870
+ const [progress, setProgress] = useState(100);
2871
+ const duration = toast.duration || 5000;
2872
+ useEffect(() => {
2873
+ const timer = setTimeout(() => {
2874
+ removeToast(toast.id);
2875
+ }, duration);
2876
+ const interval = setInterval(() => {
2877
+ setProgress((prev) => {
2878
+ const newProgress = prev - 100 / (duration / 100);
2879
+ return newProgress <= 0 ? 0 : newProgress;
2880
+ });
2881
+ }, 100);
2882
+ return () => {
2883
+ clearTimeout(timer);
2884
+ clearInterval(interval);
2885
+ };
2886
+ }, [toast.id, duration, removeToast]);
2887
+ return (jsxs(motion.div, { className: `${styles$c.toast} ${getToastStyle(toast.type)}`, initial: { opacity: 0, x: 100, scale: 0.9 }, animate: { opacity: 1, x: 0, scale: 1 }, exit: { opacity: 0, x: 100, scale: 0.9 }, transition: { type: 'spring', stiffness: 500, damping: 40 }, layout: true, children: [getIcon(toast.type), jsxs("div", { className: styles$c.content, children: [toast.title && jsx("p", { className: styles$c.title, children: toast.title }), jsx("p", { className: styles$c.message, children: toast.message })] }), jsx("button", { className: styles$c.closeButton, onClick: () => removeToast(toast.id), "aria-label": "Close notification", children: jsx("svg", { width: "16", height: "16", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) }), jsx(motion.div, { className: styles$c.progressBar, initial: { width: '100%' }, animate: { width: `${progress}%` }, style: {
2888
+ color: toast.type === 'success' ? '#10B981'
2889
+ : toast.type === 'error' ? '#EF4444'
2890
+ : toast.type === 'warning' ? '#F59E0B'
2891
+ : '#3B82F6',
2892
+ } })] }));
2893
+ };
2894
+ const ToastContainer = ({ toasts, removeToast }) => {
2895
+ if (typeof document === 'undefined')
2896
+ return null;
2897
+ return createPortal(jsx("div", { className: styles$c.toastContainer, children: jsx(AnimatePresence, { mode: "sync", children: toasts.map((toast) => (jsx(ToastItem, { toast: toast, removeToast: removeToast }, toast.id))) }) }), document.body);
2898
+ };
2899
+
2900
+ var styles$b = {"breadcrumb":"Breadcrumb-module_breadcrumb__pGabz","separator":"Breadcrumb-module_separator__UCmyy","item":"Breadcrumb-module_item__0cLOg","link":"Breadcrumb-module_link__udp8M","current":"Breadcrumb-module_current__3DpQc"};
2901
+
2902
+ /**
2903
+ * Breadcrumb Component
2904
+ *
2905
+ * Navigation breadcrumb trail. Router-agnostic: pass onNavigate to handle
2906
+ * clicks on breadcrumb links (e.g. with react-router's navigate function).
2907
+ *
2908
+ * @example
2909
+ * <Breadcrumb
2910
+ * items={[
2911
+ * { label: 'Home', href: '/' },
2912
+ * { label: 'Settings', href: '/settings' },
2913
+ * { label: 'Profile' },
2914
+ * ]}
2915
+ * onNavigate={(href) => navigate(href)}
2916
+ * />
2917
+ */
2918
+ const Breadcrumb = ({ items, onNavigate, className = '' }) => {
2919
+ return (jsx("nav", { className: `${styles$b.breadcrumb} ${className}`, "aria-label": "Breadcrumb", children: items.map((item, index) => {
2920
+ const isLast = index === items.length - 1;
2921
+ return (jsxs(React.Fragment, { children: [index > 0 && jsx(ChevronRight, { size: 14, className: styles$b.separator }), isLast || !item.href ? (jsx("span", { className: `${styles$b.item} ${isLast ? styles$b.current : ''}`, children: item.label })) : (jsx("button", { className: `${styles$b.item} ${styles$b.link}`, onClick: () => onNavigate?.(item.href), children: item.label }))] }, index));
2638
2922
  }) }));
2639
2923
  };
2640
2924
 
2641
- var styles$8 = {"calendar":"Calendar-module_calendar__3mIJS","loading":"Calendar-module_loading__59Z9-","loadingSpinner":"Calendar-module_loadingSpinner__7MXqV","header":"Calendar-module_header__cZHNA","navigation":"Calendar-module_navigation__PGkpY","navButton":"Calendar-module_navButton__kOe-w","title":"Calendar-module_title__oJZ7m","controls":"Calendar-module_controls__i1Z38","todayButton":"Calendar-module_todayButton__Ac9zc","viewToggle":"Calendar-module_viewToggle__Fhg2t","viewButton":"Calendar-module_viewButton__J2WY6","active":"Calendar-module_active__lIqH-","weekDays":"Calendar-module_weekDays__4J-8f","weekNumberHeader":"Calendar-module_weekNumberHeader__xhKbB","weekDay":"Calendar-module_weekDay__cg8Gr","daysGrid":"Calendar-module_daysGrid__ER0GM","weekView":"Calendar-module_weekView__bdtGs","dayCell":"Calendar-module_dayCell__TV-HR","dayNumber":"Calendar-module_dayNumber__ICH-X","today":"Calendar-module_today__eGuUU","events":"Calendar-module_events__qdbs7","event":"Calendar-module_event__Q1Zq3","eventTitle":"Calendar-module_eventTitle__XU7Wd","eventTime":"Calendar-module_eventTime__pMGEB","otherMonth":"Calendar-module_otherMonth__r6VJK","weekNumber":"Calendar-module_weekNumber__nlo50","completed":"Calendar-module_completed__B-SHI","completedIcon":"Calendar-module_completedIcon__-oDZ9","moreEvents":"Calendar-module_moreEvents__TIKaT","emptyState":"Calendar-module_emptyState__2fcj7","dayView":"Calendar-module_dayView__PCIos","dayViewHeader":"Calendar-module_dayViewHeader__Gvxx2","timeColumnHeader":"Calendar-module_timeColumnHeader__B0btR","dayColumnHeader":"Calendar-module_dayColumnHeader__Rjqwg","dayViewScrollContainer":"Calendar-module_dayViewScrollContainer__84Byq","dayViewContent":"Calendar-module_dayViewContent__VU9JI","timeColumn":"Calendar-module_timeColumn__Sce-X","dayColumn":"Calendar-module_dayColumn__-j2oT","timeSlot":"Calendar-module_timeSlot__jldHq","timeLabel":"Calendar-module_timeLabel__9xLiK","hourSlot":"Calendar-module_hourSlot__z-80Q","hourLine":"Calendar-module_hourLine__fofdD","dayEvent":"Calendar-module_dayEvent__tSPFa","dayEventTitle":"Calendar-module_dayEventTitle__er03k","dayEventTime":"Calendar-module_dayEventTime__TlkeQ","currentTimeIndicator":"Calendar-module_currentTimeIndicator__GntOZ"};
2925
+ var styles$a = {"overlay":"LiquidButton-module_overlay__-P-xm","container":"LiquidButton-module_container__f1COS","actions":"LiquidButton-module_actions__XBz7p","actionButton":"LiquidButton-module_actionButton__PlEOk","actionLabel":"LiquidButton-module_actionLabel__tIGHE","button":"LiquidButton-module_button__znjyS"};
2926
+
2927
+ /**
2928
+ * LiquidButton Component
2929
+ *
2930
+ * A floating action button that expands to reveal quick action options.
2931
+ * The main button rotates 45 degrees when expanded (Plus becomes X).
2932
+ * Actions fan out above the button with staggered animations.
2933
+ *
2934
+ * @example
2935
+ * <LiquidButton
2936
+ * actions={[
2937
+ * { key: 'add', label: 'Add Item', icon: Plus, color: '#2196F3', onClick: () => {} },
2938
+ * { key: 'edit', label: 'Edit', icon: Edit, color: '#FF9800', onClick: () => {} },
2939
+ * ]}
2940
+ * />
2941
+ */
2942
+ const LiquidButton = ({ actions, icon: Icon = Plus, className = '', }) => {
2943
+ const [expanded, setExpanded] = useState(false);
2944
+ const handleToggle = useCallback(() => {
2945
+ setExpanded((prev) => !prev);
2946
+ }, []);
2947
+ const handleAction = useCallback((action) => {
2948
+ setExpanded(false);
2949
+ action.onClick();
2950
+ }, []);
2951
+ return (jsxs(Fragment, { children: [jsx(AnimatePresence, { children: expanded && (jsx(motion.div, { className: styles$a.overlay, initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, onClick: handleToggle })) }), jsxs("div", { className: `${styles$a.container} ${className}`, children: [jsx(AnimatePresence, { children: expanded && (jsx("div", { className: styles$a.actions, children: actions.map((action, index) => (jsxs(motion.button, { type: "button", className: styles$a.actionButton, initial: { opacity: 0, scale: 0.8 }, animate: { opacity: 1, scale: 1 }, exit: { opacity: 0, scale: 0.8 }, transition: {
2952
+ duration: 0.15,
2953
+ delay: (actions.length - 1 - index) * 0.05,
2954
+ }, onClick: () => handleAction(action), children: [jsx(action.icon, { size: 18, color: action.color }), jsx("span", { className: styles$a.actionLabel, children: action.label })] }, action.key))) })) }), jsx(motion.button, { type: "button", className: styles$a.button, onClick: handleToggle, animate: { rotate: expanded ? 45 : 0 }, transition: { duration: 0.2 }, "aria-label": expanded ? 'Close actions' : 'Open actions', children: jsx(Icon, { size: 24, strokeWidth: 2.5 }) })] })] }));
2955
+ };
2956
+
2957
+ var styles$9 = {"calendar":"Calendar-module_calendar__3mIJS","loading":"Calendar-module_loading__59Z9-","loadingSpinner":"Calendar-module_loadingSpinner__7MXqV","header":"Calendar-module_header__cZHNA","navigation":"Calendar-module_navigation__PGkpY","navButton":"Calendar-module_navButton__kOe-w","title":"Calendar-module_title__oJZ7m","controls":"Calendar-module_controls__i1Z38","todayButton":"Calendar-module_todayButton__Ac9zc","viewToggle":"Calendar-module_viewToggle__Fhg2t","viewButton":"Calendar-module_viewButton__J2WY6","active":"Calendar-module_active__lIqH-","weekDays":"Calendar-module_weekDays__4J-8f","weekNumberHeader":"Calendar-module_weekNumberHeader__xhKbB","weekDay":"Calendar-module_weekDay__cg8Gr","daysGrid":"Calendar-module_daysGrid__ER0GM","weekView":"Calendar-module_weekView__bdtGs","dayCell":"Calendar-module_dayCell__TV-HR","dayNumber":"Calendar-module_dayNumber__ICH-X","today":"Calendar-module_today__eGuUU","events":"Calendar-module_events__qdbs7","event":"Calendar-module_event__Q1Zq3","eventTitle":"Calendar-module_eventTitle__XU7Wd","eventTime":"Calendar-module_eventTime__pMGEB","otherMonth":"Calendar-module_otherMonth__r6VJK","weekNumber":"Calendar-module_weekNumber__nlo50","completed":"Calendar-module_completed__B-SHI","completedIcon":"Calendar-module_completedIcon__-oDZ9","moreEvents":"Calendar-module_moreEvents__TIKaT","emptyState":"Calendar-module_emptyState__2fcj7","dayView":"Calendar-module_dayView__PCIos","dayViewHeader":"Calendar-module_dayViewHeader__Gvxx2","timeColumnHeader":"Calendar-module_timeColumnHeader__B0btR","dayColumnHeader":"Calendar-module_dayColumnHeader__Rjqwg","dayViewScrollContainer":"Calendar-module_dayViewScrollContainer__84Byq","dayViewContent":"Calendar-module_dayViewContent__VU9JI","timeColumn":"Calendar-module_timeColumn__Sce-X","dayColumn":"Calendar-module_dayColumn__-j2oT","timeSlot":"Calendar-module_timeSlot__jldHq","timeLabel":"Calendar-module_timeLabel__9xLiK","hourSlot":"Calendar-module_hourSlot__z-80Q","hourLine":"Calendar-module_hourLine__fofdD","dayEvent":"Calendar-module_dayEvent__tSPFa","dayEventTitle":"Calendar-module_dayEventTitle__er03k","dayEventTime":"Calendar-module_dayEventTime__TlkeQ","currentTimeIndicator":"Calendar-module_currentTimeIndicator__GntOZ"};
2642
2958
 
2643
2959
  /**
2644
2960
  * Calendar component - A flexible, reusable calendar for displaying events
@@ -2886,11 +3202,11 @@ function Calendar({ events, onEventClick, onDateClick, onEventClickByView, onDat
2886
3202
  return Math.floor(diff / oneWeek) + 1;
2887
3203
  };
2888
3204
  if (loading) {
2889
- return (jsx("div", { className: `${styles$8.calendar} ${styles$8.loading} ${className}`, style: style, children: jsx("div", { className: styles$8.loadingSpinner, children: "Loading..." }) }));
3205
+ return (jsx("div", { className: `${styles$9.calendar} ${styles$9.loading} ${className}`, style: style, children: jsx("div", { className: styles$9.loadingSpinner, children: "Loading..." }) }));
2890
3206
  }
2891
- return (jsxs("div", { className: `${styles$8.calendar} ${className}`, style: style, children: [!hideHeader && (jsxs("div", { className: styles$8.header, children: [jsxs("div", { className: styles$8.navigation, children: [jsx("button", { onClick: handlePrevious, className: styles$8.navButton, "aria-label": "Previous", children: jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", children: jsx("polyline", { points: "15,18 9,12 15,6" }) }) }), jsx("h3", { className: styles$8.title, children: calendarData.displayTitle }), jsx("button", { onClick: handleNext, className: styles$8.navButton, "aria-label": "Next", children: jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", children: jsx("polyline", { points: "9,6 15,12 9,18" }) }) })] }), jsxs("div", { className: styles$8.controls, children: [jsx("button", { onClick: handleToday, className: styles$8.todayButton, children: "Today" }), jsxs("div", { className: styles$8.viewToggle, children: [jsx("button", { className: `${styles$8.viewButton} ${currentViewMode === 'month' ? styles$8.active : ''}`, onClick: () => setCurrentViewMode('month'), children: "Month" }), jsx("button", { className: `${styles$8.viewButton} ${currentViewMode === 'week' ? styles$8.active : ''}`, onClick: () => setCurrentViewMode('week'), children: "Week" }), jsx("button", { className: `${styles$8.viewButton} ${currentViewMode === 'day' ? styles$8.active : ''}`, onClick: () => setCurrentViewMode('day'), children: "Day" })] })] })] })), currentViewMode !== 'day' && (jsxs("div", { className: styles$8.weekDays, children: [showWeekNumbers && jsx("div", { className: styles$8.weekNumberHeader, children: "Week" }), finalDayLabels.map((day) => (jsx("div", { className: styles$8.weekDay, children: day }, day)))] })), currentViewMode === 'day' ? (
3207
+ return (jsxs("div", { className: `${styles$9.calendar} ${className}`, style: style, children: [!hideHeader && (jsxs("div", { className: styles$9.header, children: [jsxs("div", { className: styles$9.navigation, children: [jsx("button", { onClick: handlePrevious, className: styles$9.navButton, "aria-label": "Previous", children: jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", children: jsx("polyline", { points: "15,18 9,12 15,6" }) }) }), jsx("h3", { className: styles$9.title, children: calendarData.displayTitle }), jsx("button", { onClick: handleNext, className: styles$9.navButton, "aria-label": "Next", children: jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", children: jsx("polyline", { points: "9,6 15,12 9,18" }) }) })] }), jsxs("div", { className: styles$9.controls, children: [jsx("button", { onClick: handleToday, className: styles$9.todayButton, children: "Today" }), jsxs("div", { className: styles$9.viewToggle, children: [jsx("button", { className: `${styles$9.viewButton} ${currentViewMode === 'month' ? styles$9.active : ''}`, onClick: () => setCurrentViewMode('month'), children: "Month" }), jsx("button", { className: `${styles$9.viewButton} ${currentViewMode === 'week' ? styles$9.active : ''}`, onClick: () => setCurrentViewMode('week'), children: "Week" }), jsx("button", { className: `${styles$9.viewButton} ${currentViewMode === 'day' ? styles$9.active : ''}`, onClick: () => setCurrentViewMode('day'), children: "Day" })] })] })] })), currentViewMode !== 'day' && (jsxs("div", { className: styles$9.weekDays, children: [showWeekNumbers && jsx("div", { className: styles$9.weekNumberHeader, children: "Week" }), finalDayLabels.map((day) => (jsx("div", { className: styles$9.weekDay, children: day }, day)))] })), currentViewMode === 'day' ? (
2892
3208
  // Day view layout
2893
- jsxs("div", { className: styles$8.dayView, children: [jsxs("div", { className: styles$8.dayViewHeader, children: [jsx("div", { className: styles$8.timeColumnHeader }), jsx("div", { className: styles$8.dayColumnHeader, children: currentDate.toLocaleDateString(locale, { weekday: 'short', day: 'numeric' }) })] }), jsx("div", { className: styles$8.dayViewScrollContainer, ref: dayViewScrollRef, children: jsxs("div", { className: styles$8.dayViewContent, children: [(() => {
3209
+ jsxs("div", { className: styles$9.dayView, children: [jsxs("div", { className: styles$9.dayViewHeader, children: [jsx("div", { className: styles$9.timeColumnHeader }), jsx("div", { className: styles$9.dayColumnHeader, children: currentDate.toLocaleDateString(locale, { weekday: 'short', day: 'numeric' }) })] }), jsx("div", { className: styles$9.dayViewScrollContainer, ref: dayViewScrollRef, children: jsxs("div", { className: styles$9.dayViewContent, children: [(() => {
2894
3210
  const now = new Date();
2895
3211
  const currentHour = now.getHours();
2896
3212
  const currentMinute = now.getMinutes();
@@ -2898,21 +3214,21 @@ function Calendar({ events, onEventClick, onDateClick, onEventClickByView, onDat
2898
3214
  const topPosition = (minutesSinceMidnight / 1440) * (24 * 60); // 24 hours * 60px per hour
2899
3215
  // Only show if viewing today
2900
3216
  const isToday = currentDate.toDateString() === now.toDateString();
2901
- return isToday ? (jsx("div", { className: styles$8.currentTimeIndicator, style: { top: `${topPosition}px` } })) : null;
2902
- })(), jsx("div", { className: styles$8.timeColumn, children: Array.from({ length: 24 }, (_, hour) => (jsx("div", { className: styles$8.timeSlot, children: jsxs("span", { className: styles$8.timeLabel, children: [hour.toString().padStart(2, '0'), ":00"] }) }, hour))) }), jsx("div", { className: styles$8.dayColumn, children: Array.from({ length: 24 }, (_, hour) => {
3217
+ return isToday ? (jsx("div", { className: styles$9.currentTimeIndicator, style: { top: `${topPosition}px` } })) : null;
3218
+ })(), jsx("div", { className: styles$9.timeColumn, children: Array.from({ length: 24 }, (_, hour) => (jsx("div", { className: styles$9.timeSlot, children: jsxs("span", { className: styles$9.timeLabel, children: [hour.toString().padStart(2, '0'), ":00"] }) }, hour))) }), jsx("div", { className: styles$9.dayColumn, children: Array.from({ length: 24 }, (_, hour) => {
2903
3219
  const hourEvents = getDayEvents(currentDate).filter(event => {
2904
3220
  if (!event.time)
2905
3221
  return false;
2906
3222
  const eventHour = parseInt(event.time.split(':')[0]);
2907
3223
  return eventHour === hour;
2908
3224
  });
2909
- return (jsxs("div", { className: styles$8.hourSlot, onClick: (e) => {
3225
+ return (jsxs("div", { className: styles$9.hourSlot, onClick: (e) => {
2910
3226
  // Only trigger if clicking on the slot itself, not on an event
2911
3227
  if (e.target === e.currentTarget ||
2912
- e.target.classList.contains(styles$8.hourLine)) {
3228
+ e.target.classList.contains(styles$9.hourLine)) {
2913
3229
  handleTimeSlotClick(hour);
2914
3230
  }
2915
- }, style: { cursor: 'pointer' }, children: [jsx("div", { className: styles$8.hourLine }), hourEvents.map((event, eventIndex) => (jsxs(motion.div, { className: `${styles$8.dayEvent} ${event.status === 'completed' ? styles$8.completed : ''}`, style: {
3231
+ }, style: { cursor: 'pointer' }, children: [jsx("div", { className: styles$9.hourLine }), hourEvents.map((event, eventIndex) => (jsxs(motion.div, { className: `${styles$9.dayEvent} ${event.status === 'completed' ? styles$9.completed : ''}`, style: {
2916
3232
  backgroundColor: getEventColor(event),
2917
3233
  color: getEventTextColor(event),
2918
3234
  opacity: event.status === 'completed' ? 0.7 : 1
@@ -2930,17 +3246,17 @@ function Calendar({ events, onEventClick, onDateClick, onEventClickByView, onDat
2930
3246
  }, whileTap: {
2931
3247
  scale: 0.98,
2932
3248
  transition: { duration: 0.1 }
2933
- }, children: [iconRenderer && iconRenderer(event), jsxs("span", { className: styles$8.dayEventTitle, children: [jsx("span", { className: styles$8.dayEventTime, children: event.time }), event.title] }), event.status === 'completed' && (jsx("svg", { className: styles$8.completedIcon, width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", children: jsx("polyline", { points: "20,6 9,17 4,12" }) }))] }, event.id)))] }, hour));
2934
- }) })] }) })] })) : (jsx("div", { className: `${styles$8.daysGrid} ${currentViewMode === 'week' ? styles$8.weekView : ''}`, children: calendarData.days.map((day, index) => {
3249
+ }, children: [iconRenderer && iconRenderer(event), jsxs("span", { className: styles$9.dayEventTitle, children: [jsx("span", { className: styles$9.dayEventTime, children: event.time }), event.title] }), event.status === 'completed' && (jsx("svg", { className: styles$9.completedIcon, width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", children: jsx("polyline", { points: "20,6 9,17 4,12" }) }))] }, event.id)))] }, hour));
3250
+ }) })] }) })] })) : (jsx("div", { className: `${styles$9.daysGrid} ${currentViewMode === 'week' ? styles$9.weekView : ''}`, children: calendarData.days.map((day, index) => {
2935
3251
  const dayEvents = getDayEvents(day);
2936
3252
  const dayIsToday = isToday(day);
2937
3253
  const isInCurrentMonth = currentViewMode === 'week' || isCurrentMonth(day);
2938
3254
  const isWeekStart = showWeekNumbers && (index % 7 === 0);
2939
- return (jsxs(motion.div, { className: `${styles$8.dayCell} ${dayIsToday ? styles$8.today : ''} ${!isInCurrentMonth ? styles$8.otherMonth : ''}`, initial: { opacity: 0, y: 20 }, animate: { opacity: 1, y: 0 }, transition: {
3255
+ return (jsxs(motion.div, { className: `${styles$9.dayCell} ${dayIsToday ? styles$9.today : ''} ${!isInCurrentMonth ? styles$9.otherMonth : ''}`, initial: { opacity: 0, y: 20 }, animate: { opacity: 1, y: 0 }, transition: {
2940
3256
  duration: 0.3,
2941
3257
  delay: index * 0.02,
2942
3258
  ease: "easeOut"
2943
- }, onClick: () => handleDateClick(day), children: [isWeekStart && (jsx("div", { className: styles$8.weekNumber, children: getWeekNumber(day) })), jsx("div", { className: styles$8.dayNumber, children: day.getDate() }), dayEvents.length > 0 && (jsxs("div", { className: styles$8.events, children: [dayEvents.slice(0, maxEventsPerDay).map((event, eventIndex) => (jsxs(motion.div, { className: `${styles$8.event} ${event.status === 'completed' ? styles$8.completed : ''}`, style: {
3259
+ }, onClick: () => handleDateClick(day), children: [isWeekStart && (jsx("div", { className: styles$9.weekNumber, children: getWeekNumber(day) })), jsx("div", { className: styles$9.dayNumber, children: day.getDate() }), dayEvents.length > 0 && (jsxs("div", { className: styles$9.events, children: [dayEvents.slice(0, maxEventsPerDay).map((event, eventIndex) => (jsxs(motion.div, { className: `${styles$9.event} ${event.status === 'completed' ? styles$9.completed : ''}`, style: {
2944
3260
  backgroundColor: getEventColor(event),
2945
3261
  color: getEventTextColor(event),
2946
3262
  opacity: event.status === 'completed' ? 0.7 : 1
@@ -2958,7 +3274,7 @@ function Calendar({ events, onEventClick, onDateClick, onEventClickByView, onDat
2958
3274
  }, whileTap: {
2959
3275
  scale: 0.98,
2960
3276
  transition: { duration: 0.1 }
2961
- }, children: [iconRenderer && iconRenderer(event), jsxs("span", { className: styles$8.eventTitle, children: [event.time && (jsx("span", { className: styles$8.eventTime, children: event.time })), event.title] }), event.status === 'completed' && (jsx("svg", { className: styles$8.completedIcon, width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", children: jsx("polyline", { points: "20,6 9,17 4,12" }) }))] }, event.id))), dayEvents.length > maxEventsPerDay && (jsxs("div", { className: styles$8.moreEvents, children: ["+", dayEvents.length - maxEventsPerDay, " more"] }))] })), dayEvents.length === 0 && emptyState && (jsx("div", { className: styles$8.emptyState, children: emptyState }))] }, `${day.getFullYear()}-${day.getMonth()}-${day.getDate()}`));
3277
+ }, children: [iconRenderer && iconRenderer(event), jsxs("span", { className: styles$9.eventTitle, children: [event.time && (jsx("span", { className: styles$9.eventTime, children: event.time })), event.title] }), event.status === 'completed' && (jsx("svg", { className: styles$9.completedIcon, width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", children: jsx("polyline", { points: "20,6 9,17 4,12" }) }))] }, event.id))), dayEvents.length > maxEventsPerDay && (jsxs("div", { className: styles$9.moreEvents, children: ["+", dayEvents.length - maxEventsPerDay, " more"] }))] })), dayEvents.length === 0 && emptyState && (jsx("div", { className: styles$9.emptyState, children: emptyState }))] }, `${day.getFullYear()}-${day.getMonth()}-${day.getDate()}`));
2962
3278
  }) }))] }));
2963
3279
  }
2964
3280
 
@@ -3028,10 +3344,10 @@ const Navbar = ({ items, logo, onItemClick, variant = 'sidebar', isMobile = fals
3028
3344
  if (variant === 'top') {
3029
3345
  return (jsx(motion.nav, { className: `${styles.navbar} ${styles.navbarTop} ${className}`, initial: { y: -100 }, animate: { y: 0 }, transition: { type: "spring", stiffness: 300, damping: 30 }, children: navContent }));
3030
3346
  }
3031
- return (jsxs(Fragment, { children: [(isMobile || window.innerWidth <= 768) && (jsx(motion.button, { className: styles.mobileMenuButton, onClick: toggleMobileMenu, "aria-label": "Toggle navigation menu", whileTap: { scale: 0.9 }, children: jsx(AnimatePresence, { mode: "wait", children: isMobileMenuOpen ? (jsx(motion.div, { initial: { rotate: -90, opacity: 0 }, animate: { rotate: 0, opacity: 1 }, exit: { rotate: 90, opacity: 0 }, children: jsx(FiX, {}) }, "close")) : (jsx(motion.div, { initial: { rotate: 90, opacity: 0 }, animate: { rotate: 0, opacity: 1 }, exit: { rotate: -90, opacity: 0 }, children: jsx(FiMenu, {}) }, "menu")) }) })), jsx(AnimatePresence, { children: isMobileMenuOpen && (jsx(motion.div, { className: styles.mobileBackdrop, initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, onClick: () => setIsMobileMenuOpen(false) })) }), jsx(motion.nav, { className: `${styles.navbar} ${styles[`navbar${variant.charAt(0).toUpperCase() + variant.slice(1)}`]} ${isMobileMenuOpen ? styles.mobileMenuOpen : ''} ${className}`, initial: variant === 'sidebar' ? { x: -300 } : { opacity: 0 }, animate: variant === 'sidebar' ? { x: isMobileMenuOpen || !isMobile ? 0 : -300 } : { opacity: 1 }, transition: { type: "spring", stiffness: 300, damping: 30 }, children: navContent })] }));
3347
+ return (jsxs(Fragment, { children: [(isMobile || window.innerWidth <= 768) && (jsx(motion.button, { className: styles.mobileMenuButton, onClick: toggleMobileMenu, "aria-label": "Toggle navigation menu", whileTap: { scale: 0.9 }, children: jsx(AnimatePresence, { mode: "wait", children: isMobileMenuOpen ? (jsx(motion.div, { initial: { rotate: -90, opacity: 0 }, animate: { rotate: 0, opacity: 1 }, exit: { rotate: 90, opacity: 0 }, children: jsx(X, {}) }, "close")) : (jsx(motion.div, { initial: { rotate: 90, opacity: 0 }, animate: { rotate: 0, opacity: 1 }, exit: { rotate: -90, opacity: 0 }, children: jsx(Menu, {}) }, "menu")) }) })), jsx(AnimatePresence, { children: isMobileMenuOpen && (jsx(motion.div, { className: styles.mobileBackdrop, initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, onClick: () => setIsMobileMenuOpen(false) })) }), jsx(motion.nav, { className: `${styles.navbar} ${styles[`navbar${variant.charAt(0).toUpperCase() + variant.slice(1)}`]} ${isMobileMenuOpen ? styles.mobileMenuOpen : ''} ${className}`, initial: variant === 'sidebar' ? { x: -300 } : { opacity: 0 }, animate: variant === 'sidebar' ? { x: isMobileMenuOpen || !isMobile ? 0 : -300 } : { opacity: 1 }, transition: { type: "spring", stiffness: 300, damping: 30 }, children: navContent })] }));
3032
3348
  };
3033
3349
 
3034
- var styles$7 = {"container":"MoodChart-module_container__MB1Vr","chart":"MoodChart-module_chart__4-spu","gridLine":"MoodChart-module_gridLine__YJpZ8","line":"MoodChart-module_line__LfeUX","xAxis":"MoodChart-module_xAxis__SeIWG","yAxis":"MoodChart-module_yAxis__sRjjE","dataPoint":"MoodChart-module_dataPoint__112P1","tooltip":"MoodChart-module_tooltip__vW59y","tooltipHeader":"MoodChart-module_tooltipHeader__U7yvN","tooltipDate":"MoodChart-module_tooltipDate__6Jjeu","tooltipRating":"MoodChart-module_tooltipRating__5A2Yx","ratingValue":"MoodChart-module_ratingValue__7Gpfx","ratingMax":"MoodChart-module_ratingMax__10WcJ","tooltipTags":"MoodChart-module_tooltipTags__FUQrU","tag":"MoodChart-module_tag__QhCh5","tooltipComment":"MoodChart-module_tooltipComment__6driJ"};
3350
+ var styles$8 = {"container":"MoodChart-module_container__MB1Vr","chart":"MoodChart-module_chart__4-spu","gridLine":"MoodChart-module_gridLine__YJpZ8","line":"MoodChart-module_line__LfeUX","xAxis":"MoodChart-module_xAxis__SeIWG","yAxis":"MoodChart-module_yAxis__sRjjE","dataPoint":"MoodChart-module_dataPoint__112P1","tooltip":"MoodChart-module_tooltip__vW59y","tooltipHeader":"MoodChart-module_tooltipHeader__U7yvN","tooltipDate":"MoodChart-module_tooltipDate__6Jjeu","tooltipRating":"MoodChart-module_tooltipRating__5A2Yx","ratingValue":"MoodChart-module_ratingValue__7Gpfx","ratingMax":"MoodChart-module_ratingMax__10WcJ","tooltipTags":"MoodChart-module_tooltipTags__FUQrU","tag":"MoodChart-module_tag__QhCh5","tooltipComment":"MoodChart-module_tooltipComment__6driJ"};
3035
3351
 
3036
3352
  const MoodChart = ({ moodData, width = 800, height = 400 }) => {
3037
3353
  const svgRef = useRef(null);
@@ -3040,7 +3356,7 @@ const MoodChart = ({ moodData, width = 800, height = 400 }) => {
3040
3356
  const [selectedMood, setSelectedMood] = useState(null);
3041
3357
  const [tooltipPosition, setTooltipPosition] = useState({ x: 0, y: 0 });
3042
3358
  const [isHoveringTooltip, setIsHoveringTooltip] = useState(false);
3043
- const margin = { top: 20, right: 20, bottom: 50, left: 40 };
3359
+ const margin = useMemo(() => ({ top: 20, right: 20, bottom: 50, left: 40 }), []);
3044
3360
  const chartWidth = width - margin.left - margin.right;
3045
3361
  const chartHeight = height - margin.top - margin.bottom;
3046
3362
  const processedData = useMemo(() => {
@@ -3089,27 +3405,27 @@ const MoodChart = ({ moodData, width = 800, height = 400 }) => {
3089
3405
  g.selectAll('.grid-line-y')
3090
3406
  .data(yScale.ticks(5))
3091
3407
  .enter().append('line')
3092
- .attr('class', styles$7.gridLine)
3408
+ .attr('class', styles$8.gridLine)
3093
3409
  .attr('x1', 0)
3094
3410
  .attr('y1', d => yScale(d))
3095
3411
  .attr('x2', chartWidth)
3096
3412
  .attr('y2', d => yScale(d));
3097
3413
  g.append('path')
3098
3414
  .datum(processedData)
3099
- .attr('class', styles$7.line)
3415
+ .attr('class', styles$8.line)
3100
3416
  .attr('d', line);
3101
3417
  g.append('g')
3102
- .attr('class', styles$7.xAxis)
3418
+ .attr('class', styles$8.xAxis)
3103
3419
  .attr('transform', `translate(0,${chartHeight})`)
3104
3420
  .call(d3.axisBottom(xScale)
3105
3421
  .tickFormat(d => d3.timeFormat('%m/%d')(d)));
3106
3422
  g.append('g')
3107
- .attr('class', styles$7.yAxis)
3423
+ .attr('class', styles$8.yAxis)
3108
3424
  .call(d3.axisLeft(yScale));
3109
3425
  g.selectAll('.mood-circle')
3110
3426
  .data(processedData)
3111
3427
  .enter().append('circle')
3112
- .attr('class', styles$7.dataPoint)
3428
+ .attr('class', styles$8.dataPoint)
3113
3429
  .attr('cx', d => xScale(d.date))
3114
3430
  .attr('cy', d => yScale(d.rating))
3115
3431
  .attr('r', 5)
@@ -3163,7 +3479,7 @@ const MoodChart = ({ moodData, width = 800, height = 400 }) => {
3163
3479
  setSelectedMood(null);
3164
3480
  };
3165
3481
  }, []);
3166
- return (jsxs("div", { className: styles$7.container, ref: containerRef, children: [jsx("svg", { ref: svgRef, width: width, height: height, className: styles$7.chart }), selectedMood && (jsxs("div", { ref: tooltipRef, className: styles$7.tooltip, style: {
3482
+ return (jsxs("div", { className: styles$8.container, ref: containerRef, children: [jsx("svg", { ref: svgRef, width: width, height: height, className: styles$8.chart }), selectedMood && (jsxs("div", { ref: tooltipRef, className: styles$8.tooltip, style: {
3167
3483
  position: 'absolute',
3168
3484
  pointerEvents: 'auto',
3169
3485
  left: tooltipPosition.x,
@@ -3172,10 +3488,10 @@ const MoodChart = ({ moodData, width = 800, height = 400 }) => {
3172
3488
  }, onMouseEnter: () => setIsHoveringTooltip(true), onMouseLeave: () => {
3173
3489
  setIsHoveringTooltip(false);
3174
3490
  setSelectedMood(null);
3175
- }, children: [jsxs("div", { className: styles$7.tooltipHeader, children: [jsx("div", { className: styles$7.tooltipDate, children: selectedMood.date.toLocaleDateString() }), jsxs("div", { className: styles$7.tooltipRating, children: [jsx("span", { className: styles$7.ratingValue, children: selectedMood.rating }), jsx("span", { className: styles$7.ratingMax, children: "/10" })] })] }), selectedMood.tags.length > 0 && (jsx("div", { className: styles$7.tooltipTags, children: selectedMood.tags.map((tag, index) => (jsx("span", { className: styles$7.tag, children: tag }, index))) })), selectedMood.comment && (jsx("div", { className: styles$7.tooltipComment, children: selectedMood.comment }))] }))] }));
3491
+ }, children: [jsxs("div", { className: styles$8.tooltipHeader, children: [jsx("div", { className: styles$8.tooltipDate, children: selectedMood.date.toLocaleDateString() }), jsxs("div", { className: styles$8.tooltipRating, children: [jsx("span", { className: styles$8.ratingValue, children: selectedMood.rating }), jsx("span", { className: styles$8.ratingMax, children: "/10" })] })] }), selectedMood.tags.length > 0 && (jsx("div", { className: styles$8.tooltipTags, children: selectedMood.tags.map((tag, index) => (jsx("span", { className: styles$8.tag, children: tag }, index))) })), selectedMood.comment && (jsx("div", { className: styles$8.tooltipComment, children: selectedMood.comment }))] }))] }));
3176
3492
  };
3177
3493
 
3178
- var styles$6 = {"container":"QuantifiableHabitsChart-module_container__X5SBp","controls":"QuantifiableHabitsChart-module_controls__O-ObQ","viewToggle":"QuantifiableHabitsChart-module_viewToggle__24hKA","viewButton":"QuantifiableHabitsChart-module_viewButton__WFU6j","active":"QuantifiableHabitsChart-module_active__Pjqy9","viewIcon":"QuantifiableHabitsChart-module_viewIcon__b2mfk","viewLabel":"QuantifiableHabitsChart-module_viewLabel__9MjCU","aggregationToggle":"QuantifiableHabitsChart-module_aggregationToggle__WnxwB","aggregationButton":"QuantifiableHabitsChart-module_aggregationButton__sGCxX","aggregationIcon":"QuantifiableHabitsChart-module_aggregationIcon__HIaEf","aggregationLabel":"QuantifiableHabitsChart-module_aggregationLabel__Yc-S-","legend":"QuantifiableHabitsChart-module_legend__3Ki7c","legendItem":"QuantifiableHabitsChart-module_legendItem__Zl7fz","inactive":"QuantifiableHabitsChart-module_inactive__TzZC-","legendColor":"QuantifiableHabitsChart-module_legendColor__zbPoV","legendEmoji":"QuantifiableHabitsChart-module_legendEmoji__HG9CZ","legendLabel":"QuantifiableHabitsChart-module_legendLabel__H3oFL","chart":"QuantifiableHabitsChart-module_chart__FMeA-","gridLine":"QuantifiableHabitsChart-module_gridLine__CTNIq","line":"QuantifiableHabitsChart-module_line__CpYip","xAxis":"QuantifiableHabitsChart-module_xAxis__lbgBG","yAxis":"QuantifiableHabitsChart-module_yAxis__Y6WeV","dataPoint":"QuantifiableHabitsChart-module_dataPoint__s8UMX","tooltip":"QuantifiableHabitsChart-module_tooltip__Fay8N","visible":"QuantifiableHabitsChart-module_visible__-KSJq","tooltipHeader":"QuantifiableHabitsChart-module_tooltipHeader__7Q2up","tooltipEmoji":"QuantifiableHabitsChart-module_tooltipEmoji__atV3T","tooltipDot":"QuantifiableHabitsChart-module_tooltipDot__YbdFh","tooltipInfo":"QuantifiableHabitsChart-module_tooltipInfo__XC7WF","tooltipDate":"QuantifiableHabitsChart-module_tooltipDate__6V6Xi","tooltipValue":"QuantifiableHabitsChart-module_tooltipValue__ldASB"};
3494
+ var styles$7 = {"container":"QuantifiableHabitsChart-module_container__X5SBp","controls":"QuantifiableHabitsChart-module_controls__O-ObQ","viewToggle":"QuantifiableHabitsChart-module_viewToggle__24hKA","viewButton":"QuantifiableHabitsChart-module_viewButton__WFU6j","active":"QuantifiableHabitsChart-module_active__Pjqy9","viewIcon":"QuantifiableHabitsChart-module_viewIcon__b2mfk","viewLabel":"QuantifiableHabitsChart-module_viewLabel__9MjCU","aggregationToggle":"QuantifiableHabitsChart-module_aggregationToggle__WnxwB","aggregationButton":"QuantifiableHabitsChart-module_aggregationButton__sGCxX","aggregationIcon":"QuantifiableHabitsChart-module_aggregationIcon__HIaEf","aggregationLabel":"QuantifiableHabitsChart-module_aggregationLabel__Yc-S-","legend":"QuantifiableHabitsChart-module_legend__3Ki7c","compactLegend":"QuantifiableHabitsChart-module_compactLegend__jMpLB","legendItem":"QuantifiableHabitsChart-module_legendItem__Zl7fz","legendEmoji":"QuantifiableHabitsChart-module_legendEmoji__HG9CZ","legendLabel":"QuantifiableHabitsChart-module_legendLabel__H3oFL","inactive":"QuantifiableHabitsChart-module_inactive__TzZC-","legendColor":"QuantifiableHabitsChart-module_legendColor__zbPoV","chart":"QuantifiableHabitsChart-module_chart__FMeA-","gridLine":"QuantifiableHabitsChart-module_gridLine__CTNIq","line":"QuantifiableHabitsChart-module_line__CpYip","xAxis":"QuantifiableHabitsChart-module_xAxis__lbgBG","yAxis":"QuantifiableHabitsChart-module_yAxis__Y6WeV","dataPoint":"QuantifiableHabitsChart-module_dataPoint__s8UMX","tooltip":"QuantifiableHabitsChart-module_tooltip__Fay8N","visible":"QuantifiableHabitsChart-module_visible__-KSJq","tooltipHeader":"QuantifiableHabitsChart-module_tooltipHeader__7Q2up","tooltipEmoji":"QuantifiableHabitsChart-module_tooltipEmoji__atV3T","tooltipDot":"QuantifiableHabitsChart-module_tooltipDot__YbdFh","tooltipInfo":"QuantifiableHabitsChart-module_tooltipInfo__XC7WF","tooltipDate":"QuantifiableHabitsChart-module_tooltipDate__6V6Xi","tooltipValue":"QuantifiableHabitsChart-module_tooltipValue__ldASB"};
3179
3495
 
3180
3496
  // Default colors as fallback
3181
3497
  const DEFAULT_HABIT_COLORS = {
@@ -3188,7 +3504,7 @@ const DEFAULT_HABIT_COLORS = {
3188
3504
  'Calories': '#FF9F1C',
3189
3505
  'Study': '#C774E8'
3190
3506
  };
3191
- const QuantifiableHabitsChart = ({ data, width = 800, height = 400, defaultViewType = 'daily', periodType = 'month', habitColors: customHabitColors = {}, habitEmojis: customHabitEmojis = {}, onDataPointClick }) => {
3507
+ const QuantifiableHabitsChart = ({ data, width = 800, height = 400, defaultViewType = 'daily', periodType = 'month', habitColors: customHabitColors = {}, habitEmojis: customHabitEmojis = {}, onDataPointClick, hideControls = false, compactLegend = false }) => {
3192
3508
  const svgRef = useRef(null);
3193
3509
  const tooltipRef = useRef(null);
3194
3510
  const [viewType, setViewType] = useState(defaultViewType);
@@ -3196,7 +3512,7 @@ const QuantifiableHabitsChart = ({ data, width = 800, height = 400, defaultViewT
3196
3512
  const [hoveredHabit, setHoveredHabit] = useState(null);
3197
3513
  const [tooltipData, setTooltipData] = useState(null);
3198
3514
  const [aggregationMode, setAggregationMode] = useState('average');
3199
- const margin = { top: 20, right: 20, bottom: 50, left: 50 };
3515
+ const margin = useMemo(() => ({ top: 20, right: 20, bottom: 50, left: 50 }), []);
3200
3516
  const chartWidth = width - margin.left - margin.right;
3201
3517
  const chartHeight = height - margin.top - margin.bottom;
3202
3518
  const habits = useMemo(() => Object.keys(data).filter(key => key !== 'dates'), [data]);
@@ -3229,10 +3545,10 @@ const QuantifiableHabitsChart = ({ data, width = 800, height = 400, defaultViewT
3229
3545
  return ['daily'];
3230
3546
  }
3231
3547
  }, [periodType]);
3232
- const getColor = (habit) => {
3548
+ const getColor = useCallback((habit) => {
3233
3549
  // First check custom colors, then defaults, then generate deterministic color
3234
3550
  return customHabitColors[habit] || DEFAULT_HABIT_COLORS[habit] || `hsl(${Math.abs(habit.split('').reduce((a, b) => a + b.charCodeAt(0), 0)) % 360}, 70%, 50%)`;
3235
- };
3551
+ }, [customHabitColors]);
3236
3552
  // Aggregate data based on view type
3237
3553
  const aggregateData = useMemo(() => {
3238
3554
  if (viewType === 'daily' || !data.dates.length) {
@@ -3328,7 +3644,7 @@ const QuantifiableHabitsChart = ({ data, width = 800, height = 400, defaultViewT
3328
3644
  g.selectAll('.grid-line-y')
3329
3645
  .data(yScale.ticks(5))
3330
3646
  .enter().append('line')
3331
- .attr('class', styles$6.gridLine)
3647
+ .attr('class', styles$7.gridLine)
3332
3648
  .attr('x1', 0)
3333
3649
  .attr('y1', d => yScale(d))
3334
3650
  .attr('x2', chartWidth)
@@ -3341,7 +3657,7 @@ const QuantifiableHabitsChart = ({ data, width = 800, height = 400, defaultViewT
3341
3657
  const habitData = dates.map((date, i) => [date, aggregateData[habit][i]]).filter(d => typeof d[1] === 'number');
3342
3658
  g.append('path')
3343
3659
  .datum(habitData)
3344
- .attr('class', styles$6.line)
3660
+ .attr('class', styles$7.line)
3345
3661
  .attr('d', line)
3346
3662
  .attr('stroke', getColor(habit))
3347
3663
  .attr('opacity', hoveredHabit && hoveredHabit !== habit ? 0.3 : 1);
@@ -3388,7 +3704,7 @@ const QuantifiableHabitsChart = ({ data, width = 800, height = 400, defaultViewT
3388
3704
  g.selectAll(`.circle-${habit}`)
3389
3705
  .data(habitData)
3390
3706
  .enter().append('circle')
3391
- .attr('class', (_d, i) => `${styles$6.dataPoint} circle-${habit}-${i}`)
3707
+ .attr('class', (_d, i) => `${styles$7.dataPoint} circle-${habit}-${i}`)
3392
3708
  .attr('cx', d => xScale(d[0]))
3393
3709
  .attr('cy', d => yScale(d[1]))
3394
3710
  .attr('r', 4)
@@ -3450,7 +3766,7 @@ const QuantifiableHabitsChart = ({ data, width = 800, height = 400, defaultViewT
3450
3766
  xAxisGenerator.ticks(tickCount);
3451
3767
  }
3452
3768
  const xAxis = g.append('g')
3453
- .attr('class', styles$6.xAxis)
3769
+ .attr('class', styles$7.xAxis)
3454
3770
  .attr('transform', `translate(0,${chartHeight})`)
3455
3771
  .call(xAxisGenerator);
3456
3772
  // Rotate labels for better readability if needed
@@ -3462,9 +3778,9 @@ const QuantifiableHabitsChart = ({ data, width = 800, height = 400, defaultViewT
3462
3778
  .attr('transform', 'rotate(-45)');
3463
3779
  }
3464
3780
  g.append('g')
3465
- .attr('class', styles$6.yAxis)
3781
+ .attr('class', styles$7.yAxis)
3466
3782
  .call(d3.axisLeft(yScale));
3467
- }, [aggregateData, activeHabits, chartWidth, chartHeight, margin, hoveredHabit, customHabitColors, onDataPointClick]);
3783
+ }, [aggregateData, activeHabits, chartWidth, chartHeight, margin, hoveredHabit, onDataPointClick, getColor, height, viewType, width]);
3468
3784
  // Format date for tooltip display
3469
3785
  const formatTooltipDate = (dateStr, viewType) => {
3470
3786
  const date = new Date(dateStr);
@@ -3494,13 +3810,13 @@ const QuantifiableHabitsChart = ({ data, width = 800, height = 400, defaultViewT
3494
3810
  quarterly: { icon: '📊', label: 'Quarterly' }
3495
3811
  };
3496
3812
  const shouldShowAggregationToggle = viewType !== 'daily';
3497
- return (jsxs("div", { className: styles$6.container, children: [jsxs("div", { className: styles$6.controls, children: [jsx("div", { className: styles$6.viewToggle, children: availableViewTypes.map(type => (jsxs("button", { className: `${styles$6.viewButton} ${viewType === type ? styles$6.active : ''}`, onClick: () => setViewType(type), title: viewTypeConfig[type].label, children: [jsx("span", { className: styles$6.viewIcon, children: viewTypeConfig[type].icon }), jsx("span", { className: styles$6.viewLabel, children: viewTypeConfig[type].label })] }, type))) }), shouldShowAggregationToggle && (jsxs("div", { className: styles$6.aggregationToggle, children: [jsxs("button", { className: `${styles$6.aggregationButton} ${aggregationMode === 'average' ? styles$6.active : ''}`, onClick: () => setAggregationMode('average'), title: "Show average values for each period", children: [jsx("span", { className: styles$6.aggregationIcon, children: "\uD83D\uDCCA" }), jsx("span", { className: styles$6.aggregationLabel, children: "Average" })] }), jsxs("button", { className: `${styles$6.aggregationButton} ${aggregationMode === 'sum' ? styles$6.active : ''}`, onClick: () => setAggregationMode('sum'), title: "Show total values for each period", children: [jsx("span", { className: styles$6.aggregationIcon, children: "\u2795" }), jsx("span", { className: styles$6.aggregationLabel, children: "Sum" })] })] }))] }), jsx("div", { className: styles$6.legend, children: habits.map(habit => (jsxs("button", { className: `${styles$6.legendItem} ${!activeHabits.includes(habit) ? styles$6.inactive : ''}`, onClick: () => toggleHabit(habit), onMouseEnter: () => setHoveredHabit(habit), onMouseLeave: () => setHoveredHabit(null), children: [jsx("span", { className: styles$6.legendEmoji, children: customHabitEmojis[habit] || '📊' }), jsx("span", { className: styles$6.legendColor, style: { backgroundColor: getColor(habit) } }), jsx("span", { className: styles$6.legendLabel, children: habit })] }, habit))) }), jsx("svg", { ref: svgRef, width: width, height: height, className: styles$6.chart }), tooltipData && (jsxs("div", { ref: tooltipRef, className: `${styles$6.tooltip} ${tooltipData ? styles$6.visible : ''}`, style: {
3813
+ return (jsxs("div", { className: styles$7.container, children: [!hideControls && (jsxs("div", { className: styles$7.controls, children: [jsx("div", { className: styles$7.viewToggle, children: availableViewTypes.map(type => (jsxs("button", { className: `${styles$7.viewButton} ${viewType === type ? styles$7.active : ''}`, onClick: () => setViewType(type), title: viewTypeConfig[type].label, children: [jsx("span", { className: styles$7.viewIcon, children: viewTypeConfig[type].icon }), jsx("span", { className: styles$7.viewLabel, children: viewTypeConfig[type].label })] }, type))) }), shouldShowAggregationToggle && (jsxs("div", { className: styles$7.aggregationToggle, children: [jsxs("button", { className: `${styles$7.aggregationButton} ${aggregationMode === 'average' ? styles$7.active : ''}`, onClick: () => setAggregationMode('average'), title: "Show average values for each period", children: [jsx("span", { className: styles$7.aggregationIcon, children: "\uD83D\uDCCA" }), jsx("span", { className: styles$7.aggregationLabel, children: "Average" })] }), jsxs("button", { className: `${styles$7.aggregationButton} ${aggregationMode === 'sum' ? styles$7.active : ''}`, onClick: () => setAggregationMode('sum'), title: "Show total values for each period", children: [jsx("span", { className: styles$7.aggregationIcon, children: "\u2795" }), jsx("span", { className: styles$7.aggregationLabel, children: "Sum" })] })] }))] })), jsx("div", { className: `${styles$7.legend}${compactLegend ? ` ${styles$7.compactLegend}` : ''}`, children: habits.map(habit => (jsxs("button", { className: `${styles$7.legendItem} ${!activeHabits.includes(habit) ? styles$7.inactive : ''}`, onClick: () => toggleHabit(habit), onMouseEnter: () => setHoveredHabit(habit), onMouseLeave: () => setHoveredHabit(null), children: [jsx("span", { className: styles$7.legendEmoji, children: customHabitEmojis[habit] || '📊' }), jsx("span", { className: styles$7.legendColor, style: { backgroundColor: getColor(habit) } }), jsx("span", { className: styles$7.legendLabel, children: habit })] }, habit))) }), jsx("svg", { ref: svgRef, width: width, height: height, className: styles$7.chart }), tooltipData && (jsxs("div", { ref: tooltipRef, className: `${styles$7.tooltip} ${tooltipData ? styles$7.visible : ''}`, style: {
3498
3814
  left: `${tooltipData.x}px`,
3499
3815
  top: `${tooltipData.y - 80}px`
3500
- }, children: [jsxs("div", { className: styles$6.tooltipHeader, children: [jsx("span", { className: styles$6.tooltipEmoji, children: customHabitEmojis[tooltipData.habit] || '📊' }), jsx("span", { className: styles$6.tooltipDot, style: { backgroundColor: getColor(tooltipData.habit) } }), jsx("span", { children: tooltipData.habit })] }), jsxs("div", { className: styles$6.tooltipInfo, children: [jsx("div", { className: styles$6.tooltipDate, children: formatTooltipDate(tooltipData.date, viewType) }), jsxs("div", { className: styles$6.tooltipValue, children: [jsx("strong", { children: Math.round(tooltipData.value * 10) / 10 }), jsx("span", { style: { fontSize: '12px', fontWeight: 'normal', opacity: 0.6 }, children: "units" })] })] })] }))] }));
3816
+ }, children: [jsxs("div", { className: styles$7.tooltipHeader, children: [jsx("span", { className: styles$7.tooltipEmoji, children: customHabitEmojis[tooltipData.habit] || '📊' }), jsx("span", { className: styles$7.tooltipDot, style: { backgroundColor: getColor(tooltipData.habit) } }), jsx("span", { children: tooltipData.habit })] }), jsxs("div", { className: styles$7.tooltipInfo, children: [jsx("div", { className: styles$7.tooltipDate, children: formatTooltipDate(tooltipData.date, viewType) }), jsxs("div", { className: styles$7.tooltipValue, children: [jsx("strong", { children: Math.round(tooltipData.value * 10) / 10 }), jsx("span", { style: { fontSize: '12px', fontWeight: 'normal', opacity: 0.6 }, children: "units" })] })] })] }))] }));
3501
3817
  };
3502
3818
 
3503
- var styles$5 = {"container":"SleepChart-module_container__RjHVU","header":"SleepChart-module_header__bcoWe","title":"SleepChart-module_title__6-QII","legend":"SleepChart-module_legend__VsqQj","legendItem":"SleepChart-module_legendItem__2c1nd","sleepDot":"SleepChart-module_sleepDot__qCY6O","wakeDot":"SleepChart-module_wakeDot__-RcrT","chart":"SleepChart-module_chart__jC1nL","gridLine":"SleepChart-module_gridLine__hi715","sleepBar":"SleepChart-module_sleepBar__Hk76f","xAxis":"SleepChart-module_xAxis__xzXyM","yAxis":"SleepChart-module_yAxis__7N-LA","tooltip":"SleepChart-module_tooltip__jQBv1","visible":"SleepChart-module_visible__wy0ck","tooltipHeader":"SleepChart-module_tooltipHeader__5BdPL","tooltipEmoji":"SleepChart-module_tooltipEmoji__c5vtz","tooltipInfo":"SleepChart-module_tooltipInfo__9Yrno","tooltipRow":"SleepChart-module_tooltipRow__CuDaE","tooltipLabel":"SleepChart-module_tooltipLabel__7SNzQ","tooltipValue":"SleepChart-module_tooltipValue__FoAVy","tooltipDuration":"SleepChart-module_tooltipDuration__d2wBW"};
3819
+ var styles$6 = {"container":"SleepChart-module_container__RjHVU","header":"SleepChart-module_header__bcoWe","title":"SleepChart-module_title__6-QII","legend":"SleepChart-module_legend__VsqQj","legendItem":"SleepChart-module_legendItem__2c1nd","sleepDot":"SleepChart-module_sleepDot__qCY6O","wakeDot":"SleepChart-module_wakeDot__-RcrT","chart":"SleepChart-module_chart__jC1nL","gridLine":"SleepChart-module_gridLine__hi715","sleepBar":"SleepChart-module_sleepBar__Hk76f","xAxis":"SleepChart-module_xAxis__xzXyM","yAxis":"SleepChart-module_yAxis__7N-LA","tooltip":"SleepChart-module_tooltip__jQBv1","visible":"SleepChart-module_visible__wy0ck","tooltipHeader":"SleepChart-module_tooltipHeader__5BdPL","tooltipEmoji":"SleepChart-module_tooltipEmoji__c5vtz","tooltipInfo":"SleepChart-module_tooltipInfo__9Yrno","tooltipRow":"SleepChart-module_tooltipRow__CuDaE","tooltipLabel":"SleepChart-module_tooltipLabel__7SNzQ","tooltipValue":"SleepChart-module_tooltipValue__FoAVy","tooltipDuration":"SleepChart-module_tooltipDuration__d2wBW"};
3504
3820
 
3505
3821
  const parseTimeToDecimal = (time) => {
3506
3822
  const [hours, minutes] = time.split(':').map(Number);
@@ -3558,7 +3874,7 @@ const SleepChart = ({ sleepData, width = 800, height = 400, onDateClick }) => {
3558
3874
  g.selectAll('.grid-line-x')
3559
3875
  .data(d3.range(18, 43, 1))
3560
3876
  .enter().append('line')
3561
- .attr('class', styles$5.gridLine)
3877
+ .attr('class', styles$6.gridLine)
3562
3878
  .attr('x1', d => xScale(d))
3563
3879
  .attr('y1', 0)
3564
3880
  .attr('x2', d => xScale(d))
@@ -3591,7 +3907,7 @@ const SleepChart = ({ sleepData, width = 800, height = 400, onDateClick }) => {
3591
3907
  return;
3592
3908
  const barHeight = yScale.bandwidth();
3593
3909
  const sleepGroup = g.append('g')
3594
- .attr('class', styles$5.sleepBar)
3910
+ .attr('class', styles$6.sleepBar)
3595
3911
  .style('cursor', 'pointer')
3596
3912
  .on('click', () => onDateClick?.(dayData.date));
3597
3913
  // Handle sleep time and wake hour separately
@@ -3757,7 +4073,7 @@ const SleepChart = ({ sleepData, width = 800, height = 400, onDateClick }) => {
3757
4073
  (hour % 24) === 12 ? '12 PM' : `${(hour % 24) - 12} PM`
3758
4074
  }));
3759
4075
  const xAxis = g.append('g')
3760
- .attr('class', styles$5.xAxis)
4076
+ .attr('class', styles$6.xAxis)
3761
4077
  .attr('transform', `translate(0,${chartHeight})`)
3762
4078
  .call(d3.axisBottom(xScale)
3763
4079
  .tickValues(xAxisTicks.map(t => t.value))
@@ -3774,25 +4090,25 @@ const SleepChart = ({ sleepData, width = 800, height = 400, onDateClick }) => {
3774
4090
  });
3775
4091
  const yAxisTicks = yDomain.filter((_, i) => i % Math.ceil(yDomain.length / 10) === 0);
3776
4092
  g.append('g')
3777
- .attr('class', styles$5.yAxis)
4093
+ .attr('class', styles$6.yAxis)
3778
4094
  .call(d3.axisLeft(yScale)
3779
4095
  .tickValues(yAxisTicks)
3780
4096
  .tickFormat(d => {
3781
4097
  const date = new Date(d);
3782
4098
  return `${(date.getMonth() + 1).toString().padStart(2, '0')}/${date.getDate().toString().padStart(2, '0')}`;
3783
4099
  }));
3784
- }, [sleepData, chartWidth, chartHeight, margin, onDateClick]);
3785
- return (jsxs("div", { className: styles$5.container, children: [jsxs("div", { className: styles$5.header, children: [jsx("h3", { className: styles$5.title, children: "Sleep Pattern" }), jsxs("div", { className: styles$5.legend, children: [jsxs("div", { className: styles$5.legendItem, children: [jsx("span", { className: styles$5.sleepDot }), jsx("span", { children: "Sleep Time" })] }), jsxs("div", { className: styles$5.legendItem, children: [jsx("span", { className: styles$5.wakeDot }), jsx("span", { children: "Wake Time" })] })] })] }), jsx("svg", { ref: svgRef, width: width, height: height, className: styles$5.chart }), tooltipData && (jsxs("div", { className: `${styles$5.tooltip} ${tooltipData ? styles$5.visible : ''}`, style: {
4100
+ }, [sleepData, chartWidth, chartHeight, margin, onDateClick, height, width]);
4101
+ return (jsxs("div", { className: styles$6.container, children: [jsxs("div", { className: styles$6.header, children: [jsx("h3", { className: styles$6.title, children: "Sleep Pattern" }), jsxs("div", { className: styles$6.legend, children: [jsxs("div", { className: styles$6.legendItem, children: [jsx("span", { className: styles$6.sleepDot }), jsx("span", { children: "Sleep Time" })] }), jsxs("div", { className: styles$6.legendItem, children: [jsx("span", { className: styles$6.wakeDot }), jsx("span", { children: "Wake Time" })] })] })] }), jsx("svg", { ref: svgRef, width: width, height: height, className: styles$6.chart }), tooltipData && (jsxs("div", { className: `${styles$6.tooltip} ${tooltipData ? styles$6.visible : ''}`, style: {
3786
4102
  left: `${tooltipData.x}px`,
3787
4103
  top: `${tooltipData.y}px`
3788
- }, children: [jsxs("div", { className: styles$5.tooltipHeader, children: [jsx("span", { className: styles$5.tooltipEmoji, children: "\uD83D\uDE34" }), jsx("span", { children: new Date(tooltipData.date).toLocaleDateString('en-US', {
4104
+ }, children: [jsxs("div", { className: styles$6.tooltipHeader, children: [jsx("span", { className: styles$6.tooltipEmoji, children: "\uD83D\uDE34" }), jsx("span", { children: new Date(tooltipData.date).toLocaleDateString('en-US', {
3789
4105
  weekday: 'short',
3790
4106
  month: 'short',
3791
4107
  day: 'numeric'
3792
- }) })] }), jsxs("div", { className: styles$5.tooltipInfo, children: [tooltipData.sleepTime && (jsxs("div", { className: styles$5.tooltipRow, children: [jsxs("span", { className: styles$5.tooltipLabel, children: [jsx("span", { children: "\uD83C\uDF19" }), jsx("span", { children: "Sleep:" })] }), jsx("span", { className: styles$5.tooltipValue, children: tooltipData.sleepTime })] })), tooltipData.wakeTime && (jsxs("div", { className: styles$5.tooltipRow, children: [jsxs("span", { className: styles$5.tooltipLabel, children: [jsx("span", { children: "\u2600\uFE0F" }), jsx("span", { children: "Wake:" })] }), jsx("span", { className: styles$5.tooltipValue, children: tooltipData.wakeTime })] })), tooltipData.duration !== null && (jsxs("div", { className: styles$5.tooltipDuration, children: [jsx("span", { children: "\u23F1\uFE0F" }), jsxs("span", { children: [Math.floor(tooltipData.duration), "h ", Math.round((tooltipData.duration % 1) * 60), "m"] })] }))] })] }))] }));
4108
+ }) })] }), jsxs("div", { className: styles$6.tooltipInfo, children: [tooltipData.sleepTime && (jsxs("div", { className: styles$6.tooltipRow, children: [jsxs("span", { className: styles$6.tooltipLabel, children: [jsx("span", { children: "\uD83C\uDF19" }), jsx("span", { children: "Sleep:" })] }), jsx("span", { className: styles$6.tooltipValue, children: tooltipData.sleepTime })] })), tooltipData.wakeTime && (jsxs("div", { className: styles$6.tooltipRow, children: [jsxs("span", { className: styles$6.tooltipLabel, children: [jsx("span", { children: "\u2600\uFE0F" }), jsx("span", { children: "Wake:" })] }), jsx("span", { className: styles$6.tooltipValue, children: tooltipData.wakeTime })] })), tooltipData.duration !== null && (jsxs("div", { className: styles$6.tooltipDuration, children: [jsx("span", { children: "\u23F1\uFE0F" }), jsxs("span", { children: [Math.floor(tooltipData.duration), "h ", Math.round((tooltipData.duration % 1) * 60), "m"] })] }))] })] }))] }));
3793
4109
  };
3794
4110
 
3795
- var styles$4 = {"container":"BooleansHeatmap-module_container__IOyeU","title":"BooleansHeatmap-module_title__8DRRQ","habitEmoji":"BooleansHeatmap-module_habitEmoji__Mawv-","chart":"BooleansHeatmap-module_chart__-q0Pc","monthLabel":"BooleansHeatmap-module_monthLabel__MXbIg","dayLabel":"BooleansHeatmap-module_dayLabel__2RRtm","cell":"BooleansHeatmap-module_cell__WADVB","legend":"BooleansHeatmap-module_legend__WqGF8","legendItem":"BooleansHeatmap-module_legendItem__rDE2g","legendColor":"BooleansHeatmap-module_legendColor__Z34-d","tooltip":"BooleansHeatmap-module_tooltip__-fHl7"};
4111
+ var styles$5 = {"container":"BooleansHeatmap-module_container__IOyeU","title":"BooleansHeatmap-module_title__8DRRQ","habitEmoji":"BooleansHeatmap-module_habitEmoji__Mawv-","chart":"BooleansHeatmap-module_chart__-q0Pc","monthLabel":"BooleansHeatmap-module_monthLabel__MXbIg","dayLabel":"BooleansHeatmap-module_dayLabel__2RRtm","cell":"BooleansHeatmap-module_cell__WADVB","legend":"BooleansHeatmap-module_legend__WqGF8","legendItem":"BooleansHeatmap-module_legendItem__rDE2g","legendColor":"BooleansHeatmap-module_legendColor__Z34-d","tooltip":"BooleansHeatmap-module_tooltip__-fHl7"};
3796
4112
 
3797
4113
  const DAYS_OF_WEEK = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];
3798
4114
  const MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
@@ -3846,20 +4162,20 @@ const BooleansHeatmap = ({ data, habitName, width = 800, height = 200, habitColo
3846
4162
  g.append('text')
3847
4163
  .attr('x', weekIndex * (cellSize + cellGap))
3848
4164
  .attr('y', -10)
3849
- .attr('class', styles$4.monthLabel)
4165
+ .attr('class', styles$5.monthLabel)
3850
4166
  .text(MONTHS[month]);
3851
4167
  });
3852
4168
  DAYS_OF_WEEK.forEach((day, index) => {
3853
4169
  g.append('text')
3854
4170
  .attr('x', -10)
3855
4171
  .attr('y', index * (cellSize + cellGap) + cellSize / 2)
3856
- .attr('class', styles$4.dayLabel)
4172
+ .attr('class', styles$5.dayLabel)
3857
4173
  .attr('text-anchor', 'end')
3858
4174
  .attr('alignment-baseline', 'middle')
3859
4175
  .text(day);
3860
4176
  });
3861
4177
  const tooltip = d3.select('body').append('div')
3862
- .attr('class', styles$4.tooltip)
4178
+ .attr('class', styles$5.tooltip)
3863
4179
  .style('opacity', 0)
3864
4180
  .style('position', 'absolute');
3865
4181
  const daysToShow = weeksToShow * 7;
@@ -3878,7 +4194,7 @@ const BooleansHeatmap = ({ data, habitName, width = 800, height = 200, habitColo
3878
4194
  .attr('width', cellSize)
3879
4195
  .attr('height', cellSize)
3880
4196
  .attr('rx', 3)
3881
- .attr('class', styles$4.cell)
4197
+ .attr('class', styles$5.cell)
3882
4198
  .attr('data-date', dateString)
3883
4199
  .attr('data-value', isTrue ? 'true' : 'false')
3884
4200
  .style('fill', isTrue ? habitColor : '#4D4D4DFF');
@@ -3906,10 +4222,10 @@ const BooleansHeatmap = ({ data, habitName, width = 800, height = 200, habitColo
3906
4222
  tooltip.remove();
3907
4223
  };
3908
4224
  }, [data, habitName, width, height, startDate, endDate, weeksToShow, habitColor, habitEmoji]);
3909
- return (jsxs("div", { className: styles$4.container, children: [jsxs("h3", { className: styles$4.title, children: [jsx("span", { className: styles$4.habitEmoji, children: habitEmoji }), habitName] }), jsx("svg", { ref: svgRef, width: width, height: height, className: styles$4.chart }), jsxs("div", { className: styles$4.legend, children: [jsxs("span", { className: styles$4.legendItem, children: [jsx("span", { className: styles$4.legendColor, style: { backgroundColor: habitColor } }), "Done"] }), jsxs("span", { className: styles$4.legendItem, children: [jsx("span", { className: styles$4.legendColor, style: { backgroundColor: '#4D4D4DFF' } }), "Not done"] })] })] }));
4225
+ return (jsxs("div", { className: styles$5.container, children: [jsxs("h3", { className: styles$5.title, children: [jsx("span", { className: styles$5.habitEmoji, children: habitEmoji }), habitName] }), jsx("svg", { ref: svgRef, width: width, height: height, className: styles$5.chart }), jsxs("div", { className: styles$5.legend, children: [jsxs("span", { className: styles$5.legendItem, children: [jsx("span", { className: styles$5.legendColor, style: { backgroundColor: habitColor } }), "Done"] }), jsxs("span", { className: styles$5.legendItem, children: [jsx("span", { className: styles$5.legendColor, style: { backgroundColor: '#4D4D4DFF' } }), "Not done"] })] })] }));
3910
4226
  };
3911
4227
 
3912
- var styles$3 = {"container":"SunburstChart-module_container__w1ZYc","title":"SunburstChart-module_title__T6Ak7","chart":"SunburstChart-module_chart__BFM6E","tooltip":"SunburstChart-module_tooltip__TuTAN"};
4228
+ var styles$4 = {"container":"SunburstChart-module_container__w1ZYc","title":"SunburstChart-module_title__T6Ak7","chart":"SunburstChart-module_chart__BFM6E","tooltip":"SunburstChart-module_tooltip__TuTAN"};
3913
4229
 
3914
4230
  const COLOR_PALETTE = [
3915
4231
  '#6366f1', '#8b5cf6', '#06b6d4', '#10b981',
@@ -3936,6 +4252,15 @@ const getTextColor$1 = (backgroundColor) => {
3936
4252
  // Use a threshold of 0.5 for better contrast
3937
4253
  return luminance > 0.5 ? '#000000' : '#ffffff';
3938
4254
  };
4255
+ // Helper to create an interpolated arc generator for transitions
4256
+ const createInterpolatedArc = (currX0, currX1, currY0, currY1, radius) => {
4257
+ return d3.arc()
4258
+ .startAngle(() => currX0)
4259
+ .endAngle(() => currX1)
4260
+ .innerRadius(() => Math.min(radius, Math.sqrt(Math.max(0, currY0))))
4261
+ .outerRadius(() => Math.min(radius, Math.sqrt(Math.max(0, currY1))))
4262
+ .cornerRadius(3);
4263
+ };
3939
4264
  const SunburstChart = ({ data, width = 500, height = 500, title = 'Sunburst Chart', tagColors = {}, unit = 'items', centerLabel }) => {
3940
4265
  const svgRef = useRef(null);
3941
4266
  const colorMap = useRef(new Map()).current;
@@ -3976,6 +4301,7 @@ const SunburstChart = ({ data, width = 500, height = 500, title = 'Sunburst Char
3976
4301
  const partition = d3.partition()
3977
4302
  .size([2 * Math.PI, radius * radius]);
3978
4303
  const nodes = partition(root).descendants();
4304
+ // Store original positions for reset
3979
4305
  nodes.forEach((d) => {
3980
4306
  const node = d;
3981
4307
  node.x0Original = d.x0;
@@ -3990,7 +4316,7 @@ const SunburstChart = ({ data, width = 500, height = 500, title = 'Sunburst Char
3990
4316
  .outerRadius(d => Math.sqrt(d.y1))
3991
4317
  .cornerRadius(3);
3992
4318
  const tooltip = d3.select('body').append('div')
3993
- .attr('class', styles$3.tooltip)
4319
+ .attr('class', styles$4.tooltip)
3994
4320
  .style('opacity', 0)
3995
4321
  .style('position', 'absolute');
3996
4322
  // Function to reset to original view
@@ -4015,12 +4341,7 @@ const SunburstChart = ({ data, width = 500, height = 500, title = 'Sunburst Char
4015
4341
  node.x1 = currX1;
4016
4342
  node.y0 = currY0;
4017
4343
  node.y1 = currY1;
4018
- const interpolatedArc = d3.arc()
4019
- .startAngle(() => currX0)
4020
- .endAngle(() => currX1)
4021
- .innerRadius(() => Math.min(radius, Math.sqrt(Math.max(0, currY0))))
4022
- .outerRadius(() => Math.min(radius, Math.sqrt(Math.max(0, currY1))))
4023
- .cornerRadius(3);
4344
+ const interpolatedArc = createInterpolatedArc(currX0, currX1, currY0, currY1, radius);
4024
4345
  return interpolatedArc(node) || '';
4025
4346
  };
4026
4347
  });
@@ -4076,7 +4397,7 @@ const SunburstChart = ({ data, width = 500, height = 500, title = 'Sunburst Char
4076
4397
  }
4077
4398
  // Calculate new positions based on the original positions
4078
4399
  // ALWAYS scale to fill the full circle, no minimum size preservation
4079
- let newX0 = xScale(node.x0Original);
4400
+ const newX0 = xScale(node.x0Original);
4080
4401
  let newX1 = xScale(node.x1Original);
4081
4402
  // Ensure proper scaling even for very small segments
4082
4403
  // The clicked node's extent should always map to full circle
@@ -4121,12 +4442,7 @@ const SunburstChart = ({ data, width = 500, height = 500, title = 'Sunburst Char
4121
4442
  node.x1 = currX1;
4122
4443
  node.y0 = currY0;
4123
4444
  node.y1 = currY1;
4124
- const interpolatedArc = d3.arc()
4125
- .startAngle(() => currX0)
4126
- .endAngle(() => currX1)
4127
- .innerRadius(() => Math.min(radius, Math.sqrt(Math.max(0, currY0))))
4128
- .outerRadius(() => Math.min(radius, Math.sqrt(Math.max(0, currY1))))
4129
- .cornerRadius(3);
4445
+ const interpolatedArc = createInterpolatedArc(currX0, currX1, currY0, currY1, radius);
4130
4446
  return interpolatedArc(node) || '';
4131
4447
  };
4132
4448
  });
@@ -4152,7 +4468,7 @@ const SunburstChart = ({ data, width = 500, height = 500, title = 'Sunburst Char
4152
4468
  const paths = g.selectAll('path')
4153
4469
  .data(nodes.filter(d => d.depth > 0 && d.value && d.value > 0))
4154
4470
  .enter().append('path')
4155
- .attr('d', arc)
4471
+ .attr('d', d => arc(d) || '')
4156
4472
  .attr('fill', d => {
4157
4473
  let ancestor = d;
4158
4474
  while (ancestor.depth > 1 && ancestor.parent) {
@@ -4173,7 +4489,7 @@ const SunburstChart = ({ data, width = 500, height = 500, title = 'Sunburst Char
4173
4489
  if (focusedNodeRef.current) {
4174
4490
  return;
4175
4491
  }
4176
- const hoveredElement = this;
4492
+ const hoveredElement = event.currentTarget;
4177
4493
  // Show tooltip for all nodes
4178
4494
  tooltip.transition()
4179
4495
  .duration(200)
@@ -4419,11 +4735,11 @@ const SunburstChart = ({ data, width = 500, height = 500, title = 'Sunburst Char
4419
4735
  return () => {
4420
4736
  tooltip.remove();
4421
4737
  };
4422
- }, [data, width, height, colorMap, radius, tagColors, unit, centerLabel]);
4423
- return (jsxs("div", { className: styles$3.container, children: [jsx("h3", { className: styles$3.title, children: title }), jsx("svg", { ref: svgRef, width: width, height: height, className: styles$3.chart })] }));
4738
+ }, [data, width, height, colorMap, radius, tagColors, unit, centerLabel, getColor]);
4739
+ return (jsxs("div", { className: styles$4.container, children: [jsx("h3", { className: styles$4.title, children: title }), jsx("svg", { ref: svgRef, width: width, height: height, className: styles$4.chart })] }));
4424
4740
  };
4425
4741
 
4426
- var styles$2 = {"container":"PieChart-module_container__tXjbe","title":"PieChart-module_title__61o0R","chartContainer":"PieChart-module_chartContainer__uLmOz","chart":"PieChart-module_chart__3nqON","legend":"PieChart-module_legend__rAWgh","legendItem":"PieChart-module_legendItem__Nb031","legendColor":"PieChart-module_legendColor__fLuv9","legendLabel":"PieChart-module_legendLabel__xbjBr","legendValue":"PieChart-module_legendValue__h2WS2","tooltip":"PieChart-module_tooltip__140RU"};
4742
+ var styles$3 = {"container":"PieChart-module_container__tXjbe","title":"PieChart-module_title__61o0R","chartContainer":"PieChart-module_chartContainer__uLmOz","chart":"PieChart-module_chart__3nqON","legend":"PieChart-module_legend__rAWgh","legendItem":"PieChart-module_legendItem__Nb031","legendColor":"PieChart-module_legendColor__fLuv9","legendLabel":"PieChart-module_legendLabel__xbjBr","legendValue":"PieChart-module_legendValue__h2WS2","tooltip":"PieChart-module_tooltip__140RU"};
4427
4743
 
4428
4744
  const DEFAULT_COLORS = [
4429
4745
  '#6366f1', '#8b5cf6', '#06b6d4', '#10b981',
@@ -4463,7 +4779,7 @@ const PieChart = ({ data, width = 400, height = 400, title = 'Distribution', sho
4463
4779
  .innerRadius(radius * 0.7)
4464
4780
  .outerRadius(radius * 0.7);
4465
4781
  const tooltip = d3.select('body').append('div')
4466
- .attr('class', styles$2.tooltip)
4782
+ .attr('class', styles$3.tooltip)
4467
4783
  .style('opacity', 0)
4468
4784
  .style('position', 'absolute');
4469
4785
  const pieData = pie(data);
@@ -4487,7 +4803,7 @@ const PieChart = ({ data, width = 400, height = 400, title = 'Distribution', sho
4487
4803
  d3.select(this)
4488
4804
  .transition()
4489
4805
  .duration(200)
4490
- .attr('d', d => hoverArc(d))
4806
+ .attr('d', (d) => hoverArc(d))
4491
4807
  .style('filter', 'drop-shadow(0 4px 12px rgba(0,0,0,0.25))');
4492
4808
  tooltip.transition()
4493
4809
  .duration(200)
@@ -4501,18 +4817,21 @@ const PieChart = ({ data, width = 400, height = 400, title = 'Distribution', sho
4501
4817
  .style('left', (event.pageX + 10) + 'px')
4502
4818
  .style('top', (event.pageY - 28) + 'px');
4503
4819
  })
4504
- .on('mouseout', function (event, d) {
4820
+ .on('mouseout', function (_event, _d) {
4505
4821
  d3.select(this)
4506
4822
  .transition()
4507
4823
  .duration(200)
4508
- .attr('d', d => arc(d))
4824
+ .attr('d', (d) => arc(d))
4509
4825
  .style('filter', 'drop-shadow(0 2px 8px rgba(0,0,0,0.15))');
4510
4826
  tooltip.transition()
4511
4827
  .duration(500)
4512
4828
  .style('opacity', 0);
4513
4829
  });
4514
4830
  // Calculate average background color for center text contrast
4515
- const avgColor = data.length > 0 ? d3.interpolateRgb.gamma(2.2)(...data.map((d, i) => d.color || DEFAULT_COLORS[i % DEFAULT_COLORS.length]))(0.5) : '#ffffff';
4831
+ const colors = data.map((d, i) => d.color || DEFAULT_COLORS[i % DEFAULT_COLORS.length]);
4832
+ const avgColor = colors.length >= 2
4833
+ ? d3.interpolateRgb.gamma(2.2)(colors[0], colors[1])(0.5)
4834
+ : colors[0] || '#ffffff';
4516
4835
  const centerTextColor = getTextColor(avgColor);
4517
4836
  // Add center text for donut
4518
4837
  g.append('text')
@@ -4558,13 +4877,13 @@ const PieChart = ({ data, width = 400, height = 400, title = 'Distribution', sho
4558
4877
  return () => {
4559
4878
  tooltip.remove();
4560
4879
  };
4561
- }, [data, width, height, radius]);
4562
- return (jsxs("div", { className: styles$2.container, children: [jsx("h3", { className: styles$2.title, children: title }), jsxs("div", { className: styles$2.chartContainer, children: [jsx("svg", { ref: svgRef, width: width, height: height, className: styles$2.chart }), showLegend && (jsx("div", { className: styles$2.legend, children: data.map((item, index) => (jsxs("div", { className: styles$2.legendItem, children: [jsx("span", { className: styles$2.legendColor, style: {
4880
+ }, [data, width, height, radius, centerLabel, unit]);
4881
+ return (jsxs("div", { className: styles$3.container, children: [jsx("h3", { className: styles$3.title, children: title }), jsxs("div", { className: styles$3.chartContainer, children: [jsx("svg", { ref: svgRef, width: width, height: height, className: styles$3.chart }), showLegend && (jsx("div", { className: styles$3.legend, children: data.map((item, index) => (jsxs("div", { className: styles$3.legendItem, children: [jsx("span", { className: styles$3.legendColor, style: {
4563
4882
  backgroundColor: item.color || DEFAULT_COLORS[index % DEFAULT_COLORS.length]
4564
- } }), jsx("span", { className: styles$2.legendLabel, children: item.name }), jsx("span", { className: styles$2.legendValue, children: item.value.toLocaleString() })] }, item.name))) }))] })] }));
4883
+ } }), jsx("span", { className: styles$3.legendLabel, children: item.name }), jsx("span", { className: styles$3.legendValue, children: item.value.toLocaleString() })] }, item.name))) }))] })] }));
4565
4884
  };
4566
4885
 
4567
- var styles$1 = {"slideshow":"ImageSlideshow-module_slideshow__Ku43h","fullscreen":"ImageSlideshow-module_fullscreen__YhVju","empty":"ImageSlideshow-module_empty__XaCpW","emptyState":"ImageSlideshow-module_emptyState__caEwx","mainContainer":"ImageSlideshow-module_mainContainer__E9aZ3","slide":"ImageSlideshow-module_slide__Wt0U-","image":"ImageSlideshow-module_image__aLHJX","imageLoader":"ImageSlideshow-module_imageLoader__5oAf5","spinner":"ImageSlideshow-module_spinner__fmIFu","control":"ImageSlideshow-module_control__WF7Lz","controlPrev":"ImageSlideshow-module_controlPrev__PCSgw","controlNext":"ImageSlideshow-module_controlNext__RMVX2","controlPlay":"ImageSlideshow-module_controlPlay__183mX","topControls":"ImageSlideshow-module_topControls__AIEJT","controlAction":"ImageSlideshow-module_controlAction__NCD7t","caption":"ImageSlideshow-module_caption__9a3JW","captionTitle":"ImageSlideshow-module_captionTitle__w5Izi","captionText":"ImageSlideshow-module_captionText__FvPyQ","imageMetadata":"ImageSlideshow-module_imageMetadata__5RF2N","metadataItem":"ImageSlideshow-module_metadataItem__6MJDP","indicators":"ImageSlideshow-module_indicators__2cH2G","hasThumbnails":"ImageSlideshow-module_hasThumbnails__0B1N-","indicator":"ImageSlideshow-module_indicator__4zGqm","indicatorActive":"ImageSlideshow-module_indicatorActive__oLeK2","thumbnails":"ImageSlideshow-module_thumbnails__zwiUz","thumbnail":"ImageSlideshow-module_thumbnail__3YyIx","thumbnailActive":"ImageSlideshow-module_thumbnailActive__aADJh","thumbnailImage":"ImageSlideshow-module_thumbnailImage__Ft7Iq"};
4886
+ var styles$2 = {"slideshow":"ImageSlideshow-module_slideshow__Ku43h","fullscreen":"ImageSlideshow-module_fullscreen__YhVju","empty":"ImageSlideshow-module_empty__XaCpW","emptyState":"ImageSlideshow-module_emptyState__caEwx","mainContainer":"ImageSlideshow-module_mainContainer__E9aZ3","slide":"ImageSlideshow-module_slide__Wt0U-","image":"ImageSlideshow-module_image__aLHJX","imageLoader":"ImageSlideshow-module_imageLoader__5oAf5","spinner":"ImageSlideshow-module_spinner__fmIFu","control":"ImageSlideshow-module_control__WF7Lz","controlPrev":"ImageSlideshow-module_controlPrev__PCSgw","controlNext":"ImageSlideshow-module_controlNext__RMVX2","controlPlay":"ImageSlideshow-module_controlPlay__183mX","topControls":"ImageSlideshow-module_topControls__AIEJT","controlAction":"ImageSlideshow-module_controlAction__NCD7t","caption":"ImageSlideshow-module_caption__9a3JW","captionTitle":"ImageSlideshow-module_captionTitle__w5Izi","captionText":"ImageSlideshow-module_captionText__FvPyQ","imageMetadata":"ImageSlideshow-module_imageMetadata__5RF2N","metadataItem":"ImageSlideshow-module_metadataItem__6MJDP","indicators":"ImageSlideshow-module_indicators__2cH2G","hasThumbnails":"ImageSlideshow-module_hasThumbnails__0B1N-","indicator":"ImageSlideshow-module_indicator__4zGqm","indicatorActive":"ImageSlideshow-module_indicatorActive__oLeK2","thumbnails":"ImageSlideshow-module_thumbnails__zwiUz","thumbnail":"ImageSlideshow-module_thumbnail__3YyIx","thumbnailActive":"ImageSlideshow-module_thumbnailActive__aADJh","thumbnailImage":"ImageSlideshow-module_thumbnailImage__Ft7Iq"};
4568
4887
 
4569
4888
  const ImageSlideshow = ({ images, autoPlay = false, autoPlayInterval = 3000, showThumbnails = true, showControls = true, showIndicators = true, showCaptions = true, loop = true, fadeTransition = false, enableFullscreen = true, enableDownload = false, enableShare = false, enableDragReorder = false, lazyLoading = true, preloadAdjacent = true, className = '', onImageChange, onDownload, onShare, onImageReorder, initialIndex = 0, }) => {
4570
4889
  const [currentIndex, setCurrentIndex] = useState(initialIndex);
@@ -4603,9 +4922,9 @@ const ImageSlideshow = ({ images, autoPlay = false, autoPlayInterval = 3000, sho
4603
4922
  goToSlide(imageOrder.length - 1);
4604
4923
  }
4605
4924
  }, [currentIndex, imageOrder.length, loop, goToSlide]);
4606
- const togglePlayPause = () => {
4607
- setIsPlaying(!isPlaying);
4608
- };
4925
+ const togglePlayPause = useCallback(() => {
4926
+ setIsPlaying(prev => !prev);
4927
+ }, []);
4609
4928
  const toggleFullscreen = () => {
4610
4929
  if (!document.fullscreenElement) {
4611
4930
  slideshowRef.current?.requestFullscreen();
@@ -4729,7 +5048,7 @@ const ImageSlideshow = ({ images, autoPlay = false, autoPlayInterval = 3000, sho
4729
5048
  }
4730
5049
  });
4731
5050
  }
4732
- }, [currentIndex, images, loop, preloadAdjacent]);
5051
+ }, [currentIndex, imageOrder, images, loop, preloadAdjacent]);
4733
5052
  useEffect(() => {
4734
5053
  const handleFullscreenChange = () => {
4735
5054
  setIsFullscreen(!!document.fullscreenElement);
@@ -4780,9 +5099,9 @@ const ImageSlideshow = ({ images, autoPlay = false, autoPlayInterval = 3000, sho
4780
5099
  };
4781
5100
  document.addEventListener('keydown', handleKeyDown);
4782
5101
  return () => document.removeEventListener('keydown', handleKeyDown);
4783
- }, [goToPrevious, goToNext]);
5102
+ }, [goToPrevious, goToNext, enableFullscreen, togglePlayPause]);
4784
5103
  if (!imageOrder || imageOrder.length === 0) {
4785
- return (jsx("div", { className: `${styles$1.slideshow} ${styles$1.empty} ${className}`, children: jsx("div", { className: styles$1.emptyState, children: jsx("span", { children: "No images to display" }) }) }));
5104
+ return (jsx("div", { className: `${styles$2.slideshow} ${styles$2.empty} ${className}`, children: jsx("div", { className: styles$2.emptyState, children: jsx("span", { children: "No images to display" }) }) }));
4786
5105
  }
4787
5106
  const slideVariants = {
4788
5107
  enter: (direction) => ({
@@ -4802,16 +5121,16 @@ const ImageSlideshow = ({ images, autoPlay = false, autoPlayInterval = 3000, sho
4802
5121
  };
4803
5122
  const currentImage = imageOrder[currentIndex];
4804
5123
  const isImageLoaded = loadedImages.has(currentImage.id);
4805
- return (jsxs("div", { ref: slideshowRef, className: `${styles$1.slideshow} ${isFullscreen ? styles$1.fullscreen : ''} ${showThumbnails && imageOrder.length > 1 ? styles$1.hasThumbnails : ''} ${className}`, children: [jsxs("div", { className: styles$1.mainContainer, onTouchStart: onTouchStart, onTouchMove: onTouchMove, onTouchEnd: onTouchEnd, children: [jsx(AnimatePresence, { mode: "wait", custom: 1, children: jsxs(motion.div, { custom: 1, variants: slideVariants, initial: "enter", animate: "center", exit: "exit", transition: {
5124
+ return (jsxs("div", { ref: slideshowRef, className: `${styles$2.slideshow} ${isFullscreen ? styles$2.fullscreen : ''} ${showThumbnails && imageOrder.length > 1 ? styles$2.hasThumbnails : ''} ${className}`, children: [jsxs("div", { className: styles$2.mainContainer, onTouchStart: onTouchStart, onTouchMove: onTouchMove, onTouchEnd: onTouchEnd, children: [jsx(AnimatePresence, { mode: "wait", custom: 1, children: jsxs(motion.div, { custom: 1, variants: slideVariants, initial: "enter", animate: "center", exit: "exit", transition: {
4806
5125
  x: { type: "spring", stiffness: 300, damping: 30 },
4807
5126
  opacity: { duration: 0.3 }
4808
- }, className: styles$1.slide, children: [jsx("img", { ref: imageRef, src: lazyLoading && !isImageLoaded ? undefined : currentImage.src, "data-src": lazyLoading ? currentImage.src : undefined, srcSet: currentImage.srcSet, sizes: currentImage.sizes, alt: currentImage.alt, className: styles$1.image, draggable: false, onLoad: () => handleImageLoad(currentImage.id), style: {
5127
+ }, className: styles$2.slide, children: [jsx("img", { ref: imageRef, src: lazyLoading && !isImageLoaded ? undefined : currentImage.src, "data-src": lazyLoading ? currentImage.src : undefined, srcSet: currentImage.srcSet, sizes: currentImage.sizes, alt: currentImage.alt, className: styles$2.image, draggable: false, onLoad: () => handleImageLoad(currentImage.id), style: {
4809
5128
  opacity: lazyLoading && !isImageLoaded ? 0 : 1,
4810
5129
  transition: 'opacity 0.3s ease'
4811
- } }), lazyLoading && !isImageLoaded && (jsx("div", { className: styles$1.imageLoader, children: jsx("div", { className: styles$1.spinner }) }))] }, currentIndex) }), showControls && imageOrder.length > 1 && (jsxs(Fragment, { children: [jsx("button", { className: `${styles$1.control} ${styles$1.controlPrev}`, onClick: goToPrevious, disabled: !loop && currentIndex === 0, "aria-label": "Previous image", children: jsx(FiChevronLeft, {}) }), jsx("button", { className: `${styles$1.control} ${styles$1.controlNext}`, onClick: goToNext, disabled: !loop && currentIndex === imageOrder.length - 1, "aria-label": "Next image", children: jsx(FiChevronRight, {}) })] })), jsxs("div", { className: styles$1.topControls, children: [enableFullscreen && (jsx("button", { className: `${styles$1.control} ${styles$1.controlAction}`, onClick: toggleFullscreen, "aria-label": isFullscreen ? 'Exit fullscreen' : 'Enter fullscreen', title: isFullscreen ? 'Exit fullscreen (F)' : 'Enter fullscreen (F)', children: jsx("span", { style: { display: 'flex', alignItems: 'center', justifyContent: 'center', width: '100%', height: '100%' }, children: jsx(FiMaximize, {}) }) })), enableDownload && (jsx("button", { className: `${styles$1.control} ${styles$1.controlAction}`, onClick: handleDownload, "aria-label": "Download image", title: "Download image", children: jsx("span", { style: { display: 'flex', alignItems: 'center', justifyContent: 'center', width: '100%', height: '100%' }, children: jsx(FiDownload, {}) }) })), enableShare && (jsx("button", { className: `${styles$1.control} ${styles$1.controlAction}`, onClick: handleShare, "aria-label": "Share image", title: "Share image", children: jsx("span", { style: { display: 'flex', alignItems: 'center', justifyContent: 'center', width: '100%', height: '100%' }, children: jsx(FiShare2, {}) }) }))] }), autoPlay && imageOrder.length > 1 && (jsx("button", { className: `${styles$1.control} ${styles$1.controlPlay}`, onClick: togglePlayPause, "aria-label": isPlaying ? 'Pause slideshow' : 'Play slideshow', title: isPlaying ? 'Pause slideshow (Space)' : 'Play slideshow (Space)', children: isPlaying ? jsx(FiPause, {}) : jsx(FiPlay, {}) })), showCaptions && (currentImage.caption || currentImage.title) && (jsxs(motion.div, { className: styles$1.caption, initial: { opacity: 0, y: 20 }, animate: { opacity: 1, y: 0 }, transition: { delay: 0.3 }, children: [currentImage.title && (jsx("h3", { className: styles$1.captionTitle, children: currentImage.title })), currentImage.caption && (jsx("p", { className: styles$1.captionText, children: currentImage.caption })), currentImage.metadata && (jsxs("div", { className: styles$1.imageMetadata, children: [currentImage.metadata.photographer && (jsxs("span", { className: styles$1.metadataItem, children: ["\uD83D\uDCF7 ", currentImage.metadata.photographer] })), currentImage.metadata.location && (jsxs("span", { className: styles$1.metadataItem, children: ["\uD83D\uDCCD ", currentImage.metadata.location] })), currentImage.metadata.camera && (jsxs("span", { className: styles$1.metadataItem, children: ["\uD83D\uDCF9 ", currentImage.metadata.camera] }))] }))] }))] }), showIndicators && imageOrder.length > 1 && (jsx("div", { className: styles$1.indicators, children: imageOrder.map((_, index) => (jsx(motion.button, { className: `${styles$1.indicator} ${index === currentIndex ? styles$1.indicatorActive : ''}`, onClick: () => goToSlide(index), whileHover: { scale: 1.2 }, whileTap: { scale: 0.8 }, "aria-label": `Go to slide ${index + 1}` }, index))) })), showThumbnails && imageOrder.length > 1 && (jsx("div", { className: `${styles$1.thumbnails} ${isDragging ? styles$1.thumbnailsDragging : ''}`, children: imageOrder.map((image, index) => (jsx(motion.button, { className: `${styles$1.thumbnail} ${index === currentIndex ? styles$1.thumbnailActive : ''} ${draggedIndex === index ? styles$1.thumbnailDragged : ''}`, onClick: () => goToSlide(index), whileHover: { scale: 1.05 }, whileTap: { scale: 0.95 }, "aria-label": `Go to ${image.alt}`, draggable: enableDragReorder, onDragStart: (e) => handleDragStart(e, index), onDragOver: handleDragOver, onDrop: (e) => handleDrop(e, index), title: image.title || image.alt, children: jsx("img", { src: image.src, alt: image.alt, className: styles$1.thumbnailImage, draggable: false }) }, image.id))) }))] }));
5130
+ } }), lazyLoading && !isImageLoaded && (jsx("div", { className: styles$2.imageLoader, children: jsx("div", { className: styles$2.spinner }) }))] }, currentIndex) }), showControls && imageOrder.length > 1 && (jsxs(Fragment, { children: [jsx("button", { className: `${styles$2.control} ${styles$2.controlPrev}`, onClick: goToPrevious, disabled: !loop && currentIndex === 0, "aria-label": "Previous image", children: jsx(ChevronLeft, {}) }), jsx("button", { className: `${styles$2.control} ${styles$2.controlNext}`, onClick: goToNext, disabled: !loop && currentIndex === imageOrder.length - 1, "aria-label": "Next image", children: jsx(ChevronRight, {}) })] })), jsxs("div", { className: styles$2.topControls, children: [enableFullscreen && (jsx("button", { className: `${styles$2.control} ${styles$2.controlAction}`, onClick: toggleFullscreen, "aria-label": isFullscreen ? 'Exit fullscreen' : 'Enter fullscreen', title: isFullscreen ? 'Exit fullscreen (F)' : 'Enter fullscreen (F)', children: jsx("span", { style: { display: 'flex', alignItems: 'center', justifyContent: 'center', width: '100%', height: '100%' }, children: jsx(Maximize, {}) }) })), enableDownload && (jsx("button", { className: `${styles$2.control} ${styles$2.controlAction}`, onClick: handleDownload, "aria-label": "Download image", title: "Download image", children: jsx("span", { style: { display: 'flex', alignItems: 'center', justifyContent: 'center', width: '100%', height: '100%' }, children: jsx(Download, {}) }) })), enableShare && (jsx("button", { className: `${styles$2.control} ${styles$2.controlAction}`, onClick: handleShare, "aria-label": "Share image", title: "Share image", children: jsx("span", { style: { display: 'flex', alignItems: 'center', justifyContent: 'center', width: '100%', height: '100%' }, children: jsx(Share2, {}) }) }))] }), autoPlay && imageOrder.length > 1 && (jsx("button", { className: `${styles$2.control} ${styles$2.controlPlay}`, onClick: togglePlayPause, "aria-label": isPlaying ? 'Pause slideshow' : 'Play slideshow', title: isPlaying ? 'Pause slideshow (Space)' : 'Play slideshow (Space)', children: isPlaying ? jsx(Pause, {}) : jsx(Play, {}) })), showCaptions && (currentImage.caption || currentImage.title) && (jsxs(motion.div, { className: styles$2.caption, initial: { opacity: 0, y: 20 }, animate: { opacity: 1, y: 0 }, transition: { delay: 0.3 }, children: [currentImage.title && (jsx("h3", { className: styles$2.captionTitle, children: currentImage.title })), currentImage.caption && (jsx("p", { className: styles$2.captionText, children: currentImage.caption })), currentImage.metadata && (jsxs("div", { className: styles$2.imageMetadata, children: [currentImage.metadata.photographer && (jsxs("span", { className: styles$2.metadataItem, children: ["\uD83D\uDCF7 ", currentImage.metadata.photographer] })), currentImage.metadata.location && (jsxs("span", { className: styles$2.metadataItem, children: ["\uD83D\uDCCD ", currentImage.metadata.location] })), currentImage.metadata.camera && (jsxs("span", { className: styles$2.metadataItem, children: ["\uD83D\uDCF9 ", currentImage.metadata.camera] }))] }))] }))] }), showIndicators && imageOrder.length > 1 && (jsx("div", { className: styles$2.indicators, children: imageOrder.map((_, index) => (jsx(motion.button, { className: `${styles$2.indicator} ${index === currentIndex ? styles$2.indicatorActive : ''}`, onClick: () => goToSlide(index), whileHover: { scale: 1.2 }, whileTap: { scale: 0.8 }, "aria-label": `Go to slide ${index + 1}` }, index))) })), showThumbnails && imageOrder.length > 1 && (jsx("div", { className: `${styles$2.thumbnails} ${isDragging ? styles$2.thumbnailsDragging : ''}`, children: imageOrder.map((image, index) => (jsx(motion.button, { className: `${styles$2.thumbnail} ${index === currentIndex ? styles$2.thumbnailActive : ''} ${draggedIndex === index ? styles$2.thumbnailDragged : ''}`, onClick: () => goToSlide(index), whileHover: { scale: 1.05 }, whileTap: { scale: 0.95 }, "aria-label": `Go to ${image.alt}`, draggable: enableDragReorder, onDragStart: (e) => handleDragStart(e, index), onDragOver: handleDragOver, onDrop: (e) => handleDrop(e, index), title: image.title || image.alt, children: jsx("img", { src: image.src, alt: image.alt, className: styles$2.thumbnailImage, draggable: false }) }, image.id))) }))] }));
4812
5131
  };
4813
5132
 
4814
- var styles = {"container":"Table-module_container__CH3T9","header":"Table-module_header__qVoF2","title":"Table-module_title__DSZgm","actions":"Table-module_actions__2J1i0","controls":"Table-module_controls__3WToN","searchBox":"Table-module_searchBox__bh3f3","searchIcon":"Table-module_searchIcon__1pQ5l","searchInput":"Table-module_searchInput__SrK6l","clearButton":"Table-module_clearButton__4Fysz","clearFiltersButton":"Table-module_clearFiltersButton__yFLI9","resultCount":"Table-module_resultCount__RR7Z6","loading":"Table-module_loading__xxSIa","spinner":"Table-module_spinner__T8mdH","empty":"Table-module_empty__-qPi2","emptyIcon":"Table-module_emptyIcon__FLViS","tableWrapper":"Table-module_tableWrapper__LvHGH","stickyHeader":"Table-module_stickyHeader__Dz0O8","table":"Table-module_table__4T9xo","striped":"Table-module_striped__TBcT6","compact":"Table-module_compact__w-QVs","th":"Table-module_th__bpKfX","td":"Table-module_td__HaytM","hoverable":"Table-module_hoverable__4aHgq","headerCell":"Table-module_headerCell__WUy2w","headerText":"Table-module_headerText__WGAqz","sortButton":"Table-module_sortButton__CJwYq","sortIcon":"Table-module_sortIcon__G48h1","columnFilter":"Table-module_columnFilter__hwNd2","tr":"Table-module_tr__-j8Fa","selected":"Table-module_selected__pjiMr","clickable":"Table-module_clickable__9R5oq","checkboxColumn":"Table-module_checkboxColumn__SpbCr","actionsColumn":"Table-module_actionsColumn__7x--N","actionButtons":"Table-module_actionButtons__8JQhr","actionButton":"Table-module_actionButton__9EQZu","actionButtonPrimary":"Table-module_actionButtonPrimary__Xyzgu","actionButtonSecondary":"Table-module_actionButtonSecondary__RiR1E","actionButtonDanger":"Table-module_actionButtonDanger__7aX-2","actionButtonWarning":"Table-module_actionButtonWarning__2s73k","actionButtonSuccess":"Table-module_actionButtonSuccess__DvbtN","checkbox":"Table-module_checkbox__9LC-f","nullValue":"Table-module_nullValue__TVTmT","badge":"Table-module_badge__OO-UL","badgeSuccess":"Table-module_badgeSuccess__uIJVY","badgeDanger":"Table-module_badgeDanger__Y6RPD","code":"Table-module_code__SIFLQ","pagination":"Table-module_pagination__UVcSr","pageInfo":"Table-module_pageInfo__e-k17","pageControls":"Table-module_pageControls__htKNN","pageButton":"Table-module_pageButton__9ukDT","pageNumber":"Table-module_pageNumber__qpnbj","pageSizeSelect":"Table-module_pageSizeSelect__GbSKL","bulkActions":"Table-module_bulkActions__7Rz-X","bulkActionButtons":"Table-module_bulkActionButtons__pb8M2","bulkActionButton":"Table-module_bulkActionButton__UOTDm","selectionCount":"Table-module_selectionCount__ZwGuQ","bulkPrimary":"Table-module_bulkPrimary__qx71n","bulkSecondary":"Table-module_bulkSecondary__WNEOF","bulkDanger":"Table-module_bulkDanger__Aqmye","bulkWarning":"Table-module_bulkWarning__jEkYC","bulkSuccess":"Table-module_bulkSuccess__VQd5s","bulkCustom":"Table-module_bulkCustom__BP47V","horizontalScroll":"Table-module_horizontalScroll__Cgx7N"};
5133
+ var styles$1 = {"container":"Table-module_container__CH3T9","header":"Table-module_header__qVoF2","title":"Table-module_title__DSZgm","actions":"Table-module_actions__2J1i0","controls":"Table-module_controls__3WToN","searchBox":"Table-module_searchBox__bh3f3","searchIcon":"Table-module_searchIcon__1pQ5l","searchInput":"Table-module_searchInput__SrK6l","clearButton":"Table-module_clearButton__4Fysz","clearFiltersButton":"Table-module_clearFiltersButton__yFLI9","resultCount":"Table-module_resultCount__RR7Z6","loading":"Table-module_loading__xxSIa","spinner":"Table-module_spinner__T8mdH","empty":"Table-module_empty__-qPi2","emptyIcon":"Table-module_emptyIcon__FLViS","tableWrapper":"Table-module_tableWrapper__LvHGH","stickyHeader":"Table-module_stickyHeader__Dz0O8","table":"Table-module_table__4T9xo","striped":"Table-module_striped__TBcT6","compact":"Table-module_compact__w-QVs","th":"Table-module_th__bpKfX","td":"Table-module_td__HaytM","hoverable":"Table-module_hoverable__4aHgq","headerCell":"Table-module_headerCell__WUy2w","headerText":"Table-module_headerText__WGAqz","sortButton":"Table-module_sortButton__CJwYq","sortIcon":"Table-module_sortIcon__G48h1","columnFilter":"Table-module_columnFilter__hwNd2","tr":"Table-module_tr__-j8Fa","selected":"Table-module_selected__pjiMr","clickable":"Table-module_clickable__9R5oq","checkboxColumn":"Table-module_checkboxColumn__SpbCr","actionsColumn":"Table-module_actionsColumn__7x--N","actionButtons":"Table-module_actionButtons__8JQhr","actionButton":"Table-module_actionButton__9EQZu","actionButtonPrimary":"Table-module_actionButtonPrimary__Xyzgu","actionButtonSecondary":"Table-module_actionButtonSecondary__RiR1E","actionButtonDanger":"Table-module_actionButtonDanger__7aX-2","actionButtonWarning":"Table-module_actionButtonWarning__2s73k","actionButtonSuccess":"Table-module_actionButtonSuccess__DvbtN","checkbox":"Table-module_checkbox__9LC-f","nullValue":"Table-module_nullValue__TVTmT","badge":"Table-module_badge__OO-UL","badgeSuccess":"Table-module_badgeSuccess__uIJVY","badgeDanger":"Table-module_badgeDanger__Y6RPD","code":"Table-module_code__SIFLQ","pagination":"Table-module_pagination__UVcSr","pageInfo":"Table-module_pageInfo__e-k17","pageControls":"Table-module_pageControls__htKNN","pageButton":"Table-module_pageButton__9ukDT","pageNumber":"Table-module_pageNumber__qpnbj","pageSizeSelect":"Table-module_pageSizeSelect__GbSKL","bulkActions":"Table-module_bulkActions__7Rz-X","bulkActionButtons":"Table-module_bulkActionButtons__pb8M2","bulkActionButton":"Table-module_bulkActionButton__UOTDm","selectionCount":"Table-module_selectionCount__ZwGuQ","bulkPrimary":"Table-module_bulkPrimary__qx71n","bulkSecondary":"Table-module_bulkSecondary__WNEOF","bulkDanger":"Table-module_bulkDanger__Aqmye","bulkWarning":"Table-module_bulkWarning__jEkYC","bulkSuccess":"Table-module_bulkSuccess__VQd5s","bulkCustom":"Table-module_bulkCustom__BP47V","horizontalScroll":"Table-module_horizontalScroll__Cgx7N"};
4815
5134
 
4816
5135
  /**
4817
5136
  * A comprehensive table component with sorting, filtering, pagination, selection, and row actions.
@@ -5012,7 +5331,7 @@ const TableComponent = function Table({ data, columns, keyField = 'id', title, s
5012
5331
  ...action.style,
5013
5332
  ...action.buttonStyles?.style
5014
5333
  };
5015
- // Handle icon size - cast to any to allow CSS custom properties
5334
+ // Handle icon size - set CSS custom property
5016
5335
  if (action.buttonStyles?.iconSize || actionButtonStyles?.iconSize) {
5017
5336
  baseStyles['--icon-size'] = typeof (action.buttonStyles?.iconSize || actionButtonStyles?.iconSize) === 'number'
5018
5337
  ? `${action.buttonStyles?.iconSize || actionButtonStyles?.iconSize}px`
@@ -5021,13 +5340,13 @@ const TableComponent = function Table({ data, columns, keyField = 'id', title, s
5021
5340
  return baseStyles;
5022
5341
  }, [actionButtonStyles]);
5023
5342
  const getButtonClassName = useCallback((action) => {
5024
- const baseClass = styles.actionButton;
5025
- const variantClass = action.variant === 'primary' ? styles.actionButtonPrimary :
5026
- action.variant === 'danger' ? styles.actionButtonDanger :
5027
- action.variant === 'warning' ? styles.actionButtonWarning :
5028
- action.variant === 'success' ? styles.actionButtonSuccess :
5343
+ const baseClass = styles$1.actionButton;
5344
+ const variantClass = action.variant === 'primary' ? styles$1.actionButtonPrimary :
5345
+ action.variant === 'danger' ? styles$1.actionButtonDanger :
5346
+ action.variant === 'warning' ? styles$1.actionButtonWarning :
5347
+ action.variant === 'success' ? styles$1.actionButtonSuccess :
5029
5348
  action.variant === 'custom' ? '' :
5030
- styles.actionButtonSecondary;
5349
+ styles$1.actionButtonSecondary;
5031
5350
  const globalCustomClass = actionButtonStyles?.className || '';
5032
5351
  const actionCustomClass = action.className || '';
5033
5352
  const buttonCustomClass = action.buttonStyles?.className || '';
@@ -5035,23 +5354,23 @@ const TableComponent = function Table({ data, columns, keyField = 'id', title, s
5035
5354
  }, [actionButtonStyles]);
5036
5355
  // Loading state
5037
5356
  if (loading) {
5038
- return (jsx("div", { className: `${styles.container} ${className}`, children: jsxs("div", { className: styles.loading, children: [jsx("div", { className: styles.spinner }), jsx("span", { children: "Loading..." })] }) }));
5357
+ return (jsx("div", { className: `${styles$1.container} ${className}`, children: jsxs("div", { className: styles$1.loading, children: [jsx("div", { className: styles$1.spinner }), jsx("span", { children: "Loading..." })] }) }));
5039
5358
  }
5040
5359
  // Empty state
5041
5360
  if (data.length === 0) {
5042
- return (jsxs("div", { className: `${styles.container} ${className}`, children: [title && jsx("h2", { className: styles.title, children: title }), jsxs("div", { className: styles.empty, children: [jsx("span", { className: styles.emptyIcon, children: "\uD83D\uDCCA" }), jsx("p", { children: emptyMessage })] })] }));
5361
+ return (jsxs("div", { className: `${styles$1.container} ${className}`, children: [title && jsx("h2", { className: styles$1.title, children: title }), jsxs("div", { className: styles$1.empty, children: [jsx("span", { className: styles$1.emptyIcon, children: "\uD83D\uDCCA" }), jsx("p", { children: emptyMessage })] })] }));
5043
5362
  }
5044
- return (jsxs("div", { className: `${styles.container} ${className}`, children: [(title || actions || bulkActions) && (jsxs("div", { className: styles.header, children: [title && jsx("h2", { className: styles.title, children: title }), (actions || bulkActions) && (jsxs("div", { className: styles.bulkActions, children: [actions && selectedItems.length > 0 && (jsx("div", { className: styles.actions, children: actions(selectedItems) })), bulkActions && bulkActions.length > 0 && selectedItems.length > 0 && (jsx("div", { className: styles.bulkActionButtons, children: bulkActions.map((bulkAction, index) => {
5363
+ return (jsxs("div", { className: `${styles$1.container} ${className}`, children: [(title || actions || bulkActions) && (jsxs("div", { className: styles$1.header, children: [title && jsx("h2", { className: styles$1.title, children: title }), (actions || bulkActions) && (jsxs("div", { className: styles$1.bulkActions, children: [actions && selectedItems.length > 0 && (jsx("div", { className: styles$1.actions, children: actions(selectedItems) })), bulkActions && bulkActions.length > 0 && selectedItems.length > 0 && (jsx("div", { className: styles$1.bulkActionButtons, children: bulkActions.map((bulkAction, index) => {
5045
5364
  const isDisabled = (bulkAction.disabled && bulkAction.disabled(selectedItems)) ||
5046
5365
  (bulkAction.minSelection && selectedItems.length < bulkAction.minSelection) ||
5047
5366
  (bulkAction.maxSelection && selectedItems.length > bulkAction.maxSelection);
5048
- return (jsxs("button", { className: `${styles.bulkActionButton} ${bulkAction.variant === 'primary' ? styles.bulkPrimary :
5049
- bulkAction.variant === 'secondary' ? styles.bulkSecondary :
5050
- bulkAction.variant === 'danger' ? styles.bulkDanger :
5051
- bulkAction.variant === 'warning' ? styles.bulkWarning :
5052
- bulkAction.variant === 'success' ? styles.bulkSuccess :
5053
- bulkAction.variant === 'custom' ? styles.bulkCustom :
5054
- styles.bulkPrimary} ${bulkAction.className || ''}`, style: bulkAction.style, disabled: !!isDisabled, onClick: async () => {
5367
+ return (jsxs("button", { className: `${styles$1.bulkActionButton} ${bulkAction.variant === 'primary' ? styles$1.bulkPrimary :
5368
+ bulkAction.variant === 'secondary' ? styles$1.bulkSecondary :
5369
+ bulkAction.variant === 'danger' ? styles$1.bulkDanger :
5370
+ bulkAction.variant === 'warning' ? styles$1.bulkWarning :
5371
+ bulkAction.variant === 'success' ? styles$1.bulkSuccess :
5372
+ bulkAction.variant === 'custom' ? styles$1.bulkCustom :
5373
+ styles$1.bulkPrimary} ${bulkAction.className || ''}`, style: bulkAction.style, disabled: !!isDisabled, onClick: async () => {
5055
5374
  if (bulkAction.confirmMessage) {
5056
5375
  const message = typeof bulkAction.confirmMessage === 'function'
5057
5376
  ? bulkAction.confirmMessage(selectedItems)
@@ -5060,27 +5379,27 @@ const TableComponent = function Table({ data, columns, keyField = 'id', title, s
5060
5379
  return;
5061
5380
  }
5062
5381
  await bulkAction.onClick(selectedItems);
5063
- }, title: bulkAction.label, "aria-label": bulkAction.label, children: [bulkAction.icon, jsx("span", { children: bulkAction.label }), jsxs("span", { className: styles.selectionCount, children: ["(", selectedItems.length, ")"] })] }, index));
5064
- }) }))] }))] })), (searchable || hasActiveFilters) && (jsxs("div", { className: styles.controls, children: [searchable && (jsxs("div", { className: styles.searchBox, children: [jsx("span", { className: styles.searchIcon, children: "\uD83D\uDD0D" }), jsx("input", { type: "text", placeholder: "Search...", value: searchQuery, onChange: e => {
5382
+ }, title: bulkAction.label, "aria-label": bulkAction.label, children: [bulkAction.icon, jsx("span", { children: bulkAction.label }), jsxs("span", { className: styles$1.selectionCount, children: ["(", selectedItems.length, ")"] })] }, index));
5383
+ }) }))] }))] })), (searchable || hasActiveFilters) && (jsxs("div", { className: styles$1.controls, children: [searchable && (jsxs("div", { className: styles$1.searchBox, children: [jsx("span", { className: styles$1.searchIcon, children: "\uD83D\uDD0D" }), jsx("input", { type: "text", placeholder: "Search...", value: searchQuery, onChange: e => {
5065
5384
  setSearchQuery(e.target.value);
5066
5385
  setCurrentPage(1);
5067
- }, className: styles.searchInput }), searchQuery && (jsx("button", { className: styles.clearButton, onClick: () => setSearchQuery(''), children: "\u2715" }))] })), hasActiveFilters && (jsx("button", { className: styles.clearFiltersButton, onClick: clearFilters, children: "Clear All Filters" })), jsxs("div", { className: styles.resultCount, children: [filteredData.length, " ", filteredData.length === 1 ? 'result' : 'results'] })] })), jsx("div", { className: `${styles.tableWrapper} ${stickyHeader ? styles.stickyHeader : ''} ${horizontalScroll ? styles.horizontalScroll : ''}`, children: jsxs("table", { className: `
5068
- ${styles.table}
5069
- ${striped ? styles.striped : ''}
5070
- ${hoverable ? styles.hoverable : ''}
5071
- ${compact ? styles.compact : ''}
5072
- `, role: "table", "aria-label": title || 'Data table', "aria-rowcount": sortedData.length, "aria-describedby": title ? `${title.replace(/\s+/g, '-').toLowerCase()}-summary` : undefined, children: [jsx("thead", { children: jsxs("tr", { children: [selectable && (jsx("th", { className: styles.checkboxColumn, scope: "col", children: jsx("input", { type: "checkbox", checked: allCurrentPageSelected, ref: input => {
5386
+ }, className: styles$1.searchInput }), searchQuery && (jsx("button", { className: styles$1.clearButton, onClick: () => setSearchQuery(''), children: "\u2715" }))] })), hasActiveFilters && (jsx("button", { className: styles$1.clearFiltersButton, onClick: clearFilters, children: "Clear All Filters" })), jsxs("div", { className: styles$1.resultCount, children: [filteredData.length, " ", filteredData.length === 1 ? 'result' : 'results'] })] })), jsx("div", { className: `${styles$1.tableWrapper} ${stickyHeader ? styles$1.stickyHeader : ''} ${horizontalScroll ? styles$1.horizontalScroll : ''}`, children: jsxs("table", { className: `
5387
+ ${styles$1.table}
5388
+ ${striped ? styles$1.striped : ''}
5389
+ ${hoverable ? styles$1.hoverable : ''}
5390
+ ${compact ? styles$1.compact : ''}
5391
+ `, role: "table", "aria-label": title || 'Data table', "aria-rowcount": sortedData.length, "aria-describedby": title ? `${title.replace(/\s+/g, '-').toLowerCase()}-summary` : undefined, children: [jsx("thead", { children: jsxs("tr", { children: [selectable && (jsx("th", { className: styles$1.checkboxColumn, scope: "col", children: jsx("input", { type: "checkbox", checked: allCurrentPageSelected, ref: input => {
5073
5392
  if (input) {
5074
5393
  input.indeterminate = !allCurrentPageSelected && someCurrentPageSelected;
5075
5394
  }
5076
- }, onChange: handleSelectAll, className: styles.checkbox, "aria-label": "Select all rows" }) })), columns.map(column => (jsx("th", { className: `${styles.th} ${column.className || ''}`, style: {
5395
+ }, onChange: handleSelectAll, className: styles$1.checkbox, "aria-label": "Select all rows" }) })), columns.map(column => (jsx("th", { className: `${styles$1.th} ${column.className || ''}`, style: {
5077
5396
  width: column.width,
5078
5397
  textAlign: column.align || 'left'
5079
5398
  }, scope: "col", role: "columnheader", "aria-sort": sortConfig.key === column.key
5080
5399
  ? sortConfig.direction === 'asc' ? 'ascending' : 'descending'
5081
- : column.sortable ? 'none' : undefined, children: jsxs("div", { className: styles.headerCell, children: [column.sortable ? (jsxs("button", { className: styles.sortButton, onClick: () => handleSort(column.key), "aria-label": `Sort by ${column.header} ${sortConfig.key === column.key
5400
+ : column.sortable ? 'none' : undefined, children: jsxs("div", { className: styles$1.headerCell, children: [column.sortable ? (jsxs("button", { className: styles$1.sortButton, onClick: () => handleSort(column.key), "aria-label": `Sort by ${column.header} ${sortConfig.key === column.key
5082
5401
  ? sortConfig.direction === 'asc' ? '(descending)' : '(ascending)'
5083
- : '(ascending)'}`, children: [jsx("span", { children: column.header }), jsx("span", { className: styles.sortIcon, "aria-hidden": "true", children: sortConfig.key === column.key ? (sortConfig.direction === 'asc' ? '↑' : '↓') : '↕' })] })) : (jsx("span", { className: styles.headerText, children: column.header })), column.filterable && (jsx("input", { type: "text", placeholder: "Filter...", value: columnFilters[column.key] || '', onChange: e => handleColumnFilter(column.key, e.target.value), onClick: e => e.stopPropagation(), className: styles.columnFilter, "aria-label": `Filter ${column.header}` }))] }) }, column.key))), rowActions && rowActions.length > 0 && (jsx("th", { className: styles.actionsColumn, scope: "col", children: jsx("span", { className: styles.headerText, children: "Actions" }) }))] }) }), jsx("tbody", { children: animated ? (jsx(LayoutGroup, { children: jsx(AnimatePresence, { mode: "popLayout", children: paginatedData.map((item, index) => (jsxs(motion.tr, { layout: "position", initial: { opacity: 0, scale: 0.98 }, animate: {
5402
+ : '(ascending)'}`, children: [jsx("span", { children: column.header }), jsx("span", { className: styles$1.sortIcon, "aria-hidden": "true", children: sortConfig.key === column.key ? (sortConfig.direction === 'asc' ? '↑' : '↓') : '↕' })] })) : (jsx("span", { className: styles$1.headerText, children: column.header })), column.filterable && (jsx("input", { type: "text", placeholder: "Filter...", value: columnFilters[column.key] || '', onChange: e => handleColumnFilter(column.key, e.target.value), onClick: e => e.stopPropagation(), className: styles$1.columnFilter, "aria-label": `Filter ${column.header}` }))] }) }, column.key))), rowActions && rowActions.length > 0 && (jsx("th", { className: styles$1.actionsColumn, scope: "col", children: jsx("span", { className: styles$1.headerText, children: "Actions" }) }))] }) }), jsx("tbody", { children: animated ? (jsx(LayoutGroup, { children: jsx(AnimatePresence, { mode: "popLayout", children: paginatedData.map((item, index) => (jsxs(motion.tr, { layout: "position", initial: { opacity: 0, scale: 0.98 }, animate: {
5084
5403
  opacity: 1,
5085
5404
  scale: 1,
5086
5405
  transition: {
@@ -5093,18 +5412,18 @@ const TableComponent = function Table({ data, columns, keyField = 'id', title, s
5093
5412
  scale: 0.98,
5094
5413
  transition: { duration: 0.08 }
5095
5414
  }, className: `
5096
- ${styles.tr}
5097
- ${selectedRows.has(item[keyField]) ? styles.selected : ''}
5098
- ${onRowClick ? styles.clickable : ''}
5099
- `, onClick: () => onRowClick?.(item, index), children: [selectable && (jsx("td", { className: styles.checkboxColumn, children: jsx("input", { type: "checkbox", checked: selectedRows.has(item[keyField]), onChange: () => handleSelectRow(item[keyField]), onClick: e => e.stopPropagation(), className: styles.checkbox }) })), columns.map(column => (jsx("td", { className: `${styles.td} ${column.className || ''}`, style: { textAlign: column.align || 'left' }, children: column.render
5415
+ ${styles$1.tr}
5416
+ ${selectedRows.has(item[keyField]) ? styles$1.selected : ''}
5417
+ ${onRowClick ? styles$1.clickable : ''}
5418
+ `, onClick: () => onRowClick?.(item, index), children: [selectable && (jsx("td", { className: styles$1.checkboxColumn, children: jsx("input", { type: "checkbox", checked: selectedRows.has(item[keyField]), onChange: () => handleSelectRow(item[keyField]), onClick: e => e.stopPropagation(), className: styles$1.checkbox }) })), columns.map(column => (jsx("td", { className: `${styles$1.td} ${column.className || ''}`, style: { textAlign: column.align || 'left' }, children: column.render
5100
5419
  ? column.render(item[column.key], item, index)
5101
- : formatValue(item[column.key]) }, column.key))), rowActions && rowActions.length > 0 && (jsx("td", { className: styles.actionsColumn, onClick: e => e.stopPropagation(), children: jsx("div", { className: styles.actionButtons, children: rowActions.map((action, actionIndex) => (jsx("button", { className: getButtonClassName(action), style: getButtonStyles(action), onClick: () => action.onClick(item, index), disabled: action.disabled ? action.disabled(item) : false, title: action.label, "aria-label": action.label, children: action.icon }, actionIndex))) }) }))] }, `${item[keyField]}-${currentPage}`))) }) })) : (paginatedData.map((item, index) => (jsxs("tr", { className: `
5102
- ${styles.tr}
5103
- ${selectedRows.has(item[keyField]) ? styles.selected : ''}
5104
- ${onRowClick ? styles.clickable : ''}
5105
- `, onClick: () => onRowClick?.(item, index), children: [selectable && (jsx("td", { className: styles.checkboxColumn, children: jsx("input", { type: "checkbox", checked: selectedRows.has(item[keyField]), onChange: () => handleSelectRow(item[keyField]), onClick: e => e.stopPropagation(), className: styles.checkbox }) })), columns.map(column => (jsx("td", { className: `${styles.td} ${column.className || ''}`, style: { textAlign: column.align || 'left' }, children: column.render
5420
+ : formatValue(item[column.key]) }, column.key))), rowActions && rowActions.length > 0 && (jsx("td", { className: styles$1.actionsColumn, onClick: e => e.stopPropagation(), children: jsx("div", { className: styles$1.actionButtons, children: rowActions.map((action, actionIndex) => (jsx("button", { className: getButtonClassName(action), style: getButtonStyles(action), onClick: () => action.onClick(item, index), disabled: action.disabled ? action.disabled(item) : false, title: action.label, "aria-label": action.label, children: action.icon }, actionIndex))) }) }))] }, `${String(item[keyField])}-${currentPage}`))) }) })) : (paginatedData.map((item, index) => (jsxs("tr", { className: `
5421
+ ${styles$1.tr}
5422
+ ${selectedRows.has(item[keyField]) ? styles$1.selected : ''}
5423
+ ${onRowClick ? styles$1.clickable : ''}
5424
+ `, onClick: () => onRowClick?.(item, index), children: [selectable && (jsx("td", { className: styles$1.checkboxColumn, children: jsx("input", { type: "checkbox", checked: selectedRows.has(item[keyField]), onChange: () => handleSelectRow(item[keyField]), onClick: e => e.stopPropagation(), className: styles$1.checkbox }) })), columns.map(column => (jsx("td", { className: `${styles$1.td} ${column.className || ''}`, style: { textAlign: column.align || 'left' }, children: column.render
5106
5425
  ? column.render(item[column.key], item, index)
5107
- : formatValue(item[column.key]) }, column.key))), rowActions && rowActions.length > 0 && (jsx("td", { className: styles.actionsColumn, onClick: e => e.stopPropagation(), children: jsx("div", { className: styles.actionButtons, children: rowActions.map((action, actionIndex) => (jsx("button", { className: getButtonClassName(action), style: getButtonStyles(action), onClick: () => action.onClick(item, index), disabled: action.disabled ? action.disabled(item) : false, title: action.label, "aria-label": action.label, children: action.icon }, actionIndex))) }) }))] }, item[keyField])))) })] }) }), pagination && totalPages > 1 && (jsxs("div", { className: styles.pagination, children: [jsxs("div", { className: styles.pageInfo, children: ["Showing ", ((currentPage - 1) * pageSize) + 1, "-", Math.min(currentPage * pageSize, sortedData.length), " of ", sortedData.length] }), jsxs("div", { className: styles.pageControls, children: [jsx("button", { className: styles.pageButton, onClick: () => setCurrentPage(1), disabled: currentPage === 1, children: "\u27E8\u27E8" }), jsx("button", { className: styles.pageButton, onClick: () => setCurrentPage(prev => Math.max(1, prev - 1)), disabled: currentPage === 1, children: "\u27E8" }), jsxs("span", { className: styles.pageNumber, children: ["Page ", currentPage, " of ", totalPages] }), jsx("button", { className: styles.pageButton, onClick: () => setCurrentPage(prev => Math.min(totalPages, prev + 1)), disabled: currentPage === totalPages, children: "\u27E9" }), jsx("button", { className: styles.pageButton, onClick: () => setCurrentPage(totalPages), disabled: currentPage === totalPages, children: "\u27E9\u27E9" })] }), typeof pagination === 'object' && (jsx("select", { className: styles.pageSizeSelect, value: pageSize, onChange: e => {
5426
+ : formatValue(item[column.key]) }, column.key))), rowActions && rowActions.length > 0 && (jsx("td", { className: styles$1.actionsColumn, onClick: e => e.stopPropagation(), children: jsx("div", { className: styles$1.actionButtons, children: rowActions.map((action, actionIndex) => (jsx("button", { className: getButtonClassName(action), style: getButtonStyles(action), onClick: () => action.onClick(item, index), disabled: action.disabled ? action.disabled(item) : false, title: action.label, "aria-label": action.label, children: action.icon }, actionIndex))) }) }))] }, String(item[keyField]))))) })] }) }), pagination && totalPages > 1 && (jsxs("div", { className: styles$1.pagination, children: [jsxs("div", { className: styles$1.pageInfo, children: ["Showing ", ((currentPage - 1) * pageSize) + 1, "-", Math.min(currentPage * pageSize, sortedData.length), " of ", sortedData.length] }), jsxs("div", { className: styles$1.pageControls, children: [jsx("button", { className: styles$1.pageButton, onClick: () => setCurrentPage(1), disabled: currentPage === 1, children: "\u27E8\u27E8" }), jsx("button", { className: styles$1.pageButton, onClick: () => setCurrentPage(prev => Math.max(1, prev - 1)), disabled: currentPage === 1, children: "\u27E8" }), jsxs("span", { className: styles$1.pageNumber, children: ["Page ", currentPage, " of ", totalPages] }), jsx("button", { className: styles$1.pageButton, onClick: () => setCurrentPage(prev => Math.min(totalPages, prev + 1)), disabled: currentPage === totalPages, children: "\u27E9" }), jsx("button", { className: styles$1.pageButton, onClick: () => setCurrentPage(totalPages), disabled: currentPage === totalPages, children: "\u27E9\u27E9" })] }), typeof pagination === 'object' && (jsx("select", { className: styles$1.pageSizeSelect, value: pageSize, onChange: e => {
5108
5427
  setPageSize(Number(e.target.value));
5109
5428
  setCurrentPage(1);
5110
5429
  }, children: pageSizeOptions.map(size => (jsxs("option", { value: size, children: [size, " per page"] }, size))) }))] }))] }));
@@ -5112,21 +5431,50 @@ const TableComponent = function Table({ data, columns, keyField = 'id', title, s
5112
5431
  // Helper function to format values
5113
5432
  function formatValue(value) {
5114
5433
  if (value === null || value === undefined) {
5115
- return jsx("span", { className: styles.nullValue, children: "\u2014" });
5434
+ return jsx("span", { className: styles$1.nullValue, children: "\u2014" });
5116
5435
  }
5117
5436
  if (typeof value === 'boolean') {
5118
- return (jsx("span", { className: `${styles.badge} ${value ? styles.badgeSuccess : styles.badgeDanger}`, children: value ? '✓' : '✗' }));
5437
+ return (jsx("span", { className: `${styles$1.badge} ${value ? styles$1.badgeSuccess : styles$1.badgeDanger}`, children: value ? '✓' : '✗' }));
5119
5438
  }
5120
5439
  if (value instanceof Date) {
5121
5440
  return value.toLocaleDateString();
5122
5441
  }
5123
5442
  if (typeof value === 'object') {
5124
- return jsx("code", { className: styles.code, children: JSON.stringify(value, null, 2) });
5443
+ return jsx("code", { className: styles$1.code, children: JSON.stringify(value, null, 2) });
5125
5444
  }
5126
5445
  return String(value);
5127
5446
  }
5128
5447
  // Memoized Table component to prevent unnecessary re-renders
5129
5448
  const Table = memo(TableComponent);
5130
5449
 
5131
- export { ArrayInput, BooleansHeatmap, Button, Calendar, Card, Checkbox, DateInput, EditFAB, ImageSlideshow, LoadingSpinner, MoodChart, Navbar, NumberStepper, PieChart, QuantifiableHabitsChart, SearchBar, SearchableDropdown, SelectInput, SleepChart, Slider, SunburstChart, Table, Tabs, TextArea, TextInput, ThemeProvider, ThemeSwitcher, TimeInput, Toggle, ToggleButton, soundManager, useComponentSound, useSound, useTheme$1 as useTheme };
5450
+ var styles = {"overlay":"ConfirmationModal-module_overlay__wzOO0","positioner":"ConfirmationModal-module_positioner__JbYiu","modal":"ConfirmationModal-module_modal__yG0nB","header":"ConfirmationModal-module_header__-mH-7","warning":"ConfirmationModal-module_warning__DbqCv","danger":"ConfirmationModal-module_danger__RGtlr","info":"ConfirmationModal-module_info__cyle2","title":"ConfirmationModal-module_title__-x6BK","closeButton":"ConfirmationModal-module_closeButton__NStBA","content":"ConfirmationModal-module_content__kFMOl","message":"ConfirmationModal-module_message__eOvmj","footer":"ConfirmationModal-module_footer__m41Eh"};
5451
+
5452
+ /**
5453
+ * ConfirmationModal Component
5454
+ *
5455
+ * A specialized modal for confirm/cancel flows with variant styling.
5456
+ *
5457
+ * @example
5458
+ * <ConfirmationModal
5459
+ * isOpen={showDelete}
5460
+ * onClose={() => setShowDelete(false)}
5461
+ * onConfirm={handleDelete}
5462
+ * title="Delete item?"
5463
+ * message="This action cannot be undone."
5464
+ * variant="danger"
5465
+ * confirmText="Delete"
5466
+ * />
5467
+ */
5468
+ const ConfirmationModal = ({ isOpen, onClose, onConfirm, title, message, confirmText = 'Confirm', cancelText = 'Cancel', isLoading = false, variant = 'info', }) => {
5469
+ const handleConfirm = (e) => {
5470
+ if (!isLoading) {
5471
+ e.preventDefault();
5472
+ e.stopPropagation();
5473
+ onConfirm();
5474
+ }
5475
+ };
5476
+ return (jsx(AnimatePresence, { children: isOpen && (jsxs(Fragment, { children: [jsx(motion.div, { className: styles.overlay, initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, onClick: !isLoading ? onClose : undefined }), jsx("div", { className: styles.positioner, children: jsxs(motion.div, { className: styles.modal, initial: { opacity: 0, scale: 0.9, y: 20 }, animate: { opacity: 1, scale: 1, y: 0 }, exit: { opacity: 0, scale: 0.9, y: 20 }, transition: { type: 'spring', stiffness: 300, damping: 30 }, children: [jsxs("div", { className: `${styles.header} ${styles[variant]}`, children: [jsx("h2", { className: styles.title, children: title }), !isLoading && (jsx("button", { className: styles.closeButton, onClick: onClose, type: "button", "aria-label": "Close", children: "\u2715" }))] }), jsx("div", { className: styles.content, children: jsx("p", { className: styles.message, children: message }) }), jsxs("div", { className: styles.footer, children: [jsx(Button, { type: "button", variant: "ghost", onClick: onClose, disabled: isLoading, children: cancelText }), jsx(Button, { type: "button", variant: variant === 'danger' ? 'danger' : 'primary', onClick: handleConfirm, disabled: isLoading, loading: isLoading, children: confirmText })] })] }) })] })) }));
5477
+ };
5478
+
5479
+ export { ArrayInput, BooleansHeatmap, Breadcrumb, Button, Calendar, Card, Checkbox, ConfirmationModal, DateInput, DecryptedText, EditFAB, EmptyState, ImageSlideshow, LiquidButton, LoadingSpinner, Modal, MoodChart, Navbar, NumberStepper, PieChart, QuantifiableHabitsChart, SearchBar, SearchableDropdown, SelectInput, SleepChart, Slider, SunburstChart, Table, Tabs, TextArea, TextInput, ThemeProvider, ThemeSwitcher, TimeInput, ToastContainer, Toggle, ToggleButton, soundManager, useComponentSound, useSound, useTheme, useThemeSafe };
5132
5480
  //# sourceMappingURL=index.esm.js.map