@stfrigerio/sito-template 0.1.99 → 0.1.100

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 (234) hide show
  1. package/dist/components/organisms/charts/BooleansHeatmap/BooleansHeatmap.d.ts.map +1 -1
  2. package/dist/components/organisms/charts/ChordDiagram/ChordDiagram.d.ts +20 -0
  3. package/dist/components/organisms/charts/ChordDiagram/ChordDiagram.d.ts.map +1 -0
  4. package/dist/components/organisms/charts/ChordDiagram/ChordDiagram.stories.d.ts +9 -0
  5. package/dist/components/organisms/charts/ChordDiagram/ChordDiagram.stories.d.ts.map +1 -0
  6. package/dist/components/organisms/charts/HabitTimeOfDayChart/HabitTimeOfDayChart.d.ts.map +1 -1
  7. package/dist/components/organisms/charts/PieChart/PieChart.d.ts.map +1 -1
  8. package/dist/components/organisms/charts/PolarHeatmap/PolarHeatmap.d.ts +30 -0
  9. package/dist/components/organisms/charts/PolarHeatmap/PolarHeatmap.d.ts.map +1 -0
  10. package/dist/components/organisms/charts/PolarHeatmap/PolarHeatmap.stories.d.ts +9 -0
  11. package/dist/components/organisms/charts/PolarHeatmap/PolarHeatmap.stories.d.ts.map +1 -0
  12. package/dist/components/organisms/charts/ProgressRings/ProgressRings.d.ts +20 -0
  13. package/dist/components/organisms/charts/ProgressRings/ProgressRings.d.ts.map +1 -0
  14. package/dist/components/organisms/charts/ProgressRings/ProgressRings.stories.d.ts +9 -0
  15. package/dist/components/organisms/charts/ProgressRings/ProgressRings.stories.d.ts.map +1 -0
  16. package/dist/components/organisms/charts/RadialDayChart/RadialDayChart.d.ts +30 -0
  17. package/dist/components/organisms/charts/RadialDayChart/RadialDayChart.d.ts.map +1 -0
  18. package/dist/components/organisms/charts/RadialDayChart/RadialDayChart.stories.d.ts +9 -0
  19. package/dist/components/organisms/charts/RadialDayChart/RadialDayChart.stories.d.ts.map +1 -0
  20. package/dist/components/organisms/charts/SleepChart/SleepChart.d.ts.map +1 -1
  21. package/dist/components/organisms/charts/SunburstChart/SunburstChart.d.ts.map +1 -1
  22. package/dist/components/organisms/charts/index.d.ts +7 -0
  23. package/dist/components/organisms/charts/index.d.ts.map +1 -1
  24. package/dist/components/organisms/index.d.ts +7 -0
  25. package/dist/components/organisms/index.d.ts.map +1 -1
  26. package/dist/index.esm.js +962 -302
  27. package/dist/index.esm.js.map +1 -1
  28. package/dist/index.js +968 -304
  29. package/dist/index.js.map +1 -1
  30. package/dist/styles.css +1 -1
  31. package/dist/styles.css.map +1 -1
  32. package/package.json +1 -1
  33. package/storybook-static/assets/{ASCIIText.stories-DSI7g-mB.js → ASCIIText.stories-pbbzaeoe.js} +1 -1
  34. package/storybook-static/assets/{AllAtoms.stories-JflUIS5e.js → AllAtoms.stories-Cl6OlQtE.js} +1 -1
  35. package/storybook-static/assets/{AnimatedContent.stories-YR7SgIxb.js → AnimatedContent.stories-CBgdeKum.js} +1 -1
  36. package/storybook-static/assets/{AnimatedList.stories-GR75O93H.js → AnimatedList.stories-BvsDoR0x.js} +1 -1
  37. package/storybook-static/assets/{Antigravity.stories-B2MVCdRl.js → Antigravity.stories-DDREZ42A.js} +1 -1
  38. package/storybook-static/assets/{ArrayInput.stories-BI_3D81-.js → ArrayInput.stories-CVoXOB8N.js} +1 -1
  39. package/storybook-static/assets/{Aurora.stories-C_w705rr.js → Aurora.stories-BBYKIq3G.js} +1 -1
  40. package/storybook-static/assets/{Beams.stories-D1L26zBi.js → Beams.stories-D3pidC9q.js} +1 -1
  41. package/storybook-static/assets/{BlobCursor.stories-BjywoQ5q.js → BlobCursor.stories-CGYCm6z4.js} +1 -1
  42. package/storybook-static/assets/{BlurText.stories-CSpGTebR.js → BlurText.stories-B3O9QJYR.js} +1 -1
  43. package/storybook-static/assets/BooleansHeatmap.stories-BV9FcXUZ.js +63 -0
  44. package/storybook-static/assets/{BorderGlow.stories-BadihHiQ.js → BorderGlow.stories-8Gc0vp0f.js} +1 -1
  45. package/storybook-static/assets/{BubbleMenu.stories-Up_UUIWc.js → BubbleMenu.stories-C4DR01bC.js} +1 -1
  46. package/storybook-static/assets/{Button-DtiJJxMy.js → Button-83Rb3m5a.js} +1 -1
  47. package/storybook-static/assets/{Button.stories-BG9uxBwH.js → Button.stories-CBYliITN.js} +1 -1
  48. package/storybook-static/assets/{Calendar.stories-CUZikQRy.js → Calendar.stories-Dqi94wuY.js} +1 -1
  49. package/storybook-static/assets/{Card-BrvmNtM2.js → Card-COnu8cMa.js} +1 -1
  50. package/storybook-static/assets/{Card.stories-Bf_EtMxA.js → Card.stories-Bq9z7byl.js} +1 -1
  51. package/storybook-static/assets/{CardNav.stories-OiwfVEn3.js → CardNav.stories-Dt55ZFOT.js} +1 -1
  52. package/storybook-static/assets/{Carousel.stories-Gw1aPaNl.js → Carousel.stories-DPGGh8e2.js} +1 -1
  53. package/storybook-static/assets/{Checkbox-CJhut6rk.js → Checkbox-DXyNO7YZ.js} +1 -1
  54. package/storybook-static/assets/{Checkbox.stories-tIqU6B-y.js → Checkbox.stories-XFy6_cHg.js} +1 -1
  55. package/storybook-static/assets/ChordDiagram-Bk6idINH.css +1 -0
  56. package/storybook-static/assets/ChordDiagram.stories-BZliaejf.js +25 -0
  57. package/storybook-static/assets/{ChromaGrid.stories-DbsrxAuC.js → ChromaGrid.stories-CApS2QXP.js} +1 -1
  58. package/storybook-static/assets/{CircularGallery.stories-0ffqgfyn.js → CircularGallery.stories-BlNX4k_S.js} +1 -1
  59. package/storybook-static/assets/{CircularText.stories-o46bAR53.js → CircularText.stories-Ceh0rRi1.js} +1 -1
  60. package/storybook-static/assets/{ClickSpark.stories-Ci-BtpH_.js → ClickSpark.stories-WnLtsFNk.js} +1 -1
  61. package/storybook-static/assets/{ColorBends.stories-CAiI7Gmw.js → ColorBends.stories-CLsU0EG8.js} +1 -1
  62. package/storybook-static/assets/{CountUp.stories-CFiYranp.js → CountUp.stories-reozHM_1.js} +1 -1
  63. package/storybook-static/assets/{Counter.stories-BfaVu_y6.js → Counter.stories-Dku6-Lnw.js} +1 -1
  64. package/storybook-static/assets/{Crosshair.stories-_Hh1nKQp.js → Crosshair.stories-DybQmZ3h.js} +1 -1
  65. package/storybook-static/assets/{Cubes.stories-DXBS_f8J.js → Cubes.stories-BjXSc5QW.js} +1 -1
  66. package/storybook-static/assets/{CurvedLoop.stories-jcgMeMsw.js → CurvedLoop.stories-KgersFw2.js} +1 -1
  67. package/storybook-static/assets/{DarkVeil.stories-BwtU9vKO.js → DarkVeil.stories-CJBTJSz8.js} +1 -1
  68. package/storybook-static/assets/{DateInput-6Jn_FyvO.js → DateInput-BLV3e07T.js} +1 -1
  69. package/storybook-static/assets/{DateInput.stories-C_XBRwB3.js → DateInput.stories-DLRz8fqR.js} +1 -1
  70. package/storybook-static/assets/{DecayCard.stories-D6kTH79t.js → DecayCard.stories-DGN4O3Mj.js} +1 -1
  71. package/storybook-static/assets/{DecryptedText.stories-B4xWEvyF.js → DecryptedText.stories-SdAoPuM6.js} +1 -1
  72. package/storybook-static/assets/{Dither.stories-DmAOxBWe.js → Dither.stories-Dg2Qff92.js} +1 -1
  73. package/storybook-static/assets/{Dock.stories-AHZywNVf.js → Dock.stories-D74JtWe-.js} +1 -1
  74. package/storybook-static/assets/{EditFAB.stories-BJ5P85ZN.js → EditFAB.stories-B9Sa836v.js} +1 -1
  75. package/storybook-static/assets/{EvilEye.stories-D0CBPfm1.js → EvilEye.stories-Cw-2c0HG.js} +1 -1
  76. package/storybook-static/assets/{FadeContent.stories-D1capsBJ.js → FadeContent.stories-DqJHiF9w.js} +1 -1
  77. package/storybook-static/assets/{FaultyTerminal.stories-BxqqRf0S.js → FaultyTerminal.stories-MgqyW8nH.js} +1 -1
  78. package/storybook-static/assets/{Fbo-DvyLCJ1Y.js → Fbo-rjI50RR9.js} +1 -1
  79. package/storybook-static/assets/{FloatingLines.stories-7ze9ddpl.js → FloatingLines.stories-DmY-Mkaf.js} +1 -1
  80. package/storybook-static/assets/{FlowingMenu.stories-BX9PD8x2.js → FlowingMenu.stories-DKz3a0Zd.js} +1 -1
  81. package/storybook-static/assets/{FluidGlass.stories-DynD7GVO.js → FluidGlass.stories-DbWDIAaP.js} +1 -1
  82. package/storybook-static/assets/{Folder.stories-DDktLoEO.js → Folder.stories-CkEj6N-U.js} +1 -1
  83. package/storybook-static/assets/{FuzzyText.stories-D9tRARUX.js → FuzzyText.stories-XIFHJ6IE.js} +1 -1
  84. package/storybook-static/assets/{Galaxy.stories-aSApGekp.js → Galaxy.stories-Bpx63raQ.js} +1 -1
  85. package/storybook-static/assets/{GhostCursor.stories-5l0di532.js → GhostCursor.stories-DyxjSzii.js} +1 -1
  86. package/storybook-static/assets/{GlareHover.stories-Dc69-LbU.js → GlareHover.stories-BwQV1tAW.js} +1 -1
  87. package/storybook-static/assets/{GlassSurface.stories-DETLyc0H.js → GlassSurface.stories-OC5mV8xA.js} +1 -1
  88. package/storybook-static/assets/{GlitchText.stories-Bzb3ZMSY.js → GlitchText.stories-B0bz69xi.js} +1 -1
  89. package/storybook-static/assets/{GooeyNav.stories-rxdxJjAy.js → GooeyNav.stories-vKC1eIZ7.js} +1 -1
  90. package/storybook-static/assets/{GradientBlinds.stories-03LkBbo8.js → GradientBlinds.stories-BlFIa6E1.js} +1 -1
  91. package/storybook-static/assets/{GradientText.stories-CGo9FyNH.js → GradientText.stories-B662V5lp.js} +1 -1
  92. package/storybook-static/assets/{Grainient.stories-CzGAEJr-.js → Grainient.stories-ASLiDGhy.js} +1 -1
  93. package/storybook-static/assets/{GridMotion.stories-BzeBDaK8.js → GridMotion.stories-9vYEfFU5.js} +1 -1
  94. package/storybook-static/assets/HabitTimeOfDayChart.stories-DFGnkEfQ.js +49 -0
  95. package/storybook-static/assets/{ImageSlideshow.stories-hoGOc1Gf.js → ImageSlideshow.stories-BDdgiAUd.js} +1 -1
  96. package/storybook-static/assets/{Iridescence.stories-CQTjQ1lh.js → Iridescence.stories-FZVPa6Zb.js} +1 -1
  97. package/storybook-static/assets/{LaserFlow.stories-DzkVWskc.js → LaserFlow.stories-DObt_d2n.js} +1 -1
  98. package/storybook-static/assets/{LetterGlitch.stories-0wcxCpnJ.js → LetterGlitch.stories-Cf_vULWH.js} +1 -1
  99. package/storybook-static/assets/{LightPillar.stories-C3jRtdg9.js → LightPillar.stories-nZkTB0fq.js} +1 -1
  100. package/storybook-static/assets/{LightRays.stories-C52kBsnd.js → LightRays.stories-K-i71-tu.js} +1 -1
  101. package/storybook-static/assets/{Lightning.stories-BFVGqmMh.js → Lightning.stories-ByQwF3RZ.js} +1 -1
  102. package/storybook-static/assets/{LineWaves.stories-DNdwRrSd.js → LineWaves.stories-CdfUDsCS.js} +1 -1
  103. package/storybook-static/assets/{LiquidChrome.stories-DFTBXxI6.js → LiquidChrome.stories-BXkNdjZS.js} +1 -1
  104. package/storybook-static/assets/{LiquidEther.stories-BGYmyfDI.js → LiquidEther.stories-CGpLWWCj.js} +1 -1
  105. package/storybook-static/assets/{LoadingSpinner-D3Kx-V7J.js → LoadingSpinner-C2iJvHMr.js} +1 -1
  106. package/storybook-static/assets/{LoadingSpinner.stories-CP70BGAb.js → LoadingSpinner.stories-C9SM_Yp7.js} +1 -1
  107. package/storybook-static/assets/{MagicRings.stories-BA9xv5mB.js → MagicRings.stories-CDsUclcL.js} +1 -1
  108. package/storybook-static/assets/{Magnet.stories-cqBYCb-D.js → Magnet.stories-CGvgF9lm.js} +1 -1
  109. package/storybook-static/assets/{MagnetLines.stories-QkoPnGKj.js → MagnetLines.stories-CAeIkhJn.js} +1 -1
  110. package/storybook-static/assets/{Masonry.stories-CiGXRf3O.js → Masonry.stories-CUJK0KGB.js} +1 -1
  111. package/storybook-static/assets/{MetaBalls.stories-3l0pQiKn.js → MetaBalls.stories-Ct_AsbzH.js} +1 -1
  112. package/storybook-static/assets/{MetallicPaint.stories-DgZJfMr5.js → MetallicPaint.stories-Df_Zgq1A.js} +1 -1
  113. package/storybook-static/assets/MoodChart.stories-3V2WoSGm.js +40 -0
  114. package/storybook-static/assets/{MotionConfigContext-BWFxZgdN.js → MotionConfigContext-CRCVf1uh.js} +1 -1
  115. package/storybook-static/assets/{Navbar.stories-C_Zyfhqr.js → Navbar.stories-DnyCDm9i.js} +1 -1
  116. package/storybook-static/assets/{Noise.stories-Cg7CucgT.js → Noise.stories-BqQkIZ8v.js} +1 -1
  117. package/storybook-static/assets/{NumberStepper-DpOu7xmF.js → NumberStepper-Cq7QAruL.js} +1 -1
  118. package/storybook-static/assets/{NumberStepper.stories-CvG9oY5Q.js → NumberStepper.stories-B9Ektv04.js} +1 -1
  119. package/storybook-static/assets/{Orb.stories-BR92tgyW.js → Orb.stories-CpdPYpRZ.js} +1 -1
  120. package/storybook-static/assets/{OrbitImages.stories-D_-2HcAd.js → OrbitImages.stories-B1O85i87.js} +1 -1
  121. package/storybook-static/assets/PieChart.stories-DEShZFit.js +91 -0
  122. package/storybook-static/assets/{PixelBlast.stories-B6FXuNf4.js → PixelBlast.stories-toacD96G.js} +1 -1
  123. package/storybook-static/assets/{PixelCard.stories-Dq4CP2Qj.js → PixelCard.stories-C8QPPRqE.js} +1 -1
  124. package/storybook-static/assets/{PixelSnow.stories-BoQSOear.js → PixelSnow.stories-DCZqYJ8y.js} +1 -1
  125. package/storybook-static/assets/{PixelTransition.stories-CtQQ070z.js → PixelTransition.stories-hOlznl24.js} +1 -1
  126. package/storybook-static/assets/{Plasma.stories-D-421jzZ.js → Plasma.stories-BD2LF5uw.js} +1 -1
  127. package/storybook-static/assets/PolarHeatmap.stories-CPPy32mr.js +26 -0
  128. package/storybook-static/assets/{Prism.stories-BuibpwdU.js → Prism.stories-yp33iZTg.js} +1 -1
  129. package/storybook-static/assets/{PrismaticBurst.stories-CwYzdBlM.js → PrismaticBurst.stories-6MirvK8Q.js} +1 -1
  130. package/storybook-static/assets/{ProfileCard.stories-Dj4oJCxw.js → ProfileCard.stories-l6W358Jg.js} +1 -1
  131. package/storybook-static/assets/ProgressRings-CR8t1see.css +1 -0
  132. package/storybook-static/assets/ProgressRings.stories-DQpINdQ5.js +67 -0
  133. package/storybook-static/assets/{QuantifiableHabitsChart.stories-ZY1-WQ1g.js → QuantifiableHabitsChart.stories-CAbcMOsL.js} +3 -3
  134. package/storybook-static/assets/{Radar.stories-DxNmoYV3.js → Radar.stories-cawmnZFr.js} +1 -1
  135. package/storybook-static/assets/RadialDayChart-CjNQ36HL.css +1 -0
  136. package/storybook-static/assets/RadialDayChart.stories-D1QVgDAt.js +26 -0
  137. package/storybook-static/assets/{RecurrencePicker.stories-BAicSNhQ.js → RecurrencePicker.stories-Dj2MXHV4.js} +1 -1
  138. package/storybook-static/assets/{Ribbons.stories-usN1kCyI.js → Ribbons.stories-CSQ2SZyL.js} +1 -1
  139. package/storybook-static/assets/{RippleGrid.stories-nTLGHPV6.js → RippleGrid.stories-CwWpTtq1.js} +1 -1
  140. package/storybook-static/assets/{RotatingText.stories-8CShs_WJ.js → RotatingText.stories-Cuq7WFhZ.js} +1 -1
  141. package/storybook-static/assets/{ScrollFloat.stories-Dp9YyvHK.js → ScrollFloat.stories-BhUAiHbQ.js} +1 -1
  142. package/storybook-static/assets/{ScrollReveal.stories-Dy4JUrqi.js → ScrollReveal.stories-D8UDTvCL.js} +1 -1
  143. package/storybook-static/assets/{ScrollVelocity.stories-CUf-OHNp.js → ScrollVelocity.stories-6VBsKp1n.js} +1 -1
  144. package/storybook-static/assets/{SearchBar.stories-BKfuRnlK.js → SearchBar.stories-DlWYwaoD.js} +1 -1
  145. package/storybook-static/assets/{SearchableDropdown-Ctnh_PVq.js → SearchableDropdown-C_Ne0TA3.js} +1 -1
  146. package/storybook-static/assets/{SearchableDropdown.stories-1d-goy0G.js → SearchableDropdown.stories-nwQqM99l.js} +1 -1
  147. package/storybook-static/assets/{SelectInput-C94OHQIl.js → SelectInput-39F_8d3i.js} +1 -1
  148. package/storybook-static/assets/{SelectInput.stories-DPV5iKcs.js → SelectInput.stories-7ET-2BZM.js} +1 -1
  149. package/storybook-static/assets/{ShapeBlur.stories-CdASN24B.js → ShapeBlur.stories-DuzZfhXI.js} +1 -1
  150. package/storybook-static/assets/{ShapeGrid.stories-Duzq6qpW.js → ShapeGrid.stories-6Emgz4Xz.js} +1 -1
  151. package/storybook-static/assets/{ShinyText.stories-Dgqps29_.js → ShinyText.stories-CPR__VsR.js} +1 -1
  152. package/storybook-static/assets/{Silk.stories-DWnaBFZp.js → Silk.stories-BGWPr5D2.js} +1 -1
  153. package/storybook-static/assets/SleepChart.stories-Dmf1Hltv.js +58 -0
  154. package/storybook-static/assets/{Slider-C69QbwVa.js → Slider-D9vb-_lz.js} +1 -1
  155. package/storybook-static/assets/{Slider.stories-DDhTLU2g.js → Slider.stories-CUNPAtd0.js} +1 -1
  156. package/storybook-static/assets/{SoftAurora.stories-C5OSOqjj.js → SoftAurora.stories-ChcxW0hb.js} +1 -1
  157. package/storybook-static/assets/{SoundDemo.stories-sb4V9P8H.js → SoundDemo.stories-VemKEfkR.js} +1 -1
  158. package/storybook-static/assets/{SplashCursor.stories-PeC0-y78.js → SplashCursor.stories-D1ZTyWhi.js} +1 -1
  159. package/storybook-static/assets/{SpotlightCard.stories-BCCdQhIJ.js → SpotlightCard.stories-CBaCxWbM.js} +1 -1
  160. package/storybook-static/assets/{Stack.stories-DJekNsdu.js → Stack.stories-65akIYaj.js} +1 -1
  161. package/storybook-static/assets/{StaggeredMenu.stories-BU-AxZRv.js → StaggeredMenu.stories-BU40lLcN.js} +1 -1
  162. package/storybook-static/assets/{StarBorder.stories-Dw9LDvMk.js → StarBorder.stories-Cqh86yZs.js} +1 -1
  163. package/storybook-static/assets/SunburstChart.stories-BGVtmBel.js +285 -0
  164. package/storybook-static/assets/{Table.stories-IhtnLV5J.js → Table.stories-m-dD0hDS.js} +1 -1
  165. package/storybook-static/assets/{Tabs.stories-F_Q4-xiR.js → Tabs.stories-DjpA129B.js} +1 -1
  166. package/storybook-static/assets/{TargetCursor.stories-B-Tl1DdA.js → TargetCursor.stories-B62hPQV-.js} +1 -1
  167. package/storybook-static/assets/{TextArea-Bb148SaD.js → TextArea-CMIvdohR.js} +1 -1
  168. package/storybook-static/assets/{TextArea.stories-5-dHoUPL.js → TextArea.stories-C2ejt4yi.js} +1 -1
  169. package/storybook-static/assets/{TextCursor.stories-O-EIx7Nu.js → TextCursor.stories-DbSzkVIZ.js} +1 -1
  170. package/storybook-static/assets/{TextInput-BQ78htqq.js → TextInput-kBi6r-DZ.js} +1 -1
  171. package/storybook-static/assets/{TextInput.stories-Bjjfu_5O.js → TextInput.stories-BSbA4H9h.js} +1 -1
  172. package/storybook-static/assets/{TextPressure.stories-BvXWcayn.js → TextPressure.stories-BjYHv0dB.js} +1 -1
  173. package/storybook-static/assets/{TextType.stories-DL92625c.js → TextType.stories-CTsOM2j0.js} +1 -1
  174. package/storybook-static/assets/{ThemeSwitcher.stories-BUUyb12v.js → ThemeSwitcher.stories-BUnyRqDi.js} +1 -1
  175. package/storybook-static/assets/{Threads.stories-C_LDNe0R.js → Threads.stories-CbFZ2-LC.js} +1 -1
  176. package/storybook-static/assets/{TimeInput.stories-Tj2LrCtN.js → TimeInput.stories-CCYb3ycp.js} +1 -1
  177. package/storybook-static/assets/{Toggle-BgFXbOVy.js → Toggle-B8i7xSap.js} +1 -1
  178. package/storybook-static/assets/{Toggle.stories-voNeGmVh.js → Toggle.stories-IhnDej2s.js} +1 -1
  179. package/storybook-static/assets/{ToggleButton-CQLM9369.js → ToggleButton-DZOeCY6k.js} +1 -1
  180. package/storybook-static/assets/{ToggleButton.stories-CLdG94qe.js → ToggleButton.stories-Ca6yok5k.js} +1 -1
  181. package/storybook-static/assets/{TrueFocus.stories-CEC_mKz7.js → TrueFocus.stories-C4zaM767.js} +1 -1
  182. package/storybook-static/assets/{VariableProximity.stories-CoB68xuF.js → VariableProximity.stories-CZcw99go.js} +1 -1
  183. package/storybook-static/assets/{Waves.stories-Cpn9tv6C.js → Waves.stories-Mo0BfNOq.js} +1 -1
  184. package/storybook-static/assets/{arc-DgcIQOLP.js → arc--Q2xWRUA.js} +1 -1
  185. package/storybook-static/assets/back-BxPoHLz2.js +1 -0
  186. package/storybook-static/assets/{band-Cq25-Mh7.js → band-D-svgzWl.js} +1 -1
  187. package/storybook-static/assets/{calendar-B90N4a5g.js → calendar-bUcBNUjV.js} +1 -1
  188. package/storybook-static/assets/{chart-column-Qn3KVlVm.js → chart-column-CB0l3JOL.js} +1 -1
  189. package/storybook-static/assets/{check-BdgefYk0.js → check-D11muFzc.js} +1 -1
  190. package/storybook-static/assets/{chevron-down-rAxqUK0f.js → chevron-down-D5ipCjUH.js} +1 -1
  191. package/storybook-static/assets/{chevron-right-BQYLOSGD.js → chevron-right-pxDpP2zm.js} +1 -1
  192. package/storybook-static/assets/client-BcH49jwt.js +1 -0
  193. package/storybook-static/assets/{createLucideIcon-CanksmPJ.js → createLucideIcon-S7OoTmdc.js} +1 -1
  194. package/storybook-static/assets/descending-BO6OmMcj.js +1 -0
  195. package/storybook-static/assets/{download-BoPCl2gy.js → download-nBu86hUE.js} +1 -1
  196. package/storybook-static/assets/{folder-B0zTnOfo.js → folder-DA8vtXXN.js} +1 -1
  197. package/storybook-static/assets/{iconBase-jWAd7fUM.js → iconBase-DEIlaCbU.js} +1 -1
  198. package/storybook-static/assets/{iframe-BTbLpgFM.js → iframe-BxepBtx0.js} +3 -3
  199. package/storybook-static/assets/{index-8orVvKs3.js → index-4UL0sjOk.js} +1 -1
  200. package/storybook-static/assets/{index-Dnnp7mc9.js → index-Ct0SUml7.js} +1 -1
  201. package/storybook-static/assets/{index-D9A3yXPP.js → index-DyYqwgzw.js} +1 -1
  202. package/storybook-static/assets/linear-BTA54h8k.js +1 -0
  203. package/storybook-static/assets/monotone-Ca9yXB0X.js +1 -0
  204. package/storybook-static/assets/path-CSVzDSO0.js +1 -0
  205. package/storybook-static/assets/{proxy-DHiOkbBq.js → proxy-CriS3ead.js} +1 -1
  206. package/storybook-static/assets/{react-18-RyhzFaVZ.js → react-18-B5blUeRu.js} +1 -1
  207. package/storybook-static/assets/{react-three-fiber.esm-DyDueq1t.js → react-three-fiber.esm-Bbpjp-0U.js} +1 -1
  208. package/storybook-static/assets/{search-C2F8ucQI.js → search-Db-1eb78.js} +1 -1
  209. package/storybook-static/assets/{settings-B4F4kfld.js → settings-DZmzMR5T.js} +1 -1
  210. package/storybook-static/assets/{sun-CbGl2Vwt.js → sun-DC4WyAtt.js} +1 -1
  211. package/storybook-static/assets/{transform-v7fcW145.js → transform-DaumkFRH.js} +1 -1
  212. package/storybook-static/assets/{trash-2-CNCXZ0wH.js → trash-2-C-dE1YLC.js} +1 -1
  213. package/storybook-static/assets/{use-animation-frame-DY1VsI4g.js → use-animation-frame-eP0MSTj9.js} +1 -1
  214. package/storybook-static/assets/{use-in-view-Cawxv_UZ.js → use-in-view-BXgNpgg1.js} +1 -1
  215. package/storybook-static/assets/{use-motion-value-BKT0PPfP.js → use-motion-value-DWEoPKqa.js} +1 -1
  216. package/storybook-static/assets/{use-spring-CDH8BIpQ.js → use-spring-CHtlXZ5H.js} +1 -1
  217. package/storybook-static/assets/{use-transform-Bj0aHFrd.js → use-transform-CWJyn-_D.js} +1 -1
  218. package/storybook-static/assets/{useSound-OlKqgJtL.js → useSound-B4Mjw5gj.js} +1 -1
  219. package/storybook-static/assets/{users-Oy8C2tFC.js → users-BKw8hMYi.js} +1 -1
  220. package/storybook-static/assets/value-CMZJhU-O.js +1 -0
  221. package/storybook-static/assets/{x-CR0CkM0G.js → x-aUMnvdMn.js} +1 -1
  222. package/storybook-static/iframe.html +1 -1
  223. package/storybook-static/index.json +1 -1
  224. package/storybook-static/project.json +1 -1
  225. package/storybook-static/assets/BooleansHeatmap.stories-CKYZW8W5.js +0 -63
  226. package/storybook-static/assets/HabitTimeOfDayChart.stories-CbMqUfq0.js +0 -49
  227. package/storybook-static/assets/MoodChart.stories-UXaQU4EG.js +0 -40
  228. package/storybook-static/assets/PieChart.stories-CjtEiSJY.js +0 -91
  229. package/storybook-static/assets/SleepChart.stories-C1n9aK7B.js +0 -58
  230. package/storybook-static/assets/SunburstChart.stories-CE4d4r8-.js +0 -285
  231. package/storybook-static/assets/client-Chg03P_H.js +0 -1
  232. package/storybook-static/assets/linear-9syG7RFK.js +0 -1
  233. package/storybook-static/assets/monotone-B6BFTqpP.js +0 -1
  234. package/storybook-static/assets/path-CbwjOpE9.js +0 -1
package/dist/index.esm.js CHANGED
@@ -11,7 +11,7 @@ import { createTheme, ThemeProvider as ThemeProvider$1 } from '@mui/material/sty
11
11
  import { RRule } from 'rrule';
12
12
  import * as d3 from 'd3';
13
13
 
14
- var styles$C = {"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","icon":"Button-module_icon__JNzlJ","iconLeft":"Button-module_iconLeft__Fpz-y","iconRight":"Button-module_iconRight__kTfjS","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"};
14
+ var styles$G = {"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","icon":"Button-module_icon__JNzlJ","iconLeft":"Button-module_iconLeft__Fpz-y","iconRight":"Button-module_iconRight__kTfjS","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"};
15
15
 
16
16
  const SOUND_PACKS = {
17
17
  digital: {
@@ -577,11 +577,11 @@ const Button = ({ variant = 'primary', size = 'medium', fullWidth = false, loadi
577
577
  const { handlers } = useComponentSound(soundConfig);
578
578
  const isIcon = variant === 'icon';
579
579
  const buttonClasses = [
580
- styles$C.button,
581
- styles$C[variant],
582
- !isIcon && styles$C[size],
583
- fullWidth && styles$C.fullWidth,
584
- loading && styles$C.loading,
580
+ styles$G.button,
581
+ styles$G[variant],
582
+ !isIcon && styles$G[size],
583
+ fullWidth && styles$G.fullWidth,
584
+ loading && styles$G.loading,
585
585
  className
586
586
  ].filter(Boolean).join(' ');
587
587
  const handleClick = (e) => {
@@ -592,10 +592,10 @@ const Button = ({ variant = 'primary', size = 'medium', fullWidth = false, loadi
592
592
  handlers.onMouseEnter?.();
593
593
  onMouseEnter?.(e);
594
594
  };
595
- return (jsxs(motion.button, { className: buttonClasses, disabled: disabled || loading, whileHover: isIcon ? undefined : { scale: disabled || loading ? 1 : 1.02 }, whileTap: { scale: disabled || loading ? 1 : (isIcon ? 0.9 : 0.98) }, transition: { type: "spring", stiffness: 400, damping: 17 }, onClick: handleClick, onMouseEnter: handleMouseEnter, onFocus: onFocus, ...motionProps, ...rest, children: [loading && jsx("span", { className: styles$C.spinner }), iconLeft && jsx("span", { className: styles$C.iconLeft, children: iconLeft }), children, iconRight && jsx("span", { className: styles$C.iconRight, children: iconRight })] }));
595
+ return (jsxs(motion.button, { className: buttonClasses, disabled: disabled || loading, whileHover: isIcon ? undefined : { scale: disabled || loading ? 1 : 1.02 }, whileTap: { scale: disabled || loading ? 1 : (isIcon ? 0.9 : 0.98) }, transition: { type: "spring", stiffness: 400, damping: 17 }, onClick: handleClick, onMouseEnter: handleMouseEnter, onFocus: onFocus, ...motionProps, ...rest, children: [loading && jsx("span", { className: styles$G.spinner }), iconLeft && jsx("span", { className: styles$G.iconLeft, children: iconLeft }), children, iconRight && jsx("span", { className: styles$G.iconRight, children: iconRight })] }));
596
596
  };
597
597
 
598
- var styles$B = {"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"};
598
+ var styles$F = {"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"};
599
599
 
600
600
  /**
601
601
  * Card Component
@@ -660,28 +660,28 @@ const Card = ({ variant = 'elevated', hoverable = false, clickable = false, padd
660
660
  onExpandChange?.(newExpanded);
661
661
  };
662
662
  const cardClasses = [
663
- styles$B.card,
664
- styles$B[variant],
665
- hoverable && styles$B.hoverable,
666
- clickable && styles$B.clickable,
667
- !padding && styles$B.noPadding,
668
- expandable && styles$B.expandable,
663
+ styles$F.card,
664
+ styles$F[variant],
665
+ hoverable && styles$F.hoverable,
666
+ clickable && styles$F.clickable,
667
+ !padding && styles$F.noPadding,
668
+ expandable && styles$F.expandable,
669
669
  className
670
670
  ].filter(Boolean).join(' ');
671
671
  const renderHeader = () => {
672
672
  if (header) {
673
- return (jsxs("div", { className: styles$B.header, children: [jsx("div", { className: styles$B.headerContent, children: header }), expandable && (jsx("button", { className: styles$B.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$B.expandIcon, style: { transform: isExpanded ? 'rotate(180deg)' : 'rotate(0deg)' }, children: jsx("path", { d: "M6 9l6 6 6-6" }) }) }))] }));
673
+ return (jsxs("div", { className: styles$F.header, children: [jsx("div", { className: styles$F.headerContent, children: header }), expandable && (jsx("button", { className: styles$F.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$F.expandIcon, style: { transform: isExpanded ? 'rotate(180deg)' : 'rotate(0deg)' }, children: jsx("path", { d: "M6 9l6 6 6-6" }) }) }))] }));
674
674
  }
675
675
  if (title || subtitle) {
676
- return (jsxs("div", { className: styles$B.header, children: [jsxs("div", { className: styles$B.headerContent, children: [title && jsx("h3", { className: styles$B.title, children: title }), subtitle && jsx("p", { className: styles$B.subtitle, children: subtitle })] }), expandable && (jsx("button", { className: styles$B.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$B.expandIcon, style: { transform: isExpanded ? 'rotate(180deg)' : 'rotate(0deg)' }, children: jsx("path", { d: "M6 9l6 6 6-6" }) }) }))] }));
676
+ return (jsxs("div", { className: styles$F.header, children: [jsxs("div", { className: styles$F.headerContent, children: [title && jsx("h3", { className: styles$F.title, children: title }), subtitle && jsx("p", { className: styles$F.subtitle, children: subtitle })] }), expandable && (jsx("button", { className: styles$F.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$F.expandIcon, style: { transform: isExpanded ? 'rotate(180deg)' : 'rotate(0deg)' }, children: jsx("path", { d: "M6 9l6 6 6-6" }) }) }))] }));
677
677
  }
678
678
  return null;
679
679
  };
680
- const cardContent = (jsxs(Fragment, { children: [image && (jsx("div", { className: styles$B.imageContainer, children: jsx("img", { src: image, alt: imageAlt, className: styles$B.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$B.expandableContent, children: [children && (jsx("div", { className: padding ? styles$B.body : undefined, children: children })), footer && jsx("div", { className: styles$B.footer, children: footer })] }, "content")) })] }));
680
+ const cardContent = (jsxs(Fragment, { children: [image && (jsx("div", { className: styles$F.imageContainer, children: jsx("img", { src: image, alt: imageAlt, className: styles$F.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$F.expandableContent, children: [children && (jsx("div", { className: padding ? styles$F.body : undefined, children: children })), footer && jsx("div", { className: styles$F.footer, children: footer })] }, "content")) })] }));
681
681
  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 }));
682
682
  };
683
683
 
684
- var styles$A = {"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"};
684
+ var styles$E = {"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"};
685
685
 
686
686
  /**
687
687
  * EmptyState Component
@@ -718,11 +718,11 @@ var styles$A = {"wrapper":"EmptyState-module_wrapper__h3Y2E","compact":"EmptySta
718
718
  * @returns {JSX.Element} The rendered EmptyState component
719
719
  */
720
720
  const EmptyState = ({ icon, title, message, action, size = 'default', }) => {
721
- const wrapperClass = [styles$A.wrapper, styles$A[size]].filter(Boolean).join(' ');
722
- return (jsxs("div", { className: wrapperClass, children: [icon && jsx("div", { className: styles$A.icon, children: icon }), title && jsx("h3", { className: styles$A.title, children: title }), jsx("p", { className: styles$A.message, children: message }), action && jsx("div", { className: styles$A.action, children: action })] }));
721
+ const wrapperClass = [styles$E.wrapper, styles$E[size]].filter(Boolean).join(' ');
722
+ return (jsxs("div", { className: wrapperClass, children: [icon && jsx("div", { className: styles$E.icon, children: icon }), title && jsx("h3", { className: styles$E.title, children: title }), jsx("p", { className: styles$E.message, children: message }), action && jsx("div", { className: styles$E.action, children: action })] }));
723
723
  };
724
724
 
725
- var styles$z = {"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","backdropSheet":"Modal-module_backdropSheet__o9kW3","dialogSheet":"Modal-module_dialogSheet__EjpwP","grabBar":"Modal-module_grabBar__qhl9f"};
725
+ var styles$D = {"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","backdropSheet":"Modal-module_backdropSheet__o9kW3","dialogSheet":"Modal-module_dialogSheet__EjpwP","grabBar":"Modal-module_grabBar__qhl9f"};
726
726
 
727
727
  const MOBILE_BREAKPOINT = '(max-width: 640px)';
728
728
  const useIsMobile = () => {
@@ -759,14 +759,14 @@ const Modal = ({ open, title, onClose, children, size = 'default', actions, padd
759
759
  return null;
760
760
  const isSheet = mobileVariant === 'sheet' && isMobile;
761
761
  const isDraggable = isSheet && draggable;
762
- const backdropClass = [styles$z.backdrop, isSheet && styles$z.backdropSheet]
762
+ const backdropClass = [styles$D.backdrop, isSheet && styles$D.backdropSheet]
763
763
  .filter(Boolean)
764
764
  .join(' ');
765
765
  const dialogClass = [
766
- styles$z.dialog,
767
- size === 'compact' && styles$z.dialogCompact,
768
- size === 'wide' && styles$z.dialogWide,
769
- isSheet && styles$z.dialogSheet,
766
+ styles$D.dialog,
767
+ size === 'compact' && styles$D.dialogCompact,
768
+ size === 'wide' && styles$D.dialogWide,
769
+ isSheet && styles$D.dialogSheet,
770
770
  ]
771
771
  .filter(Boolean)
772
772
  .join(' ');
@@ -782,16 +782,16 @@ const Modal = ({ open, title, onClose, children, size = 'default', actions, padd
782
782
  : { duration: 0.15, ease: 'easeOut' }, onClick: (e) => e.stopPropagation(), drag: isDraggable ? 'y' : false, dragControls: isDraggable ? dragControls : undefined, dragConstraints: { top: 0 }, dragElastic: { top: 0, bottom: 0.3 }, dragListener: false, onDragEnd: (_, info) => {
783
783
  if (info.offset.y > 80)
784
784
  onClose();
785
- }, children: [isSheet && jsx("div", { className: styles$z.grabBar }), jsxs("div", { ref: headerRef, className: styles$z.header, onPointerDown: (e) => {
785
+ }, children: [isSheet && jsx("div", { className: styles$D.grabBar }), jsxs("div", { ref: headerRef, className: styles$D.header, onPointerDown: (e) => {
786
786
  if (!isDraggable)
787
787
  return;
788
788
  if (e.target.closest('button'))
789
789
  return;
790
790
  dragControls.start(e);
791
- }, children: [jsx("span", { className: styles$z.title, children: title }), actions && jsx("div", { className: styles$z.headerActions, children: actions }), jsx("button", { className: styles$z.closeButton, onClick: onClose, "aria-label": "Close modal", type: "button", children: jsx(X, { size: 16 }) })] }), jsx("div", { className: padding ? styles$z.body : styles$z.bodyFlush, children: children })] }) })) }), document.body);
791
+ }, children: [jsx("span", { className: styles$D.title, children: title }), actions && jsx("div", { className: styles$D.headerActions, children: actions }), jsx("button", { className: styles$D.closeButton, onClick: onClose, "aria-label": "Close modal", type: "button", children: jsx(X, { size: 16 }) })] }), jsx("div", { className: padding ? styles$D.body : styles$D.bodyFlush, children: children })] }) })) }), document.body);
792
792
  };
793
793
 
794
- var styles$y = {"checkboxLabel":"Checkbox-module_checkboxLabel__4tBVg","checkbox":"Checkbox-module_checkbox__BbJul","checkboxText":"Checkbox-module_checkboxText__oJsc9"};
794
+ var styles$C = {"checkboxLabel":"Checkbox-module_checkboxLabel__4tBVg","checkbox":"Checkbox-module_checkbox__BbJul","checkboxText":"Checkbox-module_checkboxText__oJsc9"};
795
795
 
796
796
  /**
797
797
  * Checkbox component - Modern interactive checkbox with animations
@@ -836,13 +836,13 @@ const Checkbox = ({ checked, onChange, label, disabled = false, indeterminate =
836
836
  checkboxRef.current.indeterminate = indeterminate;
837
837
  }
838
838
  }, [indeterminate]);
839
- return (jsxs("label", { className: styles$y.checkboxLabel, children: [jsx("input", { ref: checkboxRef, type: "checkbox", checked: checked, onChange: (e) => {
839
+ return (jsxs("label", { className: styles$C.checkboxLabel, children: [jsx("input", { ref: checkboxRef, type: "checkbox", checked: checked, onChange: (e) => {
840
840
  const isChecked = e.target.checked;
841
841
  onChange(isChecked);
842
842
  if (soundConfig?.onClick !== false) {
843
843
  playSound('toggle');
844
844
  }
845
- }, className: styles$y.checkbox, disabled: disabled, id: id, name: name, value: value, "aria-checked": indeterminate ? 'mixed' : checked }), label && jsx("span", { className: styles$y.checkboxText, children: label })] }));
845
+ }, className: styles$C.checkbox, disabled: disabled, id: id, name: name, value: value, "aria-checked": indeterminate ? 'mixed' : checked }), label && jsx("span", { className: styles$C.checkboxText, children: label })] }));
846
846
  };
847
847
 
848
848
  const formatDateToEuropean = (date) => {
@@ -873,7 +873,7 @@ const parseEuropeanDate = (dateString) => {
873
873
  return '';
874
874
  };
875
875
 
876
- var styles$x = {"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","nativeDateInput":"DateInput-module_nativeDateInput__tbi68","error":"DateInput-module_error__ieuPO","success":"DateInput-module_success__rPA93","loading":"DateInput-module_loading__1DAmD"};
876
+ var styles$B = {"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","nativeDateInput":"DateInput-module_nativeDateInput__tbi68","error":"DateInput-module_error__ieuPO","success":"DateInput-module_success__rPA93","loading":"DateInput-module_loading__1DAmD"};
877
877
 
878
878
  /**
879
879
  * DateInput component - European format date picker with manual input support
@@ -933,21 +933,21 @@ function DateInput({ label, value, onChange, placeholder = "25/12/2024", onFocus
933
933
  }
934
934
  };
935
935
  const getClassName = () => {
936
- const classes = [styles$x.dateInput];
936
+ const classes = [styles$B.dateInput];
937
937
  if (error)
938
- classes.push(styles$x.error);
938
+ classes.push(styles$B.error);
939
939
  if (success)
940
- classes.push(styles$x.success);
940
+ classes.push(styles$B.success);
941
941
  if (loading)
942
- classes.push(styles$x.loading);
942
+ classes.push(styles$B.loading);
943
943
  return classes.join(' ');
944
944
  };
945
945
  // Current ISO value for the native date input (or '' if empty/unparseable)
946
946
  const isoValue = value.includes('-') ? value : (parseEuropeanDate(value) || '');
947
- return (jsxs("div", { className: getClassName(), children: [jsx("label", { className: styles$x.label, children: label }), jsxs("div", { className: styles$x.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$x.textInput, disabled: disabled || loading, ...handlers }), jsxs("span", { className: styles$x.calendarButton, "aria-hidden": "true", children: [jsx(Calendar$1, {}), jsx("input", { type: "date", value: isoValue, onChange: handleCalendarChange, className: styles$x.nativeDateInput, title: "Select date from calendar", "aria-label": label ? `${label} calendar picker` : 'Calendar picker', disabled: disabled || loading })] })] })] }));
947
+ return (jsxs("div", { className: getClassName(), children: [jsx("label", { className: styles$B.label, children: label }), jsxs("div", { className: styles$B.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$B.textInput, disabled: disabled || loading, ...handlers }), jsxs("span", { className: styles$B.calendarButton, "aria-hidden": "true", children: [jsx(Calendar$1, {}), jsx("input", { type: "date", value: isoValue, onChange: handleCalendarChange, className: styles$B.nativeDateInput, title: "Select date from calendar", "aria-label": label ? `${label} calendar picker` : 'Calendar picker', disabled: disabled || loading })] })] })] }));
948
948
  }
949
949
 
950
- var styles$w = {"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"};
950
+ var styles$A = {"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"};
951
951
 
952
952
  /**
953
953
  * SearchableDropdown component - Modern filterable dropdown with animations
@@ -1052,23 +1052,23 @@ function SearchableDropdown({ label, value, onChange, options, placeholder = "Se
1052
1052
  }
1053
1053
  };
1054
1054
  const getTriggerClassName = () => {
1055
- const classes = [styles$w.dropdownTrigger];
1055
+ const classes = [styles$A.dropdownTrigger];
1056
1056
  if (isOpen)
1057
- classes.push(styles$w.open);
1057
+ classes.push(styles$A.open);
1058
1058
  if (loading)
1059
- classes.push(styles$w.loading);
1059
+ classes.push(styles$A.loading);
1060
1060
  if (error)
1061
- classes.push(styles$w.error);
1061
+ classes.push(styles$A.error);
1062
1062
  return classes.join(' ');
1063
1063
  };
1064
- return (jsxs("div", { className: styles$w.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$w.dropdownValue} ${!displayValue ? styles$w.placeholder : ''}`, children: displayValue || placeholder }), jsx(ChevronDown, { className: styles$w.dropdownArrow })] }), jsx(AnimatePresence, { children: isOpen && (jsxs(motion.div, { className: styles$w.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$w.dropdownSearch, children: [jsx(Search, { className: styles$w.searchIcon }), jsx("input", { ref: inputRef, type: "text", className: styles$w.searchInput, placeholder: "Cerca...", value: searchTerm, onChange: (e) => setSearchTerm(e.target.value), onClick: (e) => e.stopPropagation() })] }), jsxs("div", { className: styles$w.dropdownOptions, children: [allOptions.map((opt, index) => {
1064
+ return (jsxs("div", { className: styles$A.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$A.dropdownValue} ${!displayValue ? styles$A.placeholder : ''}`, children: displayValue || placeholder }), jsx(ChevronDown, { className: styles$A.dropdownArrow })] }), jsx(AnimatePresence, { children: isOpen && (jsxs(motion.div, { className: styles$A.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$A.dropdownSearch, children: [jsx(Search, { className: styles$A.searchIcon }), jsx("input", { ref: inputRef, type: "text", className: styles$A.searchInput, placeholder: "Cerca...", value: searchTerm, onChange: (e) => setSearchTerm(e.target.value), onClick: (e) => e.stopPropagation() })] }), jsxs("div", { className: styles$A.dropdownOptions, children: [allOptions.map((opt, index) => {
1065
1065
  const isSelected = value === opt.value;
1066
1066
  const isHighlighted = highlightedIndex === index;
1067
- return (jsxs(motion.button, { type: "button", className: `${styles$w.dropdownOption} ${isSelected ? styles$w.selected : ''} ${isHighlighted ? styles$w.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$w.checkIcon })] }, `${opt.value}-${index}`));
1068
- }), allOptions.length === 0 && (jsx(motion.div, { className: styles$w.dropdownNoResults, initial: { opacity: 0 }, animate: { opacity: 1 }, children: "No results found" }))] })] })) })] }));
1067
+ return (jsxs(motion.button, { type: "button", className: `${styles$A.dropdownOption} ${isSelected ? styles$A.selected : ''} ${isHighlighted ? styles$A.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$A.checkIcon })] }, `${opt.value}-${index}`));
1068
+ }), allOptions.length === 0 && (jsx(motion.div, { className: styles$A.dropdownNoResults, initial: { opacity: 0 }, animate: { opacity: 1 }, children: "No results found" }))] })] })) })] }));
1069
1069
  }
1070
1070
 
1071
- var styles$v = {"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"};
1071
+ var styles$z = {"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"};
1072
1072
 
1073
1073
  /**
1074
1074
  * SelectInput component - Styled dropdown selector with flexible option format
@@ -1106,26 +1106,26 @@ var styles$v = {"selectInput":"SelectInput-module_selectInput__s6zEg","selectWra
1106
1106
  function SelectInput({ label, value, onChange, options, placeholder = "Select...", disabled = false, error = false, success = false, loading = false, required = false, soundConfig, className }) {
1107
1107
  const { handlers, playSound } = useComponentSound(soundConfig);
1108
1108
  const getClassName = () => {
1109
- const classes = [styles$v.selectInput];
1109
+ const classes = [styles$z.selectInput];
1110
1110
  if (error)
1111
- classes.push(styles$v.error);
1111
+ classes.push(styles$z.error);
1112
1112
  if (success)
1113
- classes.push(styles$v.success);
1113
+ classes.push(styles$z.success);
1114
1114
  if (loading)
1115
- classes.push(styles$v.loading);
1115
+ classes.push(styles$z.loading);
1116
1116
  return classes.join(' ');
1117
1117
  };
1118
- 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$v.selectWrapper, children: [jsxs("select", { value: value, onChange: e => {
1118
+ 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$z.selectWrapper, children: [jsxs("select", { value: value, onChange: e => {
1119
1119
  playSound('click');
1120
1120
  onChange(e.target.value);
1121
1121
  }, disabled: disabled || loading, required: required, ...handlers, children: [jsx("option", { value: "", children: placeholder }), options.map(opt => {
1122
1122
  const optionValue = typeof opt === 'string' ? opt : opt.value;
1123
1123
  const optionLabel = typeof opt === 'string' ? opt : opt.label;
1124
1124
  return (jsx("option", { value: optionValue, children: optionLabel }, optionValue));
1125
- })] }), jsx(ChevronDown, { className: styles$v.selectIcon })] })] }));
1125
+ })] }), jsx(ChevronDown, { className: styles$z.selectIcon })] })] }));
1126
1126
  }
1127
1127
 
1128
- var styles$u = {"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-"};
1128
+ var styles$y = {"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-"};
1129
1129
 
1130
1130
  /**
1131
1131
  * TextArea component - Multi-line text input with character counting
@@ -1160,38 +1160,38 @@ var styles$u = {"textareaContainer":"TextArea-module_textareaContainer__AquFj","
1160
1160
  function TextArea({ label, value, onChange, rows = 5, placeholder = "", required = false, maxLength, disabled = false, error = false, success = false, loading = false, focusMode = false, compact = false, className = "" }) {
1161
1161
  const textareaId = `textarea-${Math.random().toString(36).substr(2, 9)}`;
1162
1162
  const getContainerClassName = () => {
1163
- const classes = [styles$u.textareaContainer];
1163
+ const classes = [styles$y.textareaContainer];
1164
1164
  if (error)
1165
- classes.push(styles$u.error);
1165
+ classes.push(styles$y.error);
1166
1166
  if (success)
1167
- classes.push(styles$u.success);
1167
+ classes.push(styles$y.success);
1168
1168
  if (loading)
1169
- classes.push(styles$u.loading);
1169
+ classes.push(styles$y.loading);
1170
1170
  if (focusMode)
1171
- classes.push(styles$u.focusMode);
1171
+ classes.push(styles$y.focusMode);
1172
1172
  if (compact)
1173
- classes.push(styles$u.compact);
1173
+ classes.push(styles$y.compact);
1174
1174
  if (className)
1175
1175
  classes.push(className);
1176
1176
  return classes.join(' ');
1177
1177
  };
1178
1178
  const getCharCountClassName = () => {
1179
1179
  if (!maxLength)
1180
- return styles$u.characterCount;
1181
- const classes = [styles$u.characterCount];
1180
+ return styles$y.characterCount;
1181
+ const classes = [styles$y.characterCount];
1182
1182
  const percentage = (value.length / maxLength) * 100;
1183
1183
  if (percentage >= 100) {
1184
- classes.push(styles$u.atLimit);
1184
+ classes.push(styles$y.atLimit);
1185
1185
  }
1186
1186
  else if (percentage >= 80) {
1187
- classes.push(styles$u.nearLimit);
1187
+ classes.push(styles$y.nearLimit);
1188
1188
  }
1189
1189
  return classes.join(' ');
1190
1190
  };
1191
- return (jsxs("div", { className: getContainerClassName(), children: [label && (jsxs("label", { htmlFor: textareaId, className: styles$u.textareaLabel, children: [label, required && jsx("span", { className: styles$u.requiredIndicator, children: "*" })] })), jsx("textarea", { id: textareaId, value: value, onChange: (e) => onChange(e.target.value), rows: rows, placeholder: placeholder, maxLength: maxLength, className: styles$u.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 })] }))] }));
1191
+ return (jsxs("div", { className: getContainerClassName(), children: [label && (jsxs("label", { htmlFor: textareaId, className: styles$y.textareaLabel, children: [label, required && jsx("span", { className: styles$y.requiredIndicator, children: "*" })] })), jsx("textarea", { id: textareaId, value: value, onChange: (e) => onChange(e.target.value), rows: rows, placeholder: placeholder, maxLength: maxLength, className: styles$y.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 })] }))] }));
1192
1192
  }
1193
1193
 
1194
- var styles$t = {"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"};
1194
+ var styles$x = {"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"};
1195
1195
 
1196
1196
  /**
1197
1197
  * TextInput component - A versatile text input field with label and error handling
@@ -1228,21 +1228,21 @@ function TextInput({ label, value, onChange, type = "text", onBlur, placeholder,
1228
1228
  const { handlers, playSound } = useComponentSound(soundConfig);
1229
1229
  const prevValueRef = React.useRef(value);
1230
1230
  const getContainerClassName = () => {
1231
- const classes = [styles$t.textInput];
1231
+ const classes = [styles$x.textInput];
1232
1232
  if (success)
1233
- classes.push(styles$t.success);
1233
+ classes.push(styles$x.success);
1234
1234
  if (loading)
1235
- classes.push(styles$t.loading);
1235
+ classes.push(styles$x.loading);
1236
1236
  if (icon)
1237
- classes.push(styles$t.withIcon);
1237
+ classes.push(styles$x.withIcon);
1238
1238
  if (actionButton)
1239
- classes.push(styles$t.withAction);
1239
+ classes.push(styles$x.withAction);
1240
1240
  return classes.join(' ');
1241
1241
  };
1242
1242
  React.useEffect(() => {
1243
1243
  prevValueRef.current = value;
1244
1244
  }, [value]);
1245
- return (jsxs("div", { className: getContainerClassName(), children: [jsxs("label", { htmlFor: inputId, children: [label, required && jsx("span", { className: styles$t.required, children: "*" })] }), jsxs("div", { style: { position: 'relative' }, children: [icon && jsx("div", { className: styles$t.inputIcon, children: icon }), jsx("input", { id: inputId, type: type, value: value, onChange: (e) => {
1245
+ return (jsxs("div", { className: getContainerClassName(), children: [jsxs("label", { htmlFor: inputId, children: [label, required && jsx("span", { className: styles$x.required, children: "*" })] }), jsxs("div", { style: { position: 'relative' }, children: [icon && jsx("div", { className: styles$x.inputIcon, children: icon }), jsx("input", { id: inputId, type: type, value: value, onChange: (e) => {
1246
1246
  const newValue = e.target.value;
1247
1247
  const oldValue = prevValueRef.current;
1248
1248
  onChange(newValue);
@@ -1258,13 +1258,13 @@ function TextInput({ label, value, onChange, type = "text", onBlur, placeholder,
1258
1258
  if (error && soundConfig?.onError) {
1259
1259
  playSound(typeof soundConfig.onError === 'string' ? soundConfig.onError : 'error');
1260
1260
  }
1261
- }, onBlur: onBlur, placeholder: placeholder, className: error ? styles$t.inputError : '', "aria-invalid": !!error, "aria-describedby": error ? `${inputId}-error` : undefined, disabled: disabled || loading, maxLength: maxLength, autoComplete: autoComplete }), actionButton && (jsx("button", { type: "button", className: styles$t.actionButton, onClick: () => {
1261
+ }, onBlur: onBlur, placeholder: placeholder, className: error ? styles$x.inputError : '', "aria-invalid": !!error, "aria-describedby": error ? `${inputId}-error` : undefined, disabled: disabled || loading, maxLength: maxLength, autoComplete: autoComplete }), actionButton && (jsx("button", { type: "button", className: styles$x.actionButton, onClick: () => {
1262
1262
  handlers.onClick?.();
1263
1263
  actionButton.onClick();
1264
- }, disabled: disabled || loading, children: actionButton.label }))] }), error && (jsx("span", { id: `${inputId}-error`, className: styles$t.errorMessage, children: error }))] }));
1264
+ }, disabled: disabled || loading, children: actionButton.label }))] }), error && (jsx("span", { id: `${inputId}-error`, className: styles$x.errorMessage, children: error }))] }));
1265
1265
  }
1266
1266
 
1267
- var styles$s = {"toggleContainer":"Toggle-module_toggleContainer__QxqQb","toggleButton":"Toggle-module_toggleButton__WUUf-","active":"Toggle-module_active__fX6Io"};
1267
+ var styles$w = {"toggleContainer":"Toggle-module_toggleContainer__QxqQb","toggleButton":"Toggle-module_toggleButton__WUUf-","active":"Toggle-module_active__fX6Io"};
1268
1268
 
1269
1269
  /**
1270
1270
  * Toggle Component
@@ -1325,7 +1325,7 @@ function Toggle(props) {
1325
1325
  justifyContent: 'center',
1326
1326
  ...style
1327
1327
  };
1328
- return (jsxs("div", { className: `${styles$s.toggleContainer} ${className || ''}`, children: [jsxs(motion.button, { ref: leftButtonRef, className: `${styles$s.toggleButton} ${!isOn ? styles$s.active : ''}`, whileHover: { scale: 1.05 }, whileTap: { scale: 0.95 }, transition: { type: "spring", stiffness: 400, damping: 17 }, onClick: () => {
1328
+ return (jsxs("div", { className: `${styles$w.toggleContainer} ${className || ''}`, children: [jsxs(motion.button, { ref: leftButtonRef, className: `${styles$w.toggleButton} ${!isOn ? styles$w.active : ''}`, whileHover: { scale: 1.05 }, whileTap: { scale: 0.95 }, transition: { type: "spring", stiffness: 400, damping: 17 }, onClick: () => {
1329
1329
  if (!isOn) {
1330
1330
  // Already on left
1331
1331
  if (enableCelebration) {
@@ -1340,7 +1340,7 @@ function Toggle(props) {
1340
1340
  playSound('toggle');
1341
1341
  }
1342
1342
  onToggle(false);
1343
- }, 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$s.toggleButton} ${isOn ? styles$s.active : ''}`, whileHover: { scale: 1.05 }, whileTap: { scale: 0.95 }, transition: { type: "spring", stiffness: 400, damping: 17 }, onClick: () => {
1343
+ }, 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$w.toggleButton} ${isOn ? styles$w.active : ''}`, whileHover: { scale: 1.05 }, whileTap: { scale: 0.95 }, transition: { type: "spring", stiffness: 400, damping: 17 }, onClick: () => {
1344
1344
  if (isOn) {
1345
1345
  // Already on right
1346
1346
  if (enableCelebration) {
@@ -1358,7 +1358,7 @@ function Toggle(props) {
1358
1358
  }, 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] })] }));
1359
1359
  }
1360
1360
 
1361
- var styles$r = {"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","tally":"NumberStepper-module_tally__aO2zq","tallyRow":"NumberStepper-module_tallyRow__wcrtj","tallyButton":"NumberStepper-module_tallyButton__EUTXY","tallyButtonIcon":"NumberStepper-module_tallyButtonIcon__A3fDQ","tallyIcon":"NumberStepper-module_tallyIcon__ynB4C","tallyLabel":"NumberStepper-module_tallyLabel__kjXos","tallyBody":"NumberStepper-module_tallyBody__wDBsU","tallyMarks":"NumberStepper-module_tallyMarks__RU5qJ","tallyGroup":"NumberStepper-module_tallyGroup__0qUNo","tallyHint":"NumberStepper-module_tallyHint__zi-GM","tallyValue":"NumberStepper-module_tallyValue__CFJDk","pulse":"NumberStepper-module_pulse__51oUo"};
1361
+ var styles$v = {"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","tally":"NumberStepper-module_tally__aO2zq","tallyRow":"NumberStepper-module_tallyRow__wcrtj","tallyButton":"NumberStepper-module_tallyButton__EUTXY","tallyButtonIcon":"NumberStepper-module_tallyButtonIcon__A3fDQ","tallyIcon":"NumberStepper-module_tallyIcon__ynB4C","tallyLabel":"NumberStepper-module_tallyLabel__kjXos","tallyBody":"NumberStepper-module_tallyBody__wDBsU","tallyMarks":"NumberStepper-module_tallyMarks__RU5qJ","tallyGroup":"NumberStepper-module_tallyGroup__0qUNo","tallyHint":"NumberStepper-module_tallyHint__zi-GM","tallyValue":"NumberStepper-module_tallyValue__CFJDk","pulse":"NumberStepper-module_pulse__51oUo"};
1362
1362
 
1363
1363
  /**
1364
1364
  * NumberStepper Component
@@ -1545,33 +1545,33 @@ const NumberStepper = ({ value, onChange, min = -Infinity, max = Infinity, step
1545
1545
  setDisplayValue(finalValue);
1546
1546
  }, [displayValue, min, max, step, onChange]);
1547
1547
  const containerClasses = [
1548
- styles$r.container,
1549
- styles$r[size],
1550
- styles$r[variant],
1551
- layout === 'vertical' && styles$r.vertical,
1552
- disabled && styles$r.disabled,
1548
+ styles$v.container,
1549
+ styles$v[size],
1550
+ styles$v[variant],
1551
+ layout === 'vertical' && styles$v.vertical,
1552
+ disabled && styles$v.disabled,
1553
1553
  className
1554
1554
  ].filter(Boolean).join(' ');
1555
1555
  // Merge custom styles with hover states
1556
1556
  const [isButtonHovered, setIsButtonHovered] = useState(null);
1557
1557
  const isDecrementDisabled = disabled || value <= min;
1558
1558
  const isIncrementDisabled = disabled || value >= max;
1559
- const stepperContent = (jsxs("div", { className: styles$r.stepper, style: customStyles.stepper, onKeyDown: handleKeyDown, tabIndex: disabled ? -1 : 0, ...handlers, children: [jsx(motion.button, { className: styles$r.button, style: {
1559
+ const stepperContent = (jsxs("div", { className: styles$v.stepper, style: customStyles.stepper, onKeyDown: handleKeyDown, tabIndex: disabled ? -1 : 0, ...handlers, children: [jsx(motion.button, { className: styles$v.button, style: {
1560
1560
  ...customStyles.button,
1561
1561
  ...(isButtonHovered === 'decrement' && customStyles.buttonHover)
1562
- }, 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$r.buttonIcon, style: customStyles.buttonIcon, children: "\u2212" })) : (jsx("svg", { className: styles$r.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$r.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$r.valueWrapper, children: jsx("input", { type: "text", className: styles$r.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$r.button, style: {
1562
+ }, 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$v.buttonIcon, style: customStyles.buttonIcon, children: "\u2212" })) : (jsx("svg", { className: styles$v.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$v.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$v.valueWrapper, children: jsx("input", { type: "text", className: styles$v.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$v.button, style: {
1563
1563
  ...customStyles.button,
1564
1564
  ...(isButtonHovered === 'increment' && customStyles.buttonHover)
1565
- }, 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$r.buttonIcon, style: customStyles.buttonIcon, children: "+" })) : (jsx("svg", { className: styles$r.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" }) }))) })] }));
1565
+ }, 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$v.buttonIcon, style: customStyles.buttonIcon, children: "+" })) : (jsx("svg", { className: styles$v.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" }) }))) })] }));
1566
1566
  // ── Tally variant: pen-stroke counter with explicit +/- buttons.
1567
1567
  if (variant === 'tally') {
1568
1568
  return (jsx(TallyRow, { value: value, label: label, icon: icon, color: color, disabled: disabled, emptyHint: tallyEmptyHint, className: containerClasses, customStyles: customStyles, onIncrement: handleIncrement, onDecrement: handleDecrement, ariaLabel: label || 'Tally counter', isDecrementDisabled: isDecrementDisabled, isIncrementDisabled: isIncrementDisabled }));
1569
1569
  }
1570
1570
  // For custom variant with horizontal layout, render differently
1571
1571
  if (variant === 'custom' && (label || icon)) {
1572
- return (jsxs("div", { className: containerClasses, style: { ...customStyles.container, display: 'flex', alignItems: 'center' }, children: [jsxs("div", { className: styles$r.header, style: { ...customStyles.header, flex: 1, marginBottom: 0 }, children: [icon && jsx("span", { className: styles$r.icon, style: customStyles.icon, children: icon }), label && jsx("label", { className: styles$r.label, style: customStyles.label, children: label })] }), stepperContent, !hideLimits && (min !== -Infinity || max !== Infinity) && (jsxs("div", { className: styles$r.limits, style: customStyles.limits, children: [jsx("span", { className: styles$r.limit, children: min !== -Infinity && `Min: ${min}` }), jsx("span", { className: styles$r.limit, children: max !== Infinity && `Max: ${max}` })] }))] }));
1572
+ return (jsxs("div", { className: containerClasses, style: { ...customStyles.container, display: 'flex', alignItems: 'center' }, children: [jsxs("div", { className: styles$v.header, style: { ...customStyles.header, flex: 1, marginBottom: 0 }, children: [icon && jsx("span", { className: styles$v.icon, style: customStyles.icon, children: icon }), label && jsx("label", { className: styles$v.label, style: customStyles.label, children: label })] }), stepperContent, !hideLimits && (min !== -Infinity || max !== Infinity) && (jsxs("div", { className: styles$v.limits, style: customStyles.limits, children: [jsx("span", { className: styles$v.limit, children: min !== -Infinity && `Min: ${min}` }), jsx("span", { className: styles$v.limit, children: max !== Infinity && `Max: ${max}` })] }))] }));
1573
1573
  }
1574
- return (jsxs("div", { className: containerClasses, style: customStyles.container, children: [(label || icon) && (jsxs("div", { className: styles$r.header, style: customStyles.header, children: [icon && jsx("span", { className: styles$r.icon, style: customStyles.icon, children: icon }), label && jsx("label", { className: styles$r.label, style: customStyles.label, children: label })] })), stepperContent, !hideLimits && (min !== -Infinity || max !== Infinity) && (jsxs("div", { className: styles$r.limits, style: customStyles.limits, children: [jsx("span", { className: styles$r.limit, children: min !== -Infinity && `Min: ${min}` }), jsx("span", { className: styles$r.limit, children: max !== Infinity && `Max: ${max}` })] }))] }));
1574
+ return (jsxs("div", { className: containerClasses, style: customStyles.container, children: [(label || icon) && (jsxs("div", { className: styles$v.header, style: customStyles.header, children: [icon && jsx("span", { className: styles$v.icon, style: customStyles.icon, children: icon }), label && jsx("label", { className: styles$v.label, style: customStyles.label, children: label })] })), stepperContent, !hideLimits && (min !== -Infinity || max !== Infinity) && (jsxs("div", { className: styles$v.limits, style: customStyles.limits, children: [jsx("span", { className: styles$v.limit, children: min !== -Infinity && `Min: ${min}` }), jsx("span", { className: styles$v.limit, children: max !== Infinity && `Max: ${max}` })] }))] }));
1575
1575
  };
1576
1576
  const TallyMarks = ({ count, color }) => {
1577
1577
  const groups = [];
@@ -1581,14 +1581,14 @@ const TallyMarks = ({ count, color }) => {
1581
1581
  groups.push(n);
1582
1582
  left -= n;
1583
1583
  }
1584
- return (jsx("div", { className: styles$r.tallyMarks, "aria-hidden": "true", children: groups.map((n, i) => (jsxs("svg", { className: styles$r.tallyGroup, width: "38", height: "22", viewBox: "0 0 38 22", children: [[0, 1, 2, 3].slice(0, Math.min(4, n)).map((j) => (jsx("line", { x1: 4 + j * 6, y1: "2", x2: 4 + j * 6, y2: "20", stroke: color, strokeWidth: "2", strokeLinecap: "round" }, j))), n === 5 && (jsx("line", { x1: "1", y1: "18", x2: "27", y2: "4", stroke: color, strokeWidth: "2", strokeLinecap: "round" }))] }, i))) }));
1584
+ return (jsx("div", { className: styles$v.tallyMarks, "aria-hidden": "true", children: groups.map((n, i) => (jsxs("svg", { className: styles$v.tallyGroup, width: "38", height: "22", viewBox: "0 0 38 22", children: [[0, 1, 2, 3].slice(0, Math.min(4, n)).map((j) => (jsx("line", { x1: 4 + j * 6, y1: "2", x2: 4 + j * 6, y2: "20", stroke: color, strokeWidth: "2", strokeLinecap: "round" }, j))), n === 5 && (jsx("line", { x1: "1", y1: "18", x2: "27", y2: "4", stroke: color, strokeWidth: "2", strokeLinecap: "round" }))] }, i))) }));
1585
1585
  };
1586
1586
  const TallyRow = ({ value, label, icon, color, disabled, emptyHint, className, customStyles, onIncrement, onDecrement, ariaLabel, isDecrementDisabled, isIncrementDisabled }) => {
1587
1587
  const resolvedColor = color || 'currentColor';
1588
- return (jsxs("div", { "aria-label": ariaLabel, "aria-disabled": disabled || undefined, className: `${className} ${styles$r.tallyRow}`, style: customStyles.container, children: [icon && (jsx("span", { className: styles$r.tallyIcon, style: { color: resolvedColor, ...customStyles.icon }, children: icon })), label && (jsx("span", { className: styles$r.tallyLabel, style: customStyles.label, children: label })), jsx("div", { className: styles$r.tallyBody, children: value <= 0 ? (jsx("span", { className: styles$r.tallyHint, children: emptyHint })) : (jsx(TallyMarks, { count: value, color: resolvedColor })) }), jsx("button", { type: "button", className: styles$r.tallyButton, onClick: onDecrement, disabled: isDecrementDisabled, "aria-label": `Decrease ${label || 'value'}`, children: jsx("span", { className: styles$r.tallyButtonIcon, children: "\u2212" }) }), jsx("span", { className: styles$r.tallyValue, style: { color: resolvedColor, ...customStyles.value }, "aria-hidden": "true", children: value }), jsx("button", { type: "button", className: styles$r.tallyButton, onClick: onIncrement, disabled: isIncrementDisabled, "aria-label": `Increase ${label || 'value'}`, children: jsx("span", { className: styles$r.tallyButtonIcon, children: "+" }) })] }));
1588
+ return (jsxs("div", { "aria-label": ariaLabel, "aria-disabled": disabled || undefined, className: `${className} ${styles$v.tallyRow}`, style: customStyles.container, children: [icon && (jsx("span", { className: styles$v.tallyIcon, style: { color: resolvedColor, ...customStyles.icon }, children: icon })), label && (jsx("span", { className: styles$v.tallyLabel, style: customStyles.label, children: label })), jsx("div", { className: styles$v.tallyBody, children: value <= 0 ? (jsx("span", { className: styles$v.tallyHint, children: emptyHint })) : (jsx(TallyMarks, { count: value, color: resolvedColor })) }), jsx("button", { type: "button", className: styles$v.tallyButton, onClick: onDecrement, disabled: isDecrementDisabled, "aria-label": `Decrease ${label || 'value'}`, children: jsx("span", { className: styles$v.tallyButtonIcon, children: "\u2212" }) }), jsx("span", { className: styles$v.tallyValue, style: { color: resolvedColor, ...customStyles.value }, "aria-hidden": "true", children: value }), jsx("button", { type: "button", className: styles$v.tallyButton, onClick: onIncrement, disabled: isIncrementDisabled, "aria-label": `Increase ${label || 'value'}`, children: jsx("span", { className: styles$v.tallyButtonIcon, children: "+" }) })] }));
1589
1589
  };
1590
1590
 
1591
- var styles$q = {"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"};
1591
+ var styles$u = {"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"};
1592
1592
 
1593
1593
  /**
1594
1594
  * ToggleButton Component
@@ -1627,18 +1627,18 @@ var styles$q = {"button":"ToggleButton-module_button__DTuyY","background":"Toggl
1627
1627
  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 }) => {
1628
1628
  const { handlers, playSound } = useComponentSound(soundConfig);
1629
1629
  const buttonClasses = [
1630
- styles$q.button,
1631
- styles$q[size],
1632
- styles$q[variant],
1633
- active && styles$q.active,
1634
- active && styles$q[`active-${activeColor}`],
1635
- disabled && styles$q.disabled,
1636
- animation !== 'none' && styles$q[`animation-${animation}`],
1630
+ styles$u.button,
1631
+ styles$u[size],
1632
+ styles$u[variant],
1633
+ active && styles$u.active,
1634
+ active && styles$u[`active-${activeColor}`],
1635
+ disabled && styles$u.disabled,
1636
+ animation !== 'none' && styles$u[`animation-${animation}`],
1637
1637
  className
1638
1638
  ].filter(Boolean).join(' ');
1639
1639
  const labelClasses = [
1640
- styles$q.label,
1641
- hideLabelOnMobile && styles$q.hideMobile
1640
+ styles$u.label,
1641
+ hideLabelOnMobile && styles$u.hideMobile
1642
1642
  ].filter(Boolean).join(' ');
1643
1643
  const iconVariants = {
1644
1644
  scale: {
@@ -1702,10 +1702,10 @@ const ToggleButton = ({ active, onClick, icon, label, disabled = false, size = '
1702
1702
  return (jsxs(motion.button, { className: buttonClasses, style: dynamicStyle, onClick: () => {
1703
1703
  playSound('toggle');
1704
1704
  onClick();
1705
- }, 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$q.background, variants: backgroundVariants, initial: "inactive", animate: active ? "active" : "inactive" }), jsxs("div", { className: styles$q.content, children: [icon && (jsx(motion.div, { className: styles$q.iconWrapper, variants: iconVariants[animation], initial: "inactive", animate: active ? "active" : "inactive", transition: { duration: 0.3 }, children: typeof icon === 'string' ? (jsx("span", { className: styles$q.icon, children: icon })) : (jsx("div", { className: styles$q.icon, children: icon })) })), label && jsx("span", { className: labelClasses, children: label }), jsx(AnimatePresence, { children: showCheckmark && active && (jsx(motion.div, { className: styles$q.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$q.ripple, initial: { scale: 0, opacity: 0.5 }, animate: { scale: 2, opacity: 0 }, exit: { scale: 0, opacity: 0 }, transition: { duration: 0.6 } })) })] }));
1705
+ }, 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$u.background, variants: backgroundVariants, initial: "inactive", animate: active ? "active" : "inactive" }), jsxs("div", { className: styles$u.content, children: [icon && (jsx(motion.div, { className: styles$u.iconWrapper, variants: iconVariants[animation], initial: "inactive", animate: active ? "active" : "inactive", transition: { duration: 0.3 }, children: typeof icon === 'string' ? (jsx("span", { className: styles$u.icon, children: icon })) : (jsx("div", { className: styles$u.icon, children: icon })) })), label && jsx("span", { className: labelClasses, children: label }), jsx(AnimatePresence, { children: showCheckmark && active && (jsx(motion.div, { className: styles$u.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$u.ripple, initial: { scale: 0, opacity: 0.5 }, animate: { scale: 2, opacity: 0 }, exit: { scale: 0, opacity: 0 }, transition: { duration: 0.6 } })) })] }));
1706
1706
  };
1707
1707
 
1708
- var styles$p = {"slider":"Slider-module_slider__RD4G7","label":"Slider-module_label__j4H8M","sliderContainer":"Slider-module_sliderContainer__kQICC","track":"Slider-module_track__fQ-oP","dragging":"Slider-module_dragging__rynPv","fill":"Slider-module_fill__AYR4-","input":"Slider-module_input__fqY-G","thumb":"Slider-module_thumb__yQJho","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","dotsContainer":"Slider-module_dotsContainer__zpcZe","dot":"Slider-module_dot__TkGh5","dotFilled":"Slider-module_dotFilled__n779E","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"};
1708
+ var styles$t = {"slider":"Slider-module_slider__RD4G7","label":"Slider-module_label__j4H8M","sliderContainer":"Slider-module_sliderContainer__kQICC","track":"Slider-module_track__fQ-oP","dragging":"Slider-module_dragging__rynPv","fill":"Slider-module_fill__AYR4-","input":"Slider-module_input__fqY-G","thumb":"Slider-module_thumb__yQJho","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","dotsContainer":"Slider-module_dotsContainer__zpcZe","dot":"Slider-module_dot__TkGh5","dotFilled":"Slider-module_dotFilled__n779E","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"};
1709
1709
 
1710
1710
  /**
1711
1711
  * Slider component — responsive, accessible range input with a styled track, fill, and thumb.
@@ -1744,11 +1744,11 @@ function Slider({ value, onChange, min = 0, max = 100, step = 1, label, showValu
1744
1744
  };
1745
1745
  const endDrag = () => setIsDragging(false);
1746
1746
  const dynamicColor = getDynamicColor();
1747
- const sizeClass = styles$p[`size-${size}`];
1748
- const stateClass = disabled ? styles$p.disabled : '';
1749
- const dragClass = isDragging ? styles$p.dragging : '';
1747
+ const sizeClass = styles$t[`size-${size}`];
1748
+ const stateClass = disabled ? styles$t.disabled : '';
1749
+ const dragClass = isDragging ? styles$t.dragging : '';
1750
1750
  if (loading) {
1751
- return (jsxs("div", { className: `${styles$p.slider} ${sizeClass} ${styles$p.loading} ${className}`, style: style, children: [label && jsx("label", { className: styles$p.label, children: label }), jsx("div", { className: styles$p.loadingTrack, children: jsx(motion.div, { className: styles$p.loadingIndicator, animate: { x: ['-100%', '200%'] }, transition: { repeat: Infinity, duration: 1.5, ease: 'easeInOut' } }) })] }));
1751
+ return (jsxs("div", { className: `${styles$t.slider} ${sizeClass} ${styles$t.loading} ${className}`, style: style, children: [label && jsx("label", { className: styles$t.label, children: label }), jsx("div", { className: styles$t.loadingTrack, children: jsx(motion.div, { className: styles$t.loadingIndicator, animate: { x: ['-100%', '200%'] }, transition: { repeat: Infinity, duration: 1.5, ease: 'easeInOut' } }) })] }));
1752
1752
  }
1753
1753
  if (variant === 'dots') {
1754
1754
  const dotCount = Math.max(0, Math.floor((max - min) / step));
@@ -1760,9 +1760,9 @@ function Slider({ value, onChange, min = 0, max = 100, step = 1, label, showValu
1760
1760
  const next = value === dotValue ? dotValue - step : dotValue;
1761
1761
  onChange(Math.max(min, next));
1762
1762
  };
1763
- return (jsxs("div", { className: `${styles$p.slider} ${sizeClass} ${stateClass} ${className}`, style: style, ...handlers, children: [label && jsx("label", { className: styles$p.label, children: label }), jsx("div", { className: styles$p.dotsContainer, role: "slider", "aria-valuemin": min, "aria-valuemax": max, "aria-valuenow": value, "aria-label": label, children: dotValues.map((dotValue) => {
1763
+ return (jsxs("div", { className: `${styles$t.slider} ${sizeClass} ${stateClass} ${className}`, style: style, ...handlers, children: [label && jsx("label", { className: styles$t.label, children: label }), jsx("div", { className: styles$t.dotsContainer, role: "slider", "aria-valuemin": min, "aria-valuemax": max, "aria-valuenow": value, "aria-label": label, children: dotValues.map((dotValue) => {
1764
1764
  const filled = dotValue <= value;
1765
- return (jsx("button", { type: "button", className: `${styles$p.dot} ${filled ? styles$p.dotFilled : ''}`, style: filled
1765
+ return (jsx("button", { type: "button", className: `${styles$t.dot} ${filled ? styles$t.dotFilled : ''}`, style: filled
1766
1766
  ? {
1767
1767
  backgroundColor: dynamicColor,
1768
1768
  borderColor: dynamicColor,
@@ -1770,7 +1770,7 @@ function Slider({ value, onChange, min = 0, max = 100, step = 1, label, showValu
1770
1770
  : undefined, onClick: () => handleDotClick(dotValue), disabled: disabled, "aria-label": valueFormatter
1771
1771
  ? valueFormatter(dotValue)
1772
1772
  : `Set to ${dotValue}` }, dotValue));
1773
- }) }), showValue && (jsx("div", { className: styles$p.valueDisplay, style: { color: dynamicColor }, children: formatValue(value) }))] }));
1773
+ }) }), showValue && (jsx("div", { className: styles$t.valueDisplay, style: { color: dynamicColor }, children: formatValue(value) }))] }));
1774
1774
  }
1775
1775
  // Inset the thumb so its bounding box stays inside the track at 0/100%.
1776
1776
  // At percentage=0: marginLeft=0 → thumb flush-left. At 100%: marginLeft=-thumbSize → flush-right.
@@ -1778,11 +1778,11 @@ function Slider({ value, onChange, min = 0, max = 100, step = 1, label, showValu
1778
1778
  left: `${percentage}%`,
1779
1779
  marginLeft: `calc(var(--slider-thumb-size) * ${-percentage / 100})`,
1780
1780
  };
1781
- return (jsxs("div", { className: `${styles$p.slider} ${sizeClass} ${stateClass} ${dragClass} ${className}`, style: style, children: [label && jsx("label", { className: styles$p.label, children: label }), jsxs("div", { className: styles$p.sliderContainer, children: [jsx("div", { className: styles$p.track, children: jsx("div", { className: styles$p.fill, style: { width: `${percentage}%`, backgroundColor: dynamicColor } }) }), jsx("input", { type: "range", min: min, max: max, step: step, value: value, onChange: handleChange, onPointerDown: startDrag, onPointerUp: endDrag, onPointerCancel: endDrag, onBlur: endDrag, ...handlers, className: styles$p.input, disabled: disabled, "aria-label": label }), jsx("div", { className: styles$p.thumb, style: {
1781
+ return (jsxs("div", { className: `${styles$t.slider} ${sizeClass} ${stateClass} ${dragClass} ${className}`, style: style, children: [label && jsx("label", { className: styles$t.label, children: label }), jsxs("div", { className: styles$t.sliderContainer, children: [jsx("div", { className: styles$t.track, children: jsx("div", { className: styles$t.fill, style: { width: `${percentage}%`, backgroundColor: dynamicColor } }) }), jsx("input", { type: "range", min: min, max: max, step: step, value: value, onChange: handleChange, onPointerDown: startDrag, onPointerUp: endDrag, onPointerCancel: endDrag, onBlur: endDrag, ...handlers, className: styles$t.input, disabled: disabled, "aria-label": label }), jsx("div", { className: styles$t.thumb, style: {
1782
1782
  ...insetStyle,
1783
1783
  backgroundColor: dynamicColor,
1784
1784
  borderColor: colors.thumb || dynamicColor,
1785
- } }), jsx(AnimatePresence, { children: showTooltip && isDragging && !disabled && (jsxs(motion.div, { className: styles$p.tooltip, style: { ...insetStyle, backgroundColor: dynamicColor }, initial: { opacity: 0, y: 6, scale: 0.9 }, animate: { opacity: 1, y: 0, scale: 1 }, exit: { opacity: 0, y: 6, scale: 0.9 }, transition: { duration: 0.15 }, children: [tooltipContent ? tooltipContent(value) : formatValue(value), jsx("div", { className: styles$p.tooltipArrow, style: { borderTopColor: dynamicColor } })] })) })] }), showValue && (jsx("div", { className: styles$p.valueDisplay, style: { color: dynamicColor }, children: formatValue(value) })), labels.length > 0 && (jsx("div", { className: styles$p.labelsContainer, children: labels.map((labelConfig, index) => {
1785
+ } }), jsx(AnimatePresence, { children: showTooltip && isDragging && !disabled && (jsxs(motion.div, { className: styles$t.tooltip, style: { ...insetStyle, backgroundColor: dynamicColor }, initial: { opacity: 0, y: 6, scale: 0.9 }, animate: { opacity: 1, y: 0, scale: 1 }, exit: { opacity: 0, y: 6, scale: 0.9 }, transition: { duration: 0.15 }, children: [tooltipContent ? tooltipContent(value) : formatValue(value), jsx("div", { className: styles$t.tooltipArrow, style: { borderTopColor: dynamicColor } })] })) })] }), showValue && (jsx("div", { className: styles$t.valueDisplay, style: { color: dynamicColor }, children: formatValue(value) })), labels.length > 0 && (jsx("div", { className: styles$t.labelsContainer, children: labels.map((labelConfig, index) => {
1786
1786
  let position = 0;
1787
1787
  if (labelConfig.position === 'start')
1788
1788
  position = 0;
@@ -1790,11 +1790,11 @@ function Slider({ value, onChange, min = 0, max = 100, step = 1, label, showValu
1790
1790
  position = 100;
1791
1791
  else if (typeof labelConfig.position === 'number')
1792
1792
  position = labelConfig.position;
1793
- return (jsx("div", { className: styles$p.labelItem, style: { left: `${position}%`, color: labelConfig.color }, children: labelConfig.label }, index));
1793
+ return (jsx("div", { className: styles$t.labelItem, style: { left: `${position}%`, color: labelConfig.color }, children: labelConfig.label }, index));
1794
1794
  }) }))] }));
1795
1795
  }
1796
1796
 
1797
- var styles$o = {"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"};
1797
+ var styles$s = {"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"};
1798
1798
 
1799
1799
  const defaultMessages = [
1800
1800
  'Loading your content...',
@@ -1878,22 +1878,22 @@ const LoadingSpinner = ({ message, size = 'medium', variant = 'dots', className
1878
1878
  }
1879
1879
  }, [currentMessageIndex, message, messagesToUse, showMessage]);
1880
1880
  const containerClasses = [
1881
- styles$o.loadingContainer,
1882
- styles$o[size],
1883
- styles$o[variant],
1884
- fullScreen && styles$o.fullScreen,
1885
- overlay && styles$o.overlay,
1881
+ styles$s.loadingContainer,
1882
+ styles$s[size],
1883
+ styles$s[variant],
1884
+ fullScreen && styles$s.fullScreen,
1885
+ overlay && styles$s.overlay,
1886
1886
  className
1887
1887
  ].filter(Boolean).join(' ');
1888
1888
  const customStyle = {
1889
1889
  ...(color && { '--spinner-color': color }),
1890
1890
  ...(backgroundColor && { '--spinner-background': backgroundColor }),
1891
1891
  };
1892
- const renderDots = () => (jsxs(motion.div, { className: styles$o.dotsSpinner, animate: { rotate: 360 }, transition: {
1892
+ const renderDots = () => (jsxs(motion.div, { className: styles$s.dotsSpinner, animate: { rotate: 360 }, transition: {
1893
1893
  duration: 2,
1894
1894
  repeat: Infinity,
1895
1895
  ease: 'linear'
1896
- }, children: [jsx(motion.div, { className: styles$o.dot1, animate: {
1896
+ }, children: [jsx(motion.div, { className: styles$s.dot1, animate: {
1897
1897
  scale: [1, 1.3, 1],
1898
1898
  y: [0, -6, 0]
1899
1899
  }, transition: {
@@ -1901,7 +1901,7 @@ const LoadingSpinner = ({ message, size = 'medium', variant = 'dots', className
1901
1901
  repeat: Infinity,
1902
1902
  ease: 'easeInOut',
1903
1903
  delay: 0
1904
- } }), jsx(motion.div, { className: styles$o.dot2, animate: {
1904
+ } }), jsx(motion.div, { className: styles$s.dot2, animate: {
1905
1905
  scale: [1, 1.3, 1],
1906
1906
  y: [0, -6, 0]
1907
1907
  }, transition: {
@@ -1909,7 +1909,7 @@ const LoadingSpinner = ({ message, size = 'medium', variant = 'dots', className
1909
1909
  repeat: Infinity,
1910
1910
  ease: 'easeInOut',
1911
1911
  delay: 0.5
1912
- } }), jsx(motion.div, { className: styles$o.dot3, animate: {
1912
+ } }), jsx(motion.div, { className: styles$s.dot3, animate: {
1913
1913
  scale: [1, 1.3, 1],
1914
1914
  y: [0, -6, 0]
1915
1915
  }, transition: {
@@ -1918,12 +1918,12 @@ const LoadingSpinner = ({ message, size = 'medium', variant = 'dots', className
1918
1918
  ease: 'easeInOut',
1919
1919
  delay: 1
1920
1920
  } })] }));
1921
- const renderSpinner = () => (jsx(motion.div, { className: styles$o.circleSpinner, animate: { rotate: 360 }, transition: {
1921
+ const renderSpinner = () => (jsx(motion.div, { className: styles$s.circleSpinner, animate: { rotate: 360 }, transition: {
1922
1922
  duration: 1,
1923
1923
  repeat: Infinity,
1924
1924
  ease: 'linear'
1925
1925
  } }));
1926
- const renderPulse = () => (jsx(motion.div, { className: styles$o.pulseSpinner, animate: {
1926
+ const renderPulse = () => (jsx(motion.div, { className: styles$s.pulseSpinner, animate: {
1927
1927
  scale: [1, 1.2, 1],
1928
1928
  opacity: [1, 0.7, 1]
1929
1929
  }, transition: {
@@ -1942,10 +1942,10 @@ const LoadingSpinner = ({ message, size = 'medium', variant = 'dots', className
1942
1942
  return renderDots();
1943
1943
  }
1944
1944
  };
1945
- return (jsxs("div", { className: containerClasses, style: customStyle, children: [renderSpinnerVariant(), showMessage && (jsx(AnimatePresence, { mode: "wait", children: jsx(motion.p, { className: styles$o.loadingText, initial: { opacity: 0, y: 10 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: -10 }, transition: {
1945
+ return (jsxs("div", { className: containerClasses, style: customStyle, children: [renderSpinnerVariant(), showMessage && (jsx(AnimatePresence, { mode: "wait", children: jsx(motion.p, { className: styles$s.loadingText, initial: { opacity: 0, y: 10 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: -10 }, transition: {
1946
1946
  duration: 0.4,
1947
1947
  ease: 'easeOut'
1948
- }, children: currentMessage }, currentMessage) })), showSparkles && (jsx("div", { className: styles$o.sparkleContainer, children: [...Array(4)].map((_, i) => (jsx(motion.div, { className: styles$o.sparkle, animate: {
1948
+ }, children: currentMessage }, currentMessage) })), showSparkles && (jsx("div", { className: styles$s.sparkleContainer, children: [...Array(4)].map((_, i) => (jsx(motion.div, { className: styles$s.sparkle, animate: {
1949
1949
  opacity: [0, 1, 0],
1950
1950
  scale: [0.5, 1, 0.5],
1951
1951
  rotate: [0, 180, 360]
@@ -1960,7 +1960,7 @@ const LoadingSpinner = ({ message, size = 'medium', variant = 'dots', className
1960
1960
  } }, i))) }))] }));
1961
1961
  };
1962
1962
 
1963
- var styles$n = {"wrapper":"DecryptedText-module_wrapper__tuLvf","srOnly":"DecryptedText-module_srOnly__A-K2T"};
1963
+ var styles$r = {"wrapper":"DecryptedText-module_wrapper__tuLvf","srOnly":"DecryptedText-module_srOnly__A-K2T"};
1964
1964
 
1965
1965
  /**
1966
1966
  * DecryptedText Component
@@ -2144,13 +2144,13 @@ const DecryptedText = ({ text, speed = 50, maxIterations = 10, sequential = fals
2144
2144
  onMouseLeave: () => setIsHovering(false),
2145
2145
  }
2146
2146
  : {};
2147
- return (jsxs(motion.span, { className: `${styles$n.wrapper} ${parentClassName}`, ref: containerRef, ...hoverProps, ...props, children: [jsx("span", { className: styles$n.srOnly, children: displayText }), jsx("span", { "aria-hidden": "true", children: displayText.split('').map((char, index) => {
2147
+ return (jsxs(motion.span, { className: `${styles$r.wrapper} ${parentClassName}`, ref: containerRef, ...hoverProps, ...props, children: [jsx("span", { className: styles$r.srOnly, children: displayText }), jsx("span", { "aria-hidden": "true", children: displayText.split('').map((char, index) => {
2148
2148
  const isRevealedOrDone = revealedIndices.has(index) || !isScrambling || !isHovering;
2149
2149
  return (jsx("span", { className: isRevealedOrDone ? className : encryptedClassName, children: char }, index));
2150
2150
  }) })] }));
2151
2151
  };
2152
2152
 
2153
- var styles$m = {"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"};
2153
+ var styles$q = {"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"};
2154
2154
 
2155
2155
  /**
2156
2156
  * ArrayInput component - Versatile dynamic list manager
@@ -2217,11 +2217,11 @@ function SimpleArrayInput({ label, values, onChange, placeholder, itemStyle, inp
2217
2217
  itemIdsRef.current.splice(index, 1);
2218
2218
  onChange(newValues);
2219
2219
  };
2220
- return (jsxs("div", { className: styles$m.arrayInput, children: [jsx("h3", { className: styles$m.arrayInputLabel, children: label }), jsx("div", { children: jsx(AnimatePresence, { children: values.map((value, index) => (jsxs(motion.div, { className: styles$m.arrayInputItem, style: itemStyle, initial: { opacity: 0, y: 10 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0 }, transition: {
2220
+ return (jsxs("div", { className: styles$q.arrayInput, children: [jsx("h3", { className: styles$q.arrayInputLabel, children: label }), jsx("div", { children: jsx(AnimatePresence, { children: values.map((value, index) => (jsxs(motion.div, { className: styles$q.arrayInputItem, style: itemStyle, initial: { opacity: 0, y: 10 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0 }, transition: {
2221
2221
  duration: 0.3,
2222
2222
  ease: "easeInOut",
2223
2223
  layout: { duration: 0.2 }
2224
- }, children: [jsx("div", { className: styles$m.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$m.input, style: inputStyle })) }), jsx(Button, { variant: "ghost", size: "small", onClick: () => handleRemove(index), "aria-label": "Remove item", className: styles$m.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$m.addButton, children: label })] }));
2224
+ }, children: [jsx("div", { className: styles$q.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$q.input, style: inputStyle })) }), jsx(Button, { variant: "ghost", size: "small", onClick: () => handleRemove(index), "aria-label": "Remove item", className: styles$q.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$q.addButton, children: label })] }));
2225
2225
  }
2226
2226
  // Complex object array implementation
2227
2227
  function ComplexArrayInput({ label, values, onChange, fields, getKey, itemStyle, inputStyle, buttonVariant = 'primary' }) {
@@ -2246,14 +2246,14 @@ function ComplexArrayInput({ label, values, onChange, fields, getKey, itemStyle,
2246
2246
  // Generate key from all field values
2247
2247
  return fields.map(f => item[f.name] || '').join('-') + `-${index}`;
2248
2248
  };
2249
- return (jsxs("div", { className: styles$m.arrayInput, children: [jsx("h3", { className: styles$m.arrayInputLabel, children: label }), jsx("div", { children: jsx(AnimatePresence, { children: values.map((value, index) => (jsxs(motion.div, { className: `${styles$m.arrayInputItem} ${fields.length > 1 ? styles$m.complexItem : ''}`, style: itemStyle, initial: { opacity: 0, y: 10 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0 }, transition: {
2249
+ return (jsxs("div", { className: styles$q.arrayInput, children: [jsx("h3", { className: styles$q.arrayInputLabel, children: label }), jsx("div", { children: jsx(AnimatePresence, { children: values.map((value, index) => (jsxs(motion.div, { className: `${styles$q.arrayInputItem} ${fields.length > 1 ? styles$q.complexItem : ''}`, style: itemStyle, initial: { opacity: 0, y: 10 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0 }, transition: {
2250
2250
  duration: 0.3,
2251
2251
  ease: "easeInOut",
2252
2252
  layout: { duration: 0.2 }
2253
- }, children: [jsx("div", { className: styles$m.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$m.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$m.addButton, children: ["Add ", label] })] }));
2253
+ }, children: [jsx("div", { className: styles$q.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$q.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$q.addButton, children: ["Add ", label] })] }));
2254
2254
  }
2255
2255
 
2256
- var styles$l = {"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"};
2256
+ var styles$p = {"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"};
2257
2257
 
2258
2258
  const EditFAB = ({ canEdit, isEditMode, hasUnsavedChanges = false, isSaving = false, onEnterEditMode, onExitEditMode, position = { bottom: 32, right: 32 } }) => {
2259
2259
  const [isMobile, setIsMobile] = useState(false);
@@ -2338,15 +2338,15 @@ const EditFAB = ({ canEdit, isEditMode, hasUnsavedChanges = false, isSaving = fa
2338
2338
  };
2339
2339
  const getVariantClass = () => {
2340
2340
  if (isSaving)
2341
- return styles$l.primary;
2341
+ return styles$p.primary;
2342
2342
  if (isEditMode) {
2343
- return hasUnsavedChanges ? styles$l.success : styles$l.secondary;
2343
+ return hasUnsavedChanges ? styles$p.success : styles$p.secondary;
2344
2344
  }
2345
- return styles$l.primary;
2345
+ return styles$p.primary;
2346
2346
  };
2347
2347
  const getIcon = () => {
2348
2348
  if (isSaving) {
2349
- return jsx("div", { className: styles$l.loader });
2349
+ return jsx("div", { className: styles$p.loader });
2350
2350
  }
2351
2351
  if (isEditMode) {
2352
2352
  return hasUnsavedChanges ? jsx(Check, { size: 24 }) : jsx(X, { size: 24 });
@@ -2361,14 +2361,14 @@ const EditFAB = ({ canEdit, isEditMode, hasUnsavedChanges = false, isSaving = fa
2361
2361
  }
2362
2362
  return "Enter edit mode";
2363
2363
  };
2364
- return (jsx(motion.button, { ref: fabRef, className: `${styles$l.fab} ${getVariantClass()} ${isMobile ? styles$l.draggable : ''} ${isDragging ? styles$l.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: {
2364
+ return (jsx(motion.button, { ref: fabRef, className: `${styles$p.fab} ${getVariantClass()} ${isMobile ? styles$p.draggable : ''} ${isDragging ? styles$p.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: {
2365
2365
  type: "spring",
2366
2366
  stiffness: 260,
2367
2367
  damping: 20
2368
2368
  }, children: getIcon() }));
2369
2369
  };
2370
2370
 
2371
- var styles$k = {"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"};
2371
+ var styles$o = {"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"};
2372
2372
 
2373
2373
  // Default filter options for backwards compatibility
2374
2374
  const defaultFilterOptions = [
@@ -2561,18 +2561,18 @@ const SearchBar = ({ className, placeholder = "Search (Ctrl+Space)...", onSearch
2561
2561
  return text || '';
2562
2562
  const regex = new RegExp(`(${highlight.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')})`, 'gi');
2563
2563
  const parts = text.split(regex);
2564
- return parts.map((part, index) => regex.test(part) ? (jsx("mark", { className: styles$k.highlight, children: part }, index)) : (part));
2564
+ return parts.map((part, index) => regex.test(part) ? (jsx("mark", { className: styles$o.highlight, children: part }, index)) : (part));
2565
2565
  };
2566
- return (jsxs("div", { ref: searchRef, className: `${styles$k.searchContainer} ${className || ''}`, children: [jsxs("div", { className: styles$k.searchInputWrapper, children: [jsx(Search, { className: styles$k.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$k.searchInput, "aria-label": "Search", "aria-expanded": isDropdownOpen, "aria-controls": "search-results", "aria-autocomplete": "list" }), query && (jsx(motion.button, { className: styles$k.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$k.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$k.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$k.loadingState, children: [jsx("div", { className: styles$k.spinner }), jsx("span", { children: "Searching..." })] })) : results.length === 0 ? (jsxs("div", { className: styles$k.emptyState, children: ["No results found for \"", query, "\""] })) : (jsx("div", { className: styles$k.resultsGroups, children: Object.entries(groupedResults).map(([type, groupResults]) => {
2566
+ return (jsxs("div", { ref: searchRef, className: `${styles$o.searchContainer} ${className || ''}`, children: [jsxs("div", { className: styles$o.searchInputWrapper, children: [jsx(Search, { className: styles$o.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$o.searchInput, "aria-label": "Search", "aria-expanded": isDropdownOpen, "aria-controls": "search-results", "aria-autocomplete": "list" }), query && (jsx(motion.button, { className: styles$o.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$o.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$o.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$o.loadingState, children: [jsx("div", { className: styles$o.spinner }), jsx("span", { children: "Searching..." })] })) : results.length === 0 ? (jsxs("div", { className: styles$o.emptyState, children: ["No results found for \"", query, "\""] })) : (jsx("div", { className: styles$o.resultsGroups, children: Object.entries(groupedResults).map(([type, groupResults]) => {
2567
2567
  const Icon = entityIcons[type];
2568
- return (jsxs("div", { className: styles$k.resultGroup, children: [jsxs("div", { className: styles$k.groupHeader, children: [Icon && jsx(Icon, { className: styles$k.groupIcon }), jsx("span", { className: styles$k.groupTitle, children: type.charAt(0).toUpperCase() + type.slice(1) }), jsx("span", { className: styles$k.groupCount, children: groupResults.length })] }), jsx("div", { className: styles$k.groupResults, children: groupResults.map((result) => {
2568
+ return (jsxs("div", { className: styles$o.resultGroup, children: [jsxs("div", { className: styles$o.groupHeader, children: [Icon && jsx(Icon, { className: styles$o.groupIcon }), jsx("span", { className: styles$o.groupTitle, children: type.charAt(0).toUpperCase() + type.slice(1) }), jsx("span", { className: styles$o.groupCount, children: groupResults.length })] }), jsx("div", { className: styles$o.groupResults, children: groupResults.map((result) => {
2569
2569
  const globalIndex = results.indexOf(result);
2570
- return (jsxs(motion.button, { "data-result-index": globalIndex, className: `${styles$k.resultItem} ${highlightedIndex === globalIndex ? styles$k.highlighted : ''}`, onClick: () => handleResultClick(result), whileHover: { x: 4 }, onMouseEnter: () => setHighlightedIndex(globalIndex), children: [jsxs("div", { className: styles$k.resultContent, children: [jsx("div", { className: styles$k.resultTitle, children: highlightMatch(result.title || 'Untitled', query) }), result.subtitle && (jsx("div", { className: styles$k.resultSubtitle, children: highlightMatch(result.subtitle, query) }))] }), result.meta && (jsx("div", { className: styles$k.resultMeta, children: result.meta }))] }, `${result.type}-${result.id}`));
2570
+ return (jsxs(motion.button, { "data-result-index": globalIndex, className: `${styles$o.resultItem} ${highlightedIndex === globalIndex ? styles$o.highlighted : ''}`, onClick: () => handleResultClick(result), whileHover: { x: 4 }, onMouseEnter: () => setHighlightedIndex(globalIndex), children: [jsxs("div", { className: styles$o.resultContent, children: [jsx("div", { className: styles$o.resultTitle, children: highlightMatch(result.title || 'Untitled', query) }), result.subtitle && (jsx("div", { className: styles$o.resultSubtitle, children: highlightMatch(result.subtitle, query) }))] }), result.meta && (jsx("div", { className: styles$o.resultMeta, children: result.meta }))] }, `${result.type}-${result.id}`));
2571
2571
  }) })] }, type));
2572
2572
  }) })) })) })] }));
2573
2573
  };
2574
2574
 
2575
- var styles$j = {"timeInput":"TimeInput-module_timeInput__h1DpT","label":"TimeInput-module_label__d4rZw","required":"TimeInput-module_required__rc1vq","picker":"TimeInput-module_picker__9c6EI","error":"TimeInput-module_error__gJnpk","disabled":"TimeInput-module_disabled__wxiZ-"};
2575
+ var styles$n = {"timeInput":"TimeInput-module_timeInput__h1DpT","label":"TimeInput-module_label__d4rZw","required":"TimeInput-module_required__rc1vq","picker":"TimeInput-module_picker__9c6EI","error":"TimeInput-module_error__gJnpk","disabled":"TimeInput-module_disabled__wxiZ-"};
2576
2576
 
2577
2577
  const lightTheme = createTheme({
2578
2578
  palette: {
@@ -2608,26 +2608,26 @@ function TimeInput({ label, value, onChange, error = false, success = false, loa
2608
2608
  !!document.documentElement.getAttribute('data-theme')?.includes('dark');
2609
2609
  const muiTheme = useMemo(() => (isDark ? darkTheme : lightTheme), [isDark]);
2610
2610
  const getContainerClassName = () => {
2611
- const classes = [styles$j.timeInput];
2611
+ const classes = [styles$n.timeInput];
2612
2612
  if (error)
2613
- classes.push(styles$j.error);
2613
+ classes.push(styles$n.error);
2614
2614
  if (success)
2615
- classes.push(styles$j.success);
2615
+ classes.push(styles$n.success);
2616
2616
  if (loading)
2617
- classes.push(styles$j.loading);
2617
+ classes.push(styles$n.loading);
2618
2618
  if (disabled)
2619
- classes.push(styles$j.disabled);
2619
+ classes.push(styles$n.disabled);
2620
2620
  if (className)
2621
2621
  classes.push(className);
2622
2622
  return classes.join(' ');
2623
2623
  };
2624
- return (jsxs("div", { className: getContainerClassName(), children: [label && (jsxs("label", { className: styles$j.label, children: [label, required && jsx("span", { className: styles$j.required, children: "*" })] })), jsx(ThemeProvider$1, { theme: muiTheme, children: jsx(LocalizationProvider, { dateAdapter: AdapterDayjs, children: jsx(MobileTimePicker, { value: dayjsValue, onChange: (newValue) => {
2624
+ return (jsxs("div", { className: getContainerClassName(), children: [label && (jsxs("label", { className: styles$n.label, children: [label, required && jsx("span", { className: styles$n.required, children: "*" })] })), jsx(ThemeProvider$1, { theme: muiTheme, children: jsx(LocalizationProvider, { dateAdapter: AdapterDayjs, children: jsx(MobileTimePicker, { value: dayjsValue, onChange: (newValue) => {
2625
2625
  onChange(newValue ? newValue.format('HH:mm') : '');
2626
2626
  }, ampm: false, views: ['hours', 'minutes'], disabled: disabled || loading, slotProps: {
2627
2627
  textField: {
2628
2628
  size: 'small',
2629
2629
  fullWidth: true,
2630
- className: styles$j.picker,
2630
+ className: styles$n.picker,
2631
2631
  sx: {
2632
2632
  '& .MuiPickersOutlinedInput-root': {
2633
2633
  fontFamily: "'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, monospace",
@@ -2715,7 +2715,7 @@ const ThemeProvider = ({ children, defaultTheme = 'light', storageKey = 'app-the
2715
2715
  return (jsx(ThemeContext.Provider, { value: { theme, setTheme, toggleTheme }, children: children }));
2716
2716
  };
2717
2717
 
2718
- var styles$i = {"button":"ThemeSwitcher-module_button__VfRjU","iconButton":"ThemeSwitcher-module_iconButton__NKYBc","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"};
2718
+ var styles$m = {"button":"ThemeSwitcher-module_button__VfRjU","iconButton":"ThemeSwitcher-module_iconButton__NKYBc","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"};
2719
2719
 
2720
2720
  const ThemeSwitcher = ({ variant = 'button', showLabel = false, className = '', currentTheme, onThemeChange, themes: customThemes, }) => {
2721
2721
  // Use safe version that returns null when outside a ThemeProvider
@@ -2736,25 +2736,25 @@ const ThemeSwitcher = ({ variant = 'button', showLabel = false, className = '',
2736
2736
  if (variant === 'toggle') {
2737
2737
  // Simple toggle between light and dark
2738
2738
  const isDark = theme.includes('dark');
2739
- return (jsxs(motion.button, { className: `${styles$i.toggle} ${className}`, onClick: () => setTheme(isDark ? 'light' : 'dark'), whileTap: { scale: 0.95 }, "aria-label": "Toggle theme", children: [jsx(motion.div, { className: styles$i.toggleTrack, animate: { backgroundColor: isDark ? 'var(--color-primary)' : 'var(--color-border)' }, children: jsx(motion.div, { className: styles$i.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$i.label, children: isDark ? 'Dark' : 'Light' })] }));
2739
+ return (jsxs(motion.button, { className: `${styles$m.toggle} ${className}`, onClick: () => setTheme(isDark ? 'light' : 'dark'), whileTap: { scale: 0.95 }, "aria-label": "Toggle theme", children: [jsx(motion.div, { className: styles$m.toggleTrack, animate: { backgroundColor: isDark ? 'var(--color-primary)' : 'var(--color-border)' }, children: jsx(motion.div, { className: styles$m.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$m.label, children: isDark ? 'Dark' : 'Light' })] }));
2740
2740
  }
2741
2741
  if (variant === 'icon') {
2742
- return (jsxs("button", { type: "button", className: `${styles$i.iconButton} ${className}`, onClick: () => {
2742
+ return (jsxs("button", { type: "button", className: `${styles$m.iconButton} ${className}`, onClick: () => {
2743
2743
  const nextIndex = (currentThemeIndex + 1) % themes.length;
2744
2744
  setTheme(themes[nextIndex].value);
2745
- }, "aria-label": `Current theme: ${currentThemeData.label}. Click to change.`, title: currentThemeData.label, children: [currentThemeData.icon, showLabel && jsx("span", { className: styles$i.label, children: currentThemeData.label })] }));
2745
+ }, "aria-label": `Current theme: ${currentThemeData.label}. Click to change.`, title: currentThemeData.label, children: [currentThemeData.icon, showLabel && jsx("span", { className: styles$m.label, children: currentThemeData.label })] }));
2746
2746
  }
2747
2747
  if (variant === 'dropdown') {
2748
- return (jsxs("div", { className: `${styles$i.dropdown} ${className}`, children: [jsxs(motion.button, { className: styles$i.dropdownTrigger, whileTap: { scale: 0.98 }, children: [currentThemeData.icon, showLabel && jsx("span", { className: styles$i.label, children: currentThemeData.label })] }), jsx(motion.div, { className: styles$i.dropdownMenu, initial: { opacity: 0, y: -10 }, animate: { opacity: 1, y: 0 }, children: themes.map((t) => (jsxs(motion.button, { className: `${styles$i.dropdownItem} ${theme === t.value ? styles$i.active : ''}`, onClick: () => setTheme(t.value), whileHover: { x: 4 }, whileTap: { scale: 0.98 }, children: [jsx("span", { className: styles$i.icon, children: t.icon }), jsx("span", { className: styles$i.text, children: t.label })] }, t.value))) })] }));
2748
+ return (jsxs("div", { className: `${styles$m.dropdown} ${className}`, children: [jsxs(motion.button, { className: styles$m.dropdownTrigger, whileTap: { scale: 0.98 }, children: [currentThemeData.icon, showLabel && jsx("span", { className: styles$m.label, children: currentThemeData.label })] }), jsx(motion.div, { className: styles$m.dropdownMenu, initial: { opacity: 0, y: -10 }, animate: { opacity: 1, y: 0 }, children: themes.map((t) => (jsxs(motion.button, { className: `${styles$m.dropdownItem} ${theme === t.value ? styles$m.active : ''}`, onClick: () => setTheme(t.value), whileHover: { x: 4 }, whileTap: { scale: 0.98 }, children: [jsx("span", { className: styles$m.icon, children: t.icon }), jsx("span", { className: styles$m.text, children: t.label })] }, t.value))) })] }));
2749
2749
  }
2750
2750
  // Default button variant - cycles through themes
2751
- return (jsxs(motion.button, { className: `${styles$i.button} ${className}`, onClick: () => {
2751
+ return (jsxs(motion.button, { className: `${styles$m.button} ${className}`, onClick: () => {
2752
2752
  const nextIndex = (currentThemeIndex + 1) % themes.length;
2753
2753
  setTheme(themes[nextIndex].value);
2754
- }, 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$i.iconWrapper, children: currentThemeData.icon }, theme), showLabel && jsx("span", { className: styles$i.label, children: currentThemeData.label })] }));
2754
+ }, 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$m.iconWrapper, children: currentThemeData.icon }, theme), showLabel && jsx("span", { className: styles$m.label, children: currentThemeData.label })] }));
2755
2755
  };
2756
2756
 
2757
- var styles$h = {"tabs":"Tabs-module_tabs__Vlvn7","tab":"Tabs-module_tab__uQKim","tabIcon":"Tabs-module_tabIcon__AgN-O","fullWidth":"Tabs-module_fullWidth__X-GHP"};
2757
+ var styles$l = {"tabs":"Tabs-module_tabs__Vlvn7","tab":"Tabs-module_tab__uQKim","tabIcon":"Tabs-module_tabIcon__AgN-O","fullWidth":"Tabs-module_fullWidth__X-GHP"};
2758
2758
 
2759
2759
  // Default tabs for backwards compatibility
2760
2760
  const defaultTabs = [
@@ -2765,39 +2765,39 @@ const defaultTabs = [
2765
2765
  ];
2766
2766
  const Tabs = ({ activeTab, onTabChange, tabs: customTabs, className = '', fullWidth = false }) => {
2767
2767
  const tabs = customTabs ?? defaultTabs;
2768
- return (jsx("div", { className: `${styles$h.tabs} ${fullWidth ? styles$h.fullWidth : ''} ${className}`, children: tabs.map((tab) => {
2768
+ return (jsx("div", { className: `${styles$l.tabs} ${fullWidth ? styles$l.fullWidth : ''} ${className}`, children: tabs.map((tab) => {
2769
2769
  const isActive = activeTab === tab.id;
2770
- return (jsxs(motion.button, { className: styles$h.tab, "data-active": isActive, onClick: () => onTabChange(tab.id), style: { position: 'relative' }, children: [jsx(motion.div, { animate: {
2770
+ return (jsxs(motion.button, { className: styles$l.tab, "data-active": isActive, onClick: () => onTabChange(tab.id), style: { position: 'relative' }, children: [jsx(motion.div, { animate: {
2771
2771
  rotate: isActive ? [0, -10, 10, -5, 5, 0] : 0,
2772
2772
  }, transition: {
2773
2773
  rotate: {
2774
2774
  duration: 0.5,
2775
2775
  ease: 'easeInOut'
2776
2776
  }
2777
- }, children: tab.icon && (React.isValidElement(tab.icon) ? (jsx("span", { className: styles$h.tabIcon, children: tab.icon })) : (jsx("span", { className: styles$h.tabIcon, children: React.createElement(tab.icon) }))) }), jsx("span", { children: tab.label })] }, tab.id));
2777
+ }, children: tab.icon && (React.isValidElement(tab.icon) ? (jsx("span", { className: styles$l.tabIcon, children: tab.icon })) : (jsx("span", { className: styles$l.tabIcon, children: React.createElement(tab.icon) }))) }), jsx("span", { children: tab.label })] }, tab.id));
2778
2778
  }) }));
2779
2779
  };
2780
2780
 
2781
- var styles$g = {"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"};
2781
+ var styles$k = {"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"};
2782
2782
 
2783
2783
  const getIcon = (type) => {
2784
2784
  switch (type) {
2785
2785
  case 'success':
2786
- return (jsx("svg", { className: `${styles$g.icon} ${styles$g.iconSuccess}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 13l4 4L19 7" }) }));
2786
+ return (jsx("svg", { className: `${styles$k.icon} ${styles$k.iconSuccess}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 13l4 4L19 7" }) }));
2787
2787
  case 'error':
2788
- return (jsx("svg", { className: `${styles$g.icon} ${styles$g.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" }) }));
2788
+ return (jsx("svg", { className: `${styles$k.icon} ${styles$k.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" }) }));
2789
2789
  case 'warning':
2790
- return (jsx("svg", { className: `${styles$g.icon} ${styles$g.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" }) }));
2790
+ return (jsx("svg", { className: `${styles$k.icon} ${styles$k.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" }) }));
2791
2791
  case 'info':
2792
- return (jsx("svg", { className: `${styles$g.icon} ${styles$g.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" }) }));
2792
+ return (jsx("svg", { className: `${styles$k.icon} ${styles$k.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" }) }));
2793
2793
  }
2794
2794
  };
2795
2795
  const getToastStyle = (type) => {
2796
2796
  switch (type) {
2797
- case 'success': return styles$g.toastSuccess;
2798
- case 'error': return styles$g.toastError;
2799
- case 'warning': return styles$g.toastWarning;
2800
- case 'info': return styles$g.toastInfo;
2797
+ case 'success': return styles$k.toastSuccess;
2798
+ case 'error': return styles$k.toastError;
2799
+ case 'warning': return styles$k.toastWarning;
2800
+ case 'info': return styles$k.toastInfo;
2801
2801
  default: return '';
2802
2802
  }
2803
2803
  };
@@ -2819,7 +2819,7 @@ const ToastItem = ({ toast, removeToast, }) => {
2819
2819
  clearInterval(interval);
2820
2820
  };
2821
2821
  }, [toast.id, duration, removeToast]);
2822
- return (jsxs(motion.div, { className: `${styles$g.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$g.content, children: [toast.title && jsx("p", { className: styles$g.title, children: toast.title }), jsx("p", { className: styles$g.message, children: toast.message })] }), jsx("button", { className: styles$g.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$g.progressBar, initial: { width: '100%' }, animate: { width: `${progress}%` }, style: {
2822
+ return (jsxs(motion.div, { className: `${styles$k.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$k.content, children: [toast.title && jsx("p", { className: styles$k.title, children: toast.title }), jsx("p", { className: styles$k.message, children: toast.message })] }), jsx("button", { className: styles$k.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$k.progressBar, initial: { width: '100%' }, animate: { width: `${progress}%` }, style: {
2823
2823
  color: toast.type === 'success' ? '#10B981'
2824
2824
  : toast.type === 'error' ? '#EF4444'
2825
2825
  : toast.type === 'warning' ? '#F59E0B'
@@ -2829,10 +2829,10 @@ const ToastItem = ({ toast, removeToast, }) => {
2829
2829
  const ToastContainer = ({ toasts, removeToast }) => {
2830
2830
  if (typeof document === 'undefined')
2831
2831
  return null;
2832
- return createPortal(jsx("div", { className: styles$g.toastContainer, children: jsx(AnimatePresence, { mode: "sync", children: toasts.map((toast) => (jsx(ToastItem, { toast: toast, removeToast: removeToast }, toast.id))) }) }), document.body);
2832
+ return createPortal(jsx("div", { className: styles$k.toastContainer, children: jsx(AnimatePresence, { mode: "sync", children: toasts.map((toast) => (jsx(ToastItem, { toast: toast, removeToast: removeToast }, toast.id))) }) }), document.body);
2833
2833
  };
2834
2834
 
2835
- var styles$f = {"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"};
2835
+ var styles$j = {"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"};
2836
2836
 
2837
2837
  /**
2838
2838
  * Breadcrumb Component
@@ -2851,13 +2851,13 @@ var styles$f = {"breadcrumb":"Breadcrumb-module_breadcrumb__pGabz","separator":"
2851
2851
  * />
2852
2852
  */
2853
2853
  const Breadcrumb = ({ items, onNavigate, className = '' }) => {
2854
- return (jsx("nav", { className: `${styles$f.breadcrumb} ${className}`, "aria-label": "Breadcrumb", children: items.map((item, index) => {
2854
+ return (jsx("nav", { className: `${styles$j.breadcrumb} ${className}`, "aria-label": "Breadcrumb", children: items.map((item, index) => {
2855
2855
  const isLast = index === items.length - 1;
2856
- return (jsxs(React.Fragment, { children: [index > 0 && jsx(ChevronRight, { size: 14, className: styles$f.separator }), isLast || !item.href ? (jsx("span", { className: `${styles$f.item} ${isLast ? styles$f.current : ''}`, children: item.label })) : (jsx("button", { className: `${styles$f.item} ${styles$f.link}`, onClick: () => onNavigate?.(item.href), children: item.label }))] }, index));
2856
+ return (jsxs(React.Fragment, { children: [index > 0 && jsx(ChevronRight, { size: 14, className: styles$j.separator }), isLast || !item.href ? (jsx("span", { className: `${styles$j.item} ${isLast ? styles$j.current : ''}`, children: item.label })) : (jsx("button", { className: `${styles$j.item} ${styles$j.link}`, onClick: () => onNavigate?.(item.href), children: item.label }))] }, index));
2857
2857
  }) }));
2858
2858
  };
2859
2859
 
2860
- var styles$e = {"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"};
2860
+ var styles$i = {"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"};
2861
2861
 
2862
2862
  /**
2863
2863
  * LiquidButton Component
@@ -2883,13 +2883,13 @@ const LiquidButton = ({ actions, icon: Icon = Plus, className = '', }) => {
2883
2883
  setExpanded(false);
2884
2884
  action.onClick();
2885
2885
  }, []);
2886
- return (jsxs(Fragment, { children: [jsx(AnimatePresence, { children: expanded && (jsx(motion.div, { className: styles$e.overlay, initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, onClick: handleToggle })) }), jsxs("div", { className: `${styles$e.container} ${className}`, children: [jsx(AnimatePresence, { children: expanded && (jsx("div", { className: styles$e.actions, children: actions.map((action, index) => (jsxs(motion.button, { type: "button", className: styles$e.actionButton, initial: { opacity: 0, scale: 0.8 }, animate: { opacity: 1, scale: 1 }, exit: { opacity: 0, scale: 0.8 }, transition: {
2886
+ return (jsxs(Fragment, { children: [jsx(AnimatePresence, { children: expanded && (jsx(motion.div, { className: styles$i.overlay, initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, onClick: handleToggle })) }), jsxs("div", { className: `${styles$i.container} ${className}`, children: [jsx(AnimatePresence, { children: expanded && (jsx("div", { className: styles$i.actions, children: actions.map((action, index) => (jsxs(motion.button, { type: "button", className: styles$i.actionButton, initial: { opacity: 0, scale: 0.8 }, animate: { opacity: 1, scale: 1 }, exit: { opacity: 0, scale: 0.8 }, transition: {
2887
2887
  duration: 0.15,
2888
2888
  delay: (actions.length - 1 - index) * 0.05,
2889
- }, onClick: () => handleAction(action), children: [jsx(action.icon, { size: 18, color: action.color }), jsx("span", { className: styles$e.actionLabel, children: action.label })] }, action.key))) })) }), jsx(motion.button, { type: "button", className: styles$e.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 }) })] })] }));
2889
+ }, onClick: () => handleAction(action), children: [jsx(action.icon, { size: 18, color: action.color }), jsx("span", { className: styles$i.actionLabel, children: action.label })] }, action.key))) })) }), jsx(motion.button, { type: "button", className: styles$i.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 }) })] })] }));
2890
2890
  };
2891
2891
 
2892
- var styles$d = {"container":"RecurrencePicker-module_container__2Ewc4","field":"RecurrencePicker-module_field__3rsnB","fieldCentered":"RecurrencePicker-module_fieldCentered__wP27Q","fieldLabel":"RecurrencePicker-module_fieldLabel__HCMBQ","fieldRow":"RecurrencePicker-module_fieldRow__AQ4k7","fieldUnit":"RecurrencePicker-module_fieldUnit__WHbVN","dayPicker":"RecurrencePicker-module_dayPicker__a5ue6","dayBtn":"RecurrencePicker-module_dayBtn__WIxNY","dayBtnActive":"RecurrencePicker-module_dayBtnActive__mX7FB","preview":"RecurrencePicker-module_preview__tfAQ-"};
2892
+ var styles$h = {"container":"RecurrencePicker-module_container__2Ewc4","field":"RecurrencePicker-module_field__3rsnB","fieldCentered":"RecurrencePicker-module_fieldCentered__wP27Q","fieldLabel":"RecurrencePicker-module_fieldLabel__HCMBQ","fieldRow":"RecurrencePicker-module_fieldRow__AQ4k7","fieldUnit":"RecurrencePicker-module_fieldUnit__WHbVN","dayPicker":"RecurrencePicker-module_dayPicker__a5ue6","dayBtn":"RecurrencePicker-module_dayBtn__WIxNY","dayBtnActive":"RecurrencePicker-module_dayBtnActive__mX7FB","preview":"RecurrencePicker-module_preview__tfAQ-"};
2893
2893
 
2894
2894
  const DEFAULT_STATE = {
2895
2895
  freq: 'WEEKLY',
@@ -3035,18 +3035,18 @@ const RecurrencePicker = ({ value, onChange, className, }) => {
3035
3035
  MONTHLY: state.interval === 1 ? 'month' : 'months',
3036
3036
  YEARLY: state.interval === 1 ? 'year' : 'years',
3037
3037
  };
3038
- return (jsxs("div", { className: `${styles$d.container}${className ? ` ${className}` : ''}`, children: [jsx("div", { className: styles$d.field, children: jsx(SelectInput, { label: "Frequency", value: state.freq, onChange: v => update({ freq: v }), options: [
3038
+ return (jsxs("div", { className: `${styles$h.container}${className ? ` ${className}` : ''}`, children: [jsx("div", { className: styles$h.field, children: jsx(SelectInput, { label: "Frequency", value: state.freq, onChange: v => update({ freq: v }), options: [
3039
3039
  { value: 'DAILY', label: 'Daily' },
3040
3040
  { value: 'WEEKLY', label: 'Weekly' },
3041
3041
  { value: 'MONTHLY', label: 'Monthly' },
3042
3042
  { value: 'YEARLY', label: 'Yearly' },
3043
- ] }) }), jsxs("div", { className: styles$d.field, children: [jsx("span", { className: styles$d.fieldLabel, children: "Every" }), jsxs("div", { className: styles$d.fieldRow, children: [jsx(NumberStepper, { value: state.interval, onChange: v => update({ interval: Math.max(1, v) }), min: 1, max: 99, hideLimits: true, size: "small" }), jsx("span", { className: styles$d.fieldUnit, children: unitLabel[state.freq] })] })] }), state.freq === 'WEEKLY' && (jsxs("div", { className: `${styles$d.field} ${styles$d.fieldCentered}`, children: [jsx("span", { className: styles$d.fieldLabel, children: "On" }), jsx("div", { className: styles$d.dayPicker, children: WEEKDAYS.map(d => (jsx("button", { type: "button", className: `${styles$d.dayBtn} ${state.byDay.includes(d.code) ? styles$d.dayBtnActive : ''}`, onClick: () => toggleDay(d.code), "aria-label": d.code, children: d.label }, d.code))) })] })), state.freq === 'MONTHLY' && (jsxs("div", { className: styles$d.field, children: [jsx("span", { className: styles$d.fieldLabel, children: "Day of month" }), jsxs("div", { className: styles$d.fieldRow, children: [jsx(NumberStepper, { value: state.byMonthDay, onChange: v => update({ byMonthDay: Math.min(31, Math.max(1, v)) }), min: 1, max: 31, disabled: state.monthlyLast, hideLimits: true, size: "small" }), jsx(Checkbox, { checked: state.monthlyLast, onChange: v => update({ monthlyLast: v }), label: "Last day" })] })] })), state.freq === 'YEARLY' && (jsxs(Fragment, { children: [jsx("div", { className: styles$d.field, children: jsx(SelectInput, { label: "Month", value: String(state.byMonth), onChange: v => update({ byMonth: Number(v) }), options: MONTHS$1.map((m, i) => ({
3043
+ ] }) }), jsxs("div", { className: styles$h.field, children: [jsx("span", { className: styles$h.fieldLabel, children: "Every" }), jsxs("div", { className: styles$h.fieldRow, children: [jsx(NumberStepper, { value: state.interval, onChange: v => update({ interval: Math.max(1, v) }), min: 1, max: 99, hideLimits: true, size: "small" }), jsx("span", { className: styles$h.fieldUnit, children: unitLabel[state.freq] })] })] }), state.freq === 'WEEKLY' && (jsxs("div", { className: `${styles$h.field} ${styles$h.fieldCentered}`, children: [jsx("span", { className: styles$h.fieldLabel, children: "On" }), jsx("div", { className: styles$h.dayPicker, children: WEEKDAYS.map(d => (jsx("button", { type: "button", className: `${styles$h.dayBtn} ${state.byDay.includes(d.code) ? styles$h.dayBtnActive : ''}`, onClick: () => toggleDay(d.code), "aria-label": d.code, children: d.label }, d.code))) })] })), state.freq === 'MONTHLY' && (jsxs("div", { className: styles$h.field, children: [jsx("span", { className: styles$h.fieldLabel, children: "Day of month" }), jsxs("div", { className: styles$h.fieldRow, children: [jsx(NumberStepper, { value: state.byMonthDay, onChange: v => update({ byMonthDay: Math.min(31, Math.max(1, v)) }), min: 1, max: 31, disabled: state.monthlyLast, hideLimits: true, size: "small" }), jsx(Checkbox, { checked: state.monthlyLast, onChange: v => update({ monthlyLast: v }), label: "Last day" })] })] })), state.freq === 'YEARLY' && (jsxs(Fragment, { children: [jsx("div", { className: styles$h.field, children: jsx(SelectInput, { label: "Month", value: String(state.byMonth), onChange: v => update({ byMonth: Number(v) }), options: MONTHS$1.map((m, i) => ({
3044
3044
  value: String(i + 1),
3045
3045
  label: m,
3046
- })) }) }), jsxs("div", { className: styles$d.field, children: [jsx("span", { className: styles$d.fieldLabel, children: "Day" }), jsx(NumberStepper, { value: state.yearDay, onChange: v => update({ yearDay: Math.min(31, Math.max(1, v)) }), min: 1, max: 31, hideLimits: true, size: "small" })] })] })), jsx("div", { className: styles$d.preview, children: preview })] }));
3046
+ })) }) }), jsxs("div", { className: styles$h.field, children: [jsx("span", { className: styles$h.fieldLabel, children: "Day" }), jsx(NumberStepper, { value: state.yearDay, onChange: v => update({ yearDay: Math.min(31, Math.max(1, v)) }), min: 1, max: 31, hideLimits: true, size: "small" })] })] })), jsx("div", { className: styles$h.preview, children: preview })] }));
3047
3047
  };
3048
3048
 
3049
- var styles$c = {"wrap":"StreamConsole-module_wrap__MnVWw","header":"StreamConsole-module_header__FjnRM","headerLeft":"StreamConsole-module_headerLeft__gNDyh","statusDot":"StreamConsole-module_statusDot__xQ254","spin":"StreamConsole-module_spin__OrOeL","label":"StreamConsole-module_label__rJIDm","statusText":"StreamConsole-module_statusText__oG-ej","dismiss":"StreamConsole-module_dismiss__WH3Kv","body":"StreamConsole-module_body__-HIK-","hint":"StreamConsole-module_hint__BA4SI","line":"StreamConsole-module_line__5hMY2","linePrefix":"StreamConsole-module_linePrefix__xR-Oj","lineText":"StreamConsole-module_lineText__IyRSF","lineLabel":"StreamConsole-module_lineLabel__z-qj4"};
3049
+ var styles$g = {"wrap":"StreamConsole-module_wrap__MnVWw","header":"StreamConsole-module_header__FjnRM","headerLeft":"StreamConsole-module_headerLeft__gNDyh","statusDot":"StreamConsole-module_statusDot__xQ254","spin":"StreamConsole-module_spin__OrOeL","label":"StreamConsole-module_label__rJIDm","statusText":"StreamConsole-module_statusText__oG-ej","dismiss":"StreamConsole-module_dismiss__WH3Kv","body":"StreamConsole-module_body__-HIK-","hint":"StreamConsole-module_hint__BA4SI","line":"StreamConsole-module_line__5hMY2","linePrefix":"StreamConsole-module_linePrefix__xR-Oj","lineText":"StreamConsole-module_lineText__IyRSF","lineLabel":"StreamConsole-module_lineLabel__z-qj4"};
3050
3050
 
3051
3051
  // Known prefixes produced by stream-json summarizers (DAO-style):
3052
3052
  // "bash: ls -la", "read: path/to/file", "edit: path/to/file",
@@ -3112,21 +3112,21 @@ function StreamConsole({ stream, onCancel, onDismiss, hideDismiss = false, runni
3112
3112
  ? successLabel
3113
3113
  : errorLabel;
3114
3114
  const canShowDismiss = !hideDismiss && (stream.status === 'running' ? !!onCancel : !!onDismiss);
3115
- return (jsxs(motion.div, { className: styles$c.wrap, "data-status": stream.status, initial: { opacity: 0, y: -8 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: -8 }, transition: { duration: 0.18 }, children: [jsxs("header", { className: styles$c.header, children: [jsxs("div", { className: styles$c.headerLeft, children: [jsx("span", { className: styles$c.statusDot, "data-status": stream.status, children: jsx(Icon, { size: 12, className: stream.status === 'running' ? styles$c.spin : '' }) }), jsx("span", { className: styles$c.label, children: stream.label }), jsx("span", { className: styles$c.statusText, children: statusLabel })] }), canShowDismiss && (jsx("button", { type: "button", className: styles$c.dismiss, "aria-label": stream.status === 'running' ? 'Cancel' : 'Dismiss', onClick: () => {
3115
+ return (jsxs(motion.div, { className: styles$g.wrap, "data-status": stream.status, initial: { opacity: 0, y: -8 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: -8 }, transition: { duration: 0.18 }, children: [jsxs("header", { className: styles$g.header, children: [jsxs("div", { className: styles$g.headerLeft, children: [jsx("span", { className: styles$g.statusDot, "data-status": stream.status, children: jsx(Icon, { size: 12, className: stream.status === 'running' ? styles$g.spin : '' }) }), jsx("span", { className: styles$g.label, children: stream.label }), jsx("span", { className: styles$g.statusText, children: statusLabel })] }), canShowDismiss && (jsx("button", { type: "button", className: styles$g.dismiss, "aria-label": stream.status === 'running' ? 'Cancel' : 'Dismiss', onClick: () => {
3116
3116
  if (stream.status === 'running')
3117
3117
  onCancel?.(stream.id);
3118
3118
  else
3119
3119
  onDismiss?.(stream.id);
3120
- }, children: jsx(X, { size: 14 }) }))] }), jsxs("div", { className: styles$c.body, ref: listRef, children: [stream.events.length === 0 && stream.status === 'running' && (jsx("p", { className: styles$c.hint, children: "Waiting for output\u2026" })), stream.events.map((event, i) => {
3120
+ }, children: jsx(X, { size: 14 }) }))] }), jsxs("div", { className: styles$g.body, ref: listRef, children: [stream.events.length === 0 && stream.status === 'running' && (jsx("p", { className: styles$g.hint, children: "Waiting for output\u2026" })), stream.events.map((event, i) => {
3121
3121
  const step = event.type === 'step' ? parseStep(event.message) : null;
3122
3122
  const StepIcon = step?.subtype ? STEP_ICON[step.subtype] : null;
3123
- return (jsxs("p", { className: styles$c.line, "data-type": event.type, "data-subtype": step?.subtype ?? undefined, children: [jsx("span", { className: styles$c.linePrefix, children: StepIcon ? (jsx(StepIcon, { size: 11 })) : event.type === 'error' ? ('!') : event.type === 'warning' ? ('⚠') : event.type === 'success' ? ('✓') : ('·') }), step?.label ? (jsx("span", { className: styles$c.lineLabel, children: step.label })) : null, jsx("span", { className: styles$c.lineText, children: step ? step.body : event.message })] }, i));
3124
- }), stream.status === 'error' && stream.errorMessage && (jsxs("p", { className: styles$c.line, "data-type": "error", children: [jsx("span", { className: styles$c.linePrefix, children: "!" }), jsx("span", { className: styles$c.lineText, children: stream.errorMessage })] }))] })] }));
3123
+ return (jsxs("p", { className: styles$g.line, "data-type": event.type, "data-subtype": step?.subtype ?? undefined, children: [jsx("span", { className: styles$g.linePrefix, children: StepIcon ? (jsx(StepIcon, { size: 11 })) : event.type === 'error' ? ('!') : event.type === 'warning' ? ('⚠') : event.type === 'success' ? ('✓') : ('·') }), step?.label ? (jsx("span", { className: styles$g.lineLabel, children: step.label })) : null, jsx("span", { className: styles$g.lineText, children: step ? step.body : event.message })] }, i));
3124
+ }), stream.status === 'error' && stream.errorMessage && (jsxs("p", { className: styles$g.line, "data-type": "error", children: [jsx("span", { className: styles$g.linePrefix, children: "!" }), jsx("span", { className: styles$g.lineText, children: stream.errorMessage })] }))] })] }));
3125
3125
  }
3126
3126
 
3127
- var styles$b = {"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","exportDropdown":"Calendar-module_exportDropdown__yQX4q","exportButton":"Calendar-module_exportButton__dx7--","nightToggle":"Calendar-module_nightToggle__JGvmM","exportMenu":"Calendar-module_exportMenu__-lZ-8","exportMenuItem":"Calendar-module_exportMenuItem__D9MdL","todayButton":"Calendar-module_todayButton__Ac9zc","viewToggle":"Calendar-module_viewToggle__Fhg2t","viewButton":"Calendar-module_viewButton__J2WY6","active":"Calendar-module_active__lIqH-","filterBar":"Calendar-module_filterBar__ZD-lX","filterPill":"Calendar-module_filterPill__f7S8p","filterPillActive":"Calendar-module_filterPillActive__9Wtm9","filterDot":"Calendar-module_filterDot__E1Hp8","weekDays":"Calendar-module_weekDays__4J-8f","withWeekNumbers":"Calendar-module_withWeekNumbers__qbnUY","weekNumberHeader":"Calendar-module_weekNumberHeader__xhKbB","weekDay":"Calendar-module_weekDay__cg8Gr","daysGrid":"Calendar-module_daysGrid__ER0GM","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","selected":"Calendar-module_selected__5e6h0","compact":"Calendar-module_compact__i0SF3","dots":"Calendar-module_dots__1Q7QR","dot":"Calendar-module_dot__tsCR1","dotMore":"Calendar-module_dotMore__emasD","weekNumberCell":"Calendar-module_weekNumberCell__bydCw","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","allDayStrip":"Calendar-module_allDayStrip__VOqbV","allDayLabel":"Calendar-module_allDayLabel__2AmyT","allDayList":"Calendar-module_allDayList__6hFSb","dayViewScrollContainer":"Calendar-module_dayViewScrollContainer__84Byq","dayTimelineGrid":"Calendar-module_dayTimelineGrid__r1BNI","hourRow":"Calendar-module_hourRow__U-YN-","hourLabel":"Calendar-module_hourLabel__im84k","hourSlots":"Calendar-module_hourSlots__vbtYy","halfHourSlot":"Calendar-module_halfHourSlot__UWIri","halfHourSlotBottom":"Calendar-module_halfHourSlotBottom__aE5Mo","dayEventAnchor":"Calendar-module_dayEventAnchor__oryAi","weekTimeline":"Calendar-module_weekTimeline__q75EF","weekTimelineHeader":"Calendar-module_weekTimelineHeader__n5i06","weekDayColumnHeader":"Calendar-module_weekDayColumnHeader__u2ghX","weekDayLabel":"Calendar-module_weekDayLabel__i8Rm9","weekDayNumber":"Calendar-module_weekDayNumber__tqFKO","weekTimelineScroll":"Calendar-module_weekTimelineScroll__jesa0","weekTimelineGrid":"Calendar-module_weekTimelineGrid__MxIHF","weekTimeColumn":"Calendar-module_weekTimeColumn__rK4ZV","weekTimeSlot":"Calendar-module_weekTimeSlot__IFPUz","weekHourLabel":"Calendar-module_weekHourLabel__0ANmg","weekDayColumns":"Calendar-module_weekDayColumns__soiyU","weekDayColumn":"Calendar-module_weekDayColumn__sXVu0","weekHourRow":"Calendar-module_weekHourRow__FHcB2","weekEventAnchor":"Calendar-module_weekEventAnchor__nhG4x","currentTimeIndicator":"Calendar-module_currentTimeIndicator__GntOZ"};
3127
+ var styles$f = {"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","exportDropdown":"Calendar-module_exportDropdown__yQX4q","exportButton":"Calendar-module_exportButton__dx7--","nightToggle":"Calendar-module_nightToggle__JGvmM","exportMenu":"Calendar-module_exportMenu__-lZ-8","exportMenuItem":"Calendar-module_exportMenuItem__D9MdL","todayButton":"Calendar-module_todayButton__Ac9zc","viewToggle":"Calendar-module_viewToggle__Fhg2t","viewButton":"Calendar-module_viewButton__J2WY6","active":"Calendar-module_active__lIqH-","filterBar":"Calendar-module_filterBar__ZD-lX","filterPill":"Calendar-module_filterPill__f7S8p","filterPillActive":"Calendar-module_filterPillActive__9Wtm9","filterDot":"Calendar-module_filterDot__E1Hp8","weekDays":"Calendar-module_weekDays__4J-8f","withWeekNumbers":"Calendar-module_withWeekNumbers__qbnUY","weekNumberHeader":"Calendar-module_weekNumberHeader__xhKbB","weekDay":"Calendar-module_weekDay__cg8Gr","daysGrid":"Calendar-module_daysGrid__ER0GM","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","selected":"Calendar-module_selected__5e6h0","compact":"Calendar-module_compact__i0SF3","dots":"Calendar-module_dots__1Q7QR","dot":"Calendar-module_dot__tsCR1","dotMore":"Calendar-module_dotMore__emasD","weekNumberCell":"Calendar-module_weekNumberCell__bydCw","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","allDayStrip":"Calendar-module_allDayStrip__VOqbV","allDayLabel":"Calendar-module_allDayLabel__2AmyT","allDayList":"Calendar-module_allDayList__6hFSb","dayViewScrollContainer":"Calendar-module_dayViewScrollContainer__84Byq","dayTimelineGrid":"Calendar-module_dayTimelineGrid__r1BNI","hourRow":"Calendar-module_hourRow__U-YN-","hourLabel":"Calendar-module_hourLabel__im84k","hourSlots":"Calendar-module_hourSlots__vbtYy","halfHourSlot":"Calendar-module_halfHourSlot__UWIri","halfHourSlotBottom":"Calendar-module_halfHourSlotBottom__aE5Mo","dayEventAnchor":"Calendar-module_dayEventAnchor__oryAi","weekTimeline":"Calendar-module_weekTimeline__q75EF","weekTimelineHeader":"Calendar-module_weekTimelineHeader__n5i06","weekDayColumnHeader":"Calendar-module_weekDayColumnHeader__u2ghX","weekDayLabel":"Calendar-module_weekDayLabel__i8Rm9","weekDayNumber":"Calendar-module_weekDayNumber__tqFKO","weekTimelineScroll":"Calendar-module_weekTimelineScroll__jesa0","weekTimelineGrid":"Calendar-module_weekTimelineGrid__MxIHF","weekTimeColumn":"Calendar-module_weekTimeColumn__rK4ZV","weekTimeSlot":"Calendar-module_weekTimeSlot__IFPUz","weekHourLabel":"Calendar-module_weekHourLabel__0ANmg","weekDayColumns":"Calendar-module_weekDayColumns__soiyU","weekDayColumn":"Calendar-module_weekDayColumn__sXVu0","weekHourRow":"Calendar-module_weekHourRow__FHcB2","weekEventAnchor":"Calendar-module_weekEventAnchor__nhG4x","currentTimeIndicator":"Calendar-module_currentTimeIndicator__GntOZ"};
3128
3128
 
3129
- var styles$a = {"wrapper":"DayEventCard-module_wrapper__qvRgl","deleteUnderlay":"DayEventCard-module_deleteUnderlay__fTtuX","card":"DayEventCard-module_card__V9xTi","dragging":"DayEventCard-module_dragging__q19ID","completed":"DayEventCard-module_completed__tq8ol","text":"DayEventCard-module_text__3dWF7","grip":"DayEventCard-module_grip__tmim4","checkIcon":"DayEventCard-module_checkIcon__Ki67j","time":"DayEventCard-module_time__Ojdye","editButton":"DayEventCard-module_editButton__nDi-e"};
3129
+ var styles$e = {"wrapper":"DayEventCard-module_wrapper__qvRgl","deleteUnderlay":"DayEventCard-module_deleteUnderlay__fTtuX","card":"DayEventCard-module_card__V9xTi","dragging":"DayEventCard-module_dragging__q19ID","completed":"DayEventCard-module_completed__tq8ol","text":"DayEventCard-module_text__3dWF7","grip":"DayEventCard-module_grip__tmim4","checkIcon":"DayEventCard-module_checkIcon__Ki67j","time":"DayEventCard-module_time__Ojdye","editButton":"DayEventCard-module_editButton__nDi-e"};
3130
3130
 
3131
3131
  const SWIPE_DELETE_THRESHOLD = -80;
3132
3132
  const DayEventCard = ({ event, color, textColor, onComplete, onEdit, onDelete, onDragEnd, draggable = true, }) => {
@@ -3188,9 +3188,9 @@ const DayEventCard = ({ event, color, textColor, onComplete, onEdit, onDelete, o
3188
3188
  };
3189
3189
  const canSwipe = !!onDelete;
3190
3190
  const showGrip = draggable && !!onDragEnd;
3191
- return (jsxs("div", { className: styles$a.wrapper, children: [canSwipe && (jsxs(motion.div, { className: styles$a.deleteUnderlay, style: { opacity: deleteOpacity }, children: [jsx(Trash2, { size: 16 }), jsx("span", { children: "Delete" })] })), jsxs(motion.div, { className: `${styles$a.card} ${completed ? styles$a.completed : ''} ${verticalDragging ? styles$a.dragging : ''}`, style: { x, y, background: color, color: textColor, borderLeftColor: color }, drag: canSwipe && !verticalDragging ? 'x' : false, dragConstraints: canSwipe ? { left: -200, right: 0 } : undefined, dragElastic: 0.15, dragDirectionLock: true, onDragStart: () => {
3191
+ return (jsxs("div", { className: styles$e.wrapper, children: [canSwipe && (jsxs(motion.div, { className: styles$e.deleteUnderlay, style: { opacity: deleteOpacity }, children: [jsx(Trash2, { size: 16 }), jsx("span", { children: "Delete" })] })), jsxs(motion.div, { className: `${styles$e.card} ${completed ? styles$e.completed : ''} ${verticalDragging ? styles$e.dragging : ''}`, style: { x, y, background: color, color: textColor, borderLeftColor: color }, drag: canSwipe && !verticalDragging ? 'x' : false, dragConstraints: canSwipe ? { left: -200, right: 0 } : undefined, dragElastic: 0.15, dragDirectionLock: true, onDragStart: () => {
3192
3192
  didSwipe.current = true;
3193
- }, onDragEnd: handleSwipeEnd, whileTap: verticalDragging ? undefined : { scale: 0.98 }, animate: verticalDragging ? { scale: 1.03 } : { scale: 1 }, onClick: handleCardClick, children: [showGrip && (jsx("div", { className: styles$a.grip, onPointerDown: handleGripPointerDown, onPointerMove: handleGripPointerMove, onPointerUp: handleGripPointerUp, onPointerCancel: handleGripPointerUp, onClick: (e) => e.stopPropagation(), children: jsx(GripVertical, { size: 14 }) })), completed && jsx(Check, { size: 14, className: styles$a.checkIcon, strokeWidth: 3 }), jsx("span", { className: styles$a.text, children: event.title }), event.time && jsx("span", { className: styles$a.time, children: event.time }), onEdit && (jsx("button", { className: styles$a.editButton, onClick: (e) => {
3193
+ }, onDragEnd: handleSwipeEnd, whileTap: verticalDragging ? undefined : { scale: 0.98 }, animate: verticalDragging ? { scale: 1.03 } : { scale: 1 }, onClick: handleCardClick, children: [showGrip && (jsx("div", { className: styles$e.grip, onPointerDown: handleGripPointerDown, onPointerMove: handleGripPointerMove, onPointerUp: handleGripPointerUp, onPointerCancel: handleGripPointerUp, onClick: (e) => e.stopPropagation(), children: jsx(GripVertical, { size: 14 }) })), completed && jsx(Check, { size: 14, className: styles$e.checkIcon, strokeWidth: 3 }), jsx("span", { className: styles$e.text, children: event.title }), event.time && jsx("span", { className: styles$e.time, children: event.time }), onEdit && (jsx("button", { className: styles$e.editButton, onClick: (e) => {
3194
3194
  e.stopPropagation();
3195
3195
  onEdit(event);
3196
3196
  }, "aria-label": "Edit event", children: jsx(Pencil, { size: 13 }) }))] })] }));
@@ -3614,15 +3614,15 @@ function Calendar({ events, onEventClick, onDateClick, onEventClickByView, onDat
3614
3614
  return Math.floor(diff / oneWeek) + 1;
3615
3615
  };
3616
3616
  if (loading) {
3617
- return (jsx("div", { className: `${styles$b.calendar} ${styles$b.loading} ${className}`, style: style, children: jsx("div", { className: styles$b.loadingSpinner, children: "Loading..." }) }));
3617
+ return (jsx("div", { className: `${styles$f.calendar} ${styles$f.loading} ${className}`, style: style, children: jsx("div", { className: styles$f.loadingSpinner, children: "Loading..." }) }));
3618
3618
  }
3619
- return (jsxs("div", { className: `${styles$b.calendar} ${compact ? styles$b.compact : ''} ${className}`, style: style, children: [!hideHeader && (jsxs("div", { className: styles$b.header, children: [jsxs("div", { className: styles$b.navigation, children: [jsx("button", { onClick: handlePrevious, className: styles$b.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$b.title, children: calendarData.displayTitle }), jsx("button", { onClick: handleNext, className: styles$b.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" }) }) })] }), categories && categories.length > 0 && (jsxs("div", { className: styles$b.filterBar, role: "tablist", "aria-label": "Filter by category", children: [jsx("button", { type: "button", role: "tab", "aria-selected": activeCategoryId === null, className: `${styles$b.filterPill} ${activeCategoryId === null ? styles$b.filterPillActive : ''}`, onClick: () => handleCategoryPick(null), children: "All" }), categories.map(cat => {
3619
+ return (jsxs("div", { className: `${styles$f.calendar} ${compact ? styles$f.compact : ''} ${className}`, style: style, children: [!hideHeader && (jsxs("div", { className: styles$f.header, children: [jsxs("div", { className: styles$f.navigation, children: [jsx("button", { onClick: handlePrevious, className: styles$f.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$f.title, children: calendarData.displayTitle }), jsx("button", { onClick: handleNext, className: styles$f.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" }) }) })] }), categories && categories.length > 0 && (jsxs("div", { className: styles$f.filterBar, role: "tablist", "aria-label": "Filter by category", children: [jsx("button", { type: "button", role: "tab", "aria-selected": activeCategoryId === null, className: `${styles$f.filterPill} ${activeCategoryId === null ? styles$f.filterPillActive : ''}`, onClick: () => handleCategoryPick(null), children: "All" }), categories.map(cat => {
3620
3620
  const active = activeCategoryId === cat.id;
3621
- return (jsxs("button", { type: "button", role: "tab", "aria-selected": active, className: `${styles$b.filterPill} ${active ? styles$b.filterPillActive : ''}`, style: active ? { background: cat.color, borderColor: cat.color, color: '#ffffff' } : undefined, onClick: () => handleCategoryPick(cat.id), children: [!active && (jsx("span", { className: styles$b.filterDot, style: { background: cat.color } })), cat.label] }, cat.id));
3622
- })] })), jsxs("div", { className: styles$b.controls, children: [exportFormats && exportFormats.length > 0 && (jsxs("div", { className: styles$b.exportDropdown, ref: exportRef, children: [jsx("button", { type: "button", className: styles$b.exportButton, onClick: () => setExportOpen(v => !v), "aria-haspopup": "menu", "aria-expanded": exportOpen, "aria-label": "Export events", title: "Export events", children: jsx(Download, { size: 16 }) }), exportOpen && (jsx("div", { className: styles$b.exportMenu, role: "menu", children: exportFormats.map(format => (jsx("button", { type: "button", role: "menuitem", className: styles$b.exportMenuItem, onClick: () => {
3621
+ return (jsxs("button", { type: "button", role: "tab", "aria-selected": active, className: `${styles$f.filterPill} ${active ? styles$f.filterPillActive : ''}`, style: active ? { background: cat.color, borderColor: cat.color, color: '#ffffff' } : undefined, onClick: () => handleCategoryPick(cat.id), children: [!active && (jsx("span", { className: styles$f.filterDot, style: { background: cat.color } })), cat.label] }, cat.id));
3622
+ })] })), jsxs("div", { className: styles$f.controls, children: [exportFormats && exportFormats.length > 0 && (jsxs("div", { className: styles$f.exportDropdown, ref: exportRef, children: [jsx("button", { type: "button", className: styles$f.exportButton, onClick: () => setExportOpen(v => !v), "aria-haspopup": "menu", "aria-expanded": exportOpen, "aria-label": "Export events", title: "Export events", children: jsx(Download, { size: 16 }) }), exportOpen && (jsx("div", { className: styles$f.exportMenu, role: "menu", children: exportFormats.map(format => (jsx("button", { type: "button", role: "menuitem", className: styles$f.exportMenuItem, onClick: () => {
3623
3623
  downloadEvents(filteredEvents, format);
3624
3624
  setExportOpen(false);
3625
- }, children: format.toUpperCase() }, format))) }))] })), (currentViewMode === 'day' || currentViewMode === 'week') && (jsx("button", { type: "button", className: styles$b.nightToggle, onClick: () => setHideNightHours(v => !v), "aria-pressed": hideNightHours, title: hideNightHours ? 'Show night hours' : 'Hide night hours (00:00–08:00)', "aria-label": hideNightHours ? 'Show night hours' : 'Hide night hours', children: hideNightHours ? jsx(Sun, { size: 16 }) : jsx(Moon, { size: 16 }) })), jsx("button", { onClick: handleToday, className: styles$b.todayButton, children: "Today" }), jsxs("div", { className: styles$b.viewToggle, children: [jsx("button", { className: `${styles$b.viewButton} ${currentViewMode === 'month' ? styles$b.active : ''}`, onClick: () => setCurrentViewMode('month'), children: "Month" }), jsx("button", { className: `${styles$b.viewButton} ${currentViewMode === 'week' ? styles$b.active : ''}`, onClick: () => setCurrentViewMode('week'), children: "Week" }), jsx("button", { className: `${styles$b.viewButton} ${currentViewMode === 'day' ? styles$b.active : ''}`, onClick: () => setCurrentViewMode('day'), children: "Day" })] })] })] })), currentViewMode === 'month' && (jsxs("div", { className: `${styles$b.weekDays} ${showWeekNumbers ? styles$b.withWeekNumbers : ''}`, children: [showWeekNumbers && jsx("div", { className: styles$b.weekNumberHeader, children: "Wk" }), finalDayLabels.map((day) => (jsx("div", { className: styles$b.weekDay, children: day }, day)))] })), currentViewMode === 'day' ? (
3625
+ }, children: format.toUpperCase() }, format))) }))] })), (currentViewMode === 'day' || currentViewMode === 'week') && (jsx("button", { type: "button", className: styles$f.nightToggle, onClick: () => setHideNightHours(v => !v), "aria-pressed": hideNightHours, title: hideNightHours ? 'Show night hours' : 'Hide night hours (00:00–08:00)', "aria-label": hideNightHours ? 'Show night hours' : 'Hide night hours', children: hideNightHours ? jsx(Sun, { size: 16 }) : jsx(Moon, { size: 16 }) })), jsx("button", { onClick: handleToday, className: styles$f.todayButton, children: "Today" }), jsxs("div", { className: styles$f.viewToggle, children: [jsx("button", { className: `${styles$f.viewButton} ${currentViewMode === 'month' ? styles$f.active : ''}`, onClick: () => setCurrentViewMode('month'), children: "Month" }), jsx("button", { className: `${styles$f.viewButton} ${currentViewMode === 'week' ? styles$f.active : ''}`, onClick: () => setCurrentViewMode('week'), children: "Week" }), jsx("button", { className: `${styles$f.viewButton} ${currentViewMode === 'day' ? styles$f.active : ''}`, onClick: () => setCurrentViewMode('day'), children: "Day" })] })] })] })), currentViewMode === 'month' && (jsxs("div", { className: `${styles$f.weekDays} ${showWeekNumbers ? styles$f.withWeekNumbers : ''}`, children: [showWeekNumbers && jsx("div", { className: styles$f.weekNumberHeader, children: "Wk" }), finalDayLabels.map((day) => (jsx("div", { className: styles$f.weekDay, children: day }, day)))] })), currentViewMode === 'day' ? (
3626
3626
  // Day view layout — positioned events with duration, all-day strip, now-line
3627
3627
  (() => {
3628
3628
  const dayEvents = getDayEvents(currentDate);
@@ -3657,7 +3657,7 @@ function Calendar({ events, onEventClick, onDateClick, onEventClickByView, onDat
3657
3657
  const handleEventDragEnd = (event, clientY) => {
3658
3658
  if (!onEventDrop)
3659
3659
  return;
3660
- const gridEl = dayViewScrollRef.current?.querySelector(`.${styles$b.dayTimelineGrid}`);
3660
+ const gridEl = dayViewScrollRef.current?.querySelector(`.${styles$f.dayTimelineGrid}`);
3661
3661
  if (!gridEl)
3662
3662
  return;
3663
3663
  const rect = gridEl.getBoundingClientRect();
@@ -3672,7 +3672,7 @@ function Calendar({ events, onEventClick, onDateClick, onEventClickByView, onDat
3672
3672
  newDate.setHours(newHour, newMinute, 0, 0);
3673
3673
  onEventDrop(event, newDate);
3674
3674
  };
3675
- return (jsxs("div", { className: styles$b.dayView, children: [jsxs("div", { className: styles$b.dayViewHeader, children: [jsx("div", { className: styles$b.timeColumnHeader }), jsx("div", { className: styles$b.dayColumnHeader, children: currentDate.toLocaleDateString(locale, { weekday: 'short', day: 'numeric' }) })] }), allDayEvents.length > 0 && (jsxs("div", { className: styles$b.allDayStrip, children: [jsx("span", { className: styles$b.allDayLabel, children: "All day" }), jsx("div", { className: styles$b.allDayList, children: allDayEvents.map(event => (jsx(DayEventCard, { event: event, color: getEventColor(event), textColor: getEventTextColor(event), onComplete: onEventComplete ?? (onEventClick ? handleEventClick : undefined), onEdit: onEventEdit, onDelete: onEventDelete, draggable: false }, event.id))) })] })), jsx("div", { className: styles$b.dayViewScrollContainer, ref: dayViewScrollRef, children: jsxs("div", { className: styles$b.dayTimelineGrid, style: { height: timelineHeight }, children: [hours.map(hour => (jsxs("div", { className: styles$b.hourRow, style: { height: hourHeight }, children: [jsxs("span", { className: styles$b.hourLabel, children: [hour.toString().padStart(2, '0'), ":00"] }), jsx("div", { className: styles$b.hourSlots, children: halfHourSlots ? (jsxs(Fragment, { children: [jsx("div", { className: styles$b.halfHourSlot, onClick: () => handleSlotClick(hour, 0) }), jsx("div", { className: `${styles$b.halfHourSlot} ${styles$b.halfHourSlotBottom}`, onClick: () => handleSlotClick(hour, 30) })] })) : (jsx("div", { className: styles$b.halfHourSlot, onClick: () => handleSlotClick(hour, 0) })) })] }, hour))), scheduled.map((event) => {
3675
+ return (jsxs("div", { className: styles$f.dayView, children: [jsxs("div", { className: styles$f.dayViewHeader, children: [jsx("div", { className: styles$f.timeColumnHeader }), jsx("div", { className: styles$f.dayColumnHeader, children: currentDate.toLocaleDateString(locale, { weekday: 'short', day: 'numeric' }) })] }), allDayEvents.length > 0 && (jsxs("div", { className: styles$f.allDayStrip, children: [jsx("span", { className: styles$f.allDayLabel, children: "All day" }), jsx("div", { className: styles$f.allDayList, children: allDayEvents.map(event => (jsx(DayEventCard, { event: event, color: getEventColor(event), textColor: getEventTextColor(event), onComplete: onEventComplete ?? (onEventClick ? handleEventClick : undefined), onEdit: onEventEdit, onDelete: onEventDelete, draggable: false }, event.id))) })] })), jsx("div", { className: styles$f.dayViewScrollContainer, ref: dayViewScrollRef, children: jsxs("div", { className: styles$f.dayTimelineGrid, style: { height: timelineHeight }, children: [hours.map(hour => (jsxs("div", { className: styles$f.hourRow, style: { height: hourHeight }, children: [jsxs("span", { className: styles$f.hourLabel, children: [hour.toString().padStart(2, '0'), ":00"] }), jsx("div", { className: styles$f.hourSlots, children: halfHourSlots ? (jsxs(Fragment, { children: [jsx("div", { className: styles$f.halfHourSlot, onClick: () => handleSlotClick(hour, 0) }), jsx("div", { className: `${styles$f.halfHourSlot} ${styles$f.halfHourSlotBottom}`, onClick: () => handleSlotClick(hour, 30) })] })) : (jsx("div", { className: styles$f.halfHourSlot, onClick: () => handleSlotClick(hour, 0) })) })] }, hour))), scheduled.map((event) => {
3676
3676
  const [h, m] = event.time.split(':').map(Number);
3677
3677
  const top = (h - startHour) * hourHeight + (m / 60) * hourHeight;
3678
3678
  const duration = eventDuration(event);
@@ -3680,13 +3680,13 @@ function Calendar({ events, onEventClick, onDateClick, onEventClickByView, onDat
3680
3680
  const lane = dayLayout.get(event.id);
3681
3681
  const totalCols = lane?.totalCols ?? 1;
3682
3682
  const col = lane?.col ?? 0;
3683
- return (jsx("div", { className: styles$b.dayEventAnchor, style: {
3683
+ return (jsx("div", { className: styles$f.dayEventAnchor, style: {
3684
3684
  top,
3685
3685
  height,
3686
3686
  '--lane-col': col,
3687
3687
  '--lane-total': totalCols,
3688
3688
  }, onClick: (e) => e.stopPropagation(), children: jsx(DayEventCard, { event: event, color: getEventColor(event), textColor: getEventTextColor(event), onComplete: onEventComplete ?? (onEventClick ? handleEventClick : undefined), onEdit: onEventEdit, onDelete: onEventDelete, onDragEnd: onEventDrop ? (clientY) => handleEventDragEnd(event, clientY) : undefined }) }, event.id));
3689
- }), showNow && (jsx("div", { className: styles$b.currentTimeIndicator, style: { top: `${nowOffset}px` } }))] }) })] }));
3689
+ }), showNow && (jsx("div", { className: styles$f.currentTimeIndicator, style: { top: `${nowOffset}px` } }))] }) })] }));
3690
3690
  })()) : currentViewMode === 'week' ? (
3691
3691
  // Week view layout — 7 side-by-side day timelines. Drag events across
3692
3692
  // columns to reschedule to a different day + hour in one gesture.
@@ -3720,7 +3720,7 @@ function Calendar({ events, onEventClick, onDateClick, onEventClickByView, onDat
3720
3720
  const handleWeekDragEnd = (event, clientY, clientX) => {
3721
3721
  if (!onEventDrop)
3722
3722
  return;
3723
- const gridEl = weekViewScrollRef.current?.querySelector(`.${styles$b.weekDayColumns}`);
3723
+ const gridEl = weekViewScrollRef.current?.querySelector(`.${styles$f.weekDayColumns}`);
3724
3724
  if (!gridEl)
3725
3725
  return;
3726
3726
  const rect = gridEl.getBoundingClientRect();
@@ -3738,15 +3738,15 @@ function Calendar({ events, onEventClick, onDateClick, onEventClickByView, onDat
3738
3738
  newDate.setHours(newHour, newMinute, 0, 0);
3739
3739
  onEventDrop(event, newDate);
3740
3740
  };
3741
- return (jsxs("div", { className: styles$b.weekTimeline, children: [jsxs("div", { className: styles$b.weekTimelineHeader, children: [jsx("div", { className: styles$b.timeColumnHeader }), days.map(day => {
3741
+ return (jsxs("div", { className: styles$f.weekTimeline, children: [jsxs("div", { className: styles$f.weekTimelineHeader, children: [jsx("div", { className: styles$f.timeColumnHeader }), days.map(day => {
3742
3742
  const dayIsToday = day.toDateString() === now.toDateString();
3743
3743
  const dayIsSelected = selectedDate && day.toDateString() === selectedDate.toDateString();
3744
- return (jsxs("button", { type: "button", className: `${styles$b.weekDayColumnHeader} ${dayIsToday ? styles$b.today : ''} ${dayIsSelected ? styles$b.selected : ''}`, onClick: () => handleDateClick(day), children: [jsx("span", { className: styles$b.weekDayLabel, children: day.toLocaleDateString(locale, { weekday: 'short' }) }), jsx("span", { className: styles$b.weekDayNumber, children: day.getDate() })] }, day.toISOString()));
3745
- })] }), jsx("div", { className: styles$b.weekTimelineScroll, ref: weekViewScrollRef, children: jsxs("div", { className: styles$b.weekTimelineGrid, style: { height: timelineHeight }, children: [jsx("div", { className: styles$b.weekTimeColumn, children: hours.map(hour => (jsx("div", { className: styles$b.weekTimeSlot, style: { height: hourHeight }, children: jsxs("span", { className: styles$b.weekHourLabel, children: [hour.toString().padStart(2, '0'), ":00"] }) }, hour))) }), jsx("div", { className: styles$b.weekDayColumns, children: days.map(day => {
3744
+ return (jsxs("button", { type: "button", className: `${styles$f.weekDayColumnHeader} ${dayIsToday ? styles$f.today : ''} ${dayIsSelected ? styles$f.selected : ''}`, onClick: () => handleDateClick(day), children: [jsx("span", { className: styles$f.weekDayLabel, children: day.toLocaleDateString(locale, { weekday: 'short' }) }), jsx("span", { className: styles$f.weekDayNumber, children: day.getDate() })] }, day.toISOString()));
3745
+ })] }), jsx("div", { className: styles$f.weekTimelineScroll, ref: weekViewScrollRef, children: jsxs("div", { className: styles$f.weekTimelineGrid, style: { height: timelineHeight }, children: [jsx("div", { className: styles$f.weekTimeColumn, children: hours.map(hour => (jsx("div", { className: styles$f.weekTimeSlot, style: { height: hourHeight }, children: jsxs("span", { className: styles$f.weekHourLabel, children: [hour.toString().padStart(2, '0'), ":00"] }) }, hour))) }), jsx("div", { className: styles$f.weekDayColumns, children: days.map(day => {
3746
3746
  const dayEvents = getDayEvents(day).filter(e => !e.allDay && e.time);
3747
3747
  const dayIsToday = day.toDateString() === now.toDateString();
3748
3748
  const dayLayout = layoutOverlappingEvents(dayEvents);
3749
- return (jsxs("div", { className: styles$b.weekDayColumn, children: [hours.map(hour => (jsx("div", { className: styles$b.weekHourRow, style: { height: hourHeight }, children: halfHourSlots ? (jsxs(Fragment, { children: [jsx("div", { className: styles$b.halfHourSlot, onClick: () => handleWeekSlotClick(day, hour, 0) }), jsx("div", { className: `${styles$b.halfHourSlot} ${styles$b.halfHourSlotBottom}`, onClick: () => handleWeekSlotClick(day, hour, 30) })] })) : (jsx("div", { className: styles$b.halfHourSlot, onClick: () => handleWeekSlotClick(day, hour, 0) })) }, hour))), dayEvents.map(event => {
3749
+ return (jsxs("div", { className: styles$f.weekDayColumn, children: [hours.map(hour => (jsx("div", { className: styles$f.weekHourRow, style: { height: hourHeight }, children: halfHourSlots ? (jsxs(Fragment, { children: [jsx("div", { className: styles$f.halfHourSlot, onClick: () => handleWeekSlotClick(day, hour, 0) }), jsx("div", { className: `${styles$f.halfHourSlot} ${styles$f.halfHourSlotBottom}`, onClick: () => handleWeekSlotClick(day, hour, 30) })] })) : (jsx("div", { className: styles$f.halfHourSlot, onClick: () => handleWeekSlotClick(day, hour, 0) })) }, hour))), dayEvents.map(event => {
3750
3750
  const [h, m] = event.time.split(':').map(Number);
3751
3751
  const top = (h - startHour) * hourHeight + (m / 60) * hourHeight;
3752
3752
  const duration = eventDuration(event);
@@ -3754,34 +3754,34 @@ function Calendar({ events, onEventClick, onDateClick, onEventClickByView, onDat
3754
3754
  const lane = dayLayout.get(event.id);
3755
3755
  const totalCols = lane?.totalCols ?? 1;
3756
3756
  const col = lane?.col ?? 0;
3757
- return (jsx("div", { className: styles$b.weekEventAnchor, style: {
3757
+ return (jsx("div", { className: styles$f.weekEventAnchor, style: {
3758
3758
  top,
3759
3759
  height,
3760
3760
  '--lane-col': col,
3761
3761
  '--lane-total': totalCols,
3762
3762
  }, onClick: (e) => e.stopPropagation(), children: jsx(DayEventCard, { event: event, color: getEventColor(event), textColor: getEventTextColor(event), onComplete: onEventComplete ?? (onEventClick ? handleEventClick : undefined), onEdit: onEventEdit, onDelete: onEventDelete, onDragEnd: onEventDrop ? (cy, cx) => handleWeekDragEnd(event, cy, cx) : undefined }) }, event.id));
3763
- }), dayIsToday && showNow && (jsx("div", { className: styles$b.currentTimeIndicator, style: { top: `${nowOffset}px`, left: 0 } }))] }, day.toISOString()));
3763
+ }), dayIsToday && showNow && (jsx("div", { className: styles$f.currentTimeIndicator, style: { top: `${nowOffset}px`, left: 0 } }))] }, day.toISOString()));
3764
3764
  }) })] }) })] }));
3765
3765
  })()) : ((() => {
3766
3766
  // Fixed month-view cell height derived from maxEventsPerDay.
3767
3767
  // Day number + padding ≈ 40px, each event row ≈ 24px.
3768
3768
  // Week and compact views keep their own CSS-driven sizing.
3769
3769
  const monthCellHeight = !compact ? 40 + maxEventsPerDay * 24 : undefined;
3770
- return (jsx("div", { className: `${styles$b.daysGrid} ${showWeekNumbers ? styles$b.withWeekNumbers : ''}`, children: calendarData.days.map((day, index) => {
3770
+ return (jsx("div", { className: `${styles$f.daysGrid} ${showWeekNumbers ? styles$f.withWeekNumbers : ''}`, children: calendarData.days.map((day, index) => {
3771
3771
  const dayEvents = getDayEvents(day);
3772
3772
  const dayIsToday = isToday(day);
3773
3773
  const isInCurrentMonth = isCurrentMonth(day);
3774
3774
  const isWeekStart = showWeekNumbers && (index % 7 === 0);
3775
3775
  const dayIsSelected = selectedDate && day.toDateString() === selectedDate.toDateString();
3776
- return (jsxs(Fragment$1, { children: [isWeekStart && (jsx("div", { className: styles$b.weekNumberCell, style: monthCellHeight !== undefined ? { height: monthCellHeight, minHeight: monthCellHeight } : undefined, children: getWeekNumber(day) })), jsxs(motion.div, { className: `${styles$b.dayCell} ${dayIsToday ? styles$b.today : ''} ${!isInCurrentMonth ? styles$b.otherMonth : ''} ${dayIsSelected ? styles$b.selected : ''}`, style: monthCellHeight !== undefined ? { height: monthCellHeight, minHeight: monthCellHeight } : undefined, initial: { opacity: 0, y: 20 }, animate: { opacity: 1, y: 0 }, transition: {
3776
+ return (jsxs(Fragment$1, { children: [isWeekStart && (jsx("div", { className: styles$f.weekNumberCell, style: monthCellHeight !== undefined ? { height: monthCellHeight, minHeight: monthCellHeight } : undefined, children: getWeekNumber(day) })), jsxs(motion.div, { className: `${styles$f.dayCell} ${dayIsToday ? styles$f.today : ''} ${!isInCurrentMonth ? styles$f.otherMonth : ''} ${dayIsSelected ? styles$f.selected : ''}`, style: monthCellHeight !== undefined ? { height: monthCellHeight, minHeight: monthCellHeight } : undefined, initial: { opacity: 0, y: 20 }, animate: { opacity: 1, y: 0 }, transition: {
3777
3777
  duration: 0.3,
3778
3778
  delay: index * 0.02,
3779
3779
  ease: "easeOut"
3780
- }, onClick: () => handleDateClick(day), children: [jsx("div", { className: styles$b.dayNumber, children: day.getDate() }), dayEvents.length > 0 && compact && currentViewMode === 'month' ? (jsxs("div", { className: styles$b.dots, children: [dayEvents.slice(0, maxEventsPerDay).map((event) => (jsx("span", { className: styles$b.dot, style: {
3780
+ }, onClick: () => handleDateClick(day), children: [jsx("div", { className: styles$f.dayNumber, children: day.getDate() }), dayEvents.length > 0 && compact && currentViewMode === 'month' ? (jsxs("div", { className: styles$f.dots, children: [dayEvents.slice(0, maxEventsPerDay).map((event) => (jsx("span", { className: styles$f.dot, style: {
3781
3781
  backgroundColor: event.status === 'completed'
3782
3782
  ? '#047857'
3783
3783
  : getEventColor(event),
3784
- } }, event.id))), dayEvents.length > maxEventsPerDay && (jsxs("span", { className: styles$b.dotMore, children: ["+", dayEvents.length - maxEventsPerDay] }))] })) : dayEvents.length > 0 ? (jsxs("div", { className: styles$b.events, children: [dayEvents.slice(0, maxEventsPerDay).map((event, eventIndex) => (jsxs(motion.div, { className: `${styles$b.event} ${event.status === 'completed' ? styles$b.completed : ''}`, style: {
3784
+ } }, event.id))), dayEvents.length > maxEventsPerDay && (jsxs("span", { className: styles$f.dotMore, children: ["+", dayEvents.length - maxEventsPerDay] }))] })) : dayEvents.length > 0 ? (jsxs("div", { className: styles$f.events, children: [dayEvents.slice(0, maxEventsPerDay).map((event, eventIndex) => (jsxs(motion.div, { className: `${styles$f.event} ${event.status === 'completed' ? styles$f.completed : ''}`, style: {
3785
3785
  backgroundColor: getEventColor(event),
3786
3786
  color: getEventTextColor(event),
3787
3787
  opacity: event.status === 'completed' ? 0.7 : 1
@@ -3799,7 +3799,7 @@ function Calendar({ events, onEventClick, onDateClick, onEventClickByView, onDat
3799
3799
  }, whileTap: {
3800
3800
  scale: 0.98,
3801
3801
  transition: { duration: 0.1 }
3802
- }, children: [iconRenderer && iconRenderer(event), jsxs("span", { className: styles$b.eventTitle, children: [event.time && (jsx("span", { className: styles$b.eventTime, children: event.time })), event.title] }), event.status === 'completed' && (jsx("svg", { className: styles$b.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$b.moreEvents, children: ["+", dayEvents.length - maxEventsPerDay, " more"] }))] })) : emptyState ? (jsx("div", { className: styles$b.emptyState, children: emptyState })) : null] })] }, `${day.getFullYear()}-${day.getMonth()}-${day.getDate()}`));
3802
+ }, children: [iconRenderer && iconRenderer(event), jsxs("span", { className: styles$f.eventTitle, children: [event.time && (jsx("span", { className: styles$f.eventTime, children: event.time })), event.title] }), event.status === 'completed' && (jsx("svg", { className: styles$f.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$f.moreEvents, children: ["+", dayEvents.length - maxEventsPerDay, " more"] }))] })) : emptyState ? (jsx("div", { className: styles$f.emptyState, children: emptyState })) : null] })] }, `${day.getFullYear()}-${day.getMonth()}-${day.getDate()}`));
3803
3803
  }) }));
3804
3804
  })())] }));
3805
3805
  }
@@ -3936,7 +3936,7 @@ const Navbar = ({ items, logo, onItemClick, variant = 'sidebar', isMobile = fals
3936
3936
  return (jsx(Fragment, { children: jsx(motion.nav, { className: `${styles.navbar} ${styles[`navbar${variant.charAt(0).toUpperCase() + variant.slice(1)}`]} ${className}`, "data-colored-icons": coloredIconsAttr, initial: variant === 'sidebar' ? { x: -300 } : { opacity: 0 }, animate: variant === 'sidebar' ? { x: 0 } : { opacity: 1 }, transition: { type: 'spring', stiffness: 300, damping: 30 }, children: navContent }) }));
3937
3937
  };
3938
3938
 
3939
- var styles$9 = {"container":"MoodChart-module_container__MB1Vr","chart":"MoodChart-module_chart__4-spu","gridLine":"MoodChart-module_gridLine__YJpZ8","line":"MoodChart-module_line__LfeUX","area":"MoodChart-module_area__a4BFM","areaStopTop":"MoodChart-module_areaStopTop__KEp49","areaStopBottom":"MoodChart-module_areaStopBottom__cp7Gn","crosshair":"MoodChart-module_crosshair__PHLfW","halo":"MoodChart-module_halo__YQB-7","overlay":"MoodChart-module_overlay__ZwuHi","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"};
3939
+ var styles$d = {"container":"MoodChart-module_container__MB1Vr","chart":"MoodChart-module_chart__4-spu","gridLine":"MoodChart-module_gridLine__YJpZ8","line":"MoodChart-module_line__LfeUX","area":"MoodChart-module_area__a4BFM","areaStopTop":"MoodChart-module_areaStopTop__KEp49","areaStopBottom":"MoodChart-module_areaStopBottom__cp7Gn","crosshair":"MoodChart-module_crosshair__PHLfW","halo":"MoodChart-module_halo__YQB-7","overlay":"MoodChart-module_overlay__ZwuHi","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"};
3940
3940
 
3941
3941
  const MoodChart = ({ moodData, width = 800, height = 400 }) => {
3942
3942
  const svgRef = useRef(null);
@@ -3987,8 +3987,8 @@ const MoodChart = ({ moodData, width = 800, height = 400 }) => {
3987
3987
  .attr('id', gradientId)
3988
3988
  .attr('x1', '0%').attr('y1', '0%')
3989
3989
  .attr('x2', '0%').attr('y2', '100%');
3990
- gradient.append('stop').attr('offset', '0%').attr('class', styles$9.areaStopTop);
3991
- gradient.append('stop').attr('offset', '100%').attr('class', styles$9.areaStopBottom);
3990
+ gradient.append('stop').attr('offset', '0%').attr('class', styles$d.areaStopTop);
3991
+ gradient.append('stop').attr('offset', '100%').attr('class', styles$d.areaStopBottom);
3992
3992
  const g = svg.append('g')
3993
3993
  .attr('transform', `translate(${margin.left},${margin.top})`);
3994
3994
  const extentDates = d3.extent(processedData, d => d.date);
@@ -4013,7 +4013,7 @@ const MoodChart = ({ moodData, width = 800, height = 400 }) => {
4013
4013
  g.selectAll('.grid-line-y')
4014
4014
  .data(yScale.ticks(5))
4015
4015
  .enter().append('line')
4016
- .attr('class', styles$9.gridLine)
4016
+ .attr('class', styles$d.gridLine)
4017
4017
  .attr('x1', 0)
4018
4018
  .attr('y1', d => yScale(d))
4019
4019
  .attr('x2', chartWidth)
@@ -4025,7 +4025,7 @@ const MoodChart = ({ moodData, width = 800, height = 400 }) => {
4025
4025
  .style('opacity', 1);
4026
4026
  // Axes (fade in)
4027
4027
  g.append('g')
4028
- .attr('class', styles$9.xAxis)
4028
+ .attr('class', styles$d.xAxis)
4029
4029
  .attr('transform', `translate(0,${chartHeight})`)
4030
4030
  .style('opacity', 0)
4031
4031
  .call(d3.axisBottom(xScale)
@@ -4035,7 +4035,7 @@ const MoodChart = ({ moodData, width = 800, height = 400 }) => {
4035
4035
  .delay(100)
4036
4036
  .style('opacity', 1);
4037
4037
  g.append('g')
4038
- .attr('class', styles$9.yAxis)
4038
+ .attr('class', styles$d.yAxis)
4039
4039
  .style('opacity', 0)
4040
4040
  .call(d3.axisLeft(yScale))
4041
4041
  .transition()
@@ -4045,14 +4045,14 @@ const MoodChart = ({ moodData, width = 800, height = 400 }) => {
4045
4045
  // Area fill (fades in after line draws past it)
4046
4046
  const areaPath = g.append('path')
4047
4047
  .datum(processedData)
4048
- .attr('class', styles$9.area)
4048
+ .attr('class', styles$d.area)
4049
4049
  .attr('fill', `url(#${gradientId})`)
4050
4050
  .attr('d', area)
4051
4051
  .style('opacity', 0);
4052
4052
  // Line (draw-in animation via stroke-dasharray)
4053
4053
  const linePath = g.append('path')
4054
4054
  .datum(processedData)
4055
- .attr('class', styles$9.line)
4055
+ .attr('class', styles$d.line)
4056
4056
  .attr('d', line);
4057
4057
  const lineNode = linePath.node();
4058
4058
  const totalLength = lineNode && typeof lineNode.getTotalLength === 'function'
@@ -4079,14 +4079,14 @@ const MoodChart = ({ moodData, width = 800, height = 400 }) => {
4079
4079
  .style('opacity', 1);
4080
4080
  // Crosshair (vertical guide on hover)
4081
4081
  const crosshair = g.append('line')
4082
- .attr('class', styles$9.crosshair)
4082
+ .attr('class', styles$d.crosshair)
4083
4083
  .attr('y1', 0)
4084
4084
  .attr('y2', chartHeight)
4085
4085
  .style('opacity', 0)
4086
4086
  .style('pointer-events', 'none');
4087
4087
  // Pulsing halo behind active point
4088
4088
  const halo = g.append('circle')
4089
- .attr('class', styles$9.halo)
4089
+ .attr('class', styles$d.halo)
4090
4090
  .attr('r', 0)
4091
4091
  .style('opacity', 0)
4092
4092
  .style('pointer-events', 'none');
@@ -4097,7 +4097,7 @@ const MoodChart = ({ moodData, width = 800, height = 400 }) => {
4097
4097
  const pointSel = g.selectAll('.mood-circle')
4098
4098
  .data(processedData)
4099
4099
  .enter().append('circle')
4100
- .attr('class', styles$9.dataPoint)
4100
+ .attr('class', styles$d.dataPoint)
4101
4101
  .attr('cx', d => xScale(d.date))
4102
4102
  .attr('cy', d => yScale(d.rating))
4103
4103
  .attr('r', 0)
@@ -4204,7 +4204,7 @@ const MoodChart = ({ moodData, width = 800, height = 400 }) => {
4204
4204
  // Overlay captures mouse for nearest-point lookup (rendered last so it sits on top)
4205
4205
  const bisect = d3.bisector(d => d.date).center;
4206
4206
  g.append('rect')
4207
- .attr('class', styles$9.overlay)
4207
+ .attr('class', styles$d.overlay)
4208
4208
  .attr('width', chartWidth)
4209
4209
  .attr('height', chartHeight)
4210
4210
  .on('mousemove', function (event) {
@@ -4227,7 +4227,7 @@ const MoodChart = ({ moodData, width = 800, height = 400 }) => {
4227
4227
  setSelectedMood(null);
4228
4228
  };
4229
4229
  }, []);
4230
- return (jsxs("div", { className: styles$9.container, ref: containerRef, children: [jsx("svg", { ref: svgRef, width: width, height: height, className: styles$9.chart }), selectedMood && (jsxs("div", { ref: tooltipRef, className: styles$9.tooltip, style: {
4230
+ return (jsxs("div", { className: styles$d.container, ref: containerRef, children: [jsx("svg", { ref: svgRef, width: width, height: height, className: styles$d.chart }), selectedMood && (jsxs("div", { ref: tooltipRef, className: styles$d.tooltip, style: {
4231
4231
  position: 'absolute',
4232
4232
  pointerEvents: 'auto',
4233
4233
  left: tooltipPosition.x,
@@ -4236,10 +4236,10 @@ const MoodChart = ({ moodData, width = 800, height = 400 }) => {
4236
4236
  }, onMouseEnter: () => setIsHoveringTooltip(true), onMouseLeave: () => {
4237
4237
  setIsHoveringTooltip(false);
4238
4238
  setSelectedMood(null);
4239
- }, children: [jsxs("div", { className: styles$9.tooltipHeader, children: [jsx("div", { className: styles$9.tooltipDate, children: selectedMood.date.toLocaleDateString() }), jsxs("div", { className: styles$9.tooltipRating, children: [jsx("span", { className: styles$9.ratingValue, children: selectedMood.rating }), jsx("span", { className: styles$9.ratingMax, children: "/10" })] })] }), selectedMood.tags.length > 0 && (jsx("div", { className: styles$9.tooltipTags, children: selectedMood.tags.map((tag, index) => (jsx("span", { className: styles$9.tag, children: tag }, index))) })), selectedMood.comment && (jsx("div", { className: styles$9.tooltipComment, children: selectedMood.comment }))] }))] }));
4239
+ }, children: [jsxs("div", { className: styles$d.tooltipHeader, children: [jsx("div", { className: styles$d.tooltipDate, children: selectedMood.date.toLocaleDateString() }), jsxs("div", { className: styles$d.tooltipRating, children: [jsx("span", { className: styles$d.ratingValue, children: selectedMood.rating }), jsx("span", { className: styles$d.ratingMax, children: "/10" })] })] }), selectedMood.tags.length > 0 && (jsx("div", { className: styles$d.tooltipTags, children: selectedMood.tags.map((tag, index) => (jsx("span", { className: styles$d.tag, children: tag }, index))) })), selectedMood.comment && (jsx("div", { className: styles$d.tooltipComment, children: selectedMood.comment }))] }))] }));
4240
4240
  };
4241
4241
 
4242
- var styles$8 = {"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","crosshair":"QuantifiableHabitsChart-module_crosshair__7hoFL","halo":"QuantifiableHabitsChart-module_halo__YlkOF","overlay":"QuantifiableHabitsChart-module_overlay__ffeNz","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"};
4242
+ var styles$c = {"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","crosshair":"QuantifiableHabitsChart-module_crosshair__7hoFL","halo":"QuantifiableHabitsChart-module_halo__YlkOF","overlay":"QuantifiableHabitsChart-module_overlay__ffeNz","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"};
4243
4243
 
4244
4244
  const DEFAULT_HABIT_COLORS$1 = {
4245
4245
  'Exercise': '#6BCB77',
@@ -4433,7 +4433,7 @@ const QuantifiableHabitsChart = ({ data, width = 800, height = 400, defaultViewT
4433
4433
  .data(yScale.ticks(5), d => String(d));
4434
4434
  gridSel.exit().remove();
4435
4435
  const gridEnter = gridSel.enter().append('line')
4436
- .attr('class', `${styles$8.gridLine} qhc-grid-line`)
4436
+ .attr('class', `${styles$c.gridLine} qhc-grid-line`)
4437
4437
  .style('opacity', 0);
4438
4438
  gridEnter.merge(gridSel)
4439
4439
  .attr('x1', 0)
@@ -4489,7 +4489,7 @@ const QuantifiableHabitsChart = ({ data, width = 800, height = 400, defaultViewT
4489
4489
  }
4490
4490
  let xAxis = axesGroup.select('g.qhc-x-axis');
4491
4491
  if (xAxis.empty()) {
4492
- xAxis = axesGroup.append('g').attr('class', `${styles$8.xAxis} qhc-x-axis`);
4492
+ xAxis = axesGroup.append('g').attr('class', `${styles$c.xAxis} qhc-x-axis`);
4493
4493
  }
4494
4494
  xAxis.attr('transform', `translate(0,${chartHeight})`).call(xAxisGenerator);
4495
4495
  xAxis.selectAll('text')
@@ -4499,7 +4499,7 @@ const QuantifiableHabitsChart = ({ data, width = 800, height = 400, defaultViewT
4499
4499
  .attr('transform', viewType === 'daily' || viewType === 'weekly' ? 'rotate(-45)' : null);
4500
4500
  let yAxis = axesGroup.select('g.qhc-y-axis');
4501
4501
  if (yAxis.empty()) {
4502
- yAxis = axesGroup.append('g').attr('class', `${styles$8.yAxis} qhc-y-axis`);
4502
+ yAxis = axesGroup.append('g').attr('class', `${styles$c.yAxis} qhc-y-axis`);
4503
4503
  }
4504
4504
  yAxis.call(d3.axisLeft(yScale));
4505
4505
  if (isFirstRender) {
@@ -4521,7 +4521,7 @@ const QuantifiableHabitsChart = ({ data, width = 800, height = 400, defaultViewT
4521
4521
  .style('opacity', 0)
4522
4522
  .remove();
4523
4523
  const lineEnter = lineSel.enter().append('path')
4524
- .attr('class', `${styles$8.line} qhc-line`)
4524
+ .attr('class', `${styles$c.line} qhc-line`)
4525
4525
  .attr('data-habit', d => d.habit)
4526
4526
  .attr('fill', 'none')
4527
4527
  .attr('stroke', d => d.color)
@@ -4578,7 +4578,7 @@ const QuantifiableHabitsChart = ({ data, width = 800, height = 400, defaultViewT
4578
4578
  pointsGroup.selectAll('circle.qhc-point')
4579
4579
  .data(allPoints)
4580
4580
  .enter().append('circle')
4581
- .attr('class', `${styles$8.dataPoint} qhc-point`)
4581
+ .attr('class', `${styles$c.dataPoint} qhc-point`)
4582
4582
  .attr('data-habit', d => d.habit)
4583
4583
  .attr('cx', d => xScale(d.date))
4584
4584
  .attr('cy', chartHeight)
@@ -4595,13 +4595,13 @@ const QuantifiableHabitsChart = ({ data, width = 800, height = 400, defaultViewT
4595
4595
  // -------- UI layer (crosshair, halo, overlay) --------
4596
4596
  uiGroup.selectAll('*').remove();
4597
4597
  const crosshair = uiGroup.append('line')
4598
- .attr('class', styles$8.crosshair)
4598
+ .attr('class', styles$c.crosshair)
4599
4599
  .attr('y1', 0)
4600
4600
  .attr('y2', chartHeight)
4601
4601
  .style('opacity', 0)
4602
4602
  .style('pointer-events', 'none');
4603
4603
  const halo = uiGroup.append('circle')
4604
- .attr('class', styles$8.halo)
4604
+ .attr('class', styles$c.halo)
4605
4605
  .attr('r', 0)
4606
4606
  .style('opacity', 0)
4607
4607
  .style('pointer-events', 'none');
@@ -4673,7 +4673,7 @@ const QuantifiableHabitsChart = ({ data, width = 800, height = 400, defaultViewT
4673
4673
  setTooltipData(null);
4674
4674
  };
4675
4675
  uiGroup.append('rect')
4676
- .attr('class', styles$8.overlay)
4676
+ .attr('class', styles$c.overlay)
4677
4677
  .attr('width', chartWidth)
4678
4678
  .attr('height', chartHeight)
4679
4679
  .on('mousemove', function (event) {
@@ -4763,16 +4763,16 @@ const QuantifiableHabitsChart = ({ data, width = 800, height = 400, defaultViewT
4763
4763
  quarterly: { Icon: BarChart3, label: 'Quarterly' }
4764
4764
  };
4765
4765
  const shouldShowAggregationToggle = viewType !== 'daily';
4766
- return (jsxs("div", { className: styles$8.container, children: [!hideControls && (jsxs("div", { className: styles$8.controls, children: [jsx("div", { className: styles$8.viewToggle, children: availableViewTypes.map(type => {
4766
+ return (jsxs("div", { className: styles$c.container, children: [!hideControls && (jsxs("div", { className: styles$c.controls, children: [jsx("div", { className: styles$c.viewToggle, children: availableViewTypes.map(type => {
4767
4767
  const { Icon, label } = viewTypeConfig[type];
4768
- return (jsxs("button", { className: `${styles$8.viewButton} ${viewType === type ? styles$8.active : ''}`, onClick: () => setViewType(type), title: label, children: [jsx("span", { className: styles$8.viewIcon, children: jsx(Icon, { size: 16 }) }), jsx("span", { className: styles$8.viewLabel, children: label })] }, type));
4769
- }) }), shouldShowAggregationToggle && (jsxs("div", { className: styles$8.aggregationToggle, children: [jsxs("button", { className: `${styles$8.aggregationButton} ${aggregationMode === 'average' ? styles$8.active : ''}`, onClick: () => setAggregationMode('average'), title: "Show average values for each period", children: [jsx("span", { className: styles$8.aggregationIcon, children: jsx(Divide, { size: 16 }) }), jsx("span", { className: styles$8.aggregationLabel, children: "Average" })] }), jsxs("button", { className: `${styles$8.aggregationButton} ${aggregationMode === 'sum' ? styles$8.active : ''}`, onClick: () => setAggregationMode('sum'), title: "Show total values for each period", children: [jsx("span", { className: styles$8.aggregationIcon, children: jsx(Sigma, { size: 16 }) }), jsx("span", { className: styles$8.aggregationLabel, children: "Sum" })] })] }))] })), jsx("div", { className: `${styles$8.legend}${compactLegend ? ` ${styles$8.compactLegend}` : ''}`, children: habits.map(habit => (jsxs("button", { className: `${styles$8.legendItem} ${!activeHabits.includes(habit) ? styles$8.inactive : ''}`, onClick: () => toggleHabit(habit), onMouseEnter: () => setHoveredHabit(habit), onMouseLeave: () => setHoveredHabit(null), children: [jsx("span", { className: styles$8.legendEmoji, children: customHabitEmojis[habit] || '📊' }), jsx("span", { className: styles$8.legendColor, style: { backgroundColor: getColor(habit) } }), jsx("span", { className: styles$8.legendLabel, children: habit })] }, habit))) }), jsx("svg", { ref: svgRef, viewBox: `0 0 ${width} ${height}`, preserveAspectRatio: "xMidYMid meet", className: styles$8.chart }), tooltipData && (jsxs("div", { ref: tooltipRef, className: `${styles$8.tooltip} ${tooltipData ? styles$8.visible : ''}`, style: {
4768
+ return (jsxs("button", { className: `${styles$c.viewButton} ${viewType === type ? styles$c.active : ''}`, onClick: () => setViewType(type), title: label, children: [jsx("span", { className: styles$c.viewIcon, children: jsx(Icon, { size: 16 }) }), jsx("span", { className: styles$c.viewLabel, children: label })] }, type));
4769
+ }) }), shouldShowAggregationToggle && (jsxs("div", { className: styles$c.aggregationToggle, children: [jsxs("button", { className: `${styles$c.aggregationButton} ${aggregationMode === 'average' ? styles$c.active : ''}`, onClick: () => setAggregationMode('average'), title: "Show average values for each period", children: [jsx("span", { className: styles$c.aggregationIcon, children: jsx(Divide, { size: 16 }) }), jsx("span", { className: styles$c.aggregationLabel, children: "Average" })] }), jsxs("button", { className: `${styles$c.aggregationButton} ${aggregationMode === 'sum' ? styles$c.active : ''}`, onClick: () => setAggregationMode('sum'), title: "Show total values for each period", children: [jsx("span", { className: styles$c.aggregationIcon, children: jsx(Sigma, { size: 16 }) }), jsx("span", { className: styles$c.aggregationLabel, children: "Sum" })] })] }))] })), jsx("div", { className: `${styles$c.legend}${compactLegend ? ` ${styles$c.compactLegend}` : ''}`, children: habits.map(habit => (jsxs("button", { className: `${styles$c.legendItem} ${!activeHabits.includes(habit) ? styles$c.inactive : ''}`, onClick: () => toggleHabit(habit), onMouseEnter: () => setHoveredHabit(habit), onMouseLeave: () => setHoveredHabit(null), children: [jsx("span", { className: styles$c.legendEmoji, children: customHabitEmojis[habit] || '📊' }), jsx("span", { className: styles$c.legendColor, style: { backgroundColor: getColor(habit) } }), jsx("span", { className: styles$c.legendLabel, children: habit })] }, habit))) }), jsx("svg", { ref: svgRef, viewBox: `0 0 ${width} ${height}`, preserveAspectRatio: "xMidYMid meet", className: styles$c.chart }), tooltipData && (jsxs("div", { ref: tooltipRef, className: `${styles$c.tooltip} ${tooltipData ? styles$c.visible : ''}`, style: {
4770
4770
  left: `${tooltipData.x}px`,
4771
4771
  top: `${tooltipData.y - 80}px`
4772
- }, children: [jsxs("div", { className: styles$8.tooltipHeader, children: [jsx("span", { className: styles$8.tooltipEmoji, children: customHabitEmojis[tooltipData.habit] || '📊' }), jsx("span", { className: styles$8.tooltipDot, style: { backgroundColor: getColor(tooltipData.habit) } }), jsx("span", { children: tooltipData.habit })] }), jsxs("div", { className: styles$8.tooltipInfo, children: [jsx("div", { className: styles$8.tooltipDate, children: formatTooltipDate(tooltipData.date, viewType) }), jsxs("div", { className: styles$8.tooltipValue, children: [jsx("strong", { children: Math.round(tooltipData.value * 10) / 10 }), jsx("span", { style: { fontSize: '12px', fontWeight: 'normal', opacity: 0.6 }, children: "units" })] })] })] }))] }));
4772
+ }, children: [jsxs("div", { className: styles$c.tooltipHeader, children: [jsx("span", { className: styles$c.tooltipEmoji, children: customHabitEmojis[tooltipData.habit] || '📊' }), jsx("span", { className: styles$c.tooltipDot, style: { backgroundColor: getColor(tooltipData.habit) } }), jsx("span", { children: tooltipData.habit })] }), jsxs("div", { className: styles$c.tooltipInfo, children: [jsx("div", { className: styles$c.tooltipDate, children: formatTooltipDate(tooltipData.date, viewType) }), jsxs("div", { className: styles$c.tooltipValue, children: [jsx("strong", { children: Math.round(tooltipData.value * 10) / 10 }), jsx("span", { style: { fontSize: '12px', fontWeight: 'normal', opacity: 0.6 }, children: "units" })] })] })] }))] }));
4773
4773
  };
4774
4774
 
4775
- var styles$7 = {"container":"HabitTimeOfDayChart-module_container__DCW3B","controls":"HabitTimeOfDayChart-module_controls__2p7mW","viewToggle":"HabitTimeOfDayChart-module_viewToggle__SSfDu","viewButton":"HabitTimeOfDayChart-module_viewButton__DENLF","active":"HabitTimeOfDayChart-module_active__VRrF1","viewIcon":"HabitTimeOfDayChart-module_viewIcon__MXqrp","viewLabel":"HabitTimeOfDayChart-module_viewLabel__XNKhi","legend":"HabitTimeOfDayChart-module_legend__y4Apu","compactLegend":"HabitTimeOfDayChart-module_compactLegend__Gsodv","legendItem":"HabitTimeOfDayChart-module_legendItem__QEXr4","legendEmoji":"HabitTimeOfDayChart-module_legendEmoji__T7zLH","legendLabel":"HabitTimeOfDayChart-module_legendLabel__TUT29","inactive":"HabitTimeOfDayChart-module_inactive__xVIwD","legendColor":"HabitTimeOfDayChart-module_legendColor__SzkAm","chart":"HabitTimeOfDayChart-module_chart__7Plpd","dot":"HabitTimeOfDayChart-module_dot__rxGpu","bar":"HabitTimeOfDayChart-module_bar__F0Rwy","gridLine":"HabitTimeOfDayChart-module_gridLine__waZrZ","xAxis":"HabitTimeOfDayChart-module_xAxis__pQGbi","yAxis":"HabitTimeOfDayChart-module_yAxis__fblot","tooltip":"HabitTimeOfDayChart-module_tooltip__8EPnz","visible":"HabitTimeOfDayChart-module_visible__3yEYR","tooltipHeader":"HabitTimeOfDayChart-module_tooltipHeader__1ywo5","tooltipInfo":"HabitTimeOfDayChart-module_tooltipInfo__xizGe","tooltipValue":"HabitTimeOfDayChart-module_tooltipValue__DcYfO","tooltipUnits":"HabitTimeOfDayChart-module_tooltipUnits__Um-EN","tooltipBreakdown":"HabitTimeOfDayChart-module_tooltipBreakdown__AQ27l","tooltipBreakdownRow":"HabitTimeOfDayChart-module_tooltipBreakdownRow__jHc6D","tooltipDot":"HabitTimeOfDayChart-module_tooltipDot__Khfwh","tooltipCount":"HabitTimeOfDayChart-module_tooltipCount__BRgaU"};
4775
+ var styles$b = {"container":"HabitTimeOfDayChart-module_container__DCW3B","controls":"HabitTimeOfDayChart-module_controls__2p7mW","viewToggle":"HabitTimeOfDayChart-module_viewToggle__SSfDu","viewButton":"HabitTimeOfDayChart-module_viewButton__DENLF","active":"HabitTimeOfDayChart-module_active__VRrF1","viewIcon":"HabitTimeOfDayChart-module_viewIcon__MXqrp","viewLabel":"HabitTimeOfDayChart-module_viewLabel__XNKhi","legend":"HabitTimeOfDayChart-module_legend__y4Apu","compactLegend":"HabitTimeOfDayChart-module_compactLegend__Gsodv","legendItem":"HabitTimeOfDayChart-module_legendItem__QEXr4","legendEmoji":"HabitTimeOfDayChart-module_legendEmoji__T7zLH","legendLabel":"HabitTimeOfDayChart-module_legendLabel__TUT29","inactive":"HabitTimeOfDayChart-module_inactive__xVIwD","legendColor":"HabitTimeOfDayChart-module_legendColor__SzkAm","chart":"HabitTimeOfDayChart-module_chart__7Plpd","dot":"HabitTimeOfDayChart-module_dot__rxGpu","bar":"HabitTimeOfDayChart-module_bar__F0Rwy","gridLine":"HabitTimeOfDayChart-module_gridLine__waZrZ","xAxis":"HabitTimeOfDayChart-module_xAxis__pQGbi","yAxis":"HabitTimeOfDayChart-module_yAxis__fblot","tooltip":"HabitTimeOfDayChart-module_tooltip__8EPnz","visible":"HabitTimeOfDayChart-module_visible__3yEYR","tooltipHeader":"HabitTimeOfDayChart-module_tooltipHeader__1ywo5","tooltipInfo":"HabitTimeOfDayChart-module_tooltipInfo__xizGe","tooltipValue":"HabitTimeOfDayChart-module_tooltipValue__DcYfO","tooltipUnits":"HabitTimeOfDayChart-module_tooltipUnits__Um-EN","tooltipBreakdown":"HabitTimeOfDayChart-module_tooltipBreakdown__AQ27l","tooltipBreakdownRow":"HabitTimeOfDayChart-module_tooltipBreakdownRow__jHc6D","tooltipDot":"HabitTimeOfDayChart-module_tooltipDot__Khfwh","tooltipCount":"HabitTimeOfDayChart-module_tooltipCount__BRgaU"};
4776
4776
 
4777
4777
  const DEFAULT_HABIT_COLORS = {
4778
4778
  Exercise: '#6BCB77',
@@ -4961,7 +4961,7 @@ const HabitTimeOfDayChart = ({ events, width = 800, height = 400, startDate, end
4961
4961
  .data([0, 3, 6, 9, 12, 15, 18, 21, 24])
4962
4962
  .enter()
4963
4963
  .append('line')
4964
- .attr('class', styles$7.gridLine)
4964
+ .attr('class', styles$b.gridLine)
4965
4965
  .attr('x1', d => xScale(d))
4966
4966
  .attr('x2', d => xScale(d))
4967
4967
  .attr('y1', 0)
@@ -4970,17 +4970,24 @@ const HabitTimeOfDayChart = ({ events, width = 800, height = 400, startDate, end
4970
4970
  const rowHeight = yScale.bandwidth();
4971
4971
  const baseRadius = Math.min(5, Math.max(2, rowHeight / 2));
4972
4972
  const maxRadius = baseRadius * 2.2;
4973
- g.selectAll('circle.dot')
4973
+ const scatterDots = g.selectAll('circle.dot')
4974
4974
  .data(clusters)
4975
4975
  .enter()
4976
4976
  .append('circle')
4977
- .attr('class', styles$7.dot)
4977
+ .attr('class', styles$b.dot)
4978
4978
  .attr('cx', d => xScale(d.hourFraction) + d.xOffsetPx)
4979
4979
  .attr('cy', d => (yScale(d.date) ?? 0) + rowHeight / 2)
4980
- .attr('r', d => Math.min(maxRadius, baseRadius * Math.sqrt(d.count)))
4980
+ .attr('r', 0)
4981
4981
  .attr('fill', d => getColor(d.habitKey))
4982
- .attr('opacity', d => hoveredHabit && hoveredHabit !== d.habitKey ? 0.15 : 0.8)
4983
- .style('cursor', 'pointer')
4982
+ .attr('opacity', 0)
4983
+ .style('cursor', 'pointer');
4984
+ scatterDots.transition()
4985
+ .delay(d => (xScale(d.hourFraction) / chartWidth) * 600)
4986
+ .duration(380)
4987
+ .ease(d3.easeBackOut.overshoot(1.8))
4988
+ .attr('r', d => Math.min(maxRadius, baseRadius * Math.sqrt(d.count)))
4989
+ .attr('opacity', d => hoveredHabit && hoveredHabit !== d.habitKey ? 0.15 : 0.8);
4990
+ scatterDots
4984
4991
  .on('mouseenter', function (_event, d) {
4985
4992
  const rect = svgRef.current?.getBoundingClientRect();
4986
4993
  if (!rect)
@@ -5001,7 +5008,7 @@ const HabitTimeOfDayChart = ({ events, width = 800, height = 400, startDate, end
5001
5008
  .tickValues([0, 3, 6, 9, 12, 15, 18, 21])
5002
5009
  .tickFormat(d => formatHour(d));
5003
5010
  g.append('g')
5004
- .attr('class', styles$7.xAxis)
5011
+ .attr('class', styles$b.xAxis)
5005
5012
  .attr('transform', `translate(0,${chartHeight})`)
5006
5013
  .call(xAxis);
5007
5014
  // Y axis (dates) — evenly spaced
@@ -5014,7 +5021,7 @@ const HabitTimeOfDayChart = ({ events, width = 800, height = 400, startDate, end
5014
5021
  const [, m, day] = d.split('-');
5015
5022
  return `${m}/${day}`;
5016
5023
  });
5017
- g.append('g').attr('class', styles$7.yAxis).call(yAxis);
5024
+ g.append('g').attr('class', styles$b.yAxis).call(yAxis);
5018
5025
  }
5019
5026
  else {
5020
5027
  // Totals view: stacked bar by hour
@@ -5030,7 +5037,7 @@ const HabitTimeOfDayChart = ({ events, width = 800, height = 400, startDate, end
5030
5037
  .data(yScale.ticks(5))
5031
5038
  .enter()
5032
5039
  .append('line')
5033
- .attr('class', styles$7.gridLine)
5040
+ .attr('class', styles$b.gridLine)
5034
5041
  .attr('x1', 0)
5035
5042
  .attr('x2', chartWidth)
5036
5043
  .attr('y1', d => yScale(d))
@@ -5038,17 +5045,24 @@ const HabitTimeOfDayChart = ({ events, width = 800, height = 400, startDate, end
5038
5045
  hourlyTotals.forEach(bucket => {
5039
5046
  let cumulative = 0;
5040
5047
  const entries = Array.from(bucket.byHabit.entries()).sort(([a], [b]) => a.localeCompare(b));
5048
+ const barDelay = (bucket.hour / 24) * 700;
5041
5049
  entries.forEach(([habit, count]) => {
5042
5050
  const y = yScale(cumulative + count);
5043
5051
  const barHeight = Math.max(0, yScale(cumulative) - yScale(cumulative + count));
5044
5052
  g.append('rect')
5045
- .attr('class', styles$7.bar)
5053
+ .attr('class', styles$b.bar)
5046
5054
  .attr('x', xScale(bucket.hour) ?? 0)
5047
- .attr('y', y)
5055
+ .attr('y', chartHeight)
5048
5056
  .attr('width', xScale.bandwidth())
5049
- .attr('height', barHeight)
5057
+ .attr('height', 0)
5050
5058
  .attr('fill', getColor(habit))
5051
- .attr('opacity', hoveredHabit && hoveredHabit !== habit ? 0.3 : 1);
5059
+ .attr('opacity', hoveredHabit && hoveredHabit !== habit ? 0.3 : 1)
5060
+ .transition()
5061
+ .delay(barDelay)
5062
+ .duration(550)
5063
+ .ease(d3.easeCubicOut)
5064
+ .attr('y', y)
5065
+ .attr('height', barHeight);
5052
5066
  cumulative += count;
5053
5067
  });
5054
5068
  if (bucket.total > 0) {
@@ -5080,10 +5094,10 @@ const HabitTimeOfDayChart = ({ events, width = 800, height = 400, startDate, end
5080
5094
  .tickValues([0, 3, 6, 9, 12, 15, 18, 21])
5081
5095
  .tickFormat(d => formatHour(d));
5082
5096
  g.append('g')
5083
- .attr('class', styles$7.xAxis)
5097
+ .attr('class', styles$b.xAxis)
5084
5098
  .attr('transform', `translate(0,${chartHeight})`)
5085
5099
  .call(xAxis);
5086
- g.append('g').attr('class', styles$7.yAxis).call(d3.axisLeft(yScale).ticks(5));
5100
+ g.append('g').attr('class', styles$b.yAxis).call(d3.axisLeft(yScale).ticks(5));
5087
5101
  }
5088
5102
  }, [
5089
5103
  view,
@@ -5112,12 +5126,12 @@ const HabitTimeOfDayChart = ({ events, width = 800, height = 400, startDate, end
5112
5126
  day: 'numeric',
5113
5127
  });
5114
5128
  };
5115
- return (jsxs("div", { className: styles$7.container, children: [!hideControls && (jsx("div", { className: styles$7.controls, children: jsx("div", { className: styles$7.viewToggle, children: ['scatter', 'totals'].map(type => (jsxs("button", { className: `${styles$7.viewButton} ${view === type ? styles$7.active : ''}`, onClick: () => setView(type), title: viewConfig[type].label, children: [jsx("span", { className: styles$7.viewIcon, children: viewConfig[type].icon }), jsx("span", { className: styles$7.viewLabel, children: viewConfig[type].label })] }, type))) }) })), habits.length > 0 && (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, viewBox: `0 0 ${width} ${height}`, preserveAspectRatio: "xMidYMid meet", className: styles$7.chart }), tooltipData && (jsx("div", { className: `${styles$7.tooltip} ${styles$7.visible}`, style: { left: `${tooltipData.x}px`, top: `${tooltipData.y - 70}px` }, children: tooltipData.habit ? (jsxs(Fragment, { children: [jsxs("div", { className: styles$7.tooltipHeader, children: [jsx("span", { className: styles$7.tooltipDot, style: { backgroundColor: getColor(tooltipData.habit) } }), jsxs("span", { children: [customHabitEmojis[tooltipData.habit] || '', " ", tooltipData.habit] })] }), jsxs("div", { className: styles$7.tooltipInfo, children: [jsxs("div", { className: styles$7.tooltipDate, children: [tooltipData.date ? formatTooltipDate(tooltipData.date) : '', tooltipData.minute !== undefined
5129
+ return (jsxs("div", { className: styles$b.container, children: [!hideControls && (jsx("div", { className: styles$b.controls, children: jsx("div", { className: styles$b.viewToggle, children: ['scatter', 'totals'].map(type => (jsxs("button", { className: `${styles$b.viewButton} ${view === type ? styles$b.active : ''}`, onClick: () => setView(type), title: viewConfig[type].label, children: [jsx("span", { className: styles$b.viewIcon, children: viewConfig[type].icon }), jsx("span", { className: styles$b.viewLabel, children: viewConfig[type].label })] }, type))) }) })), habits.length > 0 && (jsx("div", { className: `${styles$b.legend}${compactLegend ? ` ${styles$b.compactLegend}` : ''}`, children: habits.map(habit => (jsxs("button", { className: `${styles$b.legendItem} ${!activeHabits.includes(habit) ? styles$b.inactive : ''}`, onClick: () => toggleHabit(habit), onMouseEnter: () => setHoveredHabit(habit), onMouseLeave: () => setHoveredHabit(null), children: [jsx("span", { className: styles$b.legendEmoji, children: customHabitEmojis[habit] || '📊' }), jsx("span", { className: styles$b.legendColor, style: { backgroundColor: getColor(habit) } }), jsx("span", { className: styles$b.legendLabel, children: habit })] }, habit))) })), jsx("svg", { ref: svgRef, viewBox: `0 0 ${width} ${height}`, preserveAspectRatio: "xMidYMid meet", className: styles$b.chart }), tooltipData && (jsx("div", { className: `${styles$b.tooltip} ${styles$b.visible}`, style: { left: `${tooltipData.x}px`, top: `${tooltipData.y - 70}px` }, children: tooltipData.habit ? (jsxs(Fragment, { children: [jsxs("div", { className: styles$b.tooltipHeader, children: [jsx("span", { className: styles$b.tooltipDot, style: { backgroundColor: getColor(tooltipData.habit) } }), jsxs("span", { children: [customHabitEmojis[tooltipData.habit] || '', " ", tooltipData.habit] })] }), jsxs("div", { className: styles$b.tooltipInfo, children: [jsxs("div", { className: styles$b.tooltipDate, children: [tooltipData.date ? formatTooltipDate(tooltipData.date) : '', tooltipData.minute !== undefined
5116
5130
  ? ` · ${formatTime$1(tooltipData.hour, tooltipData.minute)}`
5117
- : ''] }), tooltipData.count > 1 && (jsxs("div", { className: styles$7.tooltipValue, children: [jsx("strong", { children: tooltipData.count }), jsx("span", { className: styles$7.tooltipUnits, children: "events" })] }))] })] })) : (jsxs(Fragment, { children: [jsx("div", { className: styles$7.tooltipHeader, children: jsx("span", { children: formatHour(tooltipData.hour) }) }), jsxs("div", { className: styles$7.tooltipInfo, children: [jsxs("div", { className: styles$7.tooltipValue, children: [jsx("strong", { children: tooltipData.count }), jsxs("span", { className: styles$7.tooltipUnits, children: ["event", tooltipData.count === 1 ? '' : 's'] })] }), tooltipData.breakdown && tooltipData.breakdown.length > 1 && (jsx("div", { className: styles$7.tooltipBreakdown, children: tooltipData.breakdown.map(({ habit, count }) => (jsxs("div", { className: styles$7.tooltipBreakdownRow, children: [jsx("span", { className: styles$7.tooltipDot, style: { backgroundColor: getColor(habit) } }), jsxs("span", { children: [customHabitEmojis[habit] || '', " ", habit] }), jsx("span", { className: styles$7.tooltipCount, children: count })] }, habit))) }))] })] })) }))] }));
5131
+ : ''] }), tooltipData.count > 1 && (jsxs("div", { className: styles$b.tooltipValue, children: [jsx("strong", { children: tooltipData.count }), jsx("span", { className: styles$b.tooltipUnits, children: "events" })] }))] })] })) : (jsxs(Fragment, { children: [jsx("div", { className: styles$b.tooltipHeader, children: jsx("span", { children: formatHour(tooltipData.hour) }) }), jsxs("div", { className: styles$b.tooltipInfo, children: [jsxs("div", { className: styles$b.tooltipValue, children: [jsx("strong", { children: tooltipData.count }), jsxs("span", { className: styles$b.tooltipUnits, children: ["event", tooltipData.count === 1 ? '' : 's'] })] }), tooltipData.breakdown && tooltipData.breakdown.length > 1 && (jsx("div", { className: styles$b.tooltipBreakdown, children: tooltipData.breakdown.map(({ habit, count }) => (jsxs("div", { className: styles$b.tooltipBreakdownRow, children: [jsx("span", { className: styles$b.tooltipDot, style: { backgroundColor: getColor(habit) } }), jsxs("span", { children: [customHabitEmojis[habit] || '', " ", habit] }), jsx("span", { className: styles$b.tooltipCount, children: count })] }, habit))) }))] })] })) }))] }));
5118
5132
  };
5119
5133
 
5120
- var styles$6 = {"container":"SleepChart-module_container__RjHVU","header":"SleepChart-module_header__bcoWe","eyebrow":"SleepChart-module_eyebrow__KH0ox","title":"SleepChart-module_title__6-QII","chart":"SleepChart-module_chart__jC1nL","gridLine":"SleepChart-module_gridLine__hi715","gridLineAccent":"SleepChart-module_gridLineAccent__Sk-l6","sleepBar":"SleepChart-module_sleepBar__Hk76f","sleepBarHover":"SleepChart-module_sleepBarHover__cBTca","squiggle":"SleepChart-module_squiggle__Hxfjx","endpoint":"SleepChart-module_endpoint__vB4WD","endpointSleep":"SleepChart-module_endpointSleep__FA1vK","endpointWake":"SleepChart-module_endpointWake__CWEOB","xAxis":"SleepChart-module_xAxis__xzXyM","yAxis":"SleepChart-module_yAxis__7N-LA","tooltip":"SleepChart-module_tooltip__jQBv1","visible":"SleepChart-module_visible__wy0ck","tooltipDate":"SleepChart-module_tooltipDate__g2kOA","tooltipBody":"SleepChart-module_tooltipBody__RamWJ","tooltipRow":"SleepChart-module_tooltipRow__CuDaE","tooltipTotal":"SleepChart-module_tooltipTotal__5v3dE"};
5134
+ var styles$a = {"container":"SleepChart-module_container__RjHVU","header":"SleepChart-module_header__bcoWe","eyebrow":"SleepChart-module_eyebrow__KH0ox","title":"SleepChart-module_title__6-QII","chart":"SleepChart-module_chart__jC1nL","gridLine":"SleepChart-module_gridLine__hi715","gridLineAccent":"SleepChart-module_gridLineAccent__Sk-l6","sleepBar":"SleepChart-module_sleepBar__Hk76f","sleepBarHover":"SleepChart-module_sleepBarHover__cBTca","squiggle":"SleepChart-module_squiggle__Hxfjx","endpoint":"SleepChart-module_endpoint__vB4WD","endpointSleep":"SleepChart-module_endpointSleep__FA1vK","endpointWake":"SleepChart-module_endpointWake__CWEOB","xAxis":"SleepChart-module_xAxis__xzXyM","yAxis":"SleepChart-module_yAxis__7N-LA","tooltip":"SleepChart-module_tooltip__jQBv1","visible":"SleepChart-module_visible__wy0ck","tooltipDate":"SleepChart-module_tooltipDate__g2kOA","tooltipBody":"SleepChart-module_tooltipBody__RamWJ","tooltipRow":"SleepChart-module_tooltipRow__CuDaE","tooltipTotal":"SleepChart-module_tooltipTotal__5v3dE"};
5121
5135
 
5122
5136
  const parseTimeToDecimal = (time) => {
5123
5137
  const [hours, minutes] = time.split(':').map(Number);
@@ -5128,7 +5142,7 @@ const formatTime = (hour) => {
5128
5142
  const minutes = Math.round((hour % 1) * 60);
5129
5143
  return `${h24.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
5130
5144
  };
5131
- const formatDuration = (decimal) => {
5145
+ const formatDuration$1 = (decimal) => {
5132
5146
  const h = Math.floor(decimal);
5133
5147
  const m = Math.round((decimal % 1) * 60);
5134
5148
  return `${h}h ${m.toString().padStart(2, '0')}m`;
@@ -5188,23 +5202,25 @@ const SleepChart = ({ sleepData, width = 800, height = 400, onDateClick, }) => {
5188
5202
  .data(d3.range(18, 43, 3))
5189
5203
  .enter()
5190
5204
  .append('line')
5191
- .attr('class', styles$6.gridLine)
5205
+ .attr('class', styles$a.gridLine)
5192
5206
  .attr('x1', (d) => xScale(d))
5193
5207
  .attr('y1', 0)
5194
5208
  .attr('x2', (d) => xScale(d))
5195
5209
  .attr('y2', chartHeight)
5196
- .classed(styles$6.gridLineAccent, (d) => {
5210
+ .classed(styles$a.gridLineAccent, (d) => {
5197
5211
  const hour = d % 24;
5198
5212
  return hour === 0 || hour === 12;
5199
5213
  });
5200
- sleepData.forEach((dayData) => {
5214
+ const rowStagger = Math.min(40, 600 / Math.max(1, sleepData.length));
5215
+ sleepData.forEach((dayData, rowIdx) => {
5201
5216
  const yValue = yScale(dayData.date);
5202
5217
  if (yValue === undefined)
5203
5218
  return;
5219
+ const rowDelay = rowIdx * rowStagger;
5204
5220
  const barHeight = yScale.bandwidth();
5205
5221
  const sleepGroup = g
5206
5222
  .append('g')
5207
- .attr('class', styles$6.sleepBar)
5223
+ .attr('class', styles$a.sleepBar)
5208
5224
  .style('cursor', onDateClick ? 'pointer' : 'default')
5209
5225
  .on('click', () => onDateClick?.(dayData.date));
5210
5226
  let sleepHour = null;
@@ -5234,7 +5250,7 @@ const SleepChart = ({ sleepData, width = 800, height = 400, onDateClick, }) => {
5234
5250
  const d = buildSquigglePath(x1, x2, y, amplitude, wavelength);
5235
5251
  const path = sleepGroup
5236
5252
  .append('path')
5237
- .attr('class', styles$6.squiggle)
5253
+ .attr('class', styles$a.squiggle)
5238
5254
  .attr('d', d)
5239
5255
  .attr('fill', 'none');
5240
5256
  const node = path.node();
@@ -5244,6 +5260,7 @@ const SleepChart = ({ sleepData, width = 800, height = 400, onDateClick, }) => {
5244
5260
  path.attr('stroke-dasharray', length)
5245
5261
  .attr('stroke-dashoffset', length)
5246
5262
  .transition()
5263
+ .delay(rowDelay)
5247
5264
  .duration(540)
5248
5265
  .ease(d3.easeCubicOut)
5249
5266
  .attr('stroke-dashoffset', 0);
@@ -5251,32 +5268,32 @@ const SleepChart = ({ sleepData, width = 800, height = 400, onDateClick, }) => {
5251
5268
  if (sleepHour !== null) {
5252
5269
  sleepGroup
5253
5270
  .append('circle')
5254
- .attr('class', `${styles$6.endpoint} ${styles$6.endpointSleep}`)
5271
+ .attr('class', `${styles$a.endpoint} ${styles$a.endpointSleep}`)
5255
5272
  .attr('cx', xScale(sleepHour))
5256
5273
  .attr('cy', yValue + barHeight / 2)
5257
5274
  .attr('r', 0)
5258
5275
  .transition()
5259
5276
  .duration(280)
5260
- .delay(160)
5277
+ .delay(rowDelay + 160)
5261
5278
  .ease(d3.easeCubicOut)
5262
5279
  .attr('r', 3.5);
5263
5280
  }
5264
5281
  if (wakeHour !== null) {
5265
5282
  sleepGroup
5266
5283
  .append('circle')
5267
- .attr('class', `${styles$6.endpoint} ${styles$6.endpointWake}`)
5284
+ .attr('class', `${styles$a.endpoint} ${styles$a.endpointWake}`)
5268
5285
  .attr('cx', xScale(wakeHour))
5269
5286
  .attr('cy', yValue + barHeight / 2)
5270
5287
  .attr('r', 0)
5271
5288
  .transition()
5272
5289
  .duration(280)
5273
- .delay(220)
5290
+ .delay(rowDelay + 220)
5274
5291
  .ease(d3.easeCubicOut)
5275
5292
  .attr('r', 3.5);
5276
5293
  }
5277
5294
  sleepGroup
5278
5295
  .on('mouseenter', function (event) {
5279
- d3.select(this).classed(styles$6.sleepBarHover, true);
5296
+ d3.select(this).classed(styles$a.sleepBarHover, true);
5280
5297
  const duration = sleepHour !== null && wakeHour !== null ? wakeHour - sleepHour : null;
5281
5298
  setTooltipData({
5282
5299
  date: dayData.date,
@@ -5288,7 +5305,7 @@ const SleepChart = ({ sleepData, width = 800, height = 400, onDateClick, }) => {
5288
5305
  });
5289
5306
  })
5290
5307
  .on('mouseleave', function () {
5291
- d3.select(this).classed(styles$6.sleepBarHover, false);
5308
+ d3.select(this).classed(styles$a.sleepBarHover, false);
5292
5309
  setTooltipData(null);
5293
5310
  })
5294
5311
  .on('mousemove', function (event) {
@@ -5301,7 +5318,7 @@ const SleepChart = ({ sleepData, width = 800, height = 400, onDateClick, }) => {
5301
5318
  }));
5302
5319
  const xAxis = g
5303
5320
  .append('g')
5304
- .attr('class', styles$6.xAxis)
5321
+ .attr('class', styles$a.xAxis)
5305
5322
  .attr('transform', `translate(0,${chartHeight})`)
5306
5323
  .call(d3
5307
5324
  .axisBottom(xScale)
@@ -5317,7 +5334,7 @@ const SleepChart = ({ sleepData, width = 800, height = 400, onDateClick, }) => {
5317
5334
  const yAxisTicks = yDomain.filter((_, i) => i % tickEvery === 0);
5318
5335
  const yAxis = g
5319
5336
  .append('g')
5320
- .attr('class', styles$6.yAxis)
5337
+ .attr('class', styles$a.yAxis)
5321
5338
  .call(d3
5322
5339
  .axisLeft(yScale)
5323
5340
  .tickValues(yAxisTicks)
@@ -5331,14 +5348,14 @@ const SleepChart = ({ sleepData, width = 800, height = 400, onDateClick, }) => {
5331
5348
  .tickPadding(12));
5332
5349
  yAxis.select('.domain').remove();
5333
5350
  }, [sleepData, chartWidth, chartHeight, margin, onDateClick, height, width]);
5334
- return (jsxs("div", { className: styles$6.container, children: [jsxs("header", { className: styles$6.header, children: [jsx("span", { className: styles$6.eyebrow, children: "the night" }), jsxs("h3", { className: styles$6.title, children: [jsx("em", { children: "Sleep" }), " pattern"] })] }), jsx("svg", { ref: svgRef, width: width, height: height, className: styles$6.chart }), tooltipData && (jsxs("div", { className: `${styles$6.tooltip} ${styles$6.visible}`, style: { left: `${tooltipData.x}px`, top: `${tooltipData.y}px` }, children: [jsx("div", { className: styles$6.tooltipDate, children: new Date(tooltipData.date).toLocaleDateString('en-US', {
5351
+ return (jsxs("div", { className: styles$a.container, children: [jsxs("header", { className: styles$a.header, children: [jsx("span", { className: styles$a.eyebrow, children: "the night" }), jsxs("h3", { className: styles$a.title, children: [jsx("em", { children: "Sleep" }), " pattern"] })] }), jsx("svg", { ref: svgRef, width: width, height: height, className: styles$a.chart }), tooltipData && (jsxs("div", { className: `${styles$a.tooltip} ${styles$a.visible}`, style: { left: `${tooltipData.x}px`, top: `${tooltipData.y}px` }, children: [jsx("div", { className: styles$a.tooltipDate, children: new Date(tooltipData.date).toLocaleDateString('en-US', {
5335
5352
  weekday: 'short',
5336
5353
  month: 'short',
5337
5354
  day: 'numeric',
5338
- }) }), jsxs("div", { className: styles$6.tooltipBody, children: [tooltipData.sleepTime && (jsxs("div", { className: styles$6.tooltipRow, children: [jsx("em", { children: "sleep" }), jsx("time", { children: tooltipData.sleepTime })] })), tooltipData.wakeTime && (jsxs("div", { className: styles$6.tooltipRow, children: [jsx("em", { children: "wake" }), jsx("time", { children: tooltipData.wakeTime })] })), tooltipData.duration !== null && (jsxs("div", { className: `${styles$6.tooltipRow} ${styles$6.tooltipTotal}`, children: [jsx("em", { children: "total" }), jsx("time", { children: formatDuration(tooltipData.duration) })] }))] })] }))] }));
5355
+ }) }), jsxs("div", { className: styles$a.tooltipBody, children: [tooltipData.sleepTime && (jsxs("div", { className: styles$a.tooltipRow, children: [jsx("em", { children: "sleep" }), jsx("time", { children: tooltipData.sleepTime })] })), tooltipData.wakeTime && (jsxs("div", { className: styles$a.tooltipRow, children: [jsx("em", { children: "wake" }), jsx("time", { children: tooltipData.wakeTime })] })), tooltipData.duration !== null && (jsxs("div", { className: `${styles$a.tooltipRow} ${styles$a.tooltipTotal}`, children: [jsx("em", { children: "total" }), jsx("time", { children: formatDuration$1(tooltipData.duration) })] }))] })] }))] }));
5339
5356
  };
5340
5357
 
5341
- 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"};
5358
+ var styles$9 = {"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"};
5342
5359
 
5343
5360
  const DAYS_OF_WEEK = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];
5344
5361
  const MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
@@ -5392,20 +5409,20 @@ const BooleansHeatmap = ({ data, habitName, width = 800, height = 200, habitColo
5392
5409
  g.append('text')
5393
5410
  .attr('x', weekIndex * (cellSize + cellGap))
5394
5411
  .attr('y', -10)
5395
- .attr('class', styles$5.monthLabel)
5412
+ .attr('class', styles$9.monthLabel)
5396
5413
  .text(MONTHS[month]);
5397
5414
  });
5398
5415
  DAYS_OF_WEEK.forEach((day, index) => {
5399
5416
  g.append('text')
5400
5417
  .attr('x', -10)
5401
5418
  .attr('y', index * (cellSize + cellGap) + cellSize / 2)
5402
- .attr('class', styles$5.dayLabel)
5419
+ .attr('class', styles$9.dayLabel)
5403
5420
  .attr('text-anchor', 'end')
5404
5421
  .attr('alignment-baseline', 'middle')
5405
5422
  .text(day);
5406
5423
  });
5407
5424
  const tooltip = d3.select('body').append('div')
5408
- .attr('class', styles$5.tooltip)
5425
+ .attr('class', styles$9.tooltip)
5409
5426
  .style('opacity', 0)
5410
5427
  .style('position', 'absolute');
5411
5428
  const daysToShow = weeksToShow * 7;
@@ -5418,16 +5435,29 @@ const BooleansHeatmap = ({ data, habitName, width = 800, height = 200, habitColo
5418
5435
  const dayOfWeek = (date.getDay() + 6) % 7;
5419
5436
  const weekIndex = Math.floor((i + startDayOffset) / 7);
5420
5437
  const isTrue = dateString in data && data[dateString];
5438
+ const cx = weekIndex * (cellSize + cellGap) + cellSize / 2;
5439
+ const cy = dayOfWeek * (cellSize + cellGap) + cellSize / 2;
5421
5440
  const rect = g.append('rect')
5441
+ .attr('x', cx)
5442
+ .attr('y', cy)
5443
+ .attr('width', 0)
5444
+ .attr('height', 0)
5445
+ .attr('rx', 3)
5446
+ .attr('class', styles$9.cell)
5447
+ .attr('data-date', dateString)
5448
+ .attr('data-value', isTrue ? 'true' : 'false')
5449
+ .style('fill', isTrue ? habitColor : '#4D4D4DFF')
5450
+ .style('opacity', 0);
5451
+ const cellDelay = (weekIndex + dayOfWeek) * 18;
5452
+ rect.transition()
5453
+ .delay(cellDelay)
5454
+ .duration(320)
5455
+ .ease(d3.easeBackOut.overshoot(1.6))
5422
5456
  .attr('x', weekIndex * (cellSize + cellGap))
5423
5457
  .attr('y', dayOfWeek * (cellSize + cellGap))
5424
5458
  .attr('width', cellSize)
5425
5459
  .attr('height', cellSize)
5426
- .attr('rx', 3)
5427
- .attr('class', styles$5.cell)
5428
- .attr('data-date', dateString)
5429
- .attr('data-value', isTrue ? 'true' : 'false')
5430
- .style('fill', isTrue ? habitColor : '#4D4D4DFF');
5460
+ .style('opacity', 1);
5431
5461
  rect.on('mouseover', function (event) {
5432
5462
  tooltip.transition()
5433
5463
  .duration(200)
@@ -5452,10 +5482,10 @@ const BooleansHeatmap = ({ data, habitName, width = 800, height = 200, habitColo
5452
5482
  tooltip.remove();
5453
5483
  };
5454
5484
  }, [data, habitName, width, height, startDate, endDate, weeksToShow, habitColor, habitEmoji]);
5455
- 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"] })] })] }));
5485
+ return (jsxs("div", { className: styles$9.container, children: [jsxs("h3", { className: styles$9.title, children: [jsx("span", { className: styles$9.habitEmoji, children: habitEmoji }), habitName] }), jsx("svg", { ref: svgRef, width: width, height: height, className: styles$9.chart }), jsxs("div", { className: styles$9.legend, children: [jsxs("span", { className: styles$9.legendItem, children: [jsx("span", { className: styles$9.legendColor, style: { backgroundColor: habitColor } }), "Done"] }), jsxs("span", { className: styles$9.legendItem, children: [jsx("span", { className: styles$9.legendColor, style: { backgroundColor: '#4D4D4DFF' } }), "Not done"] })] })] }));
5456
5486
  };
5457
5487
 
5458
- var styles$4 = {"container":"SunburstChart-module_container__w1ZYc","title":"SunburstChart-module_title__T6Ak7","chart":"SunburstChart-module_chart__BFM6E","tooltip":"SunburstChart-module_tooltip__TuTAN"};
5488
+ var styles$8 = {"container":"SunburstChart-module_container__w1ZYc","title":"SunburstChart-module_title__T6Ak7","chart":"SunburstChart-module_chart__BFM6E","tooltip":"SunburstChart-module_tooltip__TuTAN"};
5459
5489
 
5460
5490
  const COLOR_PALETTE = [
5461
5491
  '#6366f1',
@@ -5519,7 +5549,8 @@ const SunburstChart = ({ data, width = 500, height = 500, title = 'Sunburst Char
5519
5549
  node.y0Original = d.y0;
5520
5550
  node.y1Original = d.y1;
5521
5551
  });
5522
- const arc = d3
5552
+ // arc generator (used for type only — entrance animation builds its own)
5553
+ void d3
5523
5554
  .arc()
5524
5555
  .startAngle((d) => d.x0)
5525
5556
  .endAngle((d) => d.x1)
@@ -5529,7 +5560,7 @@ const SunburstChart = ({ data, width = 500, height = 500, title = 'Sunburst Char
5529
5560
  const tooltip = d3
5530
5561
  .select('body')
5531
5562
  .append('div')
5532
- .attr('class', styles$4.tooltip)
5563
+ .attr('class', styles$8.tooltip)
5533
5564
  .style('opacity', 0)
5534
5565
  .style('position', 'absolute');
5535
5566
  // Function to reset to original view
@@ -5696,7 +5727,6 @@ const SunburstChart = ({ data, width = 500, height = 500, title = 'Sunburst Char
5696
5727
  .data(nodes.filter((d) => d.depth > 0 && d.value && d.value > 0))
5697
5728
  .enter()
5698
5729
  .append('path')
5699
- .attr('d', arc)
5700
5730
  .attr('fill', (d) => {
5701
5731
  let ancestor = d;
5702
5732
  while (ancestor.depth > 1 && ancestor.parent) {
@@ -5760,6 +5790,46 @@ const SunburstChart = ({ data, width = 500, height = 500, title = 'Sunburst Char
5760
5790
  .style('left', event.pageX + 10 + 'px')
5761
5791
  .style('top', event.pageY - 28 + 'px');
5762
5792
  });
5793
+ // Entrance animation: grow segments outward from center, staggered by depth + angle.
5794
+ const entranceDuration = 700;
5795
+ paths
5796
+ .attr('d', (d) => {
5797
+ const collapsedArc = d3
5798
+ .arc()
5799
+ .startAngle(() => d.x0)
5800
+ .endAngle(() => d.x1)
5801
+ .innerRadius(() => 0)
5802
+ .outerRadius(() => 0)
5803
+ .cornerRadius(3);
5804
+ return collapsedArc(d) || '';
5805
+ })
5806
+ .style('opacity', 0)
5807
+ .transition()
5808
+ .delay((d) => (d.depth - 1) * 120 + ((d.x0 + d.x1) / 2 / (2 * Math.PI)) * 240)
5809
+ .duration(entranceDuration)
5810
+ .ease(d3.easeCubicOut)
5811
+ .style('opacity', 1)
5812
+ .attrTween('d', function (d) {
5813
+ const node = d;
5814
+ const startY0 = 0;
5815
+ const startY1 = 0;
5816
+ const endY0 = node.y0Original;
5817
+ const endY1 = node.y1Original;
5818
+ return (t) => {
5819
+ const currY0 = d3.interpolate(startY0, endY0)(t);
5820
+ const currY1 = d3.interpolate(startY1, endY1)(t);
5821
+ node.y0 = currY0;
5822
+ node.y1 = currY1;
5823
+ const interpolatedArc = d3
5824
+ .arc()
5825
+ .startAngle(() => node.x0)
5826
+ .endAngle(() => node.x1)
5827
+ .innerRadius(() => Math.sqrt(Math.max(0, currY0)))
5828
+ .outerRadius(() => Math.sqrt(Math.max(0, currY1)))
5829
+ .cornerRadius(3);
5830
+ return interpolatedArc(node) || '';
5831
+ };
5832
+ });
5763
5833
  const shouldDisplayLabel = (d) => {
5764
5834
  const angle = d.x1 - d.x0;
5765
5835
  // When zoomed in, be more lenient with label display since segments are larger
@@ -5911,8 +5981,9 @@ const SunburstChart = ({ data, width = 500, height = 500, title = 'Sunburst Char
5911
5981
  .append('text')
5912
5982
  .attr('class', 'segment-label')
5913
5983
  .attr('transform', (d) => {
5914
- const angle = (d.x0 + d.x1) / 2;
5915
- const radiusVal = (Math.sqrt(d.y0) + Math.sqrt(d.y1)) / 2;
5984
+ const node = d;
5985
+ const angle = (node.x0 + node.x1) / 2;
5986
+ const radiusVal = (Math.sqrt(node.y0Original) + Math.sqrt(node.y1Original)) / 2;
5916
5987
  const x = Math.cos(angle - Math.PI / 2) * radiusVal;
5917
5988
  const y = Math.sin(angle - Math.PI / 2) * radiusVal;
5918
5989
  return `translate(${x},${y})`;
@@ -5927,15 +5998,20 @@ const SunburstChart = ({ data, width = 500, height = 500, title = 'Sunburst Char
5927
5998
  .text((d) => {
5928
5999
  const maxLength = d.depth === 1 ? 12 : 8;
5929
6000
  return d.data.name.substring(0, maxLength);
5930
- });
6001
+ })
6002
+ .style('opacity', 0)
6003
+ .transition()
6004
+ .delay((d) => (d.depth - 1) * 120 + ((d.x0 + d.x1) / 2 / (2 * Math.PI)) * 240 + 500)
6005
+ .duration(300)
6006
+ .style('opacity', 1);
5931
6007
  return () => {
5932
6008
  tooltip.remove();
5933
6009
  };
5934
6010
  }, [data, width, height, colorMap, radius, tagColors, unit, centerLabel]);
5935
- return (jsxs("div", { className: styles$4.container, children: [jsx("h3", { className: styles$4.title, children: title }), jsx("svg", { ref: svgRef, viewBox: `0 0 ${width} ${height}`, className: styles$4.chart })] }));
6011
+ return (jsxs("div", { className: styles$8.container, children: [jsx("h3", { className: styles$8.title, children: title }), jsx("svg", { ref: svgRef, viewBox: `0 0 ${width} ${height}`, className: styles$8.chart })] }));
5936
6012
  };
5937
6013
 
5938
- 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"};
6014
+ var styles$7 = {"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"};
5939
6015
 
5940
6016
  const DEFAULT_COLORS = [
5941
6017
  '#6366f1', '#8b5cf6', '#06b6d4', '#10b981',
@@ -5975,7 +6051,7 @@ const PieChart = ({ data, width = 400, height = 400, title = 'Distribution', sho
5975
6051
  .innerRadius(radius * 0.7)
5976
6052
  .outerRadius(radius * 0.7);
5977
6053
  const tooltip = d3.select('body').append('div')
5978
- .attr('class', styles$3.tooltip)
6054
+ .attr('class', styles$7.tooltip)
5979
6055
  .style('opacity', 0)
5980
6056
  .style('position', 'absolute');
5981
6057
  const pieData = pie(data);
@@ -5984,13 +6060,25 @@ const PieChart = ({ data, width = 400, height = 400, title = 'Distribution', sho
5984
6060
  .data(pieData)
5985
6061
  .enter().append('g')
5986
6062
  .attr('class', 'arc');
5987
- arcs.append('path')
5988
- .attr('d', d => arc(d))
6063
+ const sweepDuration = 900;
6064
+ const arcPaths = arcs.append('path')
5989
6065
  .attr('fill', (d, i) => d.data.color || DEFAULT_COLORS[i % DEFAULT_COLORS.length])
5990
6066
  .attr('stroke', 'var(--bg-primary)')
5991
6067
  .attr('stroke-width', 3)
5992
6068
  .style('cursor', 'pointer')
5993
6069
  .style('filter', 'drop-shadow(0 2px 8px rgba(0,0,0,0.15))')
6070
+ // Start collapsed at the slice's startAngle (zero-width slice)
6071
+ .attr('d', d => arc({ ...d, endAngle: d.startAngle }));
6072
+ arcPaths
6073
+ .transition()
6074
+ .delay(d => (d.startAngle / (2 * Math.PI)) * sweepDuration)
6075
+ .duration(d => ((d.endAngle - d.startAngle) / (2 * Math.PI)) * sweepDuration + 200)
6076
+ .ease(d3.easeCubicOut)
6077
+ .attrTween('d', function (d) {
6078
+ const i = d3.interpolate(d.startAngle, d.endAngle);
6079
+ return (t) => arc({ ...d, endAngle: i(t) }) || '';
6080
+ });
6081
+ arcPaths
5994
6082
  .on('mouseover', function (event, d) {
5995
6083
  const hoverArc = d3.arc()
5996
6084
  .innerRadius(radius * 0.4)
@@ -6062,21 +6150,593 @@ const PieChart = ({ data, width = 400, height = 400, title = 'Distribution', sho
6062
6150
  .style('text-shadow', (d, i) => {
6063
6151
  const segmentColor = d.data.color || DEFAULT_COLORS[i % DEFAULT_COLORS.length];
6064
6152
  const textColor = getTextColor(segmentColor);
6065
- // Use contrasting shadow color
6066
6153
  const shadowColor = textColor === '#ffffff' ? 'rgba(0,0,0,0.4)' : 'rgba(255,255,255,0.4)';
6067
6154
  return `0 1px 2px ${shadowColor}`;
6068
6155
  })
6069
6156
  .text(d => {
6070
6157
  const percentage = ((d.data.value / total) * 100);
6071
6158
  return percentage > 8 ? `${percentage.toFixed(0)}%` : '';
6072
- });
6159
+ })
6160
+ .style('opacity', 0)
6161
+ .transition()
6162
+ .delay(d => (((d.startAngle + d.endAngle) / 2) / (2 * Math.PI)) * sweepDuration + 250)
6163
+ .duration(300)
6164
+ .style('opacity', 1);
6073
6165
  return () => {
6074
6166
  tooltip.remove();
6075
6167
  };
6076
6168
  }, [data, width, height, radius, centerLabel, unit]);
6077
- 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: {
6169
+ return (jsxs("div", { className: styles$7.container, children: [jsx("h3", { className: styles$7.title, children: title }), jsxs("div", { className: styles$7.chartContainer, children: [jsx("svg", { ref: svgRef, width: width, height: height, className: styles$7.chart }), showLegend && (jsx("div", { className: styles$7.legend, children: data.map((item, index) => (jsxs("div", { className: styles$7.legendItem, children: [jsx("span", { className: styles$7.legendColor, style: {
6078
6170
  backgroundColor: item.color || DEFAULT_COLORS[index % DEFAULT_COLORS.length]
6079
- } }), jsx("span", { className: styles$3.legendLabel, children: item.name }), jsx("span", { className: styles$3.legendValue, children: item.value.toLocaleString() })] }, item.name))) }))] })] }));
6171
+ } }), jsx("span", { className: styles$7.legendLabel, children: item.name }), jsx("span", { className: styles$7.legendValue, children: item.value.toLocaleString() })] }, item.name))) }))] })] }));
6172
+ };
6173
+
6174
+ var styles$6 = {"container":"ProgressRings-module_container__7AGya","grid":"ProgressRings-module_grid__aJB-2","ring":"ProgressRings-module_ring__Z2F6p","svg":"ProgressRings-module_svg__Aelkb","center":"ProgressRings-module_center__BIg-q","emoji":"ProgressRings-module_emoji__jA4Yz","pct":"ProgressRings-module_pct__9t8iC","over":"ProgressRings-module_over__0RLdn","label":"ProgressRings-module_label__2Ih08","amounts":"ProgressRings-module_amounts__85r8C","budget":"ProgressRings-module_budget__9xHyq","empty":"ProgressRings-module_empty__eZg6j","tooltip":"ProgressRings-module_tooltip__ApZHH","visible":"ProgressRings-module_visible__2ygIq","tipLabel":"ProgressRings-module_tipLabel__1LHAW","tipRow":"ProgressRings-module_tipRow__0VfOc"};
6175
+
6176
+ const DEFAULT_FORMAT = (n) => n.toLocaleString();
6177
+ const DEFAULT_OVER = (over, fmt) => `Over by ${fmt(over)}`;
6178
+ const DEFAULT_UNDER = (left, fmt) => `${fmt(left)} left`;
6179
+ const ProgressRings = ({ rings, formatValue = DEFAULT_FORMAT, ringSize = 120, stroke = 12, emptyMessage = 'No data to display', overLabel = DEFAULT_OVER, underLabel = DEFAULT_UNDER, }) => {
6180
+ const containerRef = useRef(null);
6181
+ const tooltipRef = useRef(null);
6182
+ const showTip = useCallback((event, html) => {
6183
+ const tip = tooltipRef.current;
6184
+ const ctn = containerRef.current;
6185
+ if (!tip || !ctn)
6186
+ return;
6187
+ const rect = ctn.getBoundingClientRect();
6188
+ tip.style.left = `${event.clientX - rect.left + 12}px`;
6189
+ tip.style.top = `${event.clientY - rect.top - 10}px`;
6190
+ tip.innerHTML = html;
6191
+ tip.classList.add(styles$6.visible);
6192
+ }, []);
6193
+ const hideTip = useCallback(() => {
6194
+ tooltipRef.current?.classList.remove(styles$6.visible);
6195
+ }, []);
6196
+ if (rings.length === 0) {
6197
+ return jsx("div", { className: styles$6.empty, children: emptyMessage });
6198
+ }
6199
+ const radius = (ringSize - stroke) / 2;
6200
+ const circumference = 2 * Math.PI * radius;
6201
+ return (jsxs("div", { className: styles$6.container, ref: containerRef, children: [jsx("div", { className: styles$6.grid, children: rings.map((r, idx) => {
6202
+ const ratio = r.target > 0 ? r.value / r.target : 0;
6203
+ const clamped = Math.min(1, ratio);
6204
+ const finalOffset = circumference * (1 - clamped);
6205
+ const pct = Math.round(ratio * 100);
6206
+ const over = ratio > 1;
6207
+ const ringColor = over ? 'var(--color-error)' : (r.color || 'var(--color-primary)');
6208
+ return (jsx(Ring, { label: r.label, emoji: r.emoji, ringSize: ringSize, stroke: stroke, radius: radius, circumference: circumference, finalOffset: finalOffset, ringColor: ringColor, value: r.value, target: r.target, pct: pct, over: over, formatValue: formatValue, overLabel: overLabel, underLabel: underLabel, delay: idx * 80, onTip: showTip, onTipLeave: hideTip }, r.label));
6209
+ }) }), jsx("div", { ref: tooltipRef, className: styles$6.tooltip })] }));
6210
+ };
6211
+ const Ring = ({ label, emoji, ringSize, stroke, radius, circumference, finalOffset, ringColor, value, target, pct, over, formatValue, overLabel, underLabel, delay, onTip, onTipLeave, }) => {
6212
+ const circleRef = useRef(null);
6213
+ useEffect(() => {
6214
+ const node = circleRef.current;
6215
+ if (!node)
6216
+ return;
6217
+ // Reset to empty then animate to final offset.
6218
+ node.style.transition = 'none';
6219
+ node.style.strokeDashoffset = `${circumference}`;
6220
+ // Force reflow so the transition picks up the new starting state.
6221
+ void node.getBoundingClientRect();
6222
+ node.style.transition = `stroke-dashoffset 900ms cubic-bezier(0.22, 1, 0.36, 1) ${delay}ms`;
6223
+ node.style.strokeDashoffset = `${finalOffset}`;
6224
+ }, [circumference, finalOffset, delay]);
6225
+ return (jsxs("div", { className: styles$6.ring, onMouseMove: (e) => onTip(e, `<div class="${styles$6.tipLabel}">${emoji ?? ''} ${label}</div>` +
6226
+ `<div class="${styles$6.tipRow}">${formatValue(value)} of ${formatValue(target)}</div>` +
6227
+ `<div class="${styles$6.tipRow}" style="color:${over ? 'var(--color-error)' : 'var(--color-success)'}">${over ? overLabel(value - target, formatValue) : underLabel(target - value, formatValue)}</div>`), onMouseLeave: onTipLeave, children: [jsxs("svg", { width: ringSize, height: ringSize, className: styles$6.svg, children: [jsx("circle", { cx: ringSize / 2, cy: ringSize / 2, r: radius, fill: "none", stroke: "var(--color-border)", strokeWidth: stroke, strokeOpacity: "0.35" }), jsx("circle", { ref: circleRef, cx: ringSize / 2, cy: ringSize / 2, r: radius, fill: "none", stroke: ringColor, strokeWidth: stroke, strokeLinecap: "round", strokeDasharray: circumference, strokeDashoffset: circumference, transform: `rotate(-90 ${ringSize / 2} ${ringSize / 2})` })] }), jsxs("div", { className: styles$6.center, children: [emoji && jsx("div", { className: styles$6.emoji, children: emoji }), jsxs("div", { className: `${styles$6.pct} ${over ? styles$6.over : ''}`, children: [pct, "%"] })] }), jsx("div", { className: styles$6.label, children: label }), jsxs("div", { className: styles$6.amounts, children: [jsx("span", { className: over ? styles$6.over : '', children: formatValue(value) }), jsxs("span", { className: styles$6.budget, children: [" / ", formatValue(target)] })] })] }));
6228
+ };
6229
+
6230
+ var styles$5 = {"container":"RadialDayChart-module_container__2QM22","clockWrap":"RadialDayChart-module_clockWrap__dThw1","tooltip":"RadialDayChart-module_tooltip__NhrPN","visible":"RadialDayChart-module_visible__0wHWj","tooltipLabel":"RadialDayChart-module_tooltipLabel__--6Gk","tooltipRow":"RadialDayChart-module_tooltipRow__uPfvi"};
6231
+
6232
+ const formatHHMM = (h) => {
6233
+ const hh = Math.floor(h);
6234
+ const mm = Math.floor((h - hh) * 60);
6235
+ return `${String(hh).padStart(2, '0')}:${String(mm).padStart(2, '0')}`;
6236
+ };
6237
+ const formatDuration = (hours) => {
6238
+ const mins = Math.round(hours * 60);
6239
+ if (mins < 60)
6240
+ return `${mins}m`;
6241
+ return `${Math.floor(mins / 60)}h ${mins % 60}m`;
6242
+ };
6243
+ const RadialDayChart = ({ rings, showNowHand = true, centerTopLabel, centerMainLabel, size: fixedSize, minSize = 280, maxSize = 560, }) => {
6244
+ const containerRef = useRef(null);
6245
+ const svgRef = useRef(null);
6246
+ const tooltipRef = useRef(null);
6247
+ const [autoSize, setAutoSize] = useState(380);
6248
+ const size = fixedSize ?? autoSize;
6249
+ useEffect(() => {
6250
+ if (fixedSize)
6251
+ return;
6252
+ const container = containerRef.current;
6253
+ if (!container)
6254
+ return;
6255
+ const observer = new ResizeObserver((entries) => {
6256
+ for (const entry of entries) {
6257
+ const { width } = entry.contentRect;
6258
+ if (width > 0)
6259
+ setAutoSize(Math.max(minSize, Math.min(maxSize, width)));
6260
+ }
6261
+ });
6262
+ observer.observe(container);
6263
+ return () => observer.disconnect();
6264
+ }, [fixedSize, minSize, maxSize]);
6265
+ const showTooltip = useCallback((event, content) => {
6266
+ const tooltip = tooltipRef.current;
6267
+ const container = containerRef.current;
6268
+ if (!tooltip || !container)
6269
+ return;
6270
+ const rect = container.getBoundingClientRect();
6271
+ tooltip.style.left = `${event.clientX - rect.left + 12}px`;
6272
+ tooltip.style.top = `${event.clientY - rect.top - 10}px`;
6273
+ tooltip.innerHTML = content;
6274
+ tooltip.classList.add(styles$5.visible);
6275
+ }, []);
6276
+ const hideTooltip = useCallback(() => {
6277
+ tooltipRef.current?.classList.remove(styles$5.visible);
6278
+ }, []);
6279
+ useEffect(() => {
6280
+ if (!svgRef.current || rings.length === 0)
6281
+ return;
6282
+ const svg = d3.select(svgRef.current);
6283
+ svg.selectAll('*').remove();
6284
+ const width = size;
6285
+ const height = size;
6286
+ const cx = width / 2;
6287
+ const cy = height / 2;
6288
+ const outerR = size / 2 - 28;
6289
+ const g = svg
6290
+ .attr('width', width)
6291
+ .attr('height', height)
6292
+ .append('g')
6293
+ .attr('transform', `translate(${cx},${cy})`);
6294
+ const computedStyle = getComputedStyle(document.documentElement);
6295
+ const textColor = computedStyle.getPropertyValue('--color-text-secondary').trim() || '#888';
6296
+ const mutedText = computedStyle.getPropertyValue('--color-text-muted').trim() || '#aaa';
6297
+ const borderColor = computedStyle.getPropertyValue('--color-border').trim() || 'rgba(128,128,128,0.2)';
6298
+ const hourToAngle = (h) => (h / 24) * Math.PI * 2;
6299
+ g.append('circle')
6300
+ .attr('r', outerR + 8)
6301
+ .attr('fill', 'none')
6302
+ .attr('stroke', borderColor)
6303
+ .attr('stroke-width', 1);
6304
+ const centerR = 46;
6305
+ const ringGap = 2;
6306
+ const ringCount = rings.length;
6307
+ const ringWidth = (outerR - centerR - ringGap * (ringCount - 1)) / ringCount;
6308
+ rings.forEach((ring, ringIdx) => {
6309
+ const ringOuter = outerR - ringIdx * (ringWidth + ringGap);
6310
+ const ringInner = ringOuter - ringWidth;
6311
+ const opacity = ring.opacity !== undefined
6312
+ ? ring.opacity
6313
+ : ringIdx === 0
6314
+ ? 1
6315
+ : Math.max(0.1, 0.85 - (ringIdx / ringCount) * 0.85);
6316
+ const arcGen = d3
6317
+ .arc()
6318
+ .innerRadius(ringInner)
6319
+ .outerRadius(ringOuter)
6320
+ .startAngle((d) => hourToAngle(d.startHour))
6321
+ .endAngle((d) => hourToAngle(d.endHour))
6322
+ .cornerRadius(2);
6323
+ const arcSel = g
6324
+ .selectAll(`.ring-${ringIdx}`)
6325
+ .data(ring.arcs)
6326
+ .join('path')
6327
+ .attr('class', `ring-${ringIdx}`)
6328
+ .attr('fill', (d) => d.color)
6329
+ .attr('opacity', 0)
6330
+ .attr('stroke', 'var(--color-background)')
6331
+ .attr('stroke-width', 0.6)
6332
+ .style('cursor', 'pointer')
6333
+ .on('mousemove', function (event, d) {
6334
+ const dur = formatDuration(d.endHour - d.startHour);
6335
+ const labelLine = `${d.emoji ?? ''} ${d.label ?? ''}${d.description ? ` — ${d.description}` : ''}`.trim();
6336
+ showTooltip(event, `<div class="${styles$5.tooltipLabel}">${labelLine || '·'}</div>` +
6337
+ `<div class="${styles$5.tooltipRow}">${ring.dayLabel} · ${formatHHMM(d.startHour)} → ${formatHHMM(d.endHour)}</div>` +
6338
+ `<div class="${styles$5.tooltipRow}">${dur}${d.isActive ? ' · running' : ''}</div>`);
6339
+ })
6340
+ .on('mouseleave', hideTooltip);
6341
+ // Sweep-in: arcs grow from startAngle to their actual endAngle, staggered by start time.
6342
+ arcSel
6343
+ .attr('d', (d) => arcGen({ ...d, endHour: d.startHour }))
6344
+ .transition()
6345
+ .delay((d) => (d.startHour / 24) * 600 + ringIdx * 80)
6346
+ .duration(550)
6347
+ .ease(d3.easeCubicOut)
6348
+ .attr('opacity', opacity)
6349
+ .attrTween('d', function (d) {
6350
+ const i = d3.interpolate(d.startHour, d.endHour);
6351
+ return (t) => arcGen({ ...d, endHour: i(t) }) || '';
6352
+ });
6353
+ });
6354
+ for (let h = 0; h < 24; h++) {
6355
+ const angle = hourToAngle(h) - Math.PI / 2;
6356
+ const isMajor = h % 3 === 0;
6357
+ const inner = outerR + 2;
6358
+ const outer = outerR + (isMajor ? 9 : 5);
6359
+ g.append('line')
6360
+ .attr('x1', Math.cos(angle) * inner)
6361
+ .attr('y1', Math.sin(angle) * inner)
6362
+ .attr('x2', Math.cos(angle) * outer)
6363
+ .attr('y2', Math.sin(angle) * outer)
6364
+ .attr('stroke', isMajor ? textColor : borderColor)
6365
+ .attr('stroke-width', isMajor ? 2 : 1);
6366
+ if (isMajor) {
6367
+ const labelR = outerR + 22;
6368
+ g.append('text')
6369
+ .attr('x', Math.cos(angle) * labelR)
6370
+ .attr('y', Math.sin(angle) * labelR)
6371
+ .attr('text-anchor', 'middle')
6372
+ .attr('dominant-baseline', 'middle')
6373
+ .attr('fill', mutedText)
6374
+ .attr('font-size', '11px')
6375
+ .attr('font-weight', 600)
6376
+ .text(String(h).padStart(2, '0'));
6377
+ }
6378
+ }
6379
+ g.append('circle')
6380
+ .attr('r', centerR - 2)
6381
+ .attr('fill', 'var(--color-background-secondary)')
6382
+ .attr('stroke', borderColor)
6383
+ .attr('stroke-width', 1);
6384
+ if (centerTopLabel) {
6385
+ g.append('text')
6386
+ .attr('text-anchor', 'middle')
6387
+ .attr('y', centerMainLabel ? -6 : 4)
6388
+ .attr('fill', mutedText)
6389
+ .attr('font-size', '10px')
6390
+ .attr('letter-spacing', '1.5px')
6391
+ .text(centerTopLabel);
6392
+ }
6393
+ if (centerMainLabel) {
6394
+ g.append('text')
6395
+ .attr('text-anchor', 'middle')
6396
+ .attr('y', centerTopLabel ? 14 : 4)
6397
+ .attr('fill', 'var(--color-text)')
6398
+ .attr('font-size', '18px')
6399
+ .attr('font-weight', 700)
6400
+ .text(centerMainLabel);
6401
+ }
6402
+ if (showNowHand) {
6403
+ const now = new Date();
6404
+ const nowHour = now.getHours() + now.getMinutes() / 60;
6405
+ const nowAngle = hourToAngle(nowHour) - Math.PI / 2;
6406
+ const handTipR = outerR + 6;
6407
+ g.append('line')
6408
+ .attr('x1', 0)
6409
+ .attr('y1', 0)
6410
+ .attr('x2', Math.cos(nowAngle) * handTipR)
6411
+ .attr('y2', Math.sin(nowAngle) * handTipR)
6412
+ .attr('stroke', 'var(--color-error)')
6413
+ .attr('stroke-width', 2.5)
6414
+ .attr('stroke-linecap', 'round')
6415
+ .style('opacity', 0)
6416
+ .transition()
6417
+ .delay(800)
6418
+ .duration(300)
6419
+ .style('opacity', 1);
6420
+ g.append('circle')
6421
+ .attr('cx', Math.cos(nowAngle) * handTipR)
6422
+ .attr('cy', Math.sin(nowAngle) * handTipR)
6423
+ .attr('r', 4)
6424
+ .attr('fill', 'var(--color-error)')
6425
+ .style('opacity', 0)
6426
+ .transition()
6427
+ .delay(800)
6428
+ .duration(300)
6429
+ .style('opacity', 1);
6430
+ g.append('circle')
6431
+ .attr('r', 5)
6432
+ .attr('fill', 'var(--color-error)')
6433
+ .attr('stroke', 'var(--color-background)')
6434
+ .attr('stroke-width', 1.5)
6435
+ .style('opacity', 0)
6436
+ .transition()
6437
+ .delay(800)
6438
+ .duration(300)
6439
+ .style('opacity', 1);
6440
+ }
6441
+ }, [size, rings, centerTopLabel, centerMainLabel, showNowHand, showTooltip, hideTooltip]);
6442
+ return (jsxs("div", { className: styles$5.container, ref: containerRef, children: [jsx("div", { className: styles$5.clockWrap, children: jsx("svg", { ref: svgRef }) }), jsx("div", { ref: tooltipRef, className: styles$5.tooltip })] }));
6443
+ };
6444
+
6445
+ var styles$4 = {"container":"ChordDiagram-module_container__lf6an","svgWrap":"ChordDiagram-module_svgWrap__T4Gss","tooltip":"ChordDiagram-module_tooltip__86Z2U","visible":"ChordDiagram-module_visible__a-8LE","tipLabel":"ChordDiagram-module_tipLabel__m92kN","tipRow":"ChordDiagram-module_tipRow__nFuWs"};
6446
+
6447
+ const DEFAULT_PALETTE = [
6448
+ '#6366f1', '#8b5cf6', '#06b6d4', '#10b981',
6449
+ '#f59e0b', '#ef4444', '#ec4899', '#84cc16',
6450
+ '#f97316', '#3b82f6', '#14b8a6', '#a855f7',
6451
+ ];
6452
+ const ChordDiagram = ({ labels, matrix, colors, emojis, edgeUnit = 'connections', size: fixedSize, minSize = 320, maxSize = 820, }) => {
6453
+ const containerRef = useRef(null);
6454
+ const svgRef = useRef(null);
6455
+ const tooltipRef = useRef(null);
6456
+ const [autoSize, setAutoSize] = useState(480);
6457
+ const size = fixedSize ?? autoSize;
6458
+ useEffect(() => {
6459
+ if (fixedSize)
6460
+ return;
6461
+ const c = containerRef.current;
6462
+ if (!c)
6463
+ return;
6464
+ const obs = new ResizeObserver((entries) => {
6465
+ for (const e of entries) {
6466
+ const w = e.contentRect.width;
6467
+ if (w > 0)
6468
+ setAutoSize(Math.max(minSize, Math.min(maxSize, w)));
6469
+ }
6470
+ });
6471
+ obs.observe(c);
6472
+ return () => obs.disconnect();
6473
+ }, [fixedSize, minSize, maxSize]);
6474
+ const showTip = useCallback((event, html) => {
6475
+ const tip = tooltipRef.current;
6476
+ const ctn = containerRef.current;
6477
+ if (!tip || !ctn)
6478
+ return;
6479
+ const rect = ctn.getBoundingClientRect();
6480
+ tip.style.left = `${event.clientX - rect.left + 12}px`;
6481
+ tip.style.top = `${event.clientY - rect.top - 10}px`;
6482
+ tip.innerHTML = html;
6483
+ tip.classList.add(styles$4.visible);
6484
+ }, []);
6485
+ const hideTip = useCallback(() => {
6486
+ tooltipRef.current?.classList.remove(styles$4.visible);
6487
+ }, []);
6488
+ useEffect(() => {
6489
+ if (!svgRef.current || labels.length === 0 || matrix.length === 0)
6490
+ return;
6491
+ const svg = d3.select(svgRef.current);
6492
+ svg.selectAll('*').remove();
6493
+ const inner = size / 2 - 50;
6494
+ const outer = inner + 16;
6495
+ const g = svg
6496
+ .attr('width', size)
6497
+ .attr('height', size)
6498
+ .append('g')
6499
+ .attr('transform', `translate(${size / 2}, ${size / 2})`);
6500
+ const chord = d3.chord().padAngle(0.04).sortSubgroups(d3.descending);
6501
+ const chords = chord(matrix);
6502
+ const arc = d3.arc().innerRadius(inner).outerRadius(outer);
6503
+ const ribbon = d3.ribbon().radius(inner);
6504
+ const colorOf = (i) => colors?.[i] || DEFAULT_PALETTE[i % DEFAULT_PALETTE.length];
6505
+ const emojiOf = (i) => emojis?.[i] ?? '•';
6506
+ const groupSel = g.append('g')
6507
+ .selectAll('path')
6508
+ .data(chords.groups)
6509
+ .join('path')
6510
+ .attr('d', arc)
6511
+ .attr('fill', (d) => colorOf(d.index))
6512
+ .attr('stroke', 'var(--color-background)')
6513
+ .attr('stroke-width', 1)
6514
+ .style('cursor', 'pointer')
6515
+ .style('opacity', 0)
6516
+ .on('mousemove', function (event, d) {
6517
+ const total = d.value;
6518
+ showTip(event, `<div class="${styles$4.tipLabel}">${emojiOf(d.index)} ${labels[d.index]}</div>` +
6519
+ `<div class="${styles$4.tipRow}">${total} ${edgeUnit}</div>`);
6520
+ })
6521
+ .on('mouseleave', hideTip);
6522
+ groupSel.transition()
6523
+ .delay((_, i) => i * 40)
6524
+ .duration(420)
6525
+ .ease(d3.easeCubicOut)
6526
+ .style('opacity', 1);
6527
+ const ribbonSel = g.append('g')
6528
+ .selectAll('path')
6529
+ .data(chords)
6530
+ .join('path')
6531
+ .attr('d', ribbon)
6532
+ .attr('fill', (d) => colorOf(d.source.index))
6533
+ .attr('opacity', 0)
6534
+ .attr('stroke', 'var(--color-background)')
6535
+ .attr('stroke-width', 0.4)
6536
+ .style('cursor', 'pointer')
6537
+ .on('mousemove', function (event, d) {
6538
+ const aToB = matrix[d.source.index]?.[d.target.index] ?? 0;
6539
+ const bToA = matrix[d.target.index]?.[d.source.index] ?? 0;
6540
+ showTip(event, `<div class="${styles$4.tipLabel}">${emojiOf(d.source.index)} ${labels[d.source.index]} ↔ ${emojiOf(d.target.index)} ${labels[d.target.index]}</div>` +
6541
+ `<div class="${styles$4.tipRow}">${labels[d.source.index]} → ${labels[d.target.index]}: ${aToB}</div>` +
6542
+ `<div class="${styles$4.tipRow}">${labels[d.target.index]} → ${labels[d.source.index]}: ${bToA}</div>`);
6543
+ })
6544
+ .on('mouseleave', hideTip);
6545
+ ribbonSel.transition()
6546
+ .delay(labels.length * 40 + 120)
6547
+ .duration(500)
6548
+ .ease(d3.easeCubicOut)
6549
+ .attr('opacity', 0.55);
6550
+ const labelSel = g.append('g')
6551
+ .selectAll('text')
6552
+ .data(chords.groups)
6553
+ .join('text')
6554
+ .attr('transform', (d) => {
6555
+ const angle = (d.startAngle + d.endAngle) / 2 - Math.PI / 2;
6556
+ const r = outer + 18;
6557
+ return `translate(${Math.cos(angle) * r}, ${Math.sin(angle) * r})`;
6558
+ })
6559
+ .attr('text-anchor', 'middle')
6560
+ .attr('dominant-baseline', 'middle')
6561
+ .attr('font-size', '16px')
6562
+ .style('pointer-events', 'none')
6563
+ .style('opacity', 0)
6564
+ .text((d) => emojiOf(d.index));
6565
+ labelSel.transition()
6566
+ .delay((_, i) => i * 40 + 200)
6567
+ .duration(300)
6568
+ .style('opacity', 1);
6569
+ }, [matrix, labels, size, colors, emojis, edgeUnit, showTip, hideTip]);
6570
+ return (jsxs("div", { className: styles$4.container, ref: containerRef, children: [jsx("div", { className: styles$4.svgWrap, children: jsx("svg", { ref: svgRef }) }), jsx("div", { ref: tooltipRef, className: styles$4.tooltip })] }));
6571
+ };
6572
+
6573
+ var styles$3 = {"container":"PolarHeatmap-module_container__vkfiq","svgWrap":"PolarHeatmap-module_svgWrap__xrKnU","tooltip":"PolarHeatmap-module_tooltip__uAYch","visible":"PolarHeatmap-module_visible__myNKg","tipLabel":"PolarHeatmap-module_tipLabel__yyjWw","tipRow":"PolarHeatmap-module_tipRow__CQbQi"};
6574
+
6575
+ const DEFAULT_ACCENT = '#c8a14a';
6576
+ const PolarHeatmap = ({ cells, days, accentColor = DEFAULT_ACCENT, centerTopLabel, centerMainLabel, size: fixedSize, minSize = 320, maxSize = 560, }) => {
6577
+ const containerRef = useRef(null);
6578
+ const svgRef = useRef(null);
6579
+ const tooltipRef = useRef(null);
6580
+ const [autoSize, setAutoSize] = useState(560);
6581
+ const size = fixedSize ?? autoSize;
6582
+ useEffect(() => {
6583
+ if (fixedSize)
6584
+ return;
6585
+ const c = containerRef.current;
6586
+ if (!c)
6587
+ return;
6588
+ const obs = new ResizeObserver((entries) => {
6589
+ for (const e of entries) {
6590
+ const w = e.contentRect.width;
6591
+ if (w > 0)
6592
+ setAutoSize(Math.max(minSize, Math.min(maxSize, w)));
6593
+ }
6594
+ });
6595
+ obs.observe(c);
6596
+ return () => obs.disconnect();
6597
+ }, [fixedSize, minSize, maxSize]);
6598
+ const showTip = useCallback((event, html) => {
6599
+ const tip = tooltipRef.current;
6600
+ const ctn = containerRef.current;
6601
+ if (!tip || !ctn)
6602
+ return;
6603
+ const rect = ctn.getBoundingClientRect();
6604
+ tip.style.left = `${event.clientX - rect.left + 12}px`;
6605
+ tip.style.top = `${event.clientY - rect.top - 10}px`;
6606
+ tip.innerHTML = html;
6607
+ tip.classList.add(styles$3.visible);
6608
+ }, []);
6609
+ const hideTip = useCallback(() => {
6610
+ tooltipRef.current?.classList.remove(styles$3.visible);
6611
+ }, []);
6612
+ useEffect(() => {
6613
+ if (!svgRef.current || cells.length === 0 || days <= 0)
6614
+ return;
6615
+ const svg = d3.select(svgRef.current);
6616
+ svg.selectAll('*').remove();
6617
+ const outerR = size / 2 - 32;
6618
+ const innerR = 64;
6619
+ const ringGap = 4;
6620
+ const ringWidth = (outerR - innerR - ringGap * (days - 1)) / days;
6621
+ const defs = svg.append('defs');
6622
+ const gradId = `polar-heatmap-glow-${Math.random().toString(36).slice(2, 9)}`;
6623
+ const glow = defs
6624
+ .append('radialGradient')
6625
+ .attr('id', gradId)
6626
+ .attr('cx', '50%')
6627
+ .attr('cy', '50%')
6628
+ .attr('r', '50%');
6629
+ glow.append('stop').attr('offset', '0%').attr('stop-color', accentColor).attr('stop-opacity', 0.18);
6630
+ glow.append('stop').attr('offset', '60%').attr('stop-color', accentColor).attr('stop-opacity', 0.05);
6631
+ glow.append('stop').attr('offset', '100%').attr('stop-color', accentColor).attr('stop-opacity', 0);
6632
+ const g = svg
6633
+ .attr('width', size)
6634
+ .attr('height', size)
6635
+ .append('g')
6636
+ .attr('transform', `translate(${size / 2}, ${size / 2})`);
6637
+ const hourAngle = (h) => (h / 24) * Math.PI * 2;
6638
+ g.append('circle')
6639
+ .attr('r', outerR + 44)
6640
+ .attr('fill', `url(#${gradId})`);
6641
+ for (let h = 0; h < 24; h++) {
6642
+ const angle = hourAngle(h) - Math.PI / 2;
6643
+ g.append('line')
6644
+ .attr('x1', Math.cos(angle) * innerR)
6645
+ .attr('y1', Math.sin(angle) * innerR)
6646
+ .attr('x2', Math.cos(angle) * (outerR + 6))
6647
+ .attr('y2', Math.sin(angle) * (outerR + 6))
6648
+ .attr('stroke', accentColor)
6649
+ .attr('stroke-width', h % 3 === 0 ? 0.7 : 0.35)
6650
+ .attr('opacity', h % 3 === 0 ? 0.55 : 0.25);
6651
+ }
6652
+ const arcGen = d3
6653
+ .arc()
6654
+ .innerRadius((d) => outerR - d.dayOffset * (ringWidth + ringGap) - ringWidth)
6655
+ .outerRadius((d) => outerR - d.dayOffset * (ringWidth + ringGap))
6656
+ .startAngle((d) => hourAngle(d.hour))
6657
+ .endAngle((d) => hourAngle(d.hour + 1))
6658
+ .padAngle(0.014)
6659
+ .cornerRadius(2.5);
6660
+ const visibleCells = cells.filter((c) => c.dayOffset >= 0 && c.dayOffset < days && c.hour >= 0 && c.hour < 24);
6661
+ const cellSel = g.selectAll('path.cell')
6662
+ .data(visibleCells)
6663
+ .join('path')
6664
+ .attr('class', 'cell')
6665
+ .attr('d', arcGen)
6666
+ .attr('fill', (d) => d.color)
6667
+ .attr('opacity', 0)
6668
+ .style('cursor', (d) => (d.label ? 'pointer' : 'default'))
6669
+ .on('mousemove', function (event, d) {
6670
+ if (!d.label)
6671
+ return;
6672
+ const hr = `${String(d.hour).padStart(2, '0')}:00`;
6673
+ const dayLabel = d.dayLabel ?? (d.dayOffset === 0 ? 'Today' : `${d.dayOffset} days ago`);
6674
+ showTip(event, `<div class="${styles$3.tipLabel}">${d.emoji ?? ''} ${d.label}</div>` +
6675
+ `<div class="${styles$3.tipRow}">${dayLabel} · ${hr}</div>`);
6676
+ })
6677
+ .on('mouseleave', hideTip);
6678
+ cellSel.transition()
6679
+ .delay((d) => (d.hour / 24) * 600 + d.dayOffset * 30)
6680
+ .duration(380)
6681
+ .ease(d3.easeCubicOut)
6682
+ .attr('opacity', (d) => (d.label ? 0.88 : 0));
6683
+ g.append('circle')
6684
+ .attr('r', outerR + 16)
6685
+ .attr('fill', 'none')
6686
+ .attr('stroke', accentColor)
6687
+ .attr('stroke-width', 0.4)
6688
+ .attr('opacity', 0.4);
6689
+ for (let i = 0; i < 48; i++) {
6690
+ const angle = (i / 48) * Math.PI * 2 - Math.PI / 2;
6691
+ g.append('circle')
6692
+ .attr('cx', Math.cos(angle) * (outerR + 12))
6693
+ .attr('cy', Math.sin(angle) * (outerR + 12))
6694
+ .attr('r', i % 2 === 0 ? 1.4 : 0.6)
6695
+ .attr('fill', accentColor)
6696
+ .attr('opacity', i % 2 === 0 ? 0.75 : 0.4);
6697
+ }
6698
+ for (let h = 0; h < 24; h += 3) {
6699
+ const angle = hourAngle(h) - Math.PI / 2;
6700
+ const labelR = outerR + 28;
6701
+ g.append('text')
6702
+ .attr('x', Math.cos(angle) * labelR)
6703
+ .attr('y', Math.sin(angle) * labelR)
6704
+ .attr('text-anchor', 'middle')
6705
+ .attr('dominant-baseline', 'middle')
6706
+ .attr('fill', accentColor)
6707
+ .attr('font-size', '11px')
6708
+ .attr('font-weight', 600)
6709
+ .attr('letter-spacing', '1px')
6710
+ .attr('opacity', 0.85)
6711
+ .text(String(h).padStart(2, '0'));
6712
+ }
6713
+ g.append('circle')
6714
+ .attr('r', innerR - 4)
6715
+ .attr('fill', 'var(--color-background)');
6716
+ g.append('circle').attr('r', 3).attr('fill', accentColor).attr('opacity', 0.9);
6717
+ if (centerTopLabel) {
6718
+ g.append('text')
6719
+ .attr('text-anchor', 'middle')
6720
+ .attr('y', innerR - 33)
6721
+ .attr('fill', accentColor)
6722
+ .attr('font-size', '9px')
6723
+ .attr('letter-spacing', '3px')
6724
+ .attr('opacity', 0.85)
6725
+ .text(centerTopLabel);
6726
+ }
6727
+ if (centerMainLabel) {
6728
+ g.append('text')
6729
+ .attr('text-anchor', 'middle')
6730
+ .attr('y', innerR + 2)
6731
+ .attr('fill', accentColor)
6732
+ .attr('font-size', '14px')
6733
+ .attr('font-weight', 700)
6734
+ .attr('letter-spacing', '2px')
6735
+ .attr('opacity', 0.95)
6736
+ .text(centerMainLabel);
6737
+ }
6738
+ }, [cells, days, size, accentColor, centerTopLabel, centerMainLabel, showTip, hideTip]);
6739
+ return (jsxs("div", { className: styles$3.container, ref: containerRef, children: [jsx("div", { className: styles$3.svgWrap, children: jsx("svg", { ref: svgRef }) }), jsx("div", { ref: tooltipRef, className: styles$3.tooltip })] }));
6080
6740
  };
6081
6741
 
6082
6742
  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"};
@@ -6672,5 +7332,5 @@ const ConfirmationModal = ({ isOpen, onClose, onConfirm, title, message, confirm
6672
7332
  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 })] })] }) })] })) }));
6673
7333
  };
6674
7334
 
6675
- export { ArrayInput, BooleansHeatmap, Breadcrumb, Button, Calendar, Card, Checkbox, ConfirmationModal, DateInput, DecryptedText, EditFAB, EmptyState, HabitTimeOfDayChart, ImageSlideshow, LiquidButton, LoadingSpinner, Modal, MoodChart, Navbar, NumberStepper, PieChart, QuantifiableHabitsChart, RecurrencePicker, SearchBar, SearchableDropdown, SelectInput, SleepChart, Slider, StreamConsole, SunburstChart, Table, Tabs, TextArea, TextInput, ThemeProvider, ThemeSwitcher, TimeInput, ToastContainer, Toggle, ToggleButton, soundManager, useComponentSound, useSound, useTheme, useThemeSafe };
7335
+ export { ArrayInput, BooleansHeatmap, Breadcrumb, Button, Calendar, Card, Checkbox, ChordDiagram, ConfirmationModal, DateInput, DecryptedText, EditFAB, EmptyState, HabitTimeOfDayChart, ImageSlideshow, LiquidButton, LoadingSpinner, Modal, MoodChart, Navbar, NumberStepper, PieChart, PolarHeatmap, ProgressRings, QuantifiableHabitsChart, RadialDayChart, RecurrencePicker, SearchBar, SearchableDropdown, SelectInput, SleepChart, Slider, StreamConsole, SunburstChart, Table, Tabs, TextArea, TextInput, ThemeProvider, ThemeSwitcher, TimeInput, ToastContainer, Toggle, ToggleButton, soundManager, useComponentSound, useSound, useTheme, useThemeSafe };
6676
7336
  //# sourceMappingURL=index.esm.js.map