@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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/utils/soundUtils.ts","../src/utils/useSound.ts","../src/components/atoms/Button/Button.tsx","../src/components/atoms/Card/Card.tsx","../src/components/atoms/EmptyState/EmptyState.tsx","../src/components/atoms/Modal/Modal.tsx","../src/components/atoms/Checkbox/Checkbox.tsx","../src/utils/formUtils.ts","../src/components/atoms/DateInput/DateInput.tsx","../src/components/atoms/SearchableDropdown/SearchableDropdown.tsx","../src/components/atoms/SelectInput/SelectInput.tsx","../src/components/atoms/TextArea/TextArea.tsx","../src/components/atoms/TextInput/TextInput.tsx","../src/components/atoms/Toggle/Toggle.tsx","../src/components/atoms/NumberStepper/NumberStepper.tsx","../src/components/atoms/ToggleButton/ToggleButton.tsx","../src/components/atoms/Slider/Slider.tsx","../src/components/atoms/LoadingSpinner/LoadingSpinner.tsx","../src/components/atoms/DecryptedText/DecryptedText.tsx","../src/components/molecules/ArrayInput/ArrayInput.tsx","../src/components/molecules/EditFAB/EditFAB.tsx","../src/components/molecules/SearchBar/SearchBar.tsx","../src/components/molecules/TimeInput/TimeInput.tsx","../src/components/organisms/ThemeProvider/ThemeProvider.tsx","../src/components/molecules/ThemeSwitcher/ThemeSwitcher.tsx","../src/components/molecules/Tabs/Tabs.tsx","../src/components/molecules/Toast/Toast.tsx","../src/components/molecules/Breadcrumb/Breadcrumb.tsx","../src/components/molecules/LiquidButton/LiquidButton.tsx","../src/components/molecules/RecurrencePicker/RecurrencePicker.tsx","../src/components/molecules/StreamConsole/StreamConsole.tsx","../src/components/organisms/Calendar/DayEventCard.tsx","../src/components/organisms/Calendar/exportEvents.ts","../src/components/organisms/Calendar/Calendar.tsx","../src/components/organisms/Navbar/Navbar.tsx","../src/components/organisms/charts/MoodChart/MoodChart.tsx","../src/components/organisms/charts/QuantifiableHabitsChart/QuantifiableHabitsChart.tsx","../src/components/organisms/charts/HabitTimeOfDayChart/HabitTimeOfDayChart.tsx","../src/components/organisms/charts/SleepChart/SleepChart.tsx","../src/components/organisms/charts/BooleansHeatmap/BooleansHeatmap.tsx","../src/components/organisms/charts/SunburstChart/SunburstChart.tsx","../src/components/organisms/charts/PieChart/PieChart.tsx","../src/components/organisms/ImageSlideshow/ImageSlideshow.tsx","../src/components/organisms/Table/Table.tsx","../src/components/organisms/ConfirmationModal/ConfirmationModal.tsx"],"sourcesContent":["export type SoundType = 'click' | 'hover' | 'success' | 'error' | 'warning' | 'toggle' | 'type' | 'delete';\n\nexport type SoundPack = 'digital' | 'fantasy' | 'retro' | 'minimal' | 'mechanical';\n\nexport interface SoundConfig {\n enabled?: boolean;\n volume?: number;\n soundPack?: SoundPack;\n sounds?: Partial<Record<SoundType, string>>;\n}\n\nexport interface ComponentSoundConfig {\n onClick?: string | boolean;\n onHover?: string | boolean;\n onError?: string | boolean;\n onSuccess?: string | boolean;\n}\n\ninterface SoundDefinition {\n tones: Array<{\n freq: number | (() => number);\n duration: number;\n type: OscillatorType;\n volume?: number;\n delay?: number;\n }>;\n}\n\ntype SoundPackDefinition = Record<SoundType | 'celebration' | 'milestone', SoundDefinition>;\n\nconst SOUND_PACKS: Record<SoundPack, SoundPackDefinition> = {\n digital: {\n click: {\n tones: [\n { freq: 440, duration: 0.1, type: 'sine', volume: 0.4 }\n ]\n },\n hover: {\n tones: [\n { freq: 880, duration: 0.04, type: 'sine', volume: 0.3 }\n ]\n },\n success: {\n tones: [\n { freq: 523.25, duration: 0.15, type: 'sine', delay: 0 },\n { freq: 659.25, duration: 0.15, type: 'sine', delay: 0.1 },\n { freq: 783.99, duration: 0.2, type: 'sine', delay: 0.2 }\n ]\n },\n error: {\n tones: [\n { freq: 329.63, duration: 0.2, type: 'sawtooth', volume: 0.4 },\n { freq: 246.94, duration: 0.25, type: 'sawtooth', volume: 0.3, delay: 0.15 }\n ]\n },\n warning: {\n tones: [\n { freq: 554.37, duration: 0.15, type: 'triangle' },\n { freq: 554.37, duration: 0.15, type: 'triangle', delay: 0.2 }\n ]\n },\n toggle: {\n tones: [\n { freq: 493.88, duration: 0.12, type: 'sine' },\n { freq: 587.33, duration: 0.1, type: 'sine', delay: 0.08 }\n ]\n },\n type: {\n tones: [\n { freq: () => 800 + Math.random() * 400, duration: 0.08, type: 'square', volume: 0.5 },\n { freq: 1600, duration: 0.03, type: 'sine', volume: 0.3, delay: 0.02 }\n ]\n },\n delete: {\n tones: [\n { freq: 350, duration: 0.08, type: 'triangle', volume: 0.3 }\n ]\n },\n celebration: {\n tones: [\n { freq: 523.25, duration: 0.2, type: 'sine', delay: 0 },\n { freq: 659.25, duration: 0.2, type: 'sine', delay: 0.15 },\n { freq: 783.99, duration: 0.2, type: 'sine', delay: 0.3 },\n { freq: 1046.5, duration: 0.3, type: 'sine', delay: 0.45 }\n ]\n },\n milestone: {\n tones: [\n { freq: 698.46, duration: 0.2, type: 'triangle' },\n { freq: 880, duration: 0.25, type: 'triangle', delay: 0.15 }\n ]\n }\n },\n \n fantasy: {\n click: {\n tones: [\n // Magical chime\n { freq: 1174.66, duration: 0.15, type: 'triangle', volume: 0.3 }, // D6\n { freq: 1567.98, duration: 0.1, type: 'sine', volume: 0.2, delay: 0.05 }, // G6\n { freq: 2093, duration: 0.08, type: 'sine', volume: 0.15, delay: 0.08 } // C7\n ]\n },\n hover: {\n tones: [\n // Fairy dust sprinkle\n { freq: 2637.02, duration: 0.03, type: 'sine', volume: 0.2 }, // E7\n { freq: 3135.96, duration: 0.025, type: 'sine', volume: 0.15, delay: 0.02 } // G7\n ]\n },\n success: {\n tones: [\n // Triumphant fanfare\n { freq: 523.25, duration: 0.2, type: 'triangle', delay: 0 }, // C5\n { freq: 659.25, duration: 0.2, type: 'triangle', delay: 0.15 }, // E5\n { freq: 783.99, duration: 0.2, type: 'triangle', delay: 0.3 }, // G5\n { freq: 1046.5, duration: 0.35, type: 'sine', delay: 0.45 }, // C6\n { freq: 1318.51, duration: 0.15, type: 'sine', volume: 0.3, delay: 0.6 } // E6 harmony\n ]\n },\n error: {\n tones: [\n // Dark spell fail\n { freq: 138.59, duration: 0.3, type: 'sawtooth', volume: 0.4 }, // C#3\n { freq: 103.83, duration: 0.4, type: 'sawtooth', volume: 0.3, delay: 0.2 }, // G#2\n { freq: 87.31, duration: 0.2, type: 'triangle', volume: 0.2, delay: 0.4 } // F2\n ]\n },\n warning: {\n tones: [\n // Mystical alert\n { freq: 466.16, duration: 0.2, type: 'triangle', volume: 0.5 }, // A#4\n { freq: 622.25, duration: 0.15, type: 'sine', delay: 0.15 }, // D#5\n { freq: 466.16, duration: 0.2, type: 'triangle', volume: 0.4, delay: 0.25 } // A#4\n ]\n },\n toggle: {\n tones: [\n // Magic switch\n { freq: 698.46, duration: 0.15, type: 'sine' }, // F5\n { freq: 1046.5, duration: 0.12, type: 'triangle', delay: 0.1 }, // C6\n { freq: 1396.91, duration: 0.08, type: 'sine', volume: 0.3, delay: 0.18 } // F6\n ]\n },\n type: {\n tones: [\n // Quill on parchment\n { freq: () => 2000 + Math.random() * 500, duration: 0.04, type: 'triangle', volume: 0.3 },\n { freq: () => 3000 + Math.random() * 200, duration: 0.02, type: 'sine', volume: 0.2, delay: 0.01 }\n ]\n },\n delete: {\n tones: [\n // Magic erase\n { freq: 880, duration: 0.1, type: 'triangle', volume: 0.3 },\n { freq: 440, duration: 0.08, type: 'sine', volume: 0.2, delay: 0.05 }\n ]\n },\n celebration: {\n tones: [\n // Victory fanfare\n { freq: 392, duration: 0.25, type: 'triangle', delay: 0 }, // G4\n { freq: 523.25, duration: 0.25, type: 'triangle', delay: 0.2 }, // C5\n { freq: 659.25, duration: 0.25, type: 'triangle', delay: 0.4 }, // E5\n { freq: 783.99, duration: 0.25, type: 'sine', delay: 0.6 }, // G5\n { freq: 1046.5, duration: 0.4, type: 'sine', delay: 0.8 }, // C6\n { freq: 1318.51, duration: 0.2, type: 'sine', volume: 0.4, delay: 1.0 } // E6\n ]\n },\n milestone: {\n tones: [\n // Achievement unlocked\n { freq: 523.25, duration: 0.2, type: 'triangle' }, // C5\n { freq: 783.99, duration: 0.2, type: 'triangle', delay: 0.15 }, // G5\n { freq: 1046.5, duration: 0.3, type: 'sine', delay: 0.3 } // C6\n ]\n }\n },\n \n retro: {\n click: {\n tones: [\n // 8-bit beep\n { freq: 800, duration: 0.05, type: 'square', volume: 0.4 },\n { freq: 400, duration: 0.03, type: 'square', volume: 0.3, delay: 0.03 }\n ]\n },\n hover: {\n tones: [\n { freq: 1200, duration: 0.03, type: 'square', volume: 0.2 }\n ]\n },\n success: {\n tones: [\n // Classic level up\n { freq: 440, duration: 0.1, type: 'square', delay: 0 },\n { freq: 554.37, duration: 0.1, type: 'square', delay: 0.1 },\n { freq: 659.25, duration: 0.1, type: 'square', delay: 0.2 },\n { freq: 880, duration: 0.2, type: 'square', delay: 0.3 }\n ]\n },\n error: {\n tones: [\n // Retro fail\n { freq: 200, duration: 0.3, type: 'square', volume: 0.5 },\n { freq: 150, duration: 0.4, type: 'square', volume: 0.4, delay: 0.2 }\n ]\n },\n warning: {\n tones: [\n { freq: 600, duration: 0.1, type: 'square' },\n { freq: 600, duration: 0.1, type: 'square', delay: 0.15 },\n { freq: 600, duration: 0.1, type: 'square', delay: 0.3 }\n ]\n },\n toggle: {\n tones: [\n { freq: 400, duration: 0.08, type: 'square' },\n { freq: 800, duration: 0.08, type: 'square', delay: 0.06 }\n ]\n },\n type: {\n tones: [\n { freq: () => 500 + Math.random() * 100, duration: 0.04, type: 'square', volume: 0.3 }\n ]\n },\n delete: {\n tones: [\n { freq: 300, duration: 0.06, type: 'square', volume: 0.3 }\n ]\n },\n celebration: {\n tones: [\n // Victory jingle\n { freq: 659.25, duration: 0.1, type: 'square', delay: 0 },\n { freq: 783.99, duration: 0.1, type: 'square', delay: 0.1 },\n { freq: 987.77, duration: 0.1, type: 'square', delay: 0.2 },\n { freq: 1318.51, duration: 0.3, type: 'square', delay: 0.3 }\n ]\n },\n milestone: {\n tones: [\n { freq: 523.25, duration: 0.15, type: 'square' },\n { freq: 1046.5, duration: 0.2, type: 'square', delay: 0.1 }\n ]\n }\n },\n \n minimal: {\n click: {\n tones: [\n { freq: 1000, duration: 0.03, type: 'sine', volume: 0.3 }\n ]\n },\n hover: {\n tones: [\n { freq: 1500, duration: 0.02, type: 'sine', volume: 0.15 }\n ]\n },\n success: {\n tones: [\n { freq: 800, duration: 0.15, type: 'sine', volume: 0.3 },\n { freq: 1200, duration: 0.1, type: 'sine', volume: 0.2, delay: 0.1 }\n ]\n },\n error: {\n tones: [\n { freq: 300, duration: 0.2, type: 'sine', volume: 0.3 }\n ]\n },\n warning: {\n tones: [\n { freq: 600, duration: 0.15, type: 'sine', volume: 0.35 }\n ]\n },\n toggle: {\n tones: [\n { freq: 700, duration: 0.08, type: 'sine', volume: 0.3 }\n ]\n },\n type: {\n tones: [\n { freq: 1800, duration: 0.02, type: 'sine', volume: 0.2 }\n ]\n },\n delete: {\n tones: [\n { freq: 400, duration: 0.05, type: 'sine', volume: 0.25 }\n ]\n },\n celebration: {\n tones: [\n { freq: 800, duration: 0.2, type: 'sine', volume: 0.3 },\n { freq: 1200, duration: 0.2, type: 'sine', volume: 0.25, delay: 0.15 }\n ]\n },\n milestone: {\n tones: [\n { freq: 1000, duration: 0.2, type: 'sine', volume: 0.3 }\n ]\n }\n },\n \n mechanical: {\n click: {\n tones: [\n // Mechanical keyboard click\n { freq: 4000, duration: 0.01, type: 'square', volume: 0.3 },\n { freq: 800, duration: 0.04, type: 'sawtooth', volume: 0.4, delay: 0.01 },\n { freq: 200, duration: 0.03, type: 'triangle', volume: 0.2, delay: 0.02 }\n ]\n },\n hover: {\n tones: [\n { freq: 3000, duration: 0.02, type: 'sawtooth', volume: 0.1 }\n ]\n },\n success: {\n tones: [\n // Gear engagement\n { freq: 200, duration: 0.05, type: 'sawtooth', delay: 0 },\n { freq: 400, duration: 0.05, type: 'sawtooth', delay: 0.05 },\n { freq: 600, duration: 0.05, type: 'sawtooth', delay: 0.1 },\n { freq: 800, duration: 0.15, type: 'triangle', delay: 0.15 }\n ]\n },\n error: {\n tones: [\n // Grinding gears\n { freq: 150, duration: 0.2, type: 'sawtooth', volume: 0.5 },\n { freq: 100, duration: 0.15, type: 'square', volume: 0.3, delay: 0.1 },\n { freq: 80, duration: 0.1, type: 'sawtooth', volume: 0.2, delay: 0.2 }\n ]\n },\n warning: {\n tones: [\n // Steam whistle\n { freq: 800, duration: 0.3, type: 'sawtooth', volume: 0.4 },\n { freq: 1200, duration: 0.2, type: 'triangle', volume: 0.3, delay: 0 }\n ]\n },\n toggle: {\n tones: [\n // Switch flip\n { freq: 600, duration: 0.02, type: 'square', volume: 0.5 },\n { freq: 300, duration: 0.05, type: 'triangle', delay: 0.02 },\n { freq: 150, duration: 0.03, type: 'sawtooth', volume: 0.3, delay: 0.05 }\n ]\n },\n type: {\n tones: [\n // Typewriter key\n { freq: () => 3000 + Math.random() * 1000, duration: 0.01, type: 'square', volume: 0.4 },\n { freq: () => 400 + Math.random() * 200, duration: 0.03, type: 'sawtooth', volume: 0.3, delay: 0.01 }\n ]\n },\n delete: {\n tones: [\n { freq: 250, duration: 0.08, type: 'sawtooth', volume: 0.35 }\n ]\n },\n celebration: {\n tones: [\n // Machine startup\n { freq: 100, duration: 0.1, type: 'sawtooth', delay: 0 },\n { freq: 200, duration: 0.1, type: 'sawtooth', delay: 0.1 },\n { freq: 400, duration: 0.1, type: 'sawtooth', delay: 0.2 },\n { freq: 800, duration: 0.1, type: 'triangle', delay: 0.3 },\n { freq: 1200, duration: 0.2, type: 'sine', delay: 0.4 }\n ]\n },\n milestone: {\n tones: [\n // Pneumatic hiss\n { freq: 3000, duration: 0.05, type: 'sawtooth', volume: 0.3 },\n { freq: 1000, duration: 0.15, type: 'triangle', delay: 0.05 },\n { freq: 500, duration: 0.1, type: 'sine', delay: 0.15 }\n ]\n }\n }\n};\n\nclass SoundManager {\n private static instance: SoundManager;\n private audioContext: AudioContext | null = null;\n private config: SoundConfig = {\n enabled: false,\n volume: 0.5,\n soundPack: 'digital'\n };\n\n private constructor() {\n this.init();\n }\n\n static getInstance(): SoundManager {\n if (!SoundManager.instance) {\n SoundManager.instance = new SoundManager();\n }\n return SoundManager.instance;\n }\n\n private init() {\n try {\n // AudioContext will be created on first user interaction\n this.audioContext = null;\n } catch (error) {\n console.warn('Audio not supported:', error);\n this.config.enabled = false;\n }\n }\n\n private ensureAudioContext() {\n if (!this.audioContext && this.config.enabled) {\n try {\n this.audioContext = new (window.AudioContext || (window as unknown as { webkitAudioContext: typeof AudioContext }).webkitAudioContext)();\n } catch (error) {\n console.warn('Could not create audio context:', error);\n this.config.enabled = false;\n }\n }\n }\n\n private playTone(\n frequency: number, \n duration: number, \n type: OscillatorType = 'sine', \n volume?: number,\n delay: number = 0\n ) {\n if (!this.config.enabled) return;\n \n this.ensureAudioContext();\n if (!this.audioContext) return;\n\n const finalVolume = (volume ?? this.config.volume ?? 0.5) * 0.2; // Scale down for comfort\n\n try {\n const oscillator = this.audioContext.createOscillator();\n const gainNode = this.audioContext.createGain();\n\n oscillator.connect(gainNode);\n gainNode.connect(this.audioContext.destination);\n\n oscillator.frequency.value = frequency;\n oscillator.type = type;\n\n const startTime = this.audioContext.currentTime + delay;\n \n gainNode.gain.setValueAtTime(0, startTime);\n gainNode.gain.linearRampToValueAtTime(finalVolume, startTime + 0.01);\n gainNode.gain.exponentialRampToValueAtTime(0.001, startTime + duration);\n\n oscillator.start(startTime);\n oscillator.stop(startTime + duration);\n } catch (error) {\n console.debug('Could not play sound:', error);\n }\n }\n\n private playFromDefinition(definition: SoundDefinition) {\n definition.tones.forEach(tone => {\n const frequency = typeof tone.freq === 'function' ? tone.freq() : tone.freq;\n this.playTone(\n frequency,\n tone.duration,\n tone.type,\n tone.volume,\n tone.delay || 0\n );\n });\n }\n\n play(soundType: SoundType | string): void {\n if (!this.config.enabled) return;\n\n const pack = SOUND_PACKS[this.config.soundPack || 'digital'];\n const soundDef = pack[soundType as keyof SoundPackDefinition];\n \n if (soundDef) {\n this.playFromDefinition(soundDef);\n } else {\n // Fallback to digital pack for unknown sounds\n const digitalSound = SOUND_PACKS.digital[soundType as keyof SoundPackDefinition];\n if (digitalSound) {\n this.playFromDefinition(digitalSound);\n }\n }\n }\n\n // Special effect sounds\n celebration(): void {\n if (!this.config.enabled) return;\n const pack = SOUND_PACKS[this.config.soundPack || 'digital'];\n this.playFromDefinition(pack.celebration);\n }\n\n milestone(): void {\n if (!this.config.enabled) return;\n const pack = SOUND_PACKS[this.config.soundPack || 'digital'];\n this.playFromDefinition(pack.milestone);\n }\n\n configure(config: SoundConfig): void {\n this.config = { ...this.config, ...config };\n }\n\n getConfig(): SoundConfig {\n return this.config;\n }\n\n setVolume(volume: number): void {\n this.config.volume = Math.max(0, Math.min(1, volume));\n }\n\n setEnabled(enabled: boolean): void {\n this.config.enabled = enabled;\n if (enabled) {\n this.ensureAudioContext();\n }\n }\n\n setSoundPack(pack: SoundPack): void {\n this.config.soundPack = pack;\n }\n\n getSoundPack(): SoundPack {\n return this.config.soundPack || 'digital';\n }\n\n isEnabled(): boolean {\n return this.config.enabled || false;\n }\n\n getAvailablePacks(): SoundPack[] {\n return ['digital', 'fantasy', 'retro', 'minimal', 'mechanical'];\n }\n}\n\nexport const soundManager = SoundManager.getInstance();","import { useCallback, useEffect, useRef } from 'react';\nimport { soundManager, SoundType, ComponentSoundConfig } from './soundUtils';\n\nexport type { ComponentSoundConfig, SoundType } from './soundUtils';\n\nexport interface UseSoundOptions {\n enabled?: boolean;\n volume?: number;\n debounceMs?: number;\n}\n\nexport interface UseSoundReturn {\n playSound: (soundType: SoundType | string) => void;\n isEnabled: () => boolean;\n setEnabled: (enabled: boolean) => void;\n setVolume: (volume: number) => void;\n}\n\nexport function useSound(options?: UseSoundOptions): UseSoundReturn {\n const lastPlayedRef = useRef<{ [key: string]: number }>({});\n const debounceMs = options?.debounceMs || 50;\n\n useEffect(() => {\n if (options?.enabled !== undefined) {\n soundManager.setEnabled(options.enabled);\n }\n if (options?.volume !== undefined) {\n soundManager.setVolume(options.volume);\n }\n }, [options?.enabled, options?.volume]);\n\n const playSound = useCallback((soundType: SoundType | string) => {\n const now = Date.now();\n const lastPlayed = lastPlayedRef.current[soundType] || 0;\n \n if (now - lastPlayed > debounceMs) {\n soundManager.play(soundType);\n lastPlayedRef.current[soundType] = now;\n }\n }, [debounceMs]);\n\n const isEnabled = useCallback(() => soundManager.isEnabled(), []);\n const setEnabled = useCallback((enabled: boolean) => soundManager.setEnabled(enabled), []);\n const setVolume = useCallback((volume: number) => soundManager.setVolume(volume), []);\n\n return {\n playSound,\n isEnabled,\n setEnabled,\n setVolume\n };\n}\n\nexport function useComponentSound(config?: ComponentSoundConfig, options?: UseSoundOptions): {\n handlers: {\n onClick?: () => void;\n onMouseEnter?: () => void;\n };\n playSound: (soundType: SoundType | string) => void;\n} {\n const { playSound } = useSound(options);\n\n const handlers: {\n onClick?: () => void;\n onMouseEnter?: () => void;\n } = {};\n\n if (config?.onClick) {\n handlers.onClick = () => {\n const sound = typeof config.onClick === 'string' ? config.onClick : 'click';\n playSound(sound);\n };\n }\n\n if (config?.onHover) {\n handlers.onMouseEnter = () => {\n const sound = typeof config.onHover === 'string' ? config.onHover : 'hover';\n playSound(sound);\n };\n }\n\n return { handlers, playSound };\n}","import React, { ButtonHTMLAttributes, ReactNode } from 'react';\nimport { motion, HTMLMotionProps } from 'framer-motion';\nimport styles from './Button.module.css';\nimport { useComponentSound, ComponentSoundConfig } from '../../../utils/useSound';\n\n/**\n * Props for the Button component\n * @interface ButtonProps\n */\nexport interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onAnimationStart' | 'onDragStart' | 'onDragEnd' | 'onDrag'> {\n\t/** Visual style variant of the button */\n\tvariant?: 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger' | 'icon';\n\t/** Size of the button */\n\tsize?: 'small' | 'medium' | 'large';\n\t/** Whether the button should take full width of its container */\n\tfullWidth?: boolean;\n\t/** Whether the button is in loading state (shows spinner, disabled interaction) */\n\tloading?: boolean;\n\t/** Icon to display on the left side of the button text */\n\ticonLeft?: ReactNode;\n\t/** Icon to display on the right side of the button text */\n\ticonRight?: ReactNode;\n\t/** Button content (text, elements, etc.) */\n\tchildren?: ReactNode;\n\t/** Additional Framer Motion props for custom animations */\n\tmotionProps?: HTMLMotionProps<\"button\">;\n\t/** Optional sound configuration for button interactions */\n\tsoundConfig?: ComponentSoundConfig;\n}\n\n/**\n * Button Component\n * \n * @component\n * @description\n * A versatile, animated button component built with Framer Motion. Supports multiple \n * variants, sizes, loading states, and icons. Includes smooth hover/tap animations\n * and full accessibility support.\n * \n * @example\n * // Basic usage\n * <Button onClick={handleClick}>Click me</Button>\n * \n * @example\n * // With variant and size\n * <Button variant=\"secondary\" size=\"large\">\n * Large Secondary Button\n * </Button>\n * \n * @example\n * // With icons and loading state\n * <Button \n * variant=\"primary\" \n * iconLeft={<Icon />}\n * loading={isLoading}\n * onClick={handleSubmit}\n * >\n * Submit Form\n * </Button>\n * \n * @example\n * // Full width danger button\n * <Button variant=\"danger\" fullWidth>\n * Delete Account\n * </Button>\n * \n * @param {ButtonProps} props - The props for the Button component\n * @returns {JSX.Element} The rendered Button component\n */\nexport const Button: React.FC<ButtonProps> = ({\n\tvariant = 'primary',\n\tsize = 'medium',\n\tfullWidth = false,\n\tloading = false,\n\ticonLeft,\n\ticonRight,\n\tchildren,\n\tclassName = '',\n\tdisabled,\n\tmotionProps,\n\tsoundConfig,\n\tonClick,\n\tonMouseEnter,\n\tonFocus,\n\t...rest\n}) => {\n\tconst { handlers } = useComponentSound(soundConfig);\n\n\tconst isIcon = variant === 'icon';\n\n\tconst buttonClasses = [\n\t\tstyles.button,\n\t\tstyles[variant],\n\t\t!isIcon && styles[size],\n\t\tfullWidth && styles.fullWidth,\n\t\tloading && styles.loading,\n\t\tclassName\n\t].filter(Boolean).join(' ');\n\n\tconst handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n\t\thandlers.onClick?.();\n\t\tonClick?.(e);\n\t};\n\n\tconst handleMouseEnter = (e: React.MouseEvent<HTMLButtonElement>) => {\n\t\thandlers.onMouseEnter?.();\n\t\tonMouseEnter?.(e);\n\t};\n\n\treturn (\n\t\t<motion.button\n\t\t\tclassName={buttonClasses}\n\t\t\tdisabled={disabled || loading}\n\t\t\twhileHover={isIcon ? undefined : { scale: disabled || loading ? 1 : 1.02 }}\n\t\t\twhileTap={{ scale: disabled || loading ? 1 : (isIcon ? 0.9 : 0.98) }}\n\t\t\ttransition={{ type: \"spring\", stiffness: 400, damping: 17 }}\n\t\t\tonClick={handleClick}\n\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\tonFocus={onFocus}\n\t\t\t{...motionProps}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{loading && <span className={styles.spinner} />}\n\t\t\t{iconLeft && <span className={styles.iconLeft}>{iconLeft}</span>}\n\t\t\t{children}\n\t\t\t{iconRight && <span className={styles.iconRight}>{iconRight}</span>}\n\t\t</motion.button>\n\t);\n};","import React, { HTMLAttributes, ReactNode, useState } from 'react';\nimport { motion, HTMLMotionProps, AnimatePresence } from 'framer-motion';\nimport styles from './Card.module.css';\n\n/**\n * Props for the Card component\n * @interface CardProps\n */\nexport interface CardProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onAnimationStart' | 'onDragStart' | 'onDragEnd' | 'onDrag'> {\n\t/** Visual style variant of the card */\n\tvariant?: 'elevated' | 'outlined' | 'flat' | 'glass';\n\t/** Whether the card should have hover animations */\n\thoverable?: boolean;\n\t/** Whether the card should be clickable (adds pointer cursor and click handler) */\n\tclickable?: boolean;\n\t/** Whether the card content should have padding */\n\tpadding?: boolean;\n\t/** URL for an optional image at the top of the card */\n\timage?: string;\n\t/** Alt text for the card image */\n\timageAlt?: string;\n\t/** Title text for the card header */\n\ttitle?: string;\n\t/** Subtitle text for the card header */\n\tsubtitle?: string;\n\t/** Custom header content (overrides title/subtitle) */\n\theader?: ReactNode;\n\t/** Footer content for the bottom of the card */\n\tfooter?: ReactNode;\n\t/** Main content of the card */\n\tchildren?: ReactNode;\n\t/** Whether the card is expandable/collapsible */\n\texpandable?: boolean;\n\t/** Initial expanded state (default: false) */\n\tdefaultExpanded?: boolean;\n\t/** Controlled expanded state */\n\texpanded?: boolean;\n\t/** Callback when expand state changes */\n\tonExpandChange?: (expanded: boolean) => void;\n\t/** Additional Framer Motion props for custom animations */\n\tmotionProps?: HTMLMotionProps<\"div\">;\n}\n\n/**\n * Card Component\n * \n * @component\n * @description\n * A flexible container component that can display content in a structured card layout.\n * Supports multiple visual styles, optional images, headers, footers, and smooth animations\n * powered by Framer Motion.\n * \n * @example\n * // Basic card with content\n * <Card>\n * <p>This is card content</p>\n * </Card>\n * \n * @example\n * // Card with title and subtitle\n * <Card \n * title=\"Card Title\" \n * subtitle=\"Card subtitle\" \n * variant=\"outlined\"\n * >\n * Card body content here\n * </Card>\n * \n * @example\n * // Interactive card with image\n * <Card \n * image=\"/path/to/image.jpg\"\n * imageAlt=\"Description\"\n * hoverable\n * clickable\n * onClick={handleCardClick}\n * >\n * <h4>Interactive Card</h4>\n * <p>Click me!</p>\n * </Card>\n * \n * @example\n * // Card with custom header and footer\n * <Card \n * header={<CustomHeader />}\n * footer={<CustomFooter />}\n * variant=\"flat\"\n * >\n * Main content area\n * </Card>\n * \n * @param {CardProps} props - The props for the Card component\n * @returns {JSX.Element} The rendered Card component\n */\nexport const Card: React.FC<CardProps> = ({\n\tvariant = 'elevated',\n\thoverable = false,\n\tclickable = false,\n\tpadding = true,\n\timage,\n\timageAlt = '',\n\ttitle,\n\tsubtitle,\n\theader,\n\tfooter,\n\tchildren,\n\texpandable = false,\n\tdefaultExpanded = false,\n\texpanded: controlledExpanded,\n\tonExpandChange,\n\tclassName = '',\n\tonClick,\n\tmotionProps,\n\t...rest\n}) => {\n\t// State management for expandable cards\n\tconst [internalExpanded, setInternalExpanded] = useState(defaultExpanded);\n\tconst isExpanded = controlledExpanded !== undefined ? controlledExpanded : internalExpanded;\n\t\n\tconst handleToggleExpand = () => {\n\t\tconst newExpanded = !isExpanded;\n\t\tif (controlledExpanded === undefined) {\n\t\t\tsetInternalExpanded(newExpanded);\n\t\t}\n\t\tonExpandChange?.(newExpanded);\n\t};\n\n\tconst cardClasses = [\n\t\tstyles.card,\n\t\tstyles[variant],\n\t\thoverable && styles.hoverable,\n\t\tclickable && styles.clickable,\n\t\t!padding && styles.noPadding,\n\t\texpandable && styles.expandable,\n\t\tclassName\n\t].filter(Boolean).join(' ');\n\n\tconst renderHeader = () => {\n\t\tif (header) {\n\t\t\treturn (\n\t\t\t\t<div className={styles.header}>\n\t\t\t\t\t<div className={styles.headerContent}>\n\t\t\t\t\t\t{header}\n\t\t\t\t\t</div>\n\t\t\t\t\t{expandable && (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclassName={styles.expandButton}\n\t\t\t\t\t\t\tonClick={handleToggleExpand}\n\t\t\t\t\t\t\taria-label={isExpanded ? 'Collapse card' : 'Expand card'}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\twidth=\"16\"\n\t\t\t\t\t\t\t\theight=\"16\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\tclassName={styles.expandIcon}\n\t\t\t\t\t\t\t\tstyle={{ transform: isExpanded ? 'rotate(180deg)' : 'rotate(0deg)' }}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<path d=\"M6 9l6 6 6-6\" />\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\t\t\n\t\tif (title || subtitle) {\n\t\t\treturn (\n\t\t\t\t<div className={styles.header}>\n\t\t\t\t\t<div className={styles.headerContent}>\n\t\t\t\t\t\t{title && <h3 className={styles.title}>{title}</h3>}\n\t\t\t\t\t\t{subtitle && <p className={styles.subtitle}>{subtitle}</p>}\n\t\t\t\t\t</div>\n\t\t\t\t\t{expandable && (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclassName={styles.expandButton}\n\t\t\t\t\t\t\tonClick={handleToggleExpand}\n\t\t\t\t\t\t\taria-label={isExpanded ? 'Collapse card' : 'Expand card'}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\twidth=\"16\"\n\t\t\t\t\t\t\t\theight=\"16\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\tclassName={styles.expandIcon}\n\t\t\t\t\t\t\t\tstyle={{ transform: isExpanded ? 'rotate(180deg)' : 'rotate(0deg)' }}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<path d=\"M6 9l6 6 6-6\" />\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\t\t\n\t\treturn null;\n\t};\n\n\tconst cardContent = (\n\t\t<>\n\t\t\t{image && (\n\t\t\t\t<div className={styles.imageContainer}>\n\t\t\t\t\t<img src={image} alt={imageAlt} className={styles.image} />\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{renderHeader()}\n\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t{(!expandable || isExpanded) && (\n\t\t\t\t\t<motion.div\n\t\t\t\t\t\tkey=\"content\"\n\t\t\t\t\t\tinitial={expandable ? { height: 0, opacity: 0 } : undefined}\n\t\t\t\t\t\tanimate={expandable ? { height: 'auto', opacity: 1 } : undefined}\n\t\t\t\t\t\texit={expandable ? { height: 0, opacity: 0 } : undefined}\n\t\t\t\t\t\ttransition={{ duration: 0.3, ease: \"easeInOut\" }}\n\t\t\t\t\t\tclassName={styles.expandableContent}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children && (\n\t\t\t\t\t\t\t<div className={padding ? styles.body : undefined}>\n\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{footer && <div className={styles.footer}>{footer}</div>}\n\t\t\t\t\t</motion.div>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t</>\n\t);\n\n\treturn (\n\t\t<motion.div\n\t\t\tclassName={cardClasses}\n\t\t\tonClick={clickable ? onClick : undefined}\n\t\t\twhileHover={hoverable ? { y: -4 } : undefined}\n\t\t\ttransition={{ type: \"spring\", stiffness: 400, damping: 17 }}\n\t\t\t{...motionProps}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{cardContent}\n\t\t</motion.div>\n\t);\n};","import React, { ReactNode } from 'react';\nimport styles from './EmptyState.module.css';\n\n/**\n * Props for the EmptyState component\n * @interface EmptyStateProps\n */\nexport interface EmptyStateProps {\n\t/** Optional icon (usually a lucide-react icon) rendered above the message */\n\ticon?: ReactNode;\n\t/** Optional heading shown above the message */\n\ttitle?: string;\n\t/** The main message describing why the state is empty and what to do next */\n\tmessage: string;\n\t/** Optional action slot (e.g. a Button CTA) rendered under the message */\n\taction?: ReactNode;\n\t/** Size variant — `compact` fits inline slots, `default` fills a panel, `large` fills the viewport */\n\tsize?: 'compact' | 'default' | 'large';\n}\n\n/**\n * EmptyState Component\n *\n * @component\n * @description\n * A composable placeholder for empty lists, empty sidebars, and\n * \"nothing to show\" panels. Renders an icon, optional title, message,\n * and optional action CTA in a vertically-centered stack. Pure layout —\n * no fetching, no state.\n *\n * @example\n * // Minimal: just a message\n * <EmptyState message=\"No documents yet.\" />\n *\n * @example\n * // With an icon\n * import { FileText } from 'lucide-react';\n * <EmptyState\n * icon={<FileText size={32} />}\n * message=\"Select a document from the sidebar to start editing.\"\n * />\n *\n * @example\n * // Full: icon + title + message + action\n * <EmptyState\n * icon={<FolderKanban size={40} />}\n * title=\"No projects\"\n * message=\"Create your first project to get started.\"\n * action={<Button onClick={handleCreate}>New project</Button>}\n * />\n *\n * @param {EmptyStateProps} props - The props for the EmptyState component\n * @returns {JSX.Element} The rendered EmptyState component\n */\nexport const EmptyState: React.FC<EmptyStateProps> = ({\n\ticon,\n\ttitle,\n\tmessage,\n\taction,\n\tsize = 'default',\n}) => {\n\tconst wrapperClass = [styles.wrapper, styles[size]].filter(Boolean).join(' ');\n\treturn (\n\t\t<div className={wrapperClass}>\n\t\t\t{icon && <div className={styles.icon}>{icon}</div>}\n\t\t\t{title && <h3 className={styles.title}>{title}</h3>}\n\t\t\t<p className={styles.message}>{message}</p>\n\t\t\t{action && <div className={styles.action}>{action}</div>}\n\t\t</div>\n\t);\n};\n","import React, { ReactNode, useEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { motion, AnimatePresence, useDragControls } from 'framer-motion';\nimport { X } from 'lucide-react';\nimport styles from './Modal.module.css';\n\n/**\n * Props for the Modal component\n * @interface ModalProps\n */\nexport interface ModalProps {\n\t/** Whether the modal is currently visible */\n\topen: boolean;\n\t/** Title shown in the modal header */\n\ttitle: string;\n\t/** Callback fired when the user requests to close the modal (backdrop click, Escape, or X button) */\n\tonClose: () => void;\n\t/** Modal body content */\n\tchildren: ReactNode;\n\t/** Width variant. `default` fits typical forms; `compact` is narrower; `wide` is for editors */\n\tsize?: 'default' | 'compact' | 'wide';\n\t/** Optional slot rendered in the header next to the close button (e.g. action buttons) */\n\tactions?: ReactNode;\n\t/** When true, the body is padded; when false, the body is flush to the edges */\n\tpadding?: boolean;\n\t/** How the modal renders on narrow viewports. `sheet` slides from the bottom; `center` stays centered. Defaults to `sheet`. */\n\tmobileVariant?: 'sheet' | 'center';\n\t/** When the modal is in sheet mode on mobile, allow the user to swipe the header down to dismiss. Defaults to true. */\n\tdraggable?: boolean;\n}\n\nconst MOBILE_BREAKPOINT = '(max-width: 640px)';\n\nconst useIsMobile = (): boolean => {\n\tconst [isMobile, setIsMobile] = useState(() => {\n\t\tif (typeof window === 'undefined') return false;\n\t\treturn window.matchMedia(MOBILE_BREAKPOINT).matches;\n\t});\n\n\tuseEffect(() => {\n\t\tif (typeof window === 'undefined') return;\n\t\tconst mq = window.matchMedia(MOBILE_BREAKPOINT);\n\t\tconst onChange = (e: MediaQueryListEvent) => setIsMobile(e.matches);\n\t\tmq.addEventListener('change', onChange);\n\t\treturn () => mq.removeEventListener('change', onChange);\n\t}, []);\n\n\treturn isMobile;\n};\n\nexport const Modal: React.FC<ModalProps> = ({\n\topen,\n\ttitle,\n\tonClose,\n\tchildren,\n\tsize = 'default',\n\tactions,\n\tpadding = true,\n\tmobileVariant = 'sheet',\n\tdraggable = true,\n}) => {\n\tconst isMobile = useIsMobile();\n\tconst dragControls = useDragControls();\n\tconst headerRef = useRef<HTMLDivElement>(null);\n\n\tuseEffect(() => {\n\t\tif (!open) return;\n\t\tconst onKey = (e: KeyboardEvent) => {\n\t\t\tif (e.key === 'Escape') onClose();\n\t\t};\n\t\tdocument.addEventListener('keydown', onKey);\n\t\treturn () => document.removeEventListener('keydown', onKey);\n\t}, [open, onClose]);\n\n\tif (typeof document === 'undefined') return null;\n\n\tconst isSheet = mobileVariant === 'sheet' && isMobile;\n\tconst isDraggable = isSheet && draggable;\n\n\tconst backdropClass = [styles.backdrop, isSheet && styles.backdropSheet]\n\t\t.filter(Boolean)\n\t\t.join(' ');\n\n\tconst dialogClass = [\n\t\tstyles.dialog,\n\t\tsize === 'compact' && styles.dialogCompact,\n\t\tsize === 'wide' && styles.dialogWide,\n\t\tisSheet && styles.dialogSheet,\n\t]\n\t\t.filter(Boolean)\n\t\t.join(' ');\n\n\tconst enteringAnimation = isSheet\n\t\t? { initial: { y: '100%' }, animate: { y: 0 }, exit: { y: '100%' } }\n\t\t: {\n\t\t\t\tinitial: { opacity: 0, scale: 0.96, y: 8 },\n\t\t\t\tanimate: { opacity: 1, scale: 1, y: 0 },\n\t\t\t\texit: { opacity: 0, scale: 0.96, y: 8 },\n\t\t\t};\n\n\treturn createPortal(\n\t\t<AnimatePresence>\n\t\t\t{open && (\n\t\t\t\t<motion.div\n\t\t\t\t\tclassName={backdropClass}\n\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\ttransition={{ duration: 0.15 }}\n\t\t\t\t\tonClick={onClose}\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t>\n\t\t\t\t\t<motion.div\n\t\t\t\t\t\tclassName={dialogClass}\n\t\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\t\taria-label={title}\n\t\t\t\t\t\t{...enteringAnimation}\n\t\t\t\t\t\ttransition={\n\t\t\t\t\t\t\tisSheet\n\t\t\t\t\t\t\t\t? { type: 'spring', stiffness: 320, damping: 32 }\n\t\t\t\t\t\t\t\t: { duration: 0.15, ease: 'easeOut' }\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\t\t\tdrag={isDraggable ? 'y' : false}\n\t\t\t\t\t\tdragControls={isDraggable ? dragControls : undefined}\n\t\t\t\t\t\tdragConstraints={{ top: 0 }}\n\t\t\t\t\t\tdragElastic={{ top: 0, bottom: 0.3 }}\n\t\t\t\t\t\tdragListener={false}\n\t\t\t\t\t\tonDragEnd={(_, info) => {\n\t\t\t\t\t\t\tif (info.offset.y > 80) onClose();\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isSheet && <div className={styles.grabBar} />}\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tref={headerRef}\n\t\t\t\t\t\t\tclassName={styles.header}\n\t\t\t\t\t\t\tonPointerDown={(e) => {\n\t\t\t\t\t\t\t\tif (!isDraggable) return;\n\t\t\t\t\t\t\t\tif ((e.target as HTMLElement).closest('button')) return;\n\t\t\t\t\t\t\t\tdragControls.start(e);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span className={styles.title}>{title}</span>\n\t\t\t\t\t\t\t{actions && <div className={styles.headerActions}>{actions}</div>}\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tclassName={styles.closeButton}\n\t\t\t\t\t\t\t\tonClick={onClose}\n\t\t\t\t\t\t\t\taria-label=\"Close modal\"\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<X size={16} />\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className={padding ? styles.body : styles.bodyFlush}>{children}</div>\n\t\t\t\t\t</motion.div>\n\t\t\t\t</motion.div>\n\t\t\t)}\n\t\t</AnimatePresence>,\n\t\tdocument.body\n\t);\n};\n","import React, { useRef, useEffect } from 'react';\nimport styles from './Checkbox.module.css';\nimport { useComponentSound, ComponentSoundConfig } from '../../../utils/useSound';\n\n/**\n * Props for the Checkbox component\n * @interface CheckboxProps\n */\nexport interface CheckboxProps {\n /** Whether the checkbox is checked */\n checked: boolean;\n /** Callback fired when checkbox state changes */\n onChange: (checked: boolean) => void;\n /** Label text to display next to the checkbox */\n label?: string;\n /** Whether the checkbox is disabled */\n disabled?: boolean;\n /** Whether the checkbox is in indeterminate state (partial selection) */\n indeterminate?: boolean;\n /** HTML id attribute for the checkbox input */\n id?: string;\n /** HTML name attribute for form submission */\n name?: string;\n /** HTML value attribute for form submission */\n value?: string;\n /** Optional sound configuration for checkbox interactions */\n soundConfig?: ComponentSoundConfig;\n}\n\n/**\n * Checkbox component - Modern interactive checkbox with animations\n *\n * @component\n * @description\n * A customizable checkbox component with smooth animations, hover effects,\n * and support for checked, unchecked, and indeterminate states. Features\n * gradient backgrounds, bounce animations, and accessible focus states.\n *\n * @example\n * // Basic usage\n * <Checkbox\n * checked={isChecked}\n * onChange={setIsChecked}\n * label=\"Accept terms and conditions\"\n * />\n *\n * @example\n * // Indeterminate state\n * <Checkbox\n * checked={false}\n * indeterminate={true}\n * onChange={handleChange}\n * label=\"Select all\"\n * />\n *\n * @example\n * // Disabled state\n * <Checkbox\n * checked={true}\n * onChange={handleChange}\n * label=\"Premium feature\"\n * disabled={true}\n * />\n */\nexport const Checkbox: React.FC<CheckboxProps> = ({\n checked,\n onChange,\n label,\n disabled = false,\n indeterminate = false,\n id,\n name,\n value,\n soundConfig\n}) => {\n const checkboxRef = useRef<HTMLInputElement>(null);\n const { playSound } = useComponentSound(soundConfig);\n\n useEffect(() => {\n if (checkboxRef.current) {\n checkboxRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n return (\n <label className={styles.checkboxLabel}>\n <input\n ref={checkboxRef}\n type=\"checkbox\"\n checked={checked}\n onChange={(e) => {\n const isChecked = e.target.checked;\n onChange(isChecked);\n if (soundConfig?.onClick !== false) {\n playSound('toggle');\n }\n }}\n className={styles.checkbox}\n disabled={disabled}\n id={id}\n name={name}\n value={value}\n aria-checked={indeterminate ? 'mixed' : checked}\n />\n {label && <span className={styles.checkboxText}>{label}</span>}\n </label>\n );\n};","export const formatDateToEuropean = (date: string | Date | undefined): string => {\n if (!date) return '';\n const d = new Date(date);\n if (isNaN(d.getTime())) return '';\n const day = d.getDate().toString().padStart(2, '0');\n const month = (d.getMonth() + 1).toString().padStart(2, '0');\n const year = d.getFullYear();\n return `${day}/${month}/${year}`;\n};\n\nexport const parseEuropeanDate = (dateString: string): string => {\n if (!dateString) return '';\n \n const cleanDate = dateString.replace(/[^\\d/]/g, '');\n const parts = cleanDate.split('/');\n \n if (parts.length === 3) {\n const [day, month, year] = parts;\n const fullYear = year.length === 2 ? `20${year}` : year;\n const isoDate = `${fullYear}-${month.padStart(2, '0')}-${day.padStart(2, '0')}`;\n \n const testDate = new Date(isoDate);\n if (!isNaN(testDate.getTime())) {\n return isoDate;\n }\n }\n return '';\n};\n\n","import React from \"react\";\nimport { Calendar as CalendarIcon } from \"lucide-react\";\nimport { useComponentSound, ComponentSoundConfig } from '../../../utils/useSound';\nimport { formatDateToEuropean, parseEuropeanDate } from \"../../../utils/formUtils\";\nimport styles from \"./DateInput.module.css\";\n\n/**\n * Props for the DateInput component\n * @interface DateInputProps\n */\nexport interface DateInputProps {\n /** Label text displayed above the input field */\n label?: string;\n /** Current date value (ISO format or European DD/MM/YYYY format) */\n value: string;\n /** Callback fired when date value changes */\n onChange: (newValue: string) => void;\n /** Placeholder text shown in European format (e.g., \"31/12/2024\") */\n placeholder?: string;\n /** Callback fired when input receives focus */\n onFocus?: () => void;\n /** Callback fired when input loses focus */\n onBlur?: () => void;\n /** Whether to show error styling */\n error?: boolean;\n /** Whether to show success styling */\n success?: boolean;\n /** Whether the input is in loading state */\n loading?: boolean;\n /** Whether the input is disabled */\n disabled?: boolean;\n /** Sound configuration for interactions */\n soundConfig?: ComponentSoundConfig;\n}\n\n/**\n * DateInput component - European format date picker with manual input support\n *\n * @component\n * @description\n * A date input component that supports both manual text entry in DD/MM/YYYY format\n * and native calendar picker selection. Automatically formats dates as users type,\n * adding slashes at appropriate positions. Stores dates internally in ISO format\n * while displaying them in European format for better UX in European contexts.\n *\n * Features:\n * - Auto-formatting while typing (adds slashes automatically)\n * - Calendar icon for native date picker access (Safari/iOS compatible)\n * - Seamless conversion between European display and ISO storage formats\n * - Mobile-optimized with proper touch targets\n *\n * @example\n * // Basic usage\n * <DateInput\n * label=\"Date of Birth\"\n * value={birthDate}\n * onChange={setBirthDate}\n * placeholder=\"31/12/2000\"\n * />\n */\nexport function DateInput({\n label,\n value,\n onChange,\n placeholder = \"25/12/2024\",\n onFocus,\n onBlur,\n error = false,\n success = false,\n loading = false,\n disabled = false,\n soundConfig\n}: Readonly<DateInputProps>) {\n const { handlers, playSound } = useComponentSound(soundConfig);\n\n const handleTextChange = (textValue: string) => {\n // Auto-format as user types\n let formatted = textValue.replace(/[^\\d/]/g, '');\n\n // Add slashes automatically\n if (formatted.length >= 2 && formatted.charAt(2) !== '/') {\n formatted = formatted.substring(0, 2) + '/' + formatted.substring(2);\n }\n if (formatted.length >= 5 && formatted.charAt(5) !== '/') {\n formatted = formatted.substring(0, 5) + '/' + formatted.substring(5);\n }\n\n // Limit length\n if (formatted.length > 10) {\n formatted = formatted.substring(0, 10);\n }\n\n // Convert to ISO format when complete and valid, otherwise store display format\n if (formatted.length === 10) {\n const isoDate = parseEuropeanDate(formatted);\n onChange(isoDate || formatted);\n } else {\n onChange(formatted);\n }\n };\n\n const handleCalendarChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const isoDate = e.target.value;\n playSound('click');\n if (isoDate) {\n onChange(isoDate);\n }\n };\n\n const getClassName = () => {\n const classes = [styles.dateInput];\n if (error) classes.push(styles.error);\n if (success) classes.push(styles.success);\n if (loading) classes.push(styles.loading);\n return classes.join(' ');\n };\n\n // Current ISO value for the native date input (or '' if empty/unparseable)\n const isoValue = value.includes('-') ? value : (parseEuropeanDate(value) || '');\n\n return (\n <div className={getClassName()}>\n <label className={styles.label}>{label}</label>\n <div className={styles.inputWrapper}>\n <input\n type=\"text\"\n value={value.includes('-') ? formatDateToEuropean(value) : value}\n onChange={(e) => handleTextChange(e.target.value)}\n onFocus={onFocus}\n onBlur={onBlur}\n placeholder={placeholder}\n className={styles.textInput}\n disabled={disabled || loading}\n {...handlers}\n />\n <span className={styles.calendarButton} aria-hidden=\"true\">\n <CalendarIcon />\n <input\n type=\"date\"\n value={isoValue}\n onChange={handleCalendarChange}\n className={styles.nativeDateInput}\n title=\"Select date from calendar\"\n aria-label={label ? `${label} calendar picker` : 'Calendar picker'}\n disabled={disabled || loading}\n />\n </span>\n </div>\n </div>\n );\n}\n","import { useState, useRef, useEffect, KeyboardEvent } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { ChevronDown, Search, Check } from 'lucide-react';\nimport styles from \"./SearchableDropdown.module.css\";\n\ntype Option = { label: string; value: string };\n\n/**\n * Props for the SearchableDropdown component\n * @interface SearchableDropdownProps\n */\nexport interface SearchableDropdownProps {\n /** Label text displayed above the dropdown */\n label: string;\n /** Currently selected value */\n value: string;\n /** Callback fired when selection changes */\n onChange: (value: string) => void;\n /** Array of options with label and value properties */\n options: Option[];\n /** Placeholder text shown when no option is selected */\n placeholder?: string;\n /** Whether to include an empty \"(none)\" option */\n allowEmpty?: boolean;\n /** Whether the dropdown is disabled */\n disabled?: boolean;\n /** Whether the dropdown is in loading state */\n loading?: boolean;\n /** Whether to show error styling */\n error?: boolean;\n}\n\n/**\n * SearchableDropdown component - Modern filterable dropdown with animations\n * \n * @component\n * @description\n * A sophisticated dropdown component with real-time search filtering, smooth animations,\n * and keyboard navigation support. Features gradient backgrounds, slide-in animations\n * for options, and a sliding indicator on hover. The dropdown menu includes a search\n * field that filters options as you type.\n * \n * Features:\n * - Real-time search filtering\n * - Smooth animations with Framer Motion\n * - Keyboard navigation (Arrow keys, Enter, Escape)\n * - Custom scrollbar styling\n * - Mobile-optimized with modal-like behavior on small screens\n * - Loading and error states\n * - Selected item highlighting with gradient background\n * \n * @example\n * // Basic usage\n * <SearchableDropdown\n * label=\"Select Country\"\n * value={selectedCountry}\n * onChange={setSelectedCountry}\n * options={countryOptions}\n * placeholder=\"Choose a country...\"\n * />\n * \n * @example\n * // With empty option disabled\n * <SearchableDropdown\n * label=\"Required Field\"\n * value={requiredValue}\n * onChange={setRequiredValue}\n * options={options}\n * allowEmpty={false}\n * error={!requiredValue}\n * />\n */\nexport function SearchableDropdown({\n label,\n value,\n onChange,\n options,\n placeholder = \"Select...\",\n allowEmpty = true,\n disabled = false,\n loading = false,\n error = false\n}: Readonly<SearchableDropdownProps>) {\n const [isOpen, setIsOpen] = useState(false);\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Get the selected option's label\n const selectedOption = options.find(opt => opt.value === value);\n const displayValue = selectedOption ? selectedOption.label : '';\n\n // Filter options based on search\n const filteredOptions = options.filter(opt => \n opt.label.toLowerCase().includes(searchTerm.toLowerCase())\n );\n \n // Add empty option to filtered list if allowed\n const allOptions = allowEmpty ? [{ label: '(none)', value: '' }, ...filteredOptions] : filteredOptions;\n\n // Close dropdown when clicking outside\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n setSearchTerm(\"\");\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n // Focus search input when dropdown opens\n useEffect(() => {\n if (isOpen && inputRef.current) {\n inputRef.current.focus();\n }\n }, [isOpen]);\n\n const handleSelect = (optionValue: string) => {\n onChange(optionValue);\n setIsOpen(false);\n setSearchTerm(\"\");\n setHighlightedIndex(-1);\n };\n \n const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n if (!isOpen) return;\n \n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n setHighlightedIndex(prev => \n prev < allOptions.length - 1 ? prev + 1 : 0\n );\n break;\n case 'ArrowUp':\n e.preventDefault();\n setHighlightedIndex(prev => \n prev > 0 ? prev - 1 : allOptions.length - 1\n );\n break;\n case 'Enter':\n e.preventDefault();\n if (highlightedIndex >= 0 && highlightedIndex < allOptions.length) {\n handleSelect(allOptions[highlightedIndex].value);\n }\n break;\n case 'Escape':\n e.preventDefault();\n setIsOpen(false);\n setSearchTerm(\"\");\n setHighlightedIndex(-1);\n break;\n }\n };\n\n const getTriggerClassName = () => {\n const classes = [styles.dropdownTrigger];\n if (isOpen) classes.push(styles.open);\n if (loading) classes.push(styles.loading);\n if (error) classes.push(styles.error);\n return classes.join(' ');\n };\n\n return (\n <div className={styles.searchableDropdown} ref={dropdownRef} onKeyDown={handleKeyDown}>\n <label>{label}</label>\n \n <motion.button\n type=\"button\"\n className={getTriggerClassName()}\n onClick={() => !disabled && !loading && setIsOpen(!isOpen)}\n whileTap={{ scale: disabled ? 1 : 0.98 }}\n style={{ willChange: 'transform' }}\n disabled={disabled}\n >\n <span className={`${styles.dropdownValue} ${!displayValue ? styles.placeholder : ''}`}>\n {displayValue || placeholder}\n </span>\n <ChevronDown className={styles.dropdownArrow} />\n </motion.button>\n\n <AnimatePresence>\n {isOpen && (\n <motion.div \n className={styles.dropdownMenu}\n initial={{ opacity: 0, y: -10, scale: 0.95 }}\n animate={{ opacity: 1, y: 0, scale: 1 }}\n exit={{ opacity: 0, y: -10, scale: 0.95 }}\n transition={{ duration: 0.2, ease: \"easeOut\" }}\n >\n <div className={styles.dropdownSearch}>\n <Search className={styles.searchIcon} />\n <input\n ref={inputRef}\n type=\"text\"\n className={styles.searchInput}\n placeholder=\"Cerca...\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n onClick={(e) => e.stopPropagation()}\n />\n </div>\n \n <div className={styles.dropdownOptions}>\n {allOptions.map((opt, index) => {\n const isSelected = value === opt.value;\n const isHighlighted = highlightedIndex === index;\n \n return (\n <motion.button\n type=\"button\"\n key={`${opt.value}-${index}`}\n className={`${styles.dropdownOption} ${isSelected ? styles.selected : ''} ${isHighlighted ? styles.highlighted : ''}`}\n onClick={() => handleSelect(opt.value)}\n onMouseEnter={() => setHighlightedIndex(index)}\n initial={{ opacity: 0, x: -20 }}\n animate={{ opacity: 1, x: 0 }}\n transition={{ delay: index * 0.02 }}\n whileTap={{ scale: 0.98 }}\n style={{ willChange: 'transform' }}\n >\n <span>{opt.label}</span>\n {isSelected && <Check className={styles.checkIcon} />}\n </motion.button>\n );\n })}\n {allOptions.length === 0 && (\n <motion.div \n className={styles.dropdownNoResults}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n >\n No results found\n </motion.div>\n )}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n}","import { ChevronDown } from 'lucide-react';\nimport { useComponentSound, ComponentSoundConfig } from '../../../utils/useSound';\nimport styles from \"./SelectInput.module.css\";\n\ntype Option = string | { label: string; value: string };\n\n/**\n * Props for the SelectInput component\n * @interface SelectInputProps\n */\nexport interface SelectInputProps {\n /** Label text displayed above the select input */\n label?: string;\n /** Currently selected value */\n value: string;\n /** Callback fired when selection changes */\n onChange: (value: string) => void;\n /** Array of options - can be strings or {label, value} objects */\n options: Readonly<Option[]>;\n /** Placeholder text shown when no option is selected */\n placeholder?: string;\n /** Whether the select is disabled */\n disabled?: boolean;\n /** Whether to show error styling */\n error?: boolean;\n /** Whether to show success styling */\n success?: boolean;\n /** Whether the select is in loading state */\n loading?: boolean;\n /** Whether the field is required (shows asterisk) */\n required?: boolean;\n /** Sound configuration for interactions */\n soundConfig?: ComponentSoundConfig;\n /** Additional CSS class name for the outermost wrapper */\n className?: string;\n}\n\n/**\n * SelectInput component - Styled dropdown selector with flexible option format\n * \n * @component\n * @description\n * A customizable select dropdown that accepts both simple string arrays and\n * label-value object arrays for options. Features custom styling that maintains\n * consistency across browsers while preserving native select functionality.\n * Includes a styled chevron icon for better visual feedback.\n * \n * @example\n * // With simple string options\n * <SelectInput\n * label=\"Country\"\n * value={country}\n * onChange={setCountry}\n * options={['Italy', 'France', 'Spain', 'Germany']}\n * placeholder=\"Select a country\"\n * />\n * \n * @example\n * // With label-value pairs\n * <SelectInput\n * label=\"Status\"\n * value={status}\n * onChange={setStatus}\n * options={[\n * { label: 'Active', value: 'active' },\n * { label: 'Pending', value: 'pending' },\n * { label: 'Archived', value: 'archived' }\n * ]}\n * />\n */\nexport function SelectInput({\n label,\n value,\n onChange,\n options,\n placeholder = \"Select...\",\n disabled = false,\n error = false,\n success = false,\n loading = false,\n required = false,\n soundConfig,\n className\n}: Readonly<SelectInputProps>) {\n const { handlers, playSound } = useComponentSound(soundConfig);\n const getClassName = () => {\n const classes = [styles.selectInput];\n if (error) classes.push(styles.error);\n if (success) classes.push(styles.success);\n if (loading) classes.push(styles.loading);\n return classes.join(' ');\n };\n\n return (\n <div className={`${getClassName()}${className ? ` ${className}` : ''}`}>\n <label>\n {label}\n {required && <span style={{ color: 'var(--color-error)' }}> *</span>}\n </label>\n <div className={styles.selectWrapper}>\n <select \n value={value} \n onChange={e => {\n playSound('click');\n onChange(e.target.value);\n }}\n disabled={disabled || loading}\n required={required}\n {...handlers}\n >\n <option value=\"\">{placeholder}</option>\n {options.map(opt => {\n const optionValue = typeof opt === 'string' ? opt : opt.value;\n const optionLabel = typeof opt === 'string' ? opt : opt.label;\n return (\n <option key={optionValue} value={optionValue}>{optionLabel}</option>\n );\n })}\n </select>\n <ChevronDown className={styles.selectIcon} />\n </div>\n </div>\n );\n}","import styles from \"./TextArea.module.css\";\n\n/**\n * Props for the TextArea component\n * @interface TextAreaProps\n */\nexport interface TextAreaProps {\n /** Label text displayed above the textarea - can be empty string for no label */\n label: string;\n /** Current value of the textarea */\n value: string;\n /** Callback fired when textarea value changes */\n onChange: (newValue: string) => void;\n /** Number of visible text lines (height) */\n rows?: number;\n /** Placeholder text shown when textarea is empty */\n placeholder?: string;\n /** Whether the field is required (shows asterisk) */\n required?: boolean;\n /** Maximum number of characters allowed (shows counter) */\n maxLength?: number;\n /** Whether the textarea is disabled */\n disabled?: boolean;\n /** Whether to show error styling */\n error?: boolean;\n /** Whether to show success styling */\n success?: boolean;\n /** Whether the textarea is in loading state */\n loading?: boolean;\n /** Whether to enable focus mode styling for distraction-free writing */\n focusMode?: boolean;\n /** Compact mode for use in arrays or dense layouts */\n compact?: boolean;\n /** Custom CSS class name(s) to apply to the container */\n className?: string;\n}\n\n/**\n * TextArea component - Multi-line text input with character counting\n *\n * @component\n * @description\n * A resizable text area component designed for longer form content like descriptions,\n * comments, or messages. Features automatic character counting when maxLength is set,\n * and maintains consistent styling with other form inputs. The component is optimized\n * for both desktop and mobile experiences with appropriate touch targets.\n *\n * @example\n * // Basic usage\n * <TextArea\n * label=\"Description\"\n * value={description}\n * onChange={setDescription}\n * rows={4}\n * placeholder=\"Enter a detailed description...\"\n * />\n *\n * @example\n * // With character limit\n * <TextArea\n * label=\"Bio\"\n * value={bio}\n * onChange={setBio}\n * maxLength={500}\n * required\n * />\n */\nexport function TextArea({\n label,\n value,\n onChange,\n rows = 5,\n placeholder = \"\",\n required = false,\n maxLength,\n disabled = false,\n error = false,\n success = false,\n loading = false,\n focusMode = false,\n compact = false,\n className = \"\"\n}: Readonly<TextAreaProps>) {\n const textareaId = `textarea-${Math.random().toString(36).substr(2, 9)}`;\n\n const getContainerClassName = () => {\n const classes = [styles.textareaContainer];\n if (error) classes.push(styles.error);\n if (success) classes.push(styles.success);\n if (loading) classes.push(styles.loading);\n if (focusMode) classes.push(styles.focusMode);\n if (compact) classes.push(styles.compact);\n if (className) classes.push(className);\n return classes.join(' ');\n };\n\n const getCharCountClassName = () => {\n if (!maxLength) return styles.characterCount;\n\n const classes = [styles.characterCount];\n const percentage = (value.length / maxLength) * 100;\n\n if (percentage >= 100) {\n classes.push(styles.atLimit);\n } else if (percentage >= 80) {\n classes.push(styles.nearLimit);\n }\n\n return classes.join(' ');\n };\n\n return (\n <div className={getContainerClassName()}>\n {label && (\n <label htmlFor={textareaId} className={styles.textareaLabel}>\n {label}\n {required && <span className={styles.requiredIndicator}>*</span>}\n </label>\n )}\n <textarea\n id={textareaId}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n rows={rows}\n placeholder={placeholder}\n maxLength={maxLength}\n className={styles.textareaInput}\n aria-required={required}\n disabled={disabled || loading}\n aria-invalid={error}\n />\n {maxLength && (\n <div className={getCharCountClassName()}>\n <span>{value.length}</span>\n <span style={{ opacity: 0.7 }}> / </span>\n <span>{maxLength}</span>\n </div>\n )}\n </div>\n );\n}","import React, { ReactNode } from 'react';\nimport styles from './TextInput.module.css';\nimport { useComponentSound, ComponentSoundConfig } from '../../../utils/useSound';\n\n/**\n * Props for the TextInput component\n * @interface TextInputProps\n */\nexport interface TextInputProps {\n /** Label text displayed above the input field */\n label?: string;\n /** Current value of the input */\n value: string;\n /** Callback fired when input value changes */\n onChange: (newValue: string) => void;\n /** HTML input type (text, email, password, etc.) */\n type?: string;\n /** Callback fired when input loses focus */\n onBlur?: () => void;\n /** Placeholder text shown when input is empty */\n placeholder?: string;\n /** Error message to display below the input */\n error?: string;\n /** Whether the field is required (shows asterisk) */\n required?: boolean;\n /** Whether the input is disabled */\n disabled?: boolean;\n /** Whether to show success styling */\n success?: boolean;\n /** Whether the input is in loading state */\n loading?: boolean;\n /** Icon to display inside the input field */\n icon?: ReactNode;\n /** Optional action button displayed at the end of the input */\n actionButton?: {\n /** Button label text */\n label: string;\n /** Button click handler */\n onClick: () => void;\n };\n /** Maximum number of characters allowed */\n maxLength?: number;\n /** HTML autocomplete attribute value */\n autoComplete?: string;\n /** Optional sound configuration for input interactions */\n soundConfig?: ComponentSoundConfig;\n /** Enable typing sounds */\n enableTypingSounds?: boolean;\n}\n\n/**\n * TextInput component - A versatile text input field with label and error handling\n * \n * @component\n * @description\n * A foundational input component that provides a clean, accessible text field with\n * built-in support for labels, validation errors, and various HTML5 input types.\n * Follows design system tokens for consistent theming across light/dark modes.\n * \n * @example\n * // Basic usage\n * <TextInput\n * label=\"Email Address\"\n * value={email}\n * onChange={setEmail}\n * type=\"email\"\n * placeholder=\"Enter your email\"\n * />\n * \n * @example\n * // With validation error\n * <TextInput\n * label=\"Password\"\n * value={password}\n * onChange={setPassword}\n * type=\"password\"\n * error=\"Password must be at least 8 characters\"\n * required\n * />\n */\nexport function TextInput({ \n label, \n value, \n onChange, \n type = \"text\", \n onBlur, \n placeholder, \n error, \n required,\n disabled = false,\n success = false,\n loading = false,\n icon,\n actionButton,\n maxLength,\n autoComplete,\n soundConfig,\n enableTypingSounds = false\n}: Readonly<TextInputProps>) {\n const inputId = `input-${Math.random().toString(36).substr(2, 9)}`;\n const { handlers, playSound } = useComponentSound(soundConfig);\n const prevValueRef = React.useRef(value);\n \n const getContainerClassName = () => {\n const classes = [styles.textInput];\n if (success) classes.push(styles.success);\n if (loading) classes.push(styles.loading);\n if (icon) classes.push(styles.withIcon);\n if (actionButton) classes.push(styles.withAction);\n return classes.join(' ');\n };\n \n React.useEffect(() => {\n prevValueRef.current = value;\n }, [value]);\n \n return (\n <div className={getContainerClassName()}>\n <label htmlFor={inputId}>\n {label}\n {required && <span className={styles.required}>*</span>}\n </label>\n <div style={{ position: 'relative' }}>\n {icon && <div className={styles.inputIcon}>{icon}</div>}\n <input\n id={inputId}\n type={type}\n value={value}\n onChange={(e) => {\n const newValue = e.target.value;\n const oldValue = prevValueRef.current;\n \n onChange(newValue);\n \n // Play typing sounds if enabled\n if (enableTypingSounds || soundConfig?.onClick) {\n if (newValue.length > oldValue.length) {\n playSound('type');\n } else if (newValue.length < oldValue.length) {\n playSound('delete');\n }\n }\n \n if (error && soundConfig?.onError) {\n playSound(typeof soundConfig.onError === 'string' ? soundConfig.onError : 'error');\n }\n }}\n onBlur={onBlur}\n placeholder={placeholder}\n className={error ? styles.inputError : ''}\n aria-invalid={!!error}\n aria-describedby={error ? `${inputId}-error` : undefined}\n disabled={disabled || loading}\n maxLength={maxLength}\n autoComplete={autoComplete}\n />\n {actionButton && (\n <button\n type=\"button\"\n className={styles.actionButton}\n onClick={() => {\n handlers.onClick?.();\n actionButton.onClick();\n }}\n disabled={disabled || loading}\n >\n {actionButton.label}\n </button>\n )}\n </div>\n {error && (\n <span id={`${inputId}-error`} className={styles.errorMessage}>\n {error}\n </span>\n )}\n </div>\n );\n}","import React, { useRef } from 'react';\nimport { motion } from 'framer-motion';\nimport { useComponentSound, ComponentSoundConfig } from '../../../utils/useSound';\nimport type { SoundPack } from '../../../utils/soundUtils';\nimport styles from './Toggle.module.css';\n\n/**\n * Props for the Toggle component\n * @interface ToggleProps\n */\nexport interface ToggleProps {\n /** Whether the toggle is in the \"on\" (right side) state */\n readonly isOn: boolean;\n /** Callback fired when toggle state changes */\n readonly onToggle: (isOn: boolean) => void;\n /** Label text for the left (off) option */\n readonly leftLabel?: string;\n /** Label text for the right (on) option */\n readonly rightLabel?: string;\n /** Icon to display with the left option */\n readonly leftIcon?: React.ReactNode;\n /** Icon to display with the right option */\n readonly rightIcon?: React.ReactNode;\n /** Optional CSS class name */\n readonly className?: string;\n /** Optional inline styles */\n readonly style?: React.CSSProperties;\n /** Sound configuration for interactions */\n readonly soundConfig?: ComponentSoundConfig;\n /** Sound pack for this toggle */\n readonly soundTheme?: SoundPack;\n /** Enable celebration effects on toggle */\n readonly enableCelebration?: boolean;\n}\n\n/**\n * Toggle Component\n *\n * @component\n * @description\n * A two-state toggle switch component that allows users to choose between two options.\n * Displays as a segmented control with smooth animations and hover effects.\n * Supports both text labels and icons for each option.\n *\n * @example\n * // Basic toggle with labels and sound theme\n * <Toggle\n * isOn={darkMode}\n * onToggle={setDarkMode}\n * leftLabel=\"Light\"\n * rightLabel=\"Dark\"\n * soundTheme=\"digital\"\n * enableCelebration={true}\n * />\n *\n * @example\n * // Toggle with icons\n * <Toggle\n * isOn={viewMode === 'grid'}\n * onToggle={(isGrid) => setViewMode(isGrid ? 'grid' : 'list')}\n * leftIcon={<ListIcon />}\n * rightIcon={<GridIcon />}\n * leftLabel=\"List\"\n * rightLabel=\"Grid\"\n * />\n *\n * @example\n * // Simple on/off toggle\n * <Toggle\n * isOn={notifications}\n * onToggle={setNotifications}\n * leftLabel=\"Off\"\n * rightLabel=\"On\"\n * />\n *\n * @param {ToggleProps} props - The props for the Toggle component\n * @returns {JSX.Element} The rendered Toggle component\n */\nexport function Toggle(props: Readonly<ToggleProps>) {\n const { isOn, onToggle, leftLabel, rightLabel, leftIcon, rightIcon, className, style, soundConfig, enableCelebration = false } = props;\n const leftButtonRef = useRef<HTMLButtonElement>(null);\n const rightButtonRef = useRef<HTMLButtonElement>(null);\n const { handlers, playSound } = useComponentSound(\n {\n ...soundConfig,\n onClick: soundConfig?.onClick ?? 'toggle',\n onHover: soundConfig?.onHover ?? 'hover'\n }\n );\n\n // Ensure content stays centered by merging styles\n const buttonStyle = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n ...style\n };\n\n return (\n <div className={`${styles.toggleContainer} ${className || ''}`}>\n <motion.button\n ref={leftButtonRef}\n className={`${styles.toggleButton} ${!isOn ? styles.active : ''}`}\n whileHover={{ scale: 1.05 }}\n whileTap={{ scale: 0.95 }}\n transition={{ type: \"spring\", stiffness: 400, damping: 17 }}\n onClick={() => {\n if (!isOn) {\n // Already on left\n if (enableCelebration) {\n playSound('success');\n } else {\n playSound('click');\n }\n } else {\n // Switching to left\n playSound('toggle');\n }\n onToggle(false);\n }}\n onMouseEnter={() => handlers.onMouseEnter?.()}\n style={buttonStyle}\n >\n <motion.div\n animate={{ scale: !isOn ? 1.1 : 1, rotate: !isOn ? [0, -5, 5, 0] : 0 }}\n transition={{ duration: 0.3 }}\n >\n {leftIcon}\n </motion.div>\n {leftLabel}\n </motion.button>\n\n <motion.button\n ref={rightButtonRef}\n className={`${styles.toggleButton} ${isOn ? styles.active : ''}`}\n whileHover={{ scale: 1.05 }}\n whileTap={{ scale: 0.95 }}\n transition={{ type: \"spring\", stiffness: 400, damping: 17 }}\n onClick={() => {\n if (isOn) {\n // Already on right\n if (enableCelebration) {\n playSound('success');\n } else {\n playSound('click');\n }\n } else {\n // Switching to right\n playSound('success');\n }\n onToggle(true);\n }}\n onMouseEnter={() => handlers.onMouseEnter?.()}\n style={buttonStyle}\n >\n <motion.div\n animate={{ scale: isOn ? 1.1 : 1, rotate: isOn ? [0, 5, -5, 0] : 0 }}\n transition={{ duration: 0.3 }}\n >\n {rightIcon}\n </motion.div>\n {rightLabel}\n </motion.button>\n </div>\n );\n}","import React, { useCallback, useState, useEffect } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { useComponentSound, ComponentSoundConfig } from '../../../utils/useSound';\nimport styles from './NumberStepper.module.css';\n\n/**\n * Props for the NumberStepper component\n * @interface NumberStepperProps\n */\nexport interface NumberStepperProps {\n /** Current value */\n value: number;\n /** Callback when value changes */\n onChange: (value: number) => void;\n /** Minimum allowed value */\n min?: number;\n /** Maximum allowed value */\n max?: number;\n /** Step increment/decrement amount */\n step?: number;\n /** Label text */\n label?: string;\n /** Icon or emoji to display */\n icon?: string;\n /** Whether the stepper is disabled */\n disabled?: boolean;\n /** Size variant */\n size?: 'small' | 'medium' | 'large';\n /** Visual variant */\n variant?: 'default' | 'outlined' | 'filled' | 'minimal' | 'custom' | 'tally';\n /** Color for the `tally` variant strokes + numeric value. Ignored by other variants. */\n color?: string;\n /** Hint text shown in place of tally marks when value === 0 (tally variant). */\n tallyEmptyHint?: string;\n /** Show plus/minus icons instead of arrows */\n showPlusMinus?: boolean;\n /** Allow keyboard navigation */\n allowKeyboard?: boolean;\n /** Custom className */\n className?: string;\n /** Custom styles for different parts of the component */\n customStyles?: {\n container?: React.CSSProperties;\n header?: React.CSSProperties;\n icon?: React.CSSProperties;\n label?: React.CSSProperties;\n stepper?: React.CSSProperties;\n button?: React.CSSProperties;\n buttonHover?: React.CSSProperties;\n buttonIcon?: React.CSSProperties;\n value?: React.CSSProperties;\n valueContainer?: React.CSSProperties;\n limits?: React.CSSProperties;\n };\n /** Custom button content (overrides default icons) */\n customButtons?: {\n increment?: React.ReactNode;\n decrement?: React.ReactNode;\n };\n /** Hide the limits display */\n hideLimits?: boolean;\n /** Layout direction */\n layout?: 'horizontal' | 'vertical';\n /** Sound configuration for interactions */\n soundConfig?: ComponentSoundConfig;\n}\n\n/**\n * NumberStepper Component\n * \n * @component\n * @description\n * A number input component with increment and decrement controls.\n * Supports keyboard navigation, min/max limits, and custom step values.\n * \n * @example\n * // Basic usage\n * <NumberStepper\n * value={count}\n * onChange={setCount}\n * min={0}\n * max={10}\n * />\n * \n * @example\n * // With label and icon\n * <NumberStepper\n * value={5}\n * onChange={(val) => setValue(val)}\n * min={0}\n * max={100}\n * step={5}\n * label=\"Quantity\"\n * icon=\"📦\"\n * />\n * \n * @example\n * // With custom styles\n * <NumberStepper\n * value={volume}\n * onChange={setVolume}\n * min={0}\n * max={100}\n * label=\"Volume\"\n * icon=\"🔊\"\n * customStyles={{\n * container: {\n * background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',\n * padding: '20px',\n * borderRadius: '16px',\n * },\n * label: { color: 'white', fontWeight: 'bold' },\n * button: {\n * background: 'rgba(255,255,255,0.2)',\n * color: 'white',\n * },\n * buttonHover: {\n * background: 'rgba(255,255,255,0.3)',\n * },\n * value: {\n * color: 'white',\n * fontSize: '24px',\n * fontWeight: 'bold',\n * },\n * }}\n * />\n * \n * @example\n * // Custom variant with horizontal layout\n * <NumberStepper\n * value={discount}\n * onChange={setDiscount}\n * min={0}\n * max={100}\n * step={5}\n * label=\"Discount %\"\n * icon=\"🏷️\"\n * variant=\"custom\"\n * customStyles={{\n * container: {\n * display: 'flex',\n * alignItems: 'center',\n * gap: '16px',\n * },\n * header: { flex: 1, marginBottom: 0 },\n * }}\n * />\n * \n * @example\n * // With custom buttons\n * <NumberStepper\n * value={rating}\n * onChange={setRating}\n * min={1}\n * max={5}\n * customButtons={{\n * decrement: <span>👎</span>,\n * increment: <span>👍</span>,\n * }}\n * />\n * \n * @param {NumberStepperProps} props - The props for the NumberStepper component\n * @returns {JSX.Element} The rendered NumberStepper component\n */\nexport const NumberStepper: React.FC<NumberStepperProps> = ({\n value,\n onChange,\n min = -Infinity,\n max = Infinity,\n step = 1,\n label,\n icon,\n disabled = false,\n size = 'medium',\n variant = 'default',\n showPlusMinus = false,\n allowKeyboard = true,\n className = '',\n customStyles = {},\n customButtons = {},\n hideLimits = false,\n layout = 'horizontal',\n soundConfig,\n color,\n tallyEmptyHint = '—'\n}) => {\n const { handlers, playSound } = useComponentSound(soundConfig);\n const [isIncrementing, setIsIncrementing] = useState(false);\n const [isDecrementing, setIsDecrementing] = useState(false);\n const [displayValue, setDisplayValue] = useState<number | string>(value);\n\n useEffect(() => {\n setDisplayValue(value);\n }, [value]);\n\n const handleIncrement = useCallback(() => {\n if (disabled || value >= max) return;\n \n playSound('click');\n const newValue = Math.min(value + step, max);\n onChange(newValue);\n setIsIncrementing(true);\n setTimeout(() => setIsIncrementing(false), 200);\n }, [value, onChange, max, step, disabled, playSound]);\n\n const handleDecrement = useCallback(() => {\n if (disabled || value <= min) return;\n \n playSound('click');\n const newValue = Math.max(value - step, min);\n onChange(newValue);\n setIsDecrementing(true);\n setTimeout(() => setIsDecrementing(false), 200);\n }, [value, onChange, min, step, disabled, playSound]);\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (!allowKeyboard || disabled) return;\n\n switch (e.key) {\n case 'ArrowUp':\n e.preventDefault();\n handleIncrement();\n break;\n case 'ArrowDown':\n e.preventDefault();\n handleDecrement();\n break;\n case 'PageUp': {\n e.preventDefault();\n const bigIncrease = Math.min(value + (step * 10), max);\n onChange(bigIncrease);\n break;\n }\n case 'PageDown': {\n e.preventDefault();\n const bigDecrease = Math.max(value - (step * 10), min);\n onChange(bigDecrease);\n break;\n }\n case 'Home':\n e.preventDefault();\n if (min !== -Infinity) onChange(min);\n break;\n case 'End':\n e.preventDefault();\n if (max !== Infinity) onChange(max);\n break;\n }\n }, [allowKeyboard, disabled, handleIncrement, handleDecrement, value, step, min, max, onChange]);\n\n const handleInputChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const inputValue = e.target.value;\n \n if (inputValue === '' || inputValue === '-') {\n setDisplayValue(inputValue);\n return;\n }\n\n const numValue = parseFloat(inputValue);\n if (!isNaN(numValue)) {\n setDisplayValue(numValue);\n }\n }, []);\n\n const handleInputBlur = useCallback(() => {\n let finalValue = typeof displayValue === 'string' \n ? (displayValue === '' || displayValue === '-' ? min : parseFloat(displayValue))\n : displayValue;\n\n if (isNaN(finalValue)) {\n finalValue = min;\n }\n\n finalValue = Math.max(min, Math.min(max, finalValue));\n \n if (step !== 1) {\n finalValue = Math.round(finalValue / step) * step;\n }\n\n onChange(finalValue);\n setDisplayValue(finalValue);\n }, [displayValue, min, max, step, onChange]);\n\n const containerClasses = [\n styles.container,\n styles[size],\n styles[variant],\n layout === 'vertical' && styles.vertical,\n disabled && styles.disabled,\n className\n ].filter(Boolean).join(' ');\n\n // Merge custom styles with hover states\n const [isButtonHovered, setIsButtonHovered] = useState<'increment' | 'decrement' | null>(null);\n\n const isDecrementDisabled = disabled || value <= min;\n const isIncrementDisabled = disabled || value >= max;\n\n const stepperContent = (\n <div className={styles.stepper} style={customStyles.stepper} onKeyDown={handleKeyDown} tabIndex={disabled ? -1 : 0} {...handlers}>\n <motion.button\n className={styles.button}\n style={{\n ...customStyles.button,\n ...(isButtonHovered === 'decrement' && customStyles.buttonHover)\n }}\n onMouseEnter={() => setIsButtonHovered('decrement')}\n onMouseLeave={() => setIsButtonHovered(null)}\n onClick={handleDecrement}\n disabled={isDecrementDisabled}\n whileTap={!isDecrementDisabled ? { scale: 0.9 } : undefined}\n animate={isDecrementing ? { scale: [1, 1.2, 1] } : undefined}\n transition={{ duration: 0.2 }}\n aria-label=\"Decrease value\"\n >\n {customButtons.decrement || (showPlusMinus ? (\n <span className={styles.buttonIcon} style={customStyles.buttonIcon}>−</span>\n ) : (\n <svg className={styles.buttonIcon} style={customStyles.buttonIcon} viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M15 18L9 12L15 6\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n ))}\n </motion.button>\n\n <div className={styles.valueContainer} style={customStyles.valueContainer}>\n <AnimatePresence mode=\"wait\">\n <motion.div\n key={value}\n initial={{ y: isIncrementing ? 10 : isDecrementing ? -10 : 0, opacity: 0 }}\n animate={{ y: 0, opacity: 1 }}\n exit={{ y: isIncrementing ? -10 : isDecrementing ? 10 : 0, opacity: 0 }}\n transition={{ duration: 0.15 }}\n className={styles.valueWrapper}\n >\n <input\n type=\"text\"\n className={styles.value}\n style={customStyles.value}\n value={displayValue}\n onChange={handleInputChange}\n onBlur={handleInputBlur}\n disabled={disabled}\n aria-label={label || \"Number input\"}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n />\n </motion.div>\n </AnimatePresence>\n </div>\n\n <motion.button\n className={styles.button}\n style={{\n ...customStyles.button,\n ...(isButtonHovered === 'increment' && customStyles.buttonHover)\n }}\n onMouseEnter={() => setIsButtonHovered('increment')}\n onMouseLeave={() => setIsButtonHovered(null)}\n onClick={handleIncrement}\n disabled={isIncrementDisabled}\n whileTap={!isIncrementDisabled ? { scale: 0.9 } : undefined}\n animate={isIncrementing ? { scale: [1, 1.2, 1] } : undefined}\n transition={{ duration: 0.2 }}\n aria-label=\"Increase value\"\n >\n {customButtons.increment || (showPlusMinus ? (\n <span className={styles.buttonIcon} style={customStyles.buttonIcon}>+</span>\n ) : (\n <svg className={styles.buttonIcon} style={customStyles.buttonIcon} viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M9 18L15 12L9 6\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n ))}\n </motion.button>\n </div>\n );\n\n // ── Tally variant: pen-stroke counter with explicit +/- buttons.\n if (variant === 'tally') {\n return (\n <TallyRow\n value={value}\n label={label}\n icon={icon}\n color={color}\n disabled={disabled}\n emptyHint={tallyEmptyHint}\n className={containerClasses}\n customStyles={customStyles}\n onIncrement={handleIncrement}\n onDecrement={handleDecrement}\n ariaLabel={label || 'Tally counter'}\n isDecrementDisabled={isDecrementDisabled}\n isIncrementDisabled={isIncrementDisabled}\n />\n );\n }\n\n // For custom variant with horizontal layout, render differently\n if (variant === 'custom' && (label || icon)) {\n return (\n <div className={containerClasses} style={{...customStyles.container, display: 'flex', alignItems: 'center'}}>\n <div className={styles.header} style={{...customStyles.header, flex: 1, marginBottom: 0}}>\n {icon && <span className={styles.icon} style={customStyles.icon}>{icon}</span>}\n {label && <label className={styles.label} style={customStyles.label}>{label}</label>}\n </div>\n {stepperContent}\n {!hideLimits && (min !== -Infinity || max !== Infinity) && (\n <div className={styles.limits} style={customStyles.limits}>\n <span className={styles.limit}>\n {min !== -Infinity && `Min: ${min}`}\n </span>\n <span className={styles.limit}>\n {max !== Infinity && `Max: ${max}`}\n </span>\n </div>\n )}\n </div>\n );\n }\n\n return (\n <div className={containerClasses} style={customStyles.container}>\n {(label || icon) && (\n <div className={styles.header} style={customStyles.header}>\n {icon && <span className={styles.icon} style={customStyles.icon}>{icon}</span>}\n {label && <label className={styles.label} style={customStyles.label}>{label}</label>}\n </div>\n )}\n \n {stepperContent}\n \n {!hideLimits && (min !== -Infinity || max !== Infinity) && (\n <div className={styles.limits} style={customStyles.limits}>\n <span className={styles.limit}>\n {min !== -Infinity && `Min: ${min}`}\n </span>\n <span className={styles.limit}>\n {max !== Infinity && `Max: ${max}`}\n </span>\n </div>\n )}\n </div>\n );\n};\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Tally variant internals\n// ─────────────────────────────────────────────────────────────────────────────\n\ninterface TallyMarksProps {\n count: number;\n color: string;\n}\n\nconst TallyMarks: React.FC<TallyMarksProps> = ({ count, color }) => {\n const groups: number[] = [];\n let left = Math.max(0, Math.floor(count));\n while (left > 0) {\n const n = Math.min(5, left);\n groups.push(n);\n left -= n;\n }\n return (\n <div className={styles.tallyMarks} aria-hidden=\"true\">\n {groups.map((n, i) => (\n <svg\n key={i}\n className={styles.tallyGroup}\n width=\"38\"\n height=\"22\"\n viewBox=\"0 0 38 22\"\n >\n {[0, 1, 2, 3].slice(0, Math.min(4, n)).map((j) => (\n <line\n key={j}\n x1={4 + j * 6}\n y1=\"2\"\n x2={4 + j * 6}\n y2=\"20\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n ))}\n {n === 5 && (\n <line\n x1=\"1\"\n y1=\"18\"\n x2=\"27\"\n y2=\"4\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n )}\n </svg>\n ))}\n </div>\n );\n};\n\ninterface TallyRowProps {\n value: number;\n label?: string;\n icon?: string;\n color?: string;\n disabled: boolean;\n emptyHint: string;\n className: string;\n customStyles: NonNullable<NumberStepperProps['customStyles']>;\n onIncrement: () => void;\n onDecrement: () => void;\n ariaLabel: string;\n isDecrementDisabled: boolean;\n isIncrementDisabled: boolean;\n}\n\nconst TallyRow: React.FC<TallyRowProps> = ({\n value,\n label,\n icon,\n color,\n disabled,\n emptyHint,\n className,\n customStyles,\n onIncrement,\n onDecrement,\n ariaLabel,\n isDecrementDisabled,\n isIncrementDisabled\n}) => {\n const resolvedColor = color || 'currentColor';\n\n return (\n <div\n aria-label={ariaLabel}\n aria-disabled={disabled || undefined}\n className={`${className} ${styles.tallyRow}`}\n style={customStyles.container}\n >\n {icon && (\n <span\n className={styles.tallyIcon}\n style={{ color: resolvedColor, ...customStyles.icon }}\n >\n {icon}\n </span>\n )}\n {label && (\n <span className={styles.tallyLabel} style={customStyles.label}>\n {label}\n </span>\n )}\n <div className={styles.tallyBody}>\n {value <= 0 ? (\n <span className={styles.tallyHint}>{emptyHint}</span>\n ) : (\n <TallyMarks count={value} color={resolvedColor} />\n )}\n </div>\n <button\n type=\"button\"\n className={styles.tallyButton}\n onClick={onDecrement}\n disabled={isDecrementDisabled}\n aria-label={`Decrease ${label || 'value'}`}\n >\n <span className={styles.tallyButtonIcon}>−</span>\n </button>\n <span\n className={styles.tallyValue}\n style={{ color: resolvedColor, ...customStyles.value }}\n aria-hidden=\"true\"\n >\n {value}\n </span>\n <button\n type=\"button\"\n className={styles.tallyButton}\n onClick={onIncrement}\n disabled={isIncrementDisabled}\n aria-label={`Increase ${label || 'value'}`}\n >\n <span className={styles.tallyButtonIcon}>+</span>\n </button>\n </div>\n );\n};","import React from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { useComponentSound, ComponentSoundConfig } from '../../../utils/useSound';\nimport styles from './ToggleButton.module.css';\n\n/**\n * Props for the ToggleButton component\n * @interface ToggleButtonProps\n */\nexport interface ToggleButtonProps {\n /** Whether the button is active/selected */\n active: boolean;\n /** Click handler */\n onClick: () => void;\n /** Icon or emoji to display */\n icon?: string | React.ReactNode;\n /** Label text */\n label?: string;\n /** Whether the button is disabled */\n disabled?: boolean;\n /** Size variant */\n size?: 'small' | 'medium' | 'large';\n /** Visual variant */\n variant?: 'default' | 'outlined' | 'filled' | 'ghost';\n /** Color when active */\n activeColor?: 'primary' | 'secondary' | 'success' | 'danger' | 'warning';\n /** Show a checkmark when active */\n showCheckmark?: boolean;\n /** Animation type for state change */\n animation?: 'scale' | 'rotate' | 'flip' | 'none';\n /** Custom className */\n className?: string;\n /** Custom inline styles */\n style?: React.CSSProperties;\n /** Custom color for border/background when active */\n color?: string;\n /** Tooltip text */\n tooltip?: string;\n /** Whether to show the label on mobile */\n hideLabelOnMobile?: boolean;\n /** Sound configuration for interactions */\n soundConfig?: ComponentSoundConfig;\n}\n\n/**\n * ToggleButton Component\n * \n * @component\n * @description\n * A toggle button component that can be activated/deactivated with a click.\n * Different from a toggle switch, this is a button with on/off states.\n * Perfect for boolean habits tracking or feature toggles.\n * \n * @example\n * // Basic usage\n * <ToggleButton\n * active={isActive}\n * onClick={() => setIsActive(!isActive)}\n * icon=\"🦷\"\n * label=\"Teeth\"\n * />\n * \n * @example\n * // With custom styling and animation\n * <ToggleButton\n * active={isEnabled}\n * onClick={handleToggle}\n * icon={<CustomIcon />}\n * label=\"Feature\"\n * variant=\"filled\"\n * activeColor=\"success\"\n * animation=\"flip\"\n * showCheckmark\n * />\n * \n * @param {ToggleButtonProps} props - The props for the ToggleButton component\n * @returns {JSX.Element} The rendered ToggleButton component\n */\nexport const ToggleButton: React.FC<ToggleButtonProps> = ({\n active,\n onClick,\n icon,\n label,\n disabled = false,\n size = 'medium',\n variant = 'default',\n activeColor = 'primary',\n showCheckmark = false,\n animation = 'scale',\n className = '',\n style = {},\n color,\n tooltip,\n hideLabelOnMobile = false,\n soundConfig\n}) => {\n const { handlers, playSound } = useComponentSound(soundConfig);\n const buttonClasses = [\n styles.button,\n styles[size],\n styles[variant],\n active && styles.active,\n active && styles[`active-${activeColor}`],\n disabled && styles.disabled,\n animation !== 'none' && styles[`animation-${animation}`],\n className\n ].filter(Boolean).join(' ');\n\n const labelClasses = [\n styles.label,\n hideLabelOnMobile && styles.hideMobile\n ].filter(Boolean).join(' ');\n\n const iconVariants = {\n scale: {\n inactive: { scale: 1 },\n active: { scale: [1, 1.2, 1] }\n },\n rotate: {\n inactive: { rotate: 0 },\n active: { rotate: 360 }\n },\n flip: {\n inactive: { rotateY: 0 },\n active: { rotateY: 180 }\n },\n none: {\n inactive: {},\n active: {}\n }\n };\n\n const checkmarkVariants = {\n hidden: { \n scale: 0, \n opacity: 0,\n rotate: -90\n },\n visible: { \n scale: 1, \n opacity: 1,\n rotate: 0,\n transition: {\n type: \"spring\" as const,\n stiffness: 500,\n damping: 25\n }\n }\n };\n\n const backgroundVariants = {\n inactive: {\n scale: 0,\n opacity: 0\n },\n active: {\n scale: 1,\n opacity: 1,\n transition: {\n type: \"spring\" as const,\n stiffness: 400,\n damping: 20\n }\n }\n };\n\n // Create dynamic styles with color prop\n const dynamicStyle = {\n ...style,\n ...(color && {\n '--toggle-color': color,\n '--toggle-border-color': active ? color : `${color}40`,\n '--toggle-bg-color': active ? `${color}20` : 'transparent'\n } as React.CSSProperties)\n };\n\n return (\n <motion.button\n className={buttonClasses}\n style={dynamicStyle}\n onClick={() => {\n playSound('toggle');\n onClick();\n }}\n disabled={disabled}\n whileHover={!disabled ? { scale: 1.05 } : undefined}\n whileTap={!disabled ? { scale: 0.95 } : undefined}\n title={tooltip}\n aria-pressed={active}\n aria-label={label}\n {...handlers}\n >\n <motion.div\n className={styles.background}\n variants={backgroundVariants}\n initial=\"inactive\"\n animate={active ? \"active\" : \"inactive\"}\n />\n\n <div className={styles.content}>\n {icon && (\n <motion.div \n className={styles.iconWrapper}\n variants={iconVariants[animation]}\n initial=\"inactive\"\n animate={active ? \"active\" : \"inactive\"}\n transition={{ duration: 0.3 }}\n >\n {typeof icon === 'string' ? (\n <span className={styles.icon}>{icon}</span>\n ) : (\n <div className={styles.icon}>{icon}</div>\n )}\n </motion.div>\n )}\n\n {label && <span className={labelClasses}>{label}</span>}\n\n <AnimatePresence>\n {showCheckmark && active && (\n <motion.div\n className={styles.checkmark}\n variants={checkmarkVariants}\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"hidden\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\">\n <path \n d=\"M20 6L9 17L4 12\" \n stroke=\"currentColor\" \n strokeWidth=\"3\" \n strokeLinecap=\"round\" \n strokeLinejoin=\"round\"\n />\n </svg>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n\n {/* Ripple effect */}\n <AnimatePresence>\n {active && (\n <motion.div\n className={styles.ripple}\n initial={{ scale: 0, opacity: 0.5 }}\n animate={{ scale: 2, opacity: 0 }}\n exit={{ scale: 0, opacity: 0 }}\n transition={{ duration: 0.6 }}\n />\n )}\n </AnimatePresence>\n </motion.button>\n );\n};","import { useState } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { useComponentSound, ComponentSoundConfig } from '../../../utils/useSound';\nimport styles from './Slider.module.css';\n\n/**\n * Label configuration for the slider endpoints\n * @interface SliderLabel\n */\nexport interface SliderLabel {\n /** Label text or emoji */\n label: string;\n /** Optional color override */\n color?: string;\n /** Position: 'start' | 'end' | number (percentage) */\n position?: 'start' | 'end' | number;\n}\n\n/**\n * Configuration for custom styling\n * @interface SliderConfig\n */\nexport interface SliderConfig {\n /** Custom color scheme */\n colors?: {\n track?: string;\n fill?: string;\n thumb?: string;\n thumbHover?: string;\n text?: string;\n label?: string;\n };\n /** Custom size preset */\n size?: 'sm' | 'md' | 'lg';\n /** Reserved for future use */\n animations?: {\n duration?: number;\n bounceIntensity?: number;\n };\n}\n\n/**\n * Props for the Slider component\n * @interface SliderProps\n */\nexport interface SliderProps {\n /** Current slider value */\n value: number;\n /** Callback when value changes */\n onChange: (value: number) => void;\n /** Minimum value */\n min?: number;\n /** Maximum value */\n max?: number;\n /** Step increment */\n step?: number;\n /** Optional label */\n label?: string;\n /** Show persistent value display below the track */\n showValue?: boolean;\n /** Custom value formatter */\n valueFormatter?: (value: number) => string;\n /** Labels for slider endpoints or custom positions */\n labels?: SliderLabel[];\n /** Custom styling configuration */\n config?: SliderConfig;\n /** Disabled state */\n disabled?: boolean;\n /** Custom CSS class */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Loading state */\n loading?: boolean;\n /** Color function for dynamic coloring */\n colorFunction?: (value: number) => string;\n /** Show a tooltip above the thumb while dragging */\n showTooltip?: boolean;\n /** Custom tooltip content */\n tooltipContent?: (value: number) => string;\n /** Sound configuration for interactions */\n soundConfig?: ComponentSoundConfig;\n /** Visual variant: 'track' (default range slider) or 'dots' (tally strip) */\n variant?: 'track' | 'dots';\n}\n\n/**\n * Slider component — responsive, accessible range input with a styled track, fill, and thumb.\n *\n * The thumb is inset at the track endpoints so it never overflows. Drag state is tracked\n * via pointer events (works on mouse, touch, and pen).\n */\nexport function Slider({\n value,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n label,\n showValue = false,\n valueFormatter,\n labels = [],\n config = {},\n disabled = false,\n className = '',\n style = {},\n loading = false,\n colorFunction,\n showTooltip = false,\n tooltipContent,\n soundConfig,\n variant = 'track',\n}: SliderProps) {\n const { handlers, playSound } = useComponentSound(soundConfig);\n const [isDragging, setIsDragging] = useState(false);\n\n const { colors = {}, size = 'md' } = config;\n\n const percentage = Math.max(0, Math.min(100, ((value - min) / (max - min)) * 100));\n\n const getDynamicColor = () => {\n if (colorFunction) return colorFunction(value);\n if (colors.fill) return colors.fill;\n return 'var(--color-primary)';\n };\n\n const formatValue = (val: number) => {\n if (valueFormatter) return valueFormatter(val);\n return `${val}${max <= 10 ? `/${max}` : ''}`;\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled || loading) return;\n const newValue = Number(e.target.value);\n playSound('click');\n onChange(newValue);\n };\n\n const startDrag = () => {\n if (disabled || loading) return;\n setIsDragging(true);\n };\n\n const endDrag = () => setIsDragging(false);\n\n const dynamicColor = getDynamicColor();\n const sizeClass = styles[`size-${size}`];\n const stateClass = disabled ? styles.disabled : '';\n const dragClass = isDragging ? styles.dragging : '';\n\n if (loading) {\n return (\n <div\n className={`${styles.slider} ${sizeClass} ${styles.loading} ${className}`}\n style={style}\n >\n {label && <label className={styles.label}>{label}</label>}\n <div className={styles.loadingTrack}>\n <motion.div\n className={styles.loadingIndicator}\n animate={{ x: ['-100%', '200%'] }}\n transition={{ repeat: Infinity, duration: 1.5, ease: 'easeInOut' }}\n />\n </div>\n </div>\n );\n }\n\n if (variant === 'dots') {\n const dotCount = Math.max(0, Math.floor((max - min) / step));\n const dotValues = Array.from({ length: dotCount }, (_, i) => min + (i + 1) * step);\n\n const handleDotClick = (dotValue: number) => {\n if (disabled || loading) return;\n playSound('click');\n const next = value === dotValue ? dotValue - step : dotValue;\n onChange(Math.max(min, next));\n };\n\n return (\n <div\n className={`${styles.slider} ${sizeClass} ${stateClass} ${className}`}\n style={style}\n {...handlers}\n >\n {label && <label className={styles.label}>{label}</label>}\n\n <div\n className={styles.dotsContainer}\n role=\"slider\"\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n aria-label={label}\n >\n {dotValues.map((dotValue) => {\n const filled = dotValue <= value;\n return (\n <button\n key={dotValue}\n type=\"button\"\n className={`${styles.dot} ${filled ? styles.dotFilled : ''}`}\n style={\n filled\n ? {\n backgroundColor: dynamicColor,\n borderColor: dynamicColor,\n }\n : undefined\n }\n onClick={() => handleDotClick(dotValue)}\n disabled={disabled}\n aria-label={\n valueFormatter\n ? valueFormatter(dotValue)\n : `Set to ${dotValue}`\n }\n />\n );\n })}\n </div>\n\n {showValue && (\n <div className={styles.valueDisplay} style={{ color: dynamicColor }}>\n {formatValue(value)}\n </div>\n )}\n </div>\n );\n }\n\n // Inset the thumb so its bounding box stays inside the track at 0/100%.\n // At percentage=0: marginLeft=0 → thumb flush-left. At 100%: marginLeft=-thumbSize → flush-right.\n const insetStyle = {\n left: `${percentage}%`,\n marginLeft: `calc(var(--slider-thumb-size) * ${-percentage / 100})`,\n };\n\n return (\n <div\n className={`${styles.slider} ${sizeClass} ${stateClass} ${dragClass} ${className}`}\n style={style}\n >\n {label && <label className={styles.label}>{label}</label>}\n\n <div className={styles.sliderContainer}>\n <div className={styles.track}>\n <div\n className={styles.fill}\n style={{ width: `${percentage}%`, backgroundColor: dynamicColor }}\n />\n </div>\n\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={value}\n onChange={handleChange}\n onPointerDown={startDrag}\n onPointerUp={endDrag}\n onPointerCancel={endDrag}\n onBlur={endDrag}\n {...handlers}\n className={styles.input}\n disabled={disabled}\n aria-label={label}\n />\n\n <div\n className={styles.thumb}\n style={{\n ...insetStyle,\n backgroundColor: dynamicColor,\n borderColor: colors.thumb || dynamicColor,\n }}\n />\n\n <AnimatePresence>\n {showTooltip && isDragging && !disabled && (\n <motion.div\n className={styles.tooltip}\n style={{ ...insetStyle, backgroundColor: dynamicColor }}\n initial={{ opacity: 0, y: 6, scale: 0.9 }}\n animate={{ opacity: 1, y: 0, scale: 1 }}\n exit={{ opacity: 0, y: 6, scale: 0.9 }}\n transition={{ duration: 0.15 }}\n >\n {tooltipContent ? tooltipContent(value) : formatValue(value)}\n <div\n className={styles.tooltipArrow}\n style={{ borderTopColor: dynamicColor }}\n />\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n\n {showValue && (\n <div className={styles.valueDisplay} style={{ color: dynamicColor }}>\n {formatValue(value)}\n </div>\n )}\n\n {labels.length > 0 && (\n <div className={styles.labelsContainer}>\n {labels.map((labelConfig, index) => {\n let position = 0;\n if (labelConfig.position === 'start') position = 0;\n else if (labelConfig.position === 'end') position = 100;\n else if (typeof labelConfig.position === 'number')\n position = labelConfig.position;\n\n return (\n <div\n key={index}\n className={styles.labelItem}\n style={{ left: `${position}%`, color: labelConfig.color }}\n >\n {labelConfig.label}\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n","import React, { useState, useEffect } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport styles from './LoadingSpinner.module.css';\n\n/**\n * Props for the LoadingSpinner component\n * @interface LoadingSpinnerProps\n */\nexport interface LoadingSpinnerProps {\n /** Static message to display. If not provided, will cycle through default messages */\n message?: string;\n /** Size variant of the loading spinner */\n size?: 'small' | 'medium' | 'large';\n /** Visual style variant of the loading spinner */\n variant?: 'dots' | 'spinner' | 'pulse';\n /** Additional CSS class names to apply */\n className?: string;\n /** Whether to show the text message below the spinner */\n showMessage?: boolean;\n /** Custom array of messages to rotate through (only used when message is not provided) */\n customMessages?: string[];\n /** Interval in milliseconds for message rotation (default: 2500ms) */\n messageRotationInterval?: number;\n /** Whether to show decorative sparkle effects */\n showSparkles?: boolean;\n /** Whether to render as a full-screen overlay */\n fullScreen?: boolean;\n /** Whether to show a backdrop behind the spinner (only with fullScreen) */\n overlay?: boolean;\n /** Custom color for the spinner elements (CSS color value) */\n color?: string;\n /** Custom background color (CSS color value) */\n backgroundColor?: string;\n}\n\nconst defaultMessages = [\n 'Loading your content...',\n 'Just a moment please...',\n 'Preparing something awesome...',\n 'Almost ready...',\n 'Working on it...',\n 'Just a sec...',\n 'Loading with care...',\n 'Getting things ready...',\n 'Almost there...',\n 'Polishing the details...'\n];\n\n/**\n * LoadingSpinner Component\n *\n * @component\n * @description\n * A highly customizable, animated loading spinner component built with Framer Motion.\n * Supports multiple visual variants, sizes, custom messages, and advanced styling options.\n * Perfect for indicating loading states across different contexts in your application.\n *\n * Features:\n * - Multiple spinner variants (dots, spinner, pulse)\n * - Three size options (small, medium, large)\n * - Rotating or static messages\n * - Customizable colors and styling\n * - Full-screen overlay support\n * - Decorative sparkle effects\n * - Accessibility support (respects reduced motion preferences)\n * - Theme-aware styling\n *\n * @example\n * // Basic usage\n * <LoadingSpinner />\n *\n * @example\n * // With custom message and variant\n * <LoadingSpinner\n * variant=\"pulse\"\n * message=\"Saving your changes...\"\n * size=\"large\"\n * />\n *\n * @example\n * // Full-screen overlay\n * <LoadingSpinner\n * fullScreen\n * overlay\n * message=\"Loading application...\"\n * />\n *\n * @example\n * // Custom messages and styling\n * <LoadingSpinner\n * customMessages={['Processing...', 'Almost done...', 'Final touches...']}\n * color=\"#ff6b6b\"\n * backgroundColor=\"#f8f9fa\"\n * showSparkles={false}\n * />\n *\n * @param {LoadingSpinnerProps} props - The props for the LoadingSpinner component\n * @returns {JSX.Element} The rendered LoadingSpinner component\n */\nexport const LoadingSpinner: React.FC<LoadingSpinnerProps> = ({\n message,\n size = 'medium',\n variant = 'dots',\n className = '',\n showMessage = true,\n customMessages,\n messageRotationInterval = 2500,\n showSparkles = true,\n fullScreen = false,\n overlay = false,\n color,\n backgroundColor\n}) => {\n const messagesToUse = customMessages || defaultMessages;\n const [currentMessageIndex, setCurrentMessageIndex] = useState(0);\n const [currentMessage, setCurrentMessage] = useState(message || messagesToUse[0]);\n\n useEffect(() => {\n if (!message && showMessage) {\n const interval = setInterval(() => {\n setCurrentMessageIndex((prev) => (prev + 1) % messagesToUse.length);\n }, messageRotationInterval);\n\n return () => clearInterval(interval);\n }\n return undefined;\n }, [message, showMessage, messagesToUse.length, messageRotationInterval]);\n\n useEffect(() => {\n if (!message && showMessage) {\n setCurrentMessage(messagesToUse[currentMessageIndex]);\n }\n }, [currentMessageIndex, message, messagesToUse, showMessage]);\n\n const containerClasses = [\n styles.loadingContainer,\n styles[size],\n styles[variant],\n fullScreen && styles.fullScreen,\n overlay && styles.overlay,\n className\n ].filter(Boolean).join(' ');\n\n const customStyle = {\n ...(color && { '--spinner-color': color }),\n ...(backgroundColor && { '--spinner-background': backgroundColor }),\n } as React.CSSProperties;\n\n const renderDots = () => (\n <motion.div\n className={styles.dotsSpinner}\n animate={{ rotate: 360 }}\n transition={{\n duration: 2,\n repeat: Infinity,\n ease: 'linear'\n }}\n >\n <motion.div\n className={styles.dot1}\n animate={{\n scale: [1, 1.3, 1],\n y: [0, -6, 0]\n }}\n transition={{\n duration: 1.5,\n repeat: Infinity,\n ease: 'easeInOut',\n delay: 0\n }}\n />\n <motion.div\n className={styles.dot2}\n animate={{\n scale: [1, 1.3, 1],\n y: [0, -6, 0]\n }}\n transition={{\n duration: 1.5,\n repeat: Infinity,\n ease: 'easeInOut',\n delay: 0.5\n }}\n />\n <motion.div\n className={styles.dot3}\n animate={{\n scale: [1, 1.3, 1],\n y: [0, -6, 0]\n }}\n transition={{\n duration: 1.5,\n repeat: Infinity,\n ease: 'easeInOut',\n delay: 1\n }}\n />\n </motion.div>\n );\n\n const renderSpinner = () => (\n <motion.div\n className={styles.circleSpinner}\n animate={{ rotate: 360 }}\n transition={{\n duration: 1,\n repeat: Infinity,\n ease: 'linear'\n }}\n />\n );\n\n const renderPulse = () => (\n <motion.div\n className={styles.pulseSpinner}\n animate={{\n scale: [1, 1.2, 1],\n opacity: [1, 0.7, 1]\n }}\n transition={{\n duration: 1.5,\n repeat: Infinity,\n ease: 'easeInOut'\n }}\n />\n );\n\n const renderSpinnerVariant = () => {\n switch (variant) {\n case 'spinner':\n return renderSpinner();\n case 'pulse':\n return renderPulse();\n case 'dots':\n default:\n return renderDots();\n }\n };\n\n return (\n <div className={containerClasses} style={customStyle}>\n {renderSpinnerVariant()}\n\n {showMessage && (\n <AnimatePresence mode=\"wait\">\n <motion.p\n key={currentMessage}\n className={styles.loadingText}\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -10 }}\n transition={{\n duration: 0.4,\n ease: 'easeOut'\n }}\n >\n {currentMessage}\n </motion.p>\n </AnimatePresence>\n )}\n\n {showSparkles && (\n <div className={styles.sparkleContainer}>\n {[...Array(4)].map((_, i) => (\n <motion.div\n key={i}\n className={styles.sparkle}\n animate={{\n opacity: [0, 1, 0],\n scale: [0.5, 1, 0.5],\n rotate: [0, 180, 360]\n }}\n transition={{\n duration: 3,\n repeat: Infinity,\n delay: i * 0.75,\n ease: 'easeInOut'\n }}\n style={{\n left: `${20 + (i % 2) * 60}%`,\n top: `${20 + Math.floor(i / 2) * 60}%`\n }}\n />\n ))}\n </div>\n )}\n </div>\n );\n};","import { useEffect, useState, useRef } from 'react';\nimport { motion, HTMLMotionProps } from 'framer-motion';\nimport styles from './DecryptedText.module.css';\n\nexport interface DecryptedTextProps extends Omit<HTMLMotionProps<'span'>, 'children'> {\n /** The text to decrypt/reveal */\n text: string;\n /** Animation interval in milliseconds */\n speed?: number;\n /** Maximum iterations before revealing all text (non-sequential mode) */\n maxIterations?: number;\n /** Whether to reveal characters one-by-one or scramble all at once */\n sequential?: boolean;\n /** Starting point for sequential reveal */\n revealDirection?: 'start' | 'end' | 'center';\n /** Limit scrambling to characters from the original text only */\n useOriginalCharsOnly?: boolean;\n /** Pool of characters to use for scrambling animation */\n characters?: string;\n /** Class name for revealed characters */\n className?: string;\n /** Class name for the parent container */\n parentClassName?: string;\n /** Class name for encrypted/scrambled characters */\n encryptedClassName?: string;\n /** When to trigger the animation */\n animateOn?: 'view' | 'hover' | 'both';\n}\n\n/**\n * DecryptedText Component\n *\n * Creates an animated text reveal effect where characters progressively\n * decrypt from scrambled characters to the final text.\n *\n * @example\n * // Basic usage - animates on hover\n * <DecryptedText text=\"Hello World\" />\n *\n * @example\n * // Animate when scrolled into view\n * <DecryptedText text=\"Welcome\" animateOn=\"view\" />\n *\n * @example\n * // Sequential reveal from center\n * <DecryptedText\n * text=\"Decrypt Me\"\n * sequential\n * revealDirection=\"center\"\n * speed={30}\n * />\n */\nexport const DecryptedText: React.FC<DecryptedTextProps> = ({\n text,\n speed = 50,\n maxIterations = 10,\n sequential = false,\n revealDirection = 'start',\n useOriginalCharsOnly = false,\n characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',\n className = '',\n parentClassName = '',\n encryptedClassName = '',\n animateOn = 'hover',\n ...props\n}) => {\n const [displayText, setDisplayText] = useState<string>(text);\n const [isHovering, setIsHovering] = useState<boolean>(false);\n const [isScrambling, setIsScrambling] = useState<boolean>(false);\n const [revealedIndices, setRevealedIndices] = useState<Set<number>>(new Set());\n const [hasAnimated, setHasAnimated] = useState<boolean>(false);\n const containerRef = useRef<HTMLSpanElement>(null);\n\n useEffect(() => {\n let interval: NodeJS.Timeout;\n let currentIteration = 0;\n\n const getNextIndex = (revealedSet: Set<number>): number => {\n const textLength = text.length;\n switch (revealDirection) {\n case 'start':\n return revealedSet.size;\n case 'end':\n return textLength - 1 - revealedSet.size;\n case 'center': {\n const middle = Math.floor(textLength / 2);\n const offset = Math.floor(revealedSet.size / 2);\n const nextIndex =\n revealedSet.size % 2 === 0 ? middle + offset : middle - offset - 1;\n\n if (nextIndex >= 0 && nextIndex < textLength && !revealedSet.has(nextIndex)) {\n return nextIndex;\n }\n\n for (let i = 0; i < textLength; i++) {\n if (!revealedSet.has(i)) return i;\n }\n return 0;\n }\n default:\n return revealedSet.size;\n }\n };\n\n const availableChars = useOriginalCharsOnly\n ? Array.from(new Set(text.split(''))).filter((char) => char !== ' ')\n : characters.split('');\n\n const shuffleText = (originalText: string, currentRevealed: Set<number>): string => {\n if (useOriginalCharsOnly) {\n const positions = originalText.split('').map((char, i) => ({\n char,\n isSpace: char === ' ',\n index: i,\n isRevealed: currentRevealed.has(i),\n }));\n\n const nonSpaceChars = positions\n .filter((p) => !p.isSpace && !p.isRevealed)\n .map((p) => p.char);\n\n for (let i = nonSpaceChars.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [nonSpaceChars[i], nonSpaceChars[j]] = [nonSpaceChars[j], nonSpaceChars[i]];\n }\n\n let charIndex = 0;\n return positions\n .map((p) => {\n if (p.isSpace) return ' ';\n if (p.isRevealed) return originalText[p.index];\n return nonSpaceChars[charIndex++];\n })\n .join('');\n } else {\n return originalText\n .split('')\n .map((char, i) => {\n if (char === ' ') return ' ';\n if (currentRevealed.has(i)) return originalText[i];\n return availableChars[Math.floor(Math.random() * availableChars.length)];\n })\n .join('');\n }\n };\n\n if (isHovering) {\n setIsScrambling(true);\n interval = setInterval(() => {\n setRevealedIndices((prevRevealed) => {\n if (sequential) {\n if (prevRevealed.size < text.length) {\n const nextIndex = getNextIndex(prevRevealed);\n const newRevealed = new Set(prevRevealed);\n newRevealed.add(nextIndex);\n setDisplayText(shuffleText(text, newRevealed));\n return newRevealed;\n } else {\n clearInterval(interval);\n setIsScrambling(false);\n return prevRevealed;\n }\n } else {\n setDisplayText(shuffleText(text, prevRevealed));\n currentIteration++;\n if (currentIteration >= maxIterations) {\n clearInterval(interval);\n setIsScrambling(false);\n setDisplayText(text);\n }\n return prevRevealed;\n }\n });\n }, speed);\n } else {\n setDisplayText(text);\n setRevealedIndices(new Set());\n setIsScrambling(false);\n }\n\n return () => {\n if (interval) clearInterval(interval);\n };\n }, [\n isHovering,\n text,\n speed,\n maxIterations,\n sequential,\n revealDirection,\n characters,\n useOriginalCharsOnly,\n ]);\n\n useEffect(() => {\n if (animateOn !== 'view' && animateOn !== 'both') return;\n\n const observerCallback = (entries: IntersectionObserverEntry[]) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting && !hasAnimated) {\n setIsHovering(true);\n setHasAnimated(true);\n }\n });\n };\n\n const observerOptions = {\n root: null,\n rootMargin: '0px',\n threshold: 0.1,\n };\n\n const observer = new IntersectionObserver(observerCallback, observerOptions);\n const currentRef = containerRef.current;\n if (currentRef) {\n observer.observe(currentRef);\n }\n\n return () => {\n if (currentRef) {\n observer.unobserve(currentRef);\n }\n };\n }, [animateOn, hasAnimated]);\n\n const hoverProps =\n animateOn === 'hover' || animateOn === 'both'\n ? {\n onMouseEnter: () => setIsHovering(true),\n onMouseLeave: () => setIsHovering(false),\n }\n : {};\n\n return (\n <motion.span\n className={`${styles.wrapper} ${parentClassName}`}\n ref={containerRef}\n {...hoverProps}\n {...props}\n >\n <span className={styles.srOnly}>{displayText}</span>\n\n <span aria-hidden=\"true\">\n {displayText.split('').map((char, index) => {\n const isRevealedOrDone =\n revealedIndices.has(index) || !isScrambling || !isHovering;\n\n return (\n <span\n key={index}\n className={isRevealedOrDone ? className : encryptedClassName}\n >\n {char}\n </span>\n );\n })}\n </span>\n </motion.span>\n );\n};\n","import React, { useRef } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { Button } from '../../atoms/Button';\nimport { TextInput } from '../../atoms/TextInput';\nimport { TextArea } from '../../atoms/TextArea';\nimport styles from './ArrayInput.module.css';\n\n/**\n * Configuration for a field in complex object arrays\n * @interface FieldConfig\n */\nexport interface FieldConfig {\n /** The property name in the object */\n name: string;\n /** Display label for the field */\n label: string;\n /** HTML input type (text, email, url, etc.) */\n type?: string;\n /** Placeholder text for the input */\n placeholder?: string;\n /** Whether to use textarea for multiline input */\n multiline?: boolean;\n /** Number of rows for textarea (default: 3) */\n rows?: number;\n}\n\n/**\n * Base props that all array inputs share\n * @interface BaseArrayInputProps\n */\ninterface BaseArrayInputProps {\n /** Label text displayed above the array input */\n label: string;\n /** Style object for individual array items */\n itemStyle?: React.CSSProperties;\n /** Style object for input fields */\n inputStyle?: React.CSSProperties;\n}\n\n/**\n * Props for simple string array input\n * @interface SimpleArrayInputProps\n */\ninterface SimpleArrayInputProps extends BaseArrayInputProps {\n /** Input type - defaults to 'simple' for string arrays */\n type?: 'simple';\n /** Array of string values */\n values: string[];\n /** Callback fired when array values change */\n onChange: (values: string[]) => void;\n /** Placeholder text for individual input fields */\n placeholder?: string;\n /** Whether to use textarea for multiline input */\n multiline?: boolean;\n /** Number of rows for textarea (default: 3) */\n rows?: number;\n /** Button variant for add button (default: 'primary') */\n buttonVariant?: 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger';\n}\n\n/**\n * Props for complex object array input\n * @interface ComplexArrayInputProps\n * @template T - The type of objects in the array\n */\ninterface ComplexArrayInputProps<T extends Record<string, string>> extends BaseArrayInputProps {\n /** Input type - must be 'complex' for object arrays */\n type: 'complex';\n /** Array of object values */\n values: T[];\n /** Callback fired when array values change */\n onChange: (values: T[]) => void;\n /** Configuration for the fields in each object */\n fields: FieldConfig[];\n /** Optional function to generate unique keys for React rendering */\n getKey?: (item: T, index: number) => string;\n /** Button variant for add button (default: 'primary') */\n buttonVariant?: 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger';\n}\n\nexport type ArrayInputProps<T extends Record<string, string> = Record<string, string>> = \n | SimpleArrayInputProps\n | ComplexArrayInputProps<T>;\n\n/**\n * ArrayInput component - Versatile dynamic list manager\n * \n * @component\n * @description\n * A flexible component that can handle both simple string arrays and complex object arrays.\n * Users can add, remove, and edit items dynamically. Supports custom field configurations\n * for complex data structures.\n * \n * @example\n * // Simple string array\n * <ArrayInput\n * label=\"Tags\"\n * values={tags}\n * onChange={setTags}\n * placeholder=\"Enter tag\"\n * />\n * \n * @example\n * // Complex object array\n * <ArrayInput\n * type=\"complex\"\n * label=\"Social Links\"\n * values={links}\n * onChange={setLinks}\n * fields={[\n * { name: 'label', label: 'Label', placeholder: 'GitHub' },\n * { name: 'url', label: 'URL', type: 'url', placeholder: 'https://github.com/...' }\n * ]}\n * />\n */\nexport function ArrayInput<T extends Record<string, string> = Record<string, string>>(\n props: Readonly<ArrayInputProps<T>>\n) {\n if (props.type === 'complex') {\n return <ComplexArrayInput {...props} />;\n }\n \n return <SimpleArrayInput {...props as SimpleArrayInputProps} />;\n}\n\n// Simple string array implementation\nfunction SimpleArrayInput({ \n label, \n values, \n onChange, \n placeholder,\n itemStyle,\n inputStyle,\n multiline = false,\n rows = 3,\n buttonVariant = 'primary'\n}: Readonly<SimpleArrayInputProps>) {\n // Use a ref to store stable IDs that persist across renders\n const itemIdsRef = useRef<string[]>([]);\n \n // Ensure we have an ID for each value\n while (itemIdsRef.current.length < values.length) {\n itemIdsRef.current.push(`item-${Date.now()}-${Math.random()}`);\n }\n \n // Remove excess IDs if values array shrunk\n if (itemIdsRef.current.length > values.length) {\n itemIdsRef.current = itemIdsRef.current.slice(0, values.length);\n }\n \n const handleChange = (index: number, value: string) => {\n const newValues = [...values];\n newValues[index] = value;\n onChange(newValues);\n };\n\n const handleAdd = () => {\n // Add a new ID for the new item\n itemIdsRef.current.push(`item-${Date.now()}-${Math.random()}`);\n onChange([...values, '']);\n };\n\n const handleRemove = (index: number) => {\n const newValues = values.filter((_, i) => i !== index);\n // Remove the corresponding ID\n itemIdsRef.current.splice(index, 1);\n onChange(newValues);\n };\n\n return (\n <div className={styles.arrayInput}>\n <h3 className={styles.arrayInputLabel}>{label}</h3>\n <div>\n <AnimatePresence>\n {values.map((value, index) => (\n <motion.div \n key={itemIdsRef.current[index]} \n className={styles.arrayInputItem}\n style={itemStyle}\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0 }}\n transition={{ \n duration: 0.3,\n ease: \"easeInOut\",\n layout: { duration: 0.2 }\n }}\n >\n <div className={styles.inputWrapper}>\n {multiline ? (\n <div style={inputStyle}>\n <TextArea\n label=\"\"\n value={value}\n onChange={(newValue) => handleChange(index, newValue)}\n placeholder={placeholder}\n rows={rows}\n compact\n />\n </div>\n ) : (\n <input\n type=\"text\"\n value={value}\n onChange={(e) => handleChange(index, e.target.value)}\n placeholder={placeholder}\n className={styles.input}\n style={inputStyle}\n />\n )}\n </div>\n <Button \n variant=\"ghost\"\n size=\"small\"\n onClick={() => handleRemove(index)}\n aria-label=\"Remove item\"\n className={styles.removeButton}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <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\"/>\n </svg>\n </Button>\n </motion.div>\n ))}\n </AnimatePresence>\n </div>\n <Button \n variant={buttonVariant}\n size=\"small\"\n onClick={handleAdd}\n className={styles.addButton}\n >\n {label}\n </Button>\n </div>\n );\n}\n\n// Complex object array implementation\nfunction ComplexArrayInput<T extends Record<string, string>>({ \n label, \n values, \n onChange, \n fields,\n getKey,\n itemStyle,\n inputStyle,\n buttonVariant = 'primary'\n}: Readonly<ComplexArrayInputProps<T>>) {\n const handleChange = (index: number, field: string, value: string) => {\n const newValues = [...values];\n newValues[index] = { ...newValues[index], [field]: value };\n onChange(newValues);\n };\n\n const handleAdd = () => {\n const newItem = fields.reduce((acc, field) => {\n return { ...acc, [field.name]: '' };\n }, {} as T);\n onChange([...values, newItem]);\n };\n\n const handleRemove = (index: number) => {\n const newValues = values.filter((_, i) => i !== index);\n onChange(newValues);\n };\n\n const generateKey = (item: T, index: number) => {\n if (getKey) return getKey(item, index);\n \n // Generate key from all field values\n return fields.map(f => item[f.name] || '').join('-') + `-${index}`;\n };\n\n return (\n <div className={styles.arrayInput}>\n <h3 className={styles.arrayInputLabel}>{label}</h3>\n <div>\n <AnimatePresence>\n {values.map((value, index) => (\n <motion.div \n key={generateKey(value, index)} \n className={`${styles.arrayInputItem} ${fields.length > 1 ? styles.complexItem : ''}`}\n style={itemStyle}\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0 }}\n transition={{ \n duration: 0.3,\n ease: \"easeInOut\",\n layout: { duration: 0.2 }\n }}\n >\n <div className={styles.fieldsWrapper}>\n {fields.map((field) => (\n <div key={field.name} style={inputStyle}>\n {field.multiline ? (\n <TextArea\n value={value[field.name] || ''}\n onChange={(newValue) => handleChange(index, field.name, newValue)}\n label={field.label}\n placeholder={field.placeholder}\n rows={field.rows}\n compact\n />\n ) : (\n <TextInput\n value={value[field.name] || ''}\n onChange={(newValue) => handleChange(index, field.name, newValue)}\n label={field.label}\n type={field.type}\n placeholder={field.placeholder}\n />\n )}\n </div>\n ))}\n </div>\n <Button \n variant=\"ghost\"\n size=\"small\"\n onClick={() => handleRemove(index)}\n aria-label=\"Remove item\"\n className={styles.removeButton}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <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\"/>\n </svg>\n </Button>\n </motion.div>\n ))}\n </AnimatePresence>\n </div>\n <Button \n variant={buttonVariant}\n size=\"small\"\n onClick={handleAdd}\n className={styles.addButton}\n >\n Add {label}\n </Button>\n </div>\n );\n}\n\n// Export the interface for backward compatibility\nexport interface LabeledLink {\n label: string;\n url: string;\n}","import React, { useState, useEffect, useRef } from 'react';\nimport { motion } from 'framer-motion';\nimport { Edit, Check, X } from 'lucide-react';\nimport styles from './EditFAB.module.css';\n\nexport interface EditFABProps {\n canEdit: boolean;\n isEditMode: boolean;\n hasUnsavedChanges?: boolean;\n isSaving?: boolean;\n onEnterEditMode: () => void;\n onExitEditMode: () => void;\n position?: {\n bottom?: string | number;\n right?: string | number;\n top?: string | number;\n left?: string | number;\n };\n}\n\nexport const EditFAB: React.FC<EditFABProps> = ({\n canEdit,\n isEditMode,\n hasUnsavedChanges = false,\n isSaving = false,\n onEnterEditMode,\n onExitEditMode,\n position = { bottom: 32, right: 32 }\n}) => {\n const [isMobile, setIsMobile] = useState(false);\n const [currentPosition, setCurrentPosition] = useState<{ x: number; y: number } | null>(null);\n const [isDragging, setIsDragging] = useState(false);\n const fabRef = useRef<HTMLButtonElement>(null);\n const dragStartPos = useRef<{ x: number; y: number } | null>(null);\n const elementStartPos = useRef<{ x: number; y: number } | null>(null);\n\n useEffect(() => {\n const checkMobile = () => {\n setIsMobile(window.innerWidth <= 768);\n };\n checkMobile();\n window.addEventListener('resize', checkMobile);\n \n return () => {\n window.removeEventListener('resize', checkMobile);\n };\n }, []);\n\n // Touch handlers for mobile dragging\n const handleTouchStart = (e: React.TouchEvent) => {\n if (!isMobile) return;\n \n const touch = e.touches[0];\n const rect = fabRef.current?.getBoundingClientRect();\n \n if (rect) {\n dragStartPos.current = { x: touch.clientX, y: touch.clientY };\n elementStartPos.current = { \n x: rect.left + rect.width / 2, \n y: rect.top + rect.height / 2 \n };\n setIsDragging(true);\n }\n };\n\n const handleTouchMove = (e: React.TouchEvent) => {\n if (!isDragging || !dragStartPos.current || !elementStartPos.current) return;\n \n e.preventDefault();\n const touch = e.touches[0];\n \n const deltaX = touch.clientX - dragStartPos.current.x;\n const deltaY = touch.clientY - dragStartPos.current.y;\n \n let newX = elementStartPos.current.x + deltaX;\n let newY = elementStartPos.current.y + deltaY;\n \n // Keep within viewport bounds\n const padding = 30;\n newX = Math.max(padding, Math.min(window.innerWidth - padding, newX));\n newY = Math.max(padding, Math.min(window.innerHeight - padding, newY));\n \n setCurrentPosition({ x: newX, y: newY });\n };\n\n const handleTouchEnd = () => {\n setIsDragging(false);\n dragStartPos.current = null;\n elementStartPos.current = null;\n };\n\n const handleClick = (_e: React.MouseEvent) => {\n // Only trigger click if we haven't been dragging\n if (!isDragging && !isSaving) {\n if (isEditMode) {\n onExitEditMode();\n } else {\n onEnterEditMode();\n }\n }\n };\n\n if (!canEdit) return null;\n\n const getPositionStyles = (): React.CSSProperties => {\n if (currentPosition) {\n return {\n position: 'fixed',\n left: `${currentPosition.x}px`,\n top: `${currentPosition.y}px`,\n transform: 'translate(-50%, -50%)',\n touchAction: 'none'\n };\n }\n \n return {\n position: 'fixed',\n ...position,\n touchAction: isMobile ? 'none' : 'auto'\n };\n };\n\n const getVariantClass = () => {\n if (isSaving) return styles.primary;\n if (isEditMode) {\n return hasUnsavedChanges ? styles.success : styles.secondary;\n }\n return styles.primary;\n };\n\n const getIcon = () => {\n if (isSaving) {\n return <div className={styles.loader} />;\n }\n if (isEditMode) {\n return hasUnsavedChanges ? <Check size={24} /> : <X size={24} />;\n }\n return <Edit size={24} />;\n };\n\n const getAriaLabel = () => {\n if (isSaving) return \"Saving changes\";\n if (isEditMode) {\n return hasUnsavedChanges ? \"Save and exit edit mode\" : \"Exit edit mode\";\n }\n return \"Enter edit mode\";\n };\n\n return (\n <motion.button\n ref={fabRef}\n className={`${styles.fab} ${getVariantClass()} ${isMobile ? styles.draggable : ''} ${isDragging ? styles.dragging : ''}`}\n style={getPositionStyles()}\n onClick={handleClick}\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n disabled={isSaving}\n aria-label={getAriaLabel()}\n initial={{ scale: 0, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n exit={{ scale: 0, opacity: 0 }}\n whileHover={!isSaving && !isDragging ? { scale: 1.1 } : {}}\n whileTap={!isSaving && !isDragging ? { scale: 0.9 } : {}}\n transition={{ \n type: \"spring\", \n stiffness: 260, \n damping: 20\n }}\n >\n {getIcon()}\n </motion.button>\n );\n};","import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { Search, X, Folder, Users, Book, MessageSquare, UserPlus } from 'lucide-react';\nimport styles from './styles/SearchBar.module.css';\n\nexport interface FilterOption {\n value: string;\n label: string;\n icon: React.ElementType;\n}\n\nexport interface SearchResult {\n id: string;\n type: string;\n title?: string;\n subtitle?: string;\n meta?: string;\n}\n\nexport interface SearchBarProps {\n className?: string;\n placeholder?: string;\n onSearch?: (query: string, filter: string) => Promise<SearchResult[]>;\n onResultClick?: (result: SearchResult) => void;\n onClear?: () => void;\n debounceDelay?: number;\n minSearchLength?: number;\n showFilter?: boolean;\n enableKeyboardShortcut?: boolean;\n filterOptions?: FilterOption[];\n entityIcons?: { [key: string]: React.ElementType };\n}\n\n// Default filter options for backwards compatibility\nconst defaultFilterOptions: FilterOption[] = [\n { value: 'all', label: 'All', icon: Search },\n { value: 'projects', label: 'Projects', icon: Folder },\n { value: 'clients', label: 'Clients', icon: Users },\n { value: 'contacts', label: 'Contacts', icon: Book },\n { value: 'interactions', label: 'Interactions', icon: MessageSquare },\n { value: 'team', label: 'Team', icon: UserPlus },\n];\n\nconst defaultEntityIcons = {\n projects: Folder,\n clients: Users,\n contacts: Book,\n interactions: MessageSquare,\n team: UserPlus,\n};\n\n// Legacy type for backwards compatibility\nexport type SearchFilter = 'all' | 'projects' | 'clients' | 'contacts' | 'interactions' | 'team';\n\nexport const SearchBar: React.FC<SearchBarProps> = ({ \n className,\n placeholder = \"Search (Ctrl+Space)...\",\n onSearch,\n onResultClick,\n onClear,\n debounceDelay = 300,\n minSearchLength = 2,\n showFilter = true,\n enableKeyboardShortcut = true,\n filterOptions: customFilterOptions,\n entityIcons: customEntityIcons\n}) => {\n const filterOptions = customFilterOptions ?? defaultFilterOptions;\n const entityIcons = customEntityIcons ?? defaultEntityIcons;\n \n const [query, setQuery] = useState('');\n const [filter, setFilter] = useState<string>(filterOptions[0]?.value ?? 'all');\n const [results, setResults] = useState<SearchResult[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n const searchRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const debounceTimerRef = useRef<NodeJS.Timeout>();\n const resultsRef = useRef<HTMLDivElement>(null);\n\n // Perform search with debounce\n const performSearch = useCallback(async (searchQuery: string, searchFilter: string) => {\n if (searchQuery.trim().length < minSearchLength) {\n setResults([]);\n setIsDropdownOpen(false);\n return;\n }\n\n if (!onSearch) {\n // If no search handler provided, just show empty results\n setResults([]);\n setIsDropdownOpen(false);\n return;\n }\n\n setIsLoading(true);\n try {\n const searchResults = await onSearch(searchQuery, searchFilter);\n setResults(searchResults);\n setIsDropdownOpen(searchResults.length > 0);\n setHighlightedIndex(-1);\n } catch (error) {\n console.error('Search error:', error);\n setResults([]);\n setIsDropdownOpen(false);\n } finally {\n setIsLoading(false);\n }\n }, [onSearch, minSearchLength]);\n\n // Handle input change with debounce\n useEffect(() => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n\n if (query.trim()) {\n debounceTimerRef.current = setTimeout(() => {\n performSearch(query, filter);\n }, debounceDelay);\n } else {\n setResults([]);\n setIsDropdownOpen(false);\n }\n\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }, [query, filter, performSearch, debounceDelay]);\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (searchRef.current && !searchRef.current.contains(event.target as Node)) {\n setIsDropdownOpen(false);\n setHighlightedIndex(-1);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n // Global keyboard shortcut for search (Ctrl+Space)\n useEffect(() => {\n if (!enableKeyboardShortcut) return;\n\n const handleGlobalKeyDown = (e: KeyboardEvent) => {\n // Ctrl+Space or Cmd+Space to focus search\n if ((e.ctrlKey || e.metaKey) && e.code === 'Space') {\n e.preventDefault();\n inputRef.current?.focus();\n inputRef.current?.select();\n }\n };\n\n document.addEventListener('keydown', handleGlobalKeyDown);\n return () => document.removeEventListener('keydown', handleGlobalKeyDown);\n }, [enableKeyboardShortcut]);\n\n // Auto-scroll to highlighted item\n useEffect(() => {\n if (highlightedIndex >= 0 && resultsRef.current) {\n const highlightedElement = resultsRef.current.querySelector(\n `[data-result-index=\"${highlightedIndex}\"]`\n );\n if (highlightedElement) {\n highlightedElement.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest'\n });\n }\n }\n }, [highlightedIndex]);\n\n // Handle keyboard navigation\n const handleKeyDown = (e: React.KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isDropdownOpen && results.length > 0) {\n setIsDropdownOpen(true);\n setHighlightedIndex(0);\n } else if (results.length > 0) {\n setHighlightedIndex(prev => \n prev < results.length - 1 ? prev + 1 : 0\n );\n }\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (isDropdownOpen && results.length > 0) {\n setHighlightedIndex(prev => \n prev > 0 ? prev - 1 : results.length - 1\n );\n }\n break;\n case 'Enter':\n e.preventDefault();\n if (!isDropdownOpen && results.length > 0) {\n // If dropdown is closed, open it and select first result\n setIsDropdownOpen(true);\n setHighlightedIndex(0);\n } else if (results.length > 0) {\n // If no item is highlighted, select the first one\n const indexToUse = highlightedIndex >= 0 ? highlightedIndex : 0;\n if (indexToUse < results.length) {\n handleResultClick(results[indexToUse]);\n }\n }\n break;\n case 'Escape':\n setIsDropdownOpen(false);\n setHighlightedIndex(-1);\n inputRef.current?.blur();\n break;\n }\n };\n\n // Handle result click\n const handleResultClick = (result: SearchResult) => {\n if (onResultClick) {\n onResultClick(result);\n }\n setQuery('');\n setIsDropdownOpen(false);\n setHighlightedIndex(-1);\n };\n\n // Clear search\n const handleClear = () => {\n setQuery('');\n setResults([]);\n setIsDropdownOpen(false);\n setHighlightedIndex(-1);\n inputRef.current?.focus();\n if (onClear) {\n onClear();\n }\n };\n\n // Group results by type\n const groupedResults = results.reduce((acc, result) => {\n if (!acc[result.type]) {\n acc[result.type] = [];\n }\n acc[result.type].push(result);\n return acc;\n }, {} as Record<string, SearchResult[]>);\n\n // Highlight matching text\n const highlightMatch = (text: string | undefined, highlight: string) => {\n if (!text || !highlight.trim()) return text || '';\n \n const regex = new RegExp(`(${highlight.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')})`, 'gi');\n const parts = text.split(regex);\n \n return parts.map((part, index) => \n regex.test(part) ? (\n <mark key={index} className={styles.highlight}>{part}</mark>\n ) : (\n part\n )\n );\n };\n\n return (\n <div ref={searchRef} className={`${styles.searchContainer} ${className || ''}`}>\n <div className={styles.searchInputWrapper}>\n <Search className={styles.searchIcon} />\n \n <input\n ref={inputRef}\n type=\"text\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n onKeyDown={handleKeyDown}\n onFocus={() => query.trim() && results.length > 0 && setIsDropdownOpen(true)}\n placeholder={placeholder}\n className={styles.searchInput}\n aria-label=\"Search\"\n aria-expanded={isDropdownOpen}\n aria-controls=\"search-results\"\n aria-autocomplete=\"list\"\n />\n\n {query && (\n <motion.button\n className={styles.clearButton}\n onClick={handleClear}\n whileHover={{ scale: 1.1 }}\n whileTap={{ scale: 0.9 }}\n initial={{ opacity: 0, scale: 0.8 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.8 }}\n >\n <X />\n </motion.button>\n )}\n\n {showFilter && (\n <select\n value={filter}\n onChange={(e) => setFilter(e.target.value)}\n className={styles.filterSelect}\n aria-label=\"Filter search results\"\n >\n {filterOptions.map(option => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n )}\n </div>\n\n <AnimatePresence>\n {isDropdownOpen && (\n <motion.div\n ref={resultsRef}\n id=\"search-results\"\n className={styles.resultsDropdown}\n initial={{ opacity: 0, y: -10 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -10 }}\n transition={{ duration: 0.2 }}\n >\n {isLoading ? (\n <div className={styles.loadingState}>\n <div className={styles.spinner} />\n <span>Searching...</span>\n </div>\n ) : results.length === 0 ? (\n <div className={styles.emptyState}>\n No results found for \"{query}\"\n </div>\n ) : (\n <div className={styles.resultsGroups}>\n {Object.entries(groupedResults).map(([type, groupResults]) => {\n const Icon = entityIcons[type as keyof typeof entityIcons];\n return (\n <div key={type} className={styles.resultGroup}>\n <div className={styles.groupHeader}>\n {Icon && <Icon className={styles.groupIcon} />}\n <span className={styles.groupTitle}>\n {type.charAt(0).toUpperCase() + type.slice(1)}\n </span>\n <span className={styles.groupCount}>\n {groupResults.length}\n </span>\n </div>\n <div className={styles.groupResults}>\n {groupResults.map((result) => {\n const globalIndex = results.indexOf(result);\n return (\n <motion.button\n key={`${result.type}-${result.id}`}\n data-result-index={globalIndex}\n className={`${styles.resultItem} ${\n highlightedIndex === globalIndex ? styles.highlighted : ''\n }`}\n onClick={() => handleResultClick(result)}\n whileHover={{ x: 4 }}\n onMouseEnter={() => setHighlightedIndex(globalIndex)}\n >\n <div className={styles.resultContent}>\n <div className={styles.resultTitle}>\n {highlightMatch(result.title || 'Untitled', query)}\n </div>\n {result.subtitle && (\n <div className={styles.resultSubtitle}>\n {highlightMatch(result.subtitle, query)}\n </div>\n )}\n </div>\n {result.meta && (\n <div className={styles.resultMeta}>\n {result.meta}\n </div>\n )}\n </motion.button>\n );\n })}\n </div>\n </div>\n );\n })}\n </div>\n )}\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n};","import { useMemo } from 'react';\nimport dayjs from 'dayjs';\nimport { MobileTimePicker } from '@mui/x-date-pickers/MobileTimePicker';\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';\nimport { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';\nimport { createTheme, ThemeProvider } from '@mui/material/styles';\nimport styles from './TimeInput.module.css';\n\nconst lightTheme = createTheme({\n palette: {\n mode: 'light',\n primary: { main: '#3b82f6' },\n background: {\n default: '#f8fafc',\n paper: '#ffffff',\n },\n text: {\n primary: '#0f172a',\n secondary: '#475569',\n },\n },\n});\n\nconst darkTheme = createTheme({\n palette: {\n mode: 'dark',\n primary: { main: '#f5b829' },\n background: {\n default: '#010907',\n paper: '#0e1a19',\n },\n text: {\n primary: '#f1f5f9',\n secondary: '#cbd5e1',\n },\n },\n});\n\nexport interface TimeInputProps {\n label: string;\n value: string;\n onChange: (newValue: string) => void;\n placeholder?: string;\n onFocus?: () => void;\n onBlur?: () => void;\n error?: boolean;\n success?: boolean;\n loading?: boolean;\n disabled?: boolean;\n required?: boolean;\n className?: string;\n}\n\nexport function TimeInput({\n label,\n value,\n onChange,\n error = false,\n success = false,\n loading = false,\n disabled = false,\n required = false,\n className = '',\n}: Readonly<TimeInputProps>) {\n const dayjsValue = value ? dayjs(`2000-01-01 ${value}`) : null;\n\n const isDark =\n typeof document !== 'undefined' &&\n !!document.documentElement.getAttribute('data-theme')?.includes('dark');\n const muiTheme = useMemo(() => (isDark ? darkTheme : lightTheme), [isDark]);\n\n const getContainerClassName = () => {\n const classes = [styles.timeInput];\n if (error) classes.push(styles.error);\n if (success) classes.push(styles.success);\n if (loading) classes.push(styles.loading);\n if (disabled) classes.push(styles.disabled);\n if (className) classes.push(className);\n return classes.join(' ');\n };\n\n return (\n <div className={getContainerClassName()}>\n {label && (\n <label className={styles.label}>\n {label}\n {required && <span className={styles.required}>*</span>}\n </label>\n )}\n <ThemeProvider theme={muiTheme}>\n <LocalizationProvider dateAdapter={AdapterDayjs}>\n <MobileTimePicker\n value={dayjsValue}\n onChange={(newValue) => {\n onChange(newValue ? newValue.format('HH:mm') : '');\n }}\n ampm={false}\n views={['hours', 'minutes']}\n disabled={disabled || loading}\n slotProps={{\n textField: {\n size: 'small',\n fullWidth: true,\n className: styles.picker,\n sx: {\n '& .MuiPickersOutlinedInput-root': {\n fontFamily:\n \"'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, monospace\",\n fontSize: 'var(--font-size-lg)',\n borderRadius: 'var(--radius-lg)',\n color: 'var(--color-text) !important',\n '& .MuiPickersOutlinedInput-notchedOutline': {\n borderWidth: '2px !important',\n borderColor: 'var(--color-border) !important',\n },\n '&:hover .MuiPickersOutlinedInput-notchedOutline': {\n borderColor: 'var(--color-border-hover) !important',\n },\n '&.Mui-focused .MuiPickersOutlinedInput-notchedOutline': {\n borderColor: 'var(--color-primary) !important',\n },\n },\n '& .MuiIconButton-root': {\n color: 'var(--color-text-secondary) !important',\n },\n },\n },\n }}\n />\n </LocalizationProvider>\n </ThemeProvider>\n </div>\n );\n}\n","import React, { createContext, useContext, useState, useEffect } from 'react';\n\nexport type Theme = 'light' | 'dark' | 'lossito' | 'lossito-dark' | 'dao' | 'dao-dark' | 'crt';\n\ninterface ThemeContextType {\n theme: Theme;\n setTheme: (theme: Theme) => void;\n toggleTheme: () => void;\n}\n\nconst ThemeContext = createContext<ThemeContextType | undefined>(undefined);\n\nexport const useTheme = () => {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within a ThemeProvider');\n }\n return context;\n};\n\n/** Safe version of useTheme that returns null when outside a ThemeProvider */\nexport const useThemeSafe = (): ThemeContextType | null => {\n return useContext(ThemeContext) ?? null;\n};\n\ninterface ThemeProviderProps {\n children: React.ReactNode;\n defaultTheme?: Theme;\n storageKey?: string;\n}\n\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({\n children,\n defaultTheme = 'light',\n storageKey = 'app-theme',\n}) => {\n const [theme, setThemeState] = useState<Theme>(() => {\n // Check localStorage first\n const stored = localStorage.getItem(storageKey);\n if (stored && ['light', 'dark', 'lossito', 'lossito-dark', 'dao', 'dao-dark', 'crt'].includes(stored)) {\n return stored as Theme;\n }\n // Check system preference\n if (window.matchMedia('(prefers-color-scheme: dark)').matches) {\n return 'dark';\n }\n return defaultTheme;\n });\n\n const setTheme = (newTheme: Theme) => {\n setThemeState(newTheme);\n localStorage.setItem(storageKey, newTheme);\n };\n\n const toggleTheme = () => {\n const themeOrder: Theme[] = ['light', 'dark', 'lossito', 'lossito-dark', 'dao', 'dao-dark', 'crt'];\n const currentIndex = themeOrder.indexOf(theme);\n const nextIndex = (currentIndex + 1) % themeOrder.length;\n setTheme(themeOrder[nextIndex]);\n };\n\n useEffect(() => {\n const root = document.documentElement;\n \n // Apply theme attribute\n root.setAttribute('data-theme', theme);\n \n // Apply dark class if needed\n if (theme.includes('dark')) {\n root.classList.add('dark');\n } else {\n root.classList.remove('dark');\n }\n }, [theme]);\n\n // Listen for system theme changes\n useEffect(() => {\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handleChange = (e: MediaQueryListEvent) => {\n const stored = localStorage.getItem(storageKey);\n if (!stored) {\n setThemeState(e.matches ? 'dark' : 'light');\n }\n };\n\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }, [storageKey]);\n\n return (\n <ThemeContext.Provider value={{ theme, setTheme, toggleTheme }}>\n {children}\n </ThemeContext.Provider>\n );\n};","import React from 'react';\nimport { motion } from 'framer-motion';\nimport { Sun, Moon } from 'lucide-react';\nimport { useThemeSafe, Theme } from '../../organisms/ThemeProvider/ThemeProvider';\nimport styles from './ThemeSwitcher.module.css';\n\nexport interface ThemeOption {\n value: Theme;\n label: string;\n icon: React.ReactNode;\n}\n\nexport interface ThemeSwitcherProps {\n variant?: 'button' | 'dropdown' | 'toggle' | 'icon';\n showLabel?: boolean;\n className?: string;\n currentTheme?: Theme;\n onThemeChange?: (theme: Theme) => void;\n themes?: ThemeOption[];\n}\n\nexport const ThemeSwitcher: React.FC<ThemeSwitcherProps> = ({\n variant = 'button',\n showLabel = false,\n className = '',\n currentTheme,\n onThemeChange,\n themes: customThemes,\n}) => {\n // Use safe version that returns null when outside a ThemeProvider\n const contextTheme = useThemeSafe();\n\n const theme = currentTheme ?? contextTheme?.theme ?? 'light';\n const setTheme = onThemeChange ?? contextTheme?.setTheme ?? (() => {});\n\n const defaultThemes: ThemeOption[] = [\n { value: 'light', label: 'Light', icon: <Sun /> },\n { value: 'dark', label: 'Dark', icon: <Moon /> },\n { value: 'lossito', label: 'Lossito Light', icon: '✨' },\n { value: 'lossito-dark', label: 'Lossito Dark', icon: '🌑' },\n { value: 'dao', label: 'Dao Light', icon: '⬜' },\n { value: 'dao-dark', label: 'Dao Dark', icon: '⬛' },\n ];\n\n const themes = customThemes ?? defaultThemes;\n\n const currentThemeIndex = themes.findIndex(t => t.value === theme);\n const currentThemeData = themes[currentThemeIndex] ?? themes[0];\n\n if (variant === 'toggle') {\n // Simple toggle between light and dark\n const isDark = theme.includes('dark');\n return (\n <motion.button\n className={`${styles.toggle} ${className}`}\n onClick={() => setTheme(isDark ? 'light' : 'dark')}\n whileTap={{ scale: 0.95 }}\n aria-label=\"Toggle theme\"\n >\n <motion.div\n className={styles.toggleTrack}\n animate={{ backgroundColor: isDark ? 'var(--color-primary)' : 'var(--color-border)' }}\n >\n <motion.div\n className={styles.toggleThumb}\n animate={{ x: isDark ? 24 : 0 }}\n transition={{ type: 'spring', stiffness: 500, damping: 30 }}\n >\n {isDark ? <Moon size={14} /> : <Sun size={14} />}\n </motion.div>\n </motion.div>\n {showLabel && <span className={styles.label}>{isDark ? 'Dark' : 'Light'}</span>}\n </motion.button>\n );\n }\n\n if (variant === 'icon') {\n return (\n <button\n type=\"button\"\n className={`${styles.iconButton} ${className}`}\n onClick={() => {\n const nextIndex = (currentThemeIndex + 1) % themes.length;\n setTheme(themes[nextIndex].value);\n }}\n aria-label={`Current theme: ${currentThemeData.label}. Click to change.`}\n title={currentThemeData.label}\n >\n {currentThemeData.icon}\n {showLabel && <span className={styles.label}>{currentThemeData.label}</span>}\n </button>\n );\n }\n\n if (variant === 'dropdown') {\n return (\n <div className={`${styles.dropdown} ${className}`}>\n <motion.button\n className={styles.dropdownTrigger}\n whileTap={{ scale: 0.98 }}\n >\n {currentThemeData.icon}\n {showLabel && <span className={styles.label}>{currentThemeData.label}</span>}\n </motion.button>\n <motion.div\n className={styles.dropdownMenu}\n initial={{ opacity: 0, y: -10 }}\n animate={{ opacity: 1, y: 0 }}\n >\n {themes.map((t) => (\n <motion.button\n key={t.value}\n className={`${styles.dropdownItem} ${theme === t.value ? styles.active : ''}`}\n onClick={() => setTheme(t.value)}\n whileHover={{ x: 4 }}\n whileTap={{ scale: 0.98 }}\n >\n <span className={styles.icon}>{t.icon}</span>\n <span className={styles.text}>{t.label}</span>\n </motion.button>\n ))}\n </motion.div>\n </div>\n );\n }\n\n // Default button variant - cycles through themes\n return (\n <motion.button\n className={`${styles.button} ${className}`}\n onClick={() => {\n const nextIndex = (currentThemeIndex + 1) % themes.length;\n setTheme(themes[nextIndex].value);\n }}\n whileTap={{ scale: 0.95 }}\n whileHover={{ scale: 1.05 }}\n aria-label={`Current theme: ${currentThemeData.label}. Click to change.`}\n >\n <motion.div\n key={theme}\n initial={{ rotate: -180, opacity: 0 }}\n animate={{ rotate: 0, opacity: 1 }}\n exit={{ rotate: 180, opacity: 0 }}\n transition={{ duration: 0.3 }}\n className={styles.iconWrapper}\n >\n {currentThemeData.icon}\n </motion.div>\n {showLabel && <span className={styles.label}>{currentThemeData.label}</span>}\n </motion.button>\n );\n};","import React from 'react';\nimport { Info, Github, SquareKanban } from 'lucide-react';\nimport { motion } from 'framer-motion';\nimport styles from './Tabs.module.css';\n\nexport interface Tab {\n id: string;\n label: string;\n icon?: React.ComponentType<object> | React.ReactNode;\n}\n\nexport interface TabsProps {\n activeTab: string;\n onTabChange: (tab: string) => void;\n tabs?: Tab[];\n className?: string;\n /** Stretch each tab to share the available width equally */\n fullWidth?: boolean;\n}\n\n// Default tabs for backwards compatibility\nconst defaultTabs: Tab[] = [\n { id: 'details', icon: Info, label: 'Dettagli' },\n { id: 'github', icon: Github, label: 'GitHub' },\n { id: 'jira', icon: SquareKanban, label: 'Jira' },\n { id: 'functional', icon: Info, label: 'Analisi funzionale' }\n];\n\n// Legacy type for backwards compatibility\nexport type TabType = 'details' | 'github' | 'jira' | 'functional';\n\nexport const Tabs: React.FC<TabsProps> = ({\n activeTab,\n onTabChange,\n tabs: customTabs,\n className = '',\n fullWidth = false\n}) => {\n const tabs = customTabs ?? defaultTabs;\n\n return (\n <div className={`${styles.tabs} ${fullWidth ? styles.fullWidth : ''} ${className}`}>\n {tabs.map((tab) => {\n const isActive = activeTab === tab.id;\n \n return (\n <motion.button\n key={tab.id}\n className={styles.tab}\n data-active={isActive}\n onClick={() => onTabChange(tab.id)}\n style={{ position: 'relative' }}\n >\n <motion.div\n animate={{\n rotate: isActive ? [0, -10, 10, -5, 5, 0] : 0,\n }}\n transition={{\n rotate: {\n duration: 0.5,\n ease: 'easeInOut'\n }\n }}\n >\n {tab.icon && (\n React.isValidElement(tab.icon) ? (\n <span className={styles.tabIcon}>{tab.icon}</span>\n ) : (\n <span className={styles.tabIcon}>\n {React.createElement(tab.icon as React.ComponentType)}\n </span>\n )\n )}\n </motion.div>\n <span>{tab.label}</span>\n </motion.button>\n );\n })}\n </div>\n );\n};","import React, { useEffect, useState } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { createPortal } from 'react-dom';\nimport styles from './Toast.module.css';\n\nexport type ToastType = 'success' | 'error' | 'warning' | 'info';\n\nexport interface ToastData {\n id: string;\n type: ToastType;\n title?: string;\n message: string;\n duration?: number;\n}\n\ninterface ToastProps {\n toasts: ToastData[];\n removeToast: (id: string) => void;\n}\n\nconst getIcon = (type: ToastType) => {\n switch (type) {\n case 'success':\n return (\n <svg className={`${styles.icon} ${styles.iconSuccess}`} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n );\n case 'error':\n return (\n <svg className={`${styles.icon} ${styles.iconError}`} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n );\n case 'warning':\n return (\n <svg className={`${styles.icon} ${styles.iconWarning}`} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <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\" />\n </svg>\n );\n case 'info':\n return (\n <svg className={`${styles.icon} ${styles.iconInfo}`} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <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\" />\n </svg>\n );\n }\n};\n\nconst getToastStyle = (type: ToastType) => {\n switch (type) {\n case 'success': return styles.toastSuccess;\n case 'error': return styles.toastError;\n case 'warning': return styles.toastWarning;\n case 'info': return styles.toastInfo;\n default: return '';\n }\n};\n\nconst ToastItem: React.FC<{ toast: ToastData; removeToast: (id: string) => void }> = ({\n toast,\n removeToast,\n}) => {\n const [progress, setProgress] = useState(100);\n const duration = toast.duration || 5000;\n\n useEffect(() => {\n const timer = setTimeout(() => {\n removeToast(toast.id);\n }, duration);\n\n const interval = setInterval(() => {\n setProgress((prev) => {\n const newProgress = prev - 100 / (duration / 100);\n return newProgress <= 0 ? 0 : newProgress;\n });\n }, 100);\n\n return () => {\n clearTimeout(timer);\n clearInterval(interval);\n };\n }, [toast.id, duration, removeToast]);\n\n return (\n <motion.div\n className={`${styles.toast} ${getToastStyle(toast.type)}`}\n initial={{ opacity: 0, x: 100, scale: 0.9 }}\n animate={{ opacity: 1, x: 0, scale: 1 }}\n exit={{ opacity: 0, x: 100, scale: 0.9 }}\n transition={{ type: 'spring', stiffness: 500, damping: 40 }}\n layout\n >\n {getIcon(toast.type)}\n <div className={styles.content}>\n {toast.title && <p className={styles.title}>{toast.title}</p>}\n <p className={styles.message}>{toast.message}</p>\n </div>\n <button\n className={styles.closeButton}\n onClick={() => removeToast(toast.id)}\n aria-label=\"Close notification\"\n >\n <svg width=\"16\" height=\"16\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n <motion.div\n className={styles.progressBar}\n initial={{ width: '100%' }}\n animate={{ width: `${progress}%` }}\n style={{\n color: toast.type === 'success' ? '#10B981'\n : toast.type === 'error' ? '#EF4444'\n : toast.type === 'warning' ? '#F59E0B'\n : '#3B82F6',\n }}\n />\n </motion.div>\n );\n};\n\nexport const ToastContainer: React.FC<ToastProps> = ({ toasts, removeToast }) => {\n if (typeof document === 'undefined') return null;\n\n return createPortal(\n <div className={styles.toastContainer}>\n <AnimatePresence mode=\"sync\">\n {toasts.map((toast) => (\n <ToastItem key={toast.id} toast={toast} removeToast={removeToast} />\n ))}\n </AnimatePresence>\n </div>,\n document.body\n );\n};\n","import React from 'react';\nimport { ChevronRight } from 'lucide-react';\nimport styles from './Breadcrumb.module.css';\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n}\n\nexport interface BreadcrumbProps {\n items: BreadcrumbItem[];\n onNavigate?: (href: string) => void;\n className?: string;\n}\n\n/**\n * Breadcrumb Component\n *\n * Navigation breadcrumb trail. Router-agnostic: pass onNavigate to handle\n * clicks on breadcrumb links (e.g. with react-router's navigate function).\n *\n * @example\n * <Breadcrumb\n * items={[\n * { label: 'Home', href: '/' },\n * { label: 'Settings', href: '/settings' },\n * { label: 'Profile' },\n * ]}\n * onNavigate={(href) => navigate(href)}\n * />\n */\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({ items, onNavigate, className = '' }) => {\n return (\n <nav className={`${styles.breadcrumb} ${className}`} aria-label=\"Breadcrumb\">\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n\n return (\n <React.Fragment key={index}>\n {index > 0 && <ChevronRight size={14} className={styles.separator} />}\n {isLast || !item.href ? (\n <span className={`${styles.item} ${isLast ? styles.current : ''}`}>\n {item.label}\n </span>\n ) : (\n <button\n className={`${styles.item} ${styles.link}`}\n onClick={() => onNavigate?.(item.href!)}\n >\n {item.label}\n </button>\n )}\n </React.Fragment>\n );\n })}\n </nav>\n );\n};\n","import { useState, useCallback } from 'react';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { Plus, type LucideIcon } from 'lucide-react';\nimport styles from './LiquidButton.module.css';\n\nexport interface QuickAction {\n key: string;\n label: string;\n icon: LucideIcon;\n color?: string;\n onClick: () => void;\n}\n\nexport interface LiquidButtonProps {\n /** Array of quick actions to show when expanded */\n actions: QuickAction[];\n /** Custom icon for the main button (defaults to Plus) */\n icon?: LucideIcon;\n /** Custom class name for the container */\n className?: string;\n}\n\n/**\n * LiquidButton Component\n *\n * A floating action button that expands to reveal quick action options.\n * The main button rotates 45 degrees when expanded (Plus becomes X).\n * Actions fan out above the button with staggered animations.\n *\n * @example\n * <LiquidButton\n * actions={[\n * { key: 'add', label: 'Add Item', icon: Plus, color: '#2196F3', onClick: () => {} },\n * { key: 'edit', label: 'Edit', icon: Edit, color: '#FF9800', onClick: () => {} },\n * ]}\n * />\n */\nexport const LiquidButton: React.FC<LiquidButtonProps> = ({\n actions,\n icon: Icon = Plus,\n className = '',\n}) => {\n const [expanded, setExpanded] = useState(false);\n\n const handleToggle = useCallback(() => {\n setExpanded((prev) => !prev);\n }, []);\n\n const handleAction = useCallback((action: QuickAction) => {\n setExpanded(false);\n action.onClick();\n }, []);\n\n return (\n <>\n <AnimatePresence>\n {expanded && (\n <motion.div\n className={styles.overlay}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n onClick={handleToggle}\n />\n )}\n </AnimatePresence>\n <div className={`${styles.container} ${className}`}>\n <AnimatePresence>\n {expanded && (\n <div className={styles.actions}>\n {actions.map((action, index) => (\n <motion.button\n key={action.key}\n type=\"button\"\n className={styles.actionButton}\n initial={{ opacity: 0, scale: 0.8 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.8 }}\n transition={{\n duration: 0.15,\n delay: (actions.length - 1 - index) * 0.05,\n }}\n onClick={() => handleAction(action)}\n >\n <action.icon size={18} color={action.color} />\n <span className={styles.actionLabel}>{action.label}</span>\n </motion.button>\n ))}\n </div>\n )}\n </AnimatePresence>\n\n <motion.button\n type=\"button\"\n className={styles.button}\n onClick={handleToggle}\n animate={{ rotate: expanded ? 45 : 0 }}\n transition={{ duration: 0.2 }}\n aria-label={expanded ? 'Close actions' : 'Open actions'}\n >\n <Icon size={24} strokeWidth={2.5} />\n </motion.button>\n </div>\n </>\n );\n};\n","import { useEffect, useMemo, useState } from 'react';\nimport { RRule, Weekday } from 'rrule';\nimport { Checkbox } from '../../atoms/Checkbox';\nimport { NumberStepper } from '../../atoms/NumberStepper';\nimport { SelectInput } from '../../atoms/SelectInput';\nimport styles from './RecurrencePicker.module.css';\n\nexport interface RecurrencePickerProps {\n /**\n * Current RRULE body (e.g. `FREQ=WEEKLY;BYDAY=MO`). If omitted, the picker\n * falls back to its internal defaults.\n */\n value?: string;\n /** Called whenever the user changes the rule. */\n onChange: (rule: string) => void;\n /** Custom className applied to the outer container. */\n className?: string;\n}\n\ntype Freq = 'DAILY' | 'WEEKLY' | 'MONTHLY' | 'YEARLY';\n\ninterface State {\n freq: Freq;\n interval: number;\n byDay: string[];\n byMonthDay: number;\n monthlyLast: boolean;\n byMonth: number;\n yearDay: number;\n}\n\nconst DEFAULT_STATE: State = {\n freq: 'WEEKLY',\n interval: 1,\n byDay: ['MO'],\n byMonthDay: 1,\n monthlyLast: false,\n byMonth: 1,\n yearDay: 1,\n};\n\nconst WEEKDAYS: { code: string; label: string; rrule: Weekday }[] = [\n { code: 'MO', label: 'M', rrule: RRule.MO },\n { code: 'TU', label: 'T', rrule: RRule.TU },\n { code: 'WE', label: 'W', rrule: RRule.WE },\n { code: 'TH', label: 'T', rrule: RRule.TH },\n { code: 'FR', label: 'F', rrule: RRule.FR },\n { code: 'SA', label: 'S', rrule: RRule.SA },\n { code: 'SU', label: 'S', rrule: RRule.SU },\n];\n\nconst MONTHS = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\n\nconst FREQ_MAP: Record<Freq, number> = {\n DAILY: RRule.DAILY,\n WEEKLY: RRule.WEEKLY,\n MONTHLY: RRule.MONTHLY,\n YEARLY: RRule.YEARLY,\n};\n\nconst REVERSE_FREQ: Record<number, Freq> = {\n [RRule.DAILY]: 'DAILY',\n [RRule.WEEKLY]: 'WEEKLY',\n [RRule.MONTHLY]: 'MONTHLY',\n [RRule.YEARLY]: 'YEARLY',\n};\n\nconst buildRule = (s: State): string => {\n const opts: Record<string, unknown> = { freq: FREQ_MAP[s.freq] };\n if (s.interval > 1) opts.interval = s.interval;\n\n if (s.freq === 'WEEKLY' && s.byDay.length > 0) {\n opts.byweekday = s.byDay\n .map(c => WEEKDAYS.find(w => w.code === c)?.rrule)\n .filter((w): w is Weekday => !!w);\n }\n if (s.freq === 'MONTHLY') {\n opts.bymonthday = s.monthlyLast ? -1 : s.byMonthDay;\n }\n if (s.freq === 'YEARLY') {\n opts.bymonth = s.byMonth;\n opts.bymonthday = s.yearDay;\n }\n\n const rule = new RRule(opts);\n return rule.toString().replace(/^(?:DTSTART:[^\\n]*\\n)?RRULE:/, '');\n};\n\nconst parseRule = (rule: string): State | null => {\n try {\n const opts = RRule.parseString(rule);\n const freq = REVERSE_FREQ[opts.freq as number];\n if (!freq) return null;\n\n const byweekday = (opts.byweekday as Weekday[] | number[] | undefined) ?? [];\n const byDay = byweekday\n .map(w => {\n const n = typeof w === 'number' ? w : (w as Weekday).weekday;\n return WEEKDAYS.find(d => d.rrule.weekday === n)?.code;\n })\n .filter((c): c is string => !!c);\n\n const bmd = opts.bymonthday;\n const bymonthday = Array.isArray(bmd) ? bmd[0] : bmd;\n\n const bm = opts.bymonth;\n const bymonth = Array.isArray(bm) ? bm[0] : bm;\n\n return {\n freq,\n interval: opts.interval || 1,\n byDay: byDay.length > 0 ? byDay : ['MO'],\n byMonthDay: freq === 'MONTHLY' && bymonthday && bymonthday > 0 ? bymonthday : 1,\n monthlyLast: freq === 'MONTHLY' && bymonthday === -1,\n byMonth: freq === 'YEARLY' ? bymonth || 1 : 1,\n yearDay: freq === 'YEARLY' && bymonthday ? bymonthday : 1,\n };\n } catch {\n return null;\n }\n};\n\nconst stateFromValue = (value: string | undefined): State => {\n if (!value) return DEFAULT_STATE;\n return parseRule(value) ?? DEFAULT_STATE;\n};\n\nexport const RecurrencePicker: React.FC<RecurrencePickerProps> = ({\n value,\n onChange,\n className,\n}) => {\n const [state, setState] = useState<State>(() => stateFromValue(value));\n const built = useMemo(() => buildRule(state), [state]);\n\n // Re-sync internal state if the parent passes a different rule than the one\n // we currently render. The `built === value` guard prevents the loop where\n // our own emit comes back through `value` and triggers a redundant resync.\n useEffect(() => {\n if (value && value !== built) {\n const parsed = parseRule(value);\n if (parsed) setState(parsed);\n }\n }, [value, built]);\n\n // On mount, if the parent didn't seed a rule, push our default up so its\n // state matches what we visually display. Runs once.\n useEffect(() => {\n if (!value) onChange(built);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const update = (patch: Partial<State>) => {\n const next = { ...state, ...patch };\n setState(next);\n onChange(buildRule(next));\n };\n\n const toggleDay = (code: string) => {\n const byDay = state.byDay.includes(code)\n ? state.byDay.filter(c => c !== code)\n : [...state.byDay, code];\n update({ byDay });\n };\n\n const preview = useMemo(() => {\n try {\n return RRule.fromString(built).toText();\n } catch {\n return built;\n }\n }, [built]);\n\n const unitLabel: Record<Freq, string> = {\n DAILY: state.interval === 1 ? 'day' : 'days',\n WEEKLY: state.interval === 1 ? 'week' : 'weeks',\n MONTHLY: state.interval === 1 ? 'month' : 'months',\n YEARLY: state.interval === 1 ? 'year' : 'years',\n };\n\n return (\n <div className={`${styles.container}${className ? ` ${className}` : ''}`}>\n <div className={styles.field}>\n <SelectInput\n label=\"Frequency\"\n value={state.freq}\n onChange={v => update({ freq: v as Freq })}\n options={[\n { value: 'DAILY', label: 'Daily' },\n { value: 'WEEKLY', label: 'Weekly' },\n { value: 'MONTHLY', label: 'Monthly' },\n { value: 'YEARLY', label: 'Yearly' },\n ]}\n />\n </div>\n\n <div className={styles.field}>\n <span className={styles.fieldLabel}>Every</span>\n <div className={styles.fieldRow}>\n <NumberStepper\n value={state.interval}\n onChange={v => update({ interval: Math.max(1, v) })}\n min={1}\n max={99}\n hideLimits\n size=\"small\"\n />\n <span className={styles.fieldUnit}>{unitLabel[state.freq]}</span>\n </div>\n </div>\n\n {state.freq === 'WEEKLY' && (\n <div className={`${styles.field} ${styles.fieldCentered}`}>\n <span className={styles.fieldLabel}>On</span>\n <div className={styles.dayPicker}>\n {WEEKDAYS.map(d => (\n <button\n key={d.code}\n type=\"button\"\n className={`${styles.dayBtn} ${state.byDay.includes(d.code) ? styles.dayBtnActive : ''}`}\n onClick={() => toggleDay(d.code)}\n aria-label={d.code}\n >\n {d.label}\n </button>\n ))}\n </div>\n </div>\n )}\n\n {state.freq === 'MONTHLY' && (\n <div className={styles.field}>\n <span className={styles.fieldLabel}>Day of month</span>\n <div className={styles.fieldRow}>\n <NumberStepper\n value={state.byMonthDay}\n onChange={v =>\n update({ byMonthDay: Math.min(31, Math.max(1, v)) })\n }\n min={1}\n max={31}\n disabled={state.monthlyLast}\n hideLimits\n size=\"small\"\n />\n <Checkbox\n checked={state.monthlyLast}\n onChange={v => update({ monthlyLast: v })}\n label=\"Last day\"\n />\n </div>\n </div>\n )}\n\n {state.freq === 'YEARLY' && (\n <>\n <div className={styles.field}>\n <SelectInput\n label=\"Month\"\n value={String(state.byMonth)}\n onChange={v => update({ byMonth: Number(v) })}\n options={MONTHS.map((m, i) => ({\n value: String(i + 1),\n label: m,\n }))}\n />\n </div>\n <div className={styles.field}>\n <span className={styles.fieldLabel}>Day</span>\n <NumberStepper\n value={state.yearDay}\n onChange={v =>\n update({ yearDay: Math.min(31, Math.max(1, v)) })\n }\n min={1}\n max={31}\n hideLimits\n size=\"small\"\n />\n </div>\n </>\n )}\n\n <div className={styles.preview}>{preview}</div>\n </div>\n );\n};\n","import { useEffect, useRef, type ComponentType } from 'react';\nimport { motion } from 'framer-motion';\nimport {\n\tCheck,\n\tX,\n\tLoader2,\n\tAlertTriangle,\n\tTerminal,\n\tFileText,\n\tPencil,\n\tFilePlus,\n\tSearch,\n\tFolderSearch,\n\tBrain,\n\tPlay,\n\ttype LucideProps,\n} from 'lucide-react';\nimport styles from './StreamConsole.module.css';\n\nexport type StreamEventType = 'step' | 'success' | 'warning' | 'error';\n\nexport interface StreamEvent {\n\ttype: StreamEventType;\n\tmessage: string;\n\tdata?: Record<string, unknown>;\n\ttimestamp?: string;\n}\n\nexport type StreamStatus = 'running' | 'success' | 'error';\n\nexport interface StreamState {\n\tid: string;\n\tlabel: string;\n\tstatus: StreamStatus;\n\tevents: StreamEvent[];\n\tstartedAt: number;\n\tendedAt?: number;\n\terrorMessage?: string;\n\tresult?: Record<string, unknown>;\n}\n\nexport interface StreamConsoleProps {\n\tstream: StreamState;\n\tonCancel?: (id: string) => void;\n\tonDismiss?: (id: string) => void;\n\thideDismiss?: boolean;\n\trunningLabel?: string;\n\tsuccessLabel?: string;\n\terrorLabel?: string;\n}\n\ntype StepSubtype =\n\t| 'bash'\n\t| 'read'\n\t| 'edit'\n\t| 'write'\n\t| 'grep'\n\t| 'glob'\n\t| 'thinking'\n\t| 'lifecycle';\n\ninterface ParsedStep {\n\tsubtype: StepSubtype | null;\n\tlabel: string;\n\tbody: string;\n}\n\n// Known prefixes produced by stream-json summarizers (DAO-style):\n// \"bash: ls -la\", \"read: path/to/file\", \"edit: path/to/file\",\n// \"write: path\", \"grep: pattern\", \"glob: pattern\", \"thinking: ...\"\n// Plus scaffold-specific lifecycle markers like \"spawning claude ...\" and\n// \"resuming session ...\". Anything else keeps the default `·` dot.\nfunction parseStep(message: string): ParsedStep {\n\tconst prefixMatch = /^([a-z]+):\\s*(.*)$/i.exec(message);\n\tif (prefixMatch) {\n\t\tconst key = prefixMatch[1].toLowerCase();\n\t\tconst body = prefixMatch[2];\n\t\tconst known: Record<string, StepSubtype> = {\n\t\t\tbash: 'bash',\n\t\t\tread: 'read',\n\t\t\tedit: 'edit',\n\t\t\twrite: 'write',\n\t\t\tgrep: 'grep',\n\t\t\tglob: 'glob',\n\t\t\tthinking: 'thinking',\n\t\t};\n\t\tif (known[key]) return { subtype: known[key], label: key, body };\n\t}\n\tif (/^(spawning|resuming|starting|launching)\\b/i.test(message)) {\n\t\treturn { subtype: 'lifecycle', label: '', body: message };\n\t}\n\treturn { subtype: null, label: '', body: message };\n}\n\nconst STEP_ICON: Record<StepSubtype, ComponentType<LucideProps>> = {\n\tbash: Terminal,\n\tread: FileText,\n\tedit: Pencil,\n\twrite: FilePlus,\n\tgrep: Search,\n\tglob: FolderSearch,\n\tthinking: Brain,\n\tlifecycle: Play,\n};\n\nexport function StreamConsole({\n\tstream,\n\tonCancel,\n\tonDismiss,\n\thideDismiss = false,\n\trunningLabel = 'Running',\n\tsuccessLabel = 'Done',\n\terrorLabel = 'Failed',\n}: StreamConsoleProps) {\n\tconst listRef = useRef<HTMLDivElement>(null);\n\tconst userScrolledUp = useRef(false);\n\n\tuseEffect(() => {\n\t\tconst el = listRef.current;\n\t\tif (!el) return;\n\t\tconst onScroll = () => {\n\t\t\tconst atBottom = el.scrollHeight - el.scrollTop - el.clientHeight < 40;\n\t\t\tuserScrolledUp.current = !atBottom;\n\t\t};\n\t\tel.addEventListener('scroll', onScroll);\n\t\treturn () => el.removeEventListener('scroll', onScroll);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tconst el = listRef.current;\n\t\tif (!el || userScrolledUp.current) return;\n\t\tel.scrollTop = el.scrollHeight;\n\t}, [stream.events.length]);\n\n\tconst Icon =\n\t\tstream.status === 'running' ? Loader2 : stream.status === 'success' ? Check : AlertTriangle;\n\tconst statusLabel =\n\t\tstream.status === 'running'\n\t\t\t? runningLabel\n\t\t\t: stream.status === 'success'\n\t\t\t\t? successLabel\n\t\t\t\t: errorLabel;\n\n\tconst canShowDismiss =\n\t\t!hideDismiss && (stream.status === 'running' ? !!onCancel : !!onDismiss);\n\n\treturn (\n\t\t<motion.div\n\t\t\tclassName={styles.wrap}\n\t\t\tdata-status={stream.status}\n\t\t\tinitial={{ opacity: 0, y: -8 }}\n\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\texit={{ opacity: 0, y: -8 }}\n\t\t\ttransition={{ duration: 0.18 }}\n\t\t>\n\t\t\t<header className={styles.header}>\n\t\t\t\t<div className={styles.headerLeft}>\n\t\t\t\t\t<span className={styles.statusDot} data-status={stream.status}>\n\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\tsize={12}\n\t\t\t\t\t\t\tclassName={stream.status === 'running' ? styles.spin : ''}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span className={styles.label}>{stream.label}</span>\n\t\t\t\t\t<span className={styles.statusText}>{statusLabel}</span>\n\t\t\t\t</div>\n\t\t\t\t{canShowDismiss && (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName={styles.dismiss}\n\t\t\t\t\t\taria-label={stream.status === 'running' ? 'Cancel' : 'Dismiss'}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tif (stream.status === 'running') onCancel?.(stream.id);\n\t\t\t\t\t\t\telse onDismiss?.(stream.id);\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<X size={14} />\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\t\t\t</header>\n\t\t\t<div className={styles.body} ref={listRef}>\n\t\t\t\t{stream.events.length === 0 && stream.status === 'running' && (\n\t\t\t\t\t<p className={styles.hint}>Waiting for output…</p>\n\t\t\t\t)}\n\t\t\t\t{stream.events.map((event, i) => {\n\t\t\t\t\tconst step = event.type === 'step' ? parseStep(event.message) : null;\n\t\t\t\t\tconst StepIcon = step?.subtype ? STEP_ICON[step.subtype] : null;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<p\n\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\tclassName={styles.line}\n\t\t\t\t\t\t\tdata-type={event.type}\n\t\t\t\t\t\t\tdata-subtype={step?.subtype ?? undefined}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span className={styles.linePrefix}>\n\t\t\t\t\t\t\t\t{StepIcon ? (\n\t\t\t\t\t\t\t\t\t<StepIcon size={11} />\n\t\t\t\t\t\t\t\t) : event.type === 'error' ? (\n\t\t\t\t\t\t\t\t\t'!'\n\t\t\t\t\t\t\t\t) : event.type === 'warning' ? (\n\t\t\t\t\t\t\t\t\t'⚠'\n\t\t\t\t\t\t\t\t) : event.type === 'success' ? (\n\t\t\t\t\t\t\t\t\t'✓'\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t'·'\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t{step?.label ? (\n\t\t\t\t\t\t\t\t<span className={styles.lineLabel}>{step.label}</span>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t<span className={styles.lineText}>\n\t\t\t\t\t\t\t\t{step ? step.body : event.message}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t\t{stream.status === 'error' && stream.errorMessage && (\n\t\t\t\t\t<p className={styles.line} data-type=\"error\">\n\t\t\t\t\t\t<span className={styles.linePrefix}>!</span>\n\t\t\t\t\t\t<span className={styles.lineText}>{stream.errorMessage}</span>\n\t\t\t\t\t</p>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</motion.div>\n\t);\n}\n","import { useRef, useState, PointerEvent as ReactPointerEvent } from 'react';\nimport { motion, useMotionValue, useTransform, animate, PanInfo } from 'framer-motion';\nimport { Trash2, Check, Pencil, GripVertical } from 'lucide-react';\nimport type { CalendarEvent } from './Calendar';\nimport styles from './DayEventCard.module.css';\n\ninterface DayEventCardProps {\n event: CalendarEvent;\n color: string;\n textColor: string;\n onComplete?: (event: CalendarEvent) => void;\n onEdit?: (event: CalendarEvent) => void;\n onDelete?: (event: CalendarEvent) => void;\n onDragEnd?: (clientY: number, clientX: number) => void;\n draggable?: boolean;\n}\n\nconst SWIPE_DELETE_THRESHOLD = -80;\n\nexport const DayEventCard: React.FC<DayEventCardProps> = ({\n event,\n color,\n textColor,\n onComplete,\n onEdit,\n onDelete,\n onDragEnd,\n draggable = true,\n}) => {\n const x = useMotionValue(0);\n const y = useMotionValue(0);\n const deleteOpacity = useTransform(x, [-80, 0], [1, 0]);\n const [verticalDragging, setVerticalDragging] = useState(false);\n const didSwipe = useRef(false);\n const dragStart = useRef<{ x: number; y: number; pointerId: number } | null>(null);\n const completed = event.status === 'completed';\n\n const handleSwipeEnd = (_: MouseEvent | TouchEvent | PointerEvent, info: PanInfo) => {\n if (onDelete && info.offset.x < SWIPE_DELETE_THRESHOLD) {\n animate(x, -1000, { duration: 0.2, onComplete: () => onDelete(event) });\n } else {\n animate(x, 0, { type: 'spring', stiffness: 400, damping: 30 });\n }\n };\n\n const handleCardClick = () => {\n if (didSwipe.current) {\n didSwipe.current = false;\n return;\n }\n if (verticalDragging) return;\n onComplete?.(event);\n };\n\n const handleGripPointerDown = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (!draggable || !onDragEnd) return;\n e.stopPropagation();\n e.preventDefault();\n dragStart.current = { x: e.clientX, y: e.clientY, pointerId: e.pointerId };\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n setVerticalDragging(true);\n };\n\n const handleGripPointerMove = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (!dragStart.current) return;\n x.set(e.clientX - dragStart.current.x);\n y.set(e.clientY - dragStart.current.y);\n };\n\n const handleGripPointerUp = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (!dragStart.current) return;\n const clientY = e.clientY;\n const clientX = e.clientX;\n try {\n (e.currentTarget as HTMLElement).releasePointerCapture(dragStart.current.pointerId);\n } catch {\n // ignore\n }\n dragStart.current = null;\n setVerticalDragging(false);\n animate(y, 0, { type: 'spring', stiffness: 400, damping: 30 });\n animate(x, 0, { type: 'spring', stiffness: 400, damping: 30 });\n onDragEnd?.(clientY, clientX);\n };\n\n const canSwipe = !!onDelete;\n const showGrip = draggable && !!onDragEnd;\n\n return (\n <div className={styles.wrapper}>\n {canSwipe && (\n <motion.div className={styles.deleteUnderlay} style={{ opacity: deleteOpacity }}>\n <Trash2 size={16} />\n <span>Delete</span>\n </motion.div>\n )}\n <motion.div\n className={`${styles.card} ${completed ? styles.completed : ''} ${verticalDragging ? styles.dragging : ''}`}\n style={{ x, y, background: color, color: textColor, borderLeftColor: color }}\n drag={canSwipe && !verticalDragging ? 'x' : false}\n dragConstraints={canSwipe ? { left: -200, right: 0 } : undefined}\n dragElastic={0.15}\n dragDirectionLock\n onDragStart={() => {\n didSwipe.current = true;\n }}\n onDragEnd={handleSwipeEnd}\n whileTap={verticalDragging ? undefined : { scale: 0.98 }}\n animate={verticalDragging ? { scale: 1.03 } : { scale: 1 }}\n onClick={handleCardClick}\n >\n {showGrip && (\n <div\n className={styles.grip}\n onPointerDown={handleGripPointerDown}\n onPointerMove={handleGripPointerMove}\n onPointerUp={handleGripPointerUp}\n onPointerCancel={handleGripPointerUp}\n onClick={(e) => e.stopPropagation()}\n >\n <GripVertical size={14} />\n </div>\n )}\n {completed && <Check size={14} className={styles.checkIcon} strokeWidth={3} />}\n <span className={styles.text}>{event.title}</span>\n {event.time && <span className={styles.time}>{event.time}</span>}\n {onEdit && (\n <button\n className={styles.editButton}\n onClick={(e) => {\n e.stopPropagation();\n onEdit(event);\n }}\n aria-label=\"Edit event\"\n >\n <Pencil size={13} />\n </button>\n )}\n </motion.div>\n </div>\n );\n};\n","import type { CalendarEvent } from './Calendar';\n\nexport type ExportFormat = 'csv' | 'json' | 'toon';\n\nconst EXPORT_FIELDS: Array<keyof CalendarEvent> = [\n 'id', 'title', 'date', 'time', 'endTime', 'allDay',\n 'type', 'status', 'priority', 'category',\n];\n\nconst toIsoDate = (d: Date | string) => {\n const date = typeof d === 'string' ? new Date(d) : d;\n return date.toISOString();\n};\n\nconst normalize = (event: CalendarEvent): Record<string, unknown> => {\n const row: Record<string, unknown> = {};\n for (const f of EXPORT_FIELDS) {\n const v = event[f];\n if (v === undefined) continue;\n row[f] = f === 'date' ? toIsoDate(v as Date | string) : v;\n }\n return row;\n};\n\nconst escCsv = (value: unknown): string => {\n if (value === undefined || value === null) return '';\n const s = String(value);\n if (/[\",\\n\\r]/.test(s)) return `\"${s.replace(/\"/g, '\"\"')}\"`;\n return s;\n};\n\nexport const toCsv = (events: CalendarEvent[]): string => {\n const header = EXPORT_FIELDS.join(',');\n const rows = events.map(e => {\n const n = normalize(e);\n return EXPORT_FIELDS.map(f => escCsv(n[f])).join(',');\n });\n return [header, ...rows].join('\\n');\n};\n\nexport const toJson = (events: CalendarEvent[]): string => {\n return JSON.stringify(events.map(normalize), null, 2);\n};\n\n// TOON (Token-Oriented Object Notation): compact tabular text for uniform arrays.\n// Format: `events[N]{field1,field2,...}:` then indented rows of comma-separated values.\n// Strings containing comma/quote/newline are wrapped in double quotes with \"\" escaping.\nconst escToon = (value: unknown): string => {\n if (value === undefined || value === null) return '';\n const s = String(value);\n if (/[\",\\n\\r]/.test(s)) return `\"${s.replace(/\"/g, '\"\"')}\"`;\n return s;\n};\n\nexport const toToon = (events: CalendarEvent[]): string => {\n const header = `events[${events.length}]{${EXPORT_FIELDS.join(',')}}:`;\n const rows = events.map(e => {\n const n = normalize(e);\n return ' ' + EXPORT_FIELDS.map(f => escToon(n[f])).join(',');\n });\n return [header, ...rows].join('\\n');\n};\n\nconst MIME: Record<ExportFormat, string> = {\n csv: 'text/csv;charset=utf-8;',\n json: 'application/json;charset=utf-8;',\n toon: 'text/plain;charset=utf-8;',\n};\n\nconst EXT: Record<ExportFormat, string> = {\n csv: 'csv',\n json: 'json',\n toon: 'toon',\n};\n\nexport const serializeEvents = (events: CalendarEvent[], format: ExportFormat): string => {\n if (format === 'csv') return toCsv(events);\n if (format === 'json') return toJson(events);\n return toToon(events);\n};\n\nexport const downloadEvents = (\n events: CalendarEvent[],\n format: ExportFormat,\n filename?: string,\n) => {\n const content = serializeEvents(events, format);\n const blob = new Blob([content], { type: MIME[format] });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename ?? `events-${new Date().toISOString().slice(0, 10)}.${EXT[format]}`;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n};\n","import { useMemo, useState, useEffect, useRef, Fragment } from 'react';\nimport { motion } from 'framer-motion';\nimport styles from './Calendar.module.css';\nimport { DayEventCard } from './DayEventCard';\nimport { Download, Moon, Sun } from 'lucide-react';\nimport { downloadEvents, type ExportFormat } from './exportEvents';\n\n/**\n * Generic calendar event interface - flexible for any use case\n * @interface CalendarEvent\n */\nexport interface CalendarEvent {\n /** Unique identifier for the event */\n id: string;\n /** Event title/name */\n title: string;\n /** Event date */\n date: Date | string;\n /** Optional start time string (e.g., \"14:30\") */\n time?: string;\n /** Optional end time string (e.g., \"15:30\") — used for duration-based height in day view */\n endTime?: string;\n /** If true, event is rendered in the all-day strip above the timeline */\n allDay?: boolean;\n /** Event type/category for styling and icons */\n type?: string;\n /** Event status (affects opacity and styling) */\n status?: 'pending' | 'completed' | 'cancelled' | string;\n /** Priority level for color coding */\n priority?: 'high' | 'medium' | 'low' | string;\n /** Category id used by the built-in category filter (see CalendarConfig.categories) */\n category?: string;\n /** Background color override */\n color?: string;\n /** Text color override */\n textColor?: string;\n /** Additional metadata */\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Configuration for calendar appearance and behavior\n * @interface CalendarConfig\n */\nexport interface CalendarConfig {\n /** Custom color scheme for event types */\n eventColors?: Record<string, string>;\n /** Custom icon renderer for event types */\n iconRenderer?: (event: CalendarEvent) => React.ReactNode;\n /** Maximum events to show per day before \"more\" indicator */\n maxEventsPerDay?: number;\n /** Week starts on Monday (true) or Sunday (false) */\n mondayStart?: boolean;\n /** Show week numbers */\n showWeekNumbers?: boolean;\n /** Day view: first hour to show (default 0) */\n startHour?: number;\n /** Day view: last hour to show, exclusive (default 24) */\n endHour?: number;\n /** Day view: pixel height per hour slot (default 60) */\n hourHeight?: number;\n /** Day view: split hour slots into two clickable halves with 30-minute precision (default false) */\n halfHourSlots?: boolean;\n /** Custom date format */\n dateFormat?: Intl.DateTimeFormatOptions;\n /** Custom locale */\n locale?: string;\n /** Custom day labels */\n dayLabels?: string[];\n /** Custom month names */\n monthNames?: string[];\n /** Categories for the built-in segmented filter. When provided, Calendar renders a pill row\n * below the header with an \"All\" toggle plus one pill per category. Events with a matching\n * `category` are filtered by selection; events with no `category` are always shown. */\n categories?: Array<{ id: string; label: string; color: string }>;\n}\n\n/** A category for the built-in filter */\nexport interface CalendarCategory {\n id: string;\n label: string;\n color: string;\n}\n\n/**\n * Props for the Calendar component\n * @interface CalendarProps\n */\nexport interface CalendarProps {\n /** Array of events to display */\n events: CalendarEvent[];\n /** Callback when an event is clicked */\n onEventClick?: (event: CalendarEvent) => void;\n /** Callback when a date is clicked */\n onDateClick?: (date: Date) => void;\n /** View-specific event click handlers */\n onEventClickByView?: {\n month?: (event: CalendarEvent) => void;\n week?: (event: CalendarEvent) => void;\n day?: (event: CalendarEvent) => void;\n };\n /** View-specific date click handlers */\n onDateClickByView?: {\n month?: (date: Date) => void;\n week?: (date: Date) => void;\n day?: (date: Date) => void;\n };\n /** Callback when a time slot is clicked in day view */\n onTimeSlotClick?: (date: Date, hour: number, time: string) => void;\n /** Callback when an event is dropped (drag-rescheduled) in day view */\n onEventDrop?: (event: CalendarEvent, newDate: Date) => void;\n /** Day view: callback when an event body is tapped to toggle complete */\n onEventComplete?: (event: CalendarEvent) => void;\n /** Day view: callback when an event is swiped left to delete */\n onEventDelete?: (event: CalendarEvent) => void;\n /** Day view: callback when an event's edit button is clicked */\n onEventEdit?: (event: CalendarEvent) => void;\n /** Initial view mode */\n viewMode?: 'month' | 'week' | 'day';\n /** Initial date to display */\n initialDate?: Date;\n /** Configuration options */\n config?: CalendarConfig;\n /** Custom CSS class */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Loading state */\n loading?: boolean;\n /** Custom empty state component */\n emptyState?: React.ReactNode;\n /** Hide the calendar header (navigation, title, view controls) */\n hideHeader?: boolean;\n /** Compact mode - renders colored dots instead of event blocks in month view */\n compact?: boolean;\n /** Externally controlled selected date highlight (distinct from initialDate which controls navigation) */\n selectedDate?: Date;\n /** Controlled category filter selection. `null` means \"All\". Omit for uncontrolled. */\n selectedCategoryId?: string | null;\n /** Called when the user picks a pill in the category filter. `null` = \"All\". */\n onCategoryChange?: (categoryId: string | null) => void;\n /** Offer an \"Export\" dropdown in the header with the given formats. Exports the currently\n * filtered events (respects category filter). Omit or pass `[]` to hide the button. */\n exportFormats?: ExportFormat[];\n}\n\n/**\n * Calendar component - A flexible, reusable calendar for displaying events\n * \n * @component\n * @description\n * A highly customizable calendar component that can display events in month or week view.\n * Supports custom event types, colors, icons, and localization. Perfect for scheduling,\n * project management, habit tracking, or any date-based data visualization.\n * \n * @example\n * // Basic usage\n * <Calendar\n * events={myEvents}\n * onEventClick={handleEventClick}\n * viewMode=\"month\"\n * />\n * \n * @example\n * // With custom configuration\n * <Calendar\n * events={projectEvents}\n * config={{\n * eventColors: { task: '#4A90E2', meeting: '#7ED321' },\n * maxEventsPerDay: 5,\n * mondayStart: true\n * }}\n * onEventClick={handleEventClick}\n * />\n */\nexport function Calendar({\n events,\n onEventClick,\n onDateClick,\n onEventClickByView,\n onDateClickByView,\n onTimeSlotClick,\n onEventDrop,\n onEventComplete,\n onEventDelete,\n onEventEdit,\n viewMode = 'month',\n initialDate = new Date(),\n config = {},\n className = '',\n style = {},\n loading = false,\n emptyState,\n hideHeader = false,\n compact = false,\n selectedDate,\n selectedCategoryId,\n onCategoryChange,\n exportFormats\n}: CalendarProps) {\n const [currentDate, setCurrentDate] = useState(initialDate);\n const [currentViewMode, setCurrentViewMode] = useState(viewMode);\n const [hideNightHours, setHideNightHours] = useState(false);\n const [internalCategoryId, setInternalCategoryId] = useState<string | null>(null);\n const isCategoryControlled = selectedCategoryId !== undefined;\n const activeCategoryId = isCategoryControlled ? selectedCategoryId ?? null : internalCategoryId;\n const handleCategoryPick = (id: string | null) => {\n if (!isCategoryControlled) setInternalCategoryId(id);\n onCategoryChange?.(id);\n };\n const dayViewScrollRef = useRef<HTMLDivElement>(null);\n const weekViewScrollRef = useRef<HTMLDivElement>(null);\n const [exportOpen, setExportOpen] = useState(false);\n const exportRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!exportOpen) return;\n const handler = (e: MouseEvent) => {\n if (exportRef.current && !exportRef.current.contains(e.target as Node)) {\n setExportOpen(false);\n }\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [exportOpen]);\n\n const {\n eventColors = {},\n iconRenderer,\n maxEventsPerDay = 3,\n mondayStart = false,\n showWeekNumbers = false,\n dateFormat = { month: 'long', year: 'numeric' },\n locale = 'en-US',\n dayLabels,\n monthNames,\n startHour: configStartHour = 0,\n endHour = 24,\n hourHeight = 60,\n halfHourSlots = false,\n categories\n } = config;\n\n // Effective start hour — when the user toggles \"hide night hours\", collapse\n // the pre-8am range in day/week timelines.\n const startHour = hideNightHours ? Math.max(configStartHour, 8) : configStartHour;\n\n const filteredEvents = useMemo(() => {\n if (!categories || categories.length === 0 || activeCategoryId === null) return events;\n return events.filter(e => !e.category || e.category === activeCategoryId);\n }, [events, categories, activeCategoryId]);\n \n const defaultDayLabels = mondayStart \n ? ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']\n : ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n \n const finalDayLabels = dayLabels || defaultDayLabels;\n\n const timelineHourHeight = config?.hourHeight ?? 60;\n const timelineStartHour = startHour;\n\n const calendarData = useMemo(() => {\n const year = currentDate.getFullYear();\n const month = currentDate.getMonth();\n \n let startDate: Date;\n let endDate: Date;\n let displayTitle: string;\n \n if (currentViewMode === 'week') {\n startDate = new Date(currentDate);\n const day = startDate.getDay();\n const diff = mondayStart \n ? startDate.getDate() - day + (day === 0 ? -6 : 1)\n : startDate.getDate() - day;\n startDate = new Date(startDate.setDate(diff));\n startDate.setHours(0, 0, 0, 0);\n \n endDate = new Date(startDate);\n endDate.setDate(endDate.getDate() + 6);\n \n const weekStart = startDate.toLocaleDateString(locale, { day: 'numeric', month: 'short' });\n const weekEnd = endDate.toLocaleDateString(locale, { day: 'numeric', month: 'short' });\n displayTitle = `${weekStart} - ${weekEnd}`;\n } else if (currentViewMode === 'day') {\n startDate = new Date(currentDate);\n startDate.setHours(0, 0, 0, 0);\n \n endDate = new Date(currentDate);\n endDate.setHours(23, 59, 59, 999);\n \n displayTitle = currentDate.toLocaleDateString(locale, { \n weekday: 'long', \n year: 'numeric', \n month: 'long', \n day: 'numeric' \n });\n } else {\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n \n startDate = new Date(firstDay);\n const firstDayWeek = mondayStart \n ? (firstDay.getDay() + 6) % 7 \n : firstDay.getDay();\n startDate.setDate(startDate.getDate() - firstDayWeek);\n \n endDate = new Date(lastDay);\n const lastDayWeek = mondayStart \n ? (lastDay.getDay() + 6) % 7 \n : lastDay.getDay();\n endDate.setDate(endDate.getDate() + (6 - lastDayWeek));\n \n if (monthNames && monthNames[month]) {\n displayTitle = `${monthNames[month]} ${year}`;\n } else {\n displayTitle = currentDate.toLocaleDateString(locale, dateFormat);\n }\n }\n \n const days = [];\n const current = new Date(startDate);\n \n while (current <= endDate) {\n days.push(new Date(current));\n current.setDate(current.getDate() + 1);\n }\n \n return { days, displayTitle };\n }, [currentDate, currentViewMode, mondayStart, locale, dateFormat, monthNames]);\n\n // Auto-scroll to current time in day/week views. Only re-fires when the\n // user changes view mode or navigates to a different date — not on every\n // re-render (e.g. after dropping an event), which would snap the scroll.\n const lastScrollKeyRef = useRef<string>('');\n useEffect(() => {\n if (currentViewMode !== 'day' && currentViewMode !== 'week') return;\n const targetRef = currentViewMode === 'day' ? dayViewScrollRef : weekViewScrollRef;\n if (!targetRef.current) return;\n\n const now = new Date();\n const isTodayOnScreen = (() => {\n if (currentViewMode === 'day') {\n return currentDate.toDateString() === now.toDateString();\n }\n const weekStart = new Date(currentDate);\n const day = weekStart.getDay();\n const offset = mondayStart ? (day === 0 ? -6 : 1 - day) : -day;\n weekStart.setDate(weekStart.getDate() + offset);\n weekStart.setHours(0, 0, 0, 0);\n const weekEnd = new Date(weekStart);\n weekEnd.setDate(weekStart.getDate() + 7);\n return now >= weekStart && now < weekEnd;\n })();\n if (!isTodayOnScreen) return;\n\n const key = `${currentViewMode}-${currentDate.toDateString()}`;\n if (lastScrollKeyRef.current === key) return;\n lastScrollKeyRef.current = key;\n\n const minutesFromStart = (now.getHours() - timelineStartHour) * 60 + now.getMinutes();\n const scrollPosition = Math.max(0, (minutesFromStart / 60) * timelineHourHeight - 100);\n setTimeout(() => {\n if (targetRef.current) targetRef.current.scrollTop = scrollPosition;\n }, 0);\n }, [currentViewMode, currentDate, timelineStartHour, timelineHourHeight, mondayStart]);\n \n const getDayEvents = (day: Date) => {\n const dayEvents = filteredEvents.filter(event => {\n const eventDate = new Date(event.date);\n return eventDate.toDateString() === day.toDateString();\n });\n \n return dayEvents.sort((a, b) => {\n const timeA = a.time ? convertTimeToMinutes(a.time) : 999999;\n const timeB = b.time ? convertTimeToMinutes(b.time) : 999999;\n return timeA - timeB;\n });\n };\n \n const convertTimeToMinutes = (time: string): number => {\n const [hours, minutes] = time.split(':').map(Number);\n return hours * 60 + minutes;\n };\n\n // Compute side-by-side column layout for events that overlap in time.\n // Returns a map: eventId -> { col, totalCols } where totalCols is the width\n // of the group (so a 3-way overlap yields totalCols=3 and col in {0,1,2}).\n const layoutOverlappingEvents = (\n events: CalendarEvent[]\n ): Map<string, { col: number; totalCols: number }> => {\n const result = new Map<string, { col: number; totalCols: number }>();\n const timed = events.filter(e => e.time).map(e => {\n const start = convertTimeToMinutes(e.time!);\n const end = e.endTime ? convertTimeToMinutes(e.endTime) : start + 30;\n return { event: e, start, end: Math.max(end, start + 1) };\n });\n timed.sort((a, b) => a.start - b.start || a.end - b.end);\n\n let cluster: typeof timed = [];\n let clusterEnd = -1;\n const flushCluster = () => {\n if (cluster.length === 0) return;\n const cols: number[] = []; // cols[i] = end time of last event in col i\n const assigned: { id: string; col: number }[] = [];\n for (const item of cluster) {\n let placed = false;\n for (let i = 0; i < cols.length; i++) {\n if (cols[i] <= item.start) {\n cols[i] = item.end;\n assigned.push({ id: item.event.id, col: i });\n placed = true;\n break;\n }\n }\n if (!placed) {\n cols.push(item.end);\n assigned.push({ id: item.event.id, col: cols.length - 1 });\n }\n }\n const totalCols = cols.length;\n for (const a of assigned) result.set(a.id, { col: a.col, totalCols });\n cluster = [];\n clusterEnd = -1;\n };\n for (const item of timed) {\n if (cluster.length === 0 || item.start < clusterEnd) {\n cluster.push(item);\n clusterEnd = Math.max(clusterEnd, item.end);\n } else {\n flushCluster();\n cluster.push(item);\n clusterEnd = item.end;\n }\n }\n flushCluster();\n return result;\n };\n \n const handlePrevious = () => {\n const newDate = new Date(currentDate);\n if (currentViewMode === 'week') {\n newDate.setDate(newDate.getDate() - 7);\n } else if (currentViewMode === 'day') {\n newDate.setDate(newDate.getDate() - 1);\n } else {\n newDate.setMonth(newDate.getMonth() - 1);\n }\n setCurrentDate(newDate);\n };\n \n const handleNext = () => {\n const newDate = new Date(currentDate);\n if (currentViewMode === 'week') {\n newDate.setDate(newDate.getDate() + 7);\n } else if (currentViewMode === 'day') {\n newDate.setDate(newDate.getDate() + 1);\n } else {\n newDate.setMonth(newDate.getMonth() + 1);\n }\n setCurrentDate(newDate);\n };\n \n const handleToday = () => {\n setCurrentDate(new Date());\n };\n \n const getEventColor = (event: CalendarEvent) => {\n if (event.color) return event.color;\n if (event.type && eventColors[event.type]) return eventColors[event.type];\n \n // Default color scheme based on priority\n const defaultColors = {\n high: '#FF4444',\n medium: '#FFA500',\n low: '#4A90E2'\n };\n \n if (event.priority && defaultColors[event.priority as keyof typeof defaultColors]) {\n return defaultColors[event.priority as keyof typeof defaultColors];\n }\n \n return '#4A90E2'; // Default blue\n };\n \n const getContrastColor = (bgColor: string): string => {\n // Convert hex to RGB\n const hex = bgColor.replace('#', '');\n const r = parseInt(hex.substring(0, 2), 16);\n const g = parseInt(hex.substring(2, 4), 16);\n const b = parseInt(hex.substring(4, 6), 16);\n \n // Calculate luminance\n const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;\n \n // Return black or white based on luminance\n return luminance > 0.5 ? '#000000' : '#FFFFFF';\n };\n \n const getEventTextColor = (event: CalendarEvent): string => {\n if (event.textColor) return event.textColor;\n const bgColor = getEventColor(event);\n return getContrastColor(bgColor);\n };\n \n const handleEventClick = (event: CalendarEvent) => {\n // Check for view-specific handler first\n if (onEventClickByView && onEventClickByView[currentViewMode]) {\n onEventClickByView[currentViewMode](event);\n } else if (onEventClick) {\n // Fall back to general handler\n onEventClick(event);\n }\n };\n\n const handleDateClick = (date: Date) => {\n // Check for view-specific handler first\n if (onDateClickByView && onDateClickByView[currentViewMode]) {\n onDateClickByView[currentViewMode](date);\n } else if (onDateClick) {\n // Fall back to general handler\n onDateClick(date);\n }\n };\n\n const isToday = (date: Date) => {\n const today = new Date();\n return date.toDateString() === today.toDateString();\n };\n \n const isCurrentMonth = (date: Date) => {\n return date.getMonth() === currentDate.getMonth();\n };\n \n const getWeekNumber = (date: Date) => {\n const start = new Date(date.getFullYear(), 0, 1);\n const diff = date.getTime() - start.getTime();\n const oneWeek = 1000 * 60 * 60 * 24 * 7;\n return Math.floor(diff / oneWeek) + 1;\n };\n \n if (loading) {\n return (\n <div className={`${styles.calendar} ${styles.loading} ${className}`} style={style}>\n <div className={styles.loadingSpinner}>Loading...</div>\n </div>\n );\n }\n \n return (\n <div className={`${styles.calendar} ${compact ? styles.compact : ''} ${className}`} style={style}>\n {!hideHeader && (\n <div className={styles.header}>\n <div className={styles.navigation}>\n <button onClick={handlePrevious} className={styles.navButton} aria-label=\"Previous\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n <polyline points=\"15,18 9,12 15,6\" />\n </svg>\n </button>\n <h3 className={styles.title}>{calendarData.displayTitle}</h3>\n <button onClick={handleNext} className={styles.navButton} aria-label=\"Next\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n <polyline points=\"9,6 15,12 9,18\" />\n </svg>\n </button>\n </div>\n\n {categories && categories.length > 0 && (\n <div className={styles.filterBar} role=\"tablist\" aria-label=\"Filter by category\">\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={activeCategoryId === null}\n className={`${styles.filterPill} ${activeCategoryId === null ? styles.filterPillActive : ''}`}\n onClick={() => handleCategoryPick(null)}\n >\n All\n </button>\n {categories.map(cat => {\n const active = activeCategoryId === cat.id;\n return (\n <button\n key={cat.id}\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n className={`${styles.filterPill} ${active ? styles.filterPillActive : ''}`}\n style={active ? { background: cat.color, borderColor: cat.color, color: '#ffffff' } : undefined}\n onClick={() => handleCategoryPick(cat.id)}\n >\n {!active && (\n <span className={styles.filterDot} style={{ background: cat.color }} />\n )}\n {cat.label}\n </button>\n );\n })}\n </div>\n )}\n\n <div className={styles.controls}>\n {exportFormats && exportFormats.length > 0 && (\n <div className={styles.exportDropdown} ref={exportRef}>\n <button\n type=\"button\"\n className={styles.exportButton}\n onClick={() => setExportOpen(v => !v)}\n aria-haspopup=\"menu\"\n aria-expanded={exportOpen}\n aria-label=\"Export events\"\n title=\"Export events\"\n >\n <Download size={16} />\n </button>\n {exportOpen && (\n <div className={styles.exportMenu} role=\"menu\">\n {exportFormats.map(format => (\n <button\n key={format}\n type=\"button\"\n role=\"menuitem\"\n className={styles.exportMenuItem}\n onClick={() => {\n downloadEvents(filteredEvents, format);\n setExportOpen(false);\n }}\n >\n {format.toUpperCase()}\n </button>\n ))}\n </div>\n )}\n </div>\n )}\n {(currentViewMode === 'day' || currentViewMode === 'week') && (\n <button\n type=\"button\"\n className={styles.nightToggle}\n onClick={() => setHideNightHours(v => !v)}\n aria-pressed={hideNightHours}\n title={hideNightHours ? 'Show night hours' : 'Hide night hours (00:00–08:00)'}\n aria-label={hideNightHours ? 'Show night hours' : 'Hide night hours'}\n >\n {hideNightHours ? <Sun size={16} /> : <Moon size={16} />}\n </button>\n )}\n <button onClick={handleToday} className={styles.todayButton}>\n Today\n </button>\n <div className={styles.viewToggle}>\n <button\n className={`${styles.viewButton} ${currentViewMode === 'month' ? styles.active : ''}`}\n onClick={() => setCurrentViewMode('month')}\n >\n Month\n </button>\n <button\n className={`${styles.viewButton} ${currentViewMode === 'week' ? styles.active : ''}`}\n onClick={() => setCurrentViewMode('week')}\n >\n Week\n </button>\n <button\n className={`${styles.viewButton} ${currentViewMode === 'day' ? styles.active : ''}`}\n onClick={() => setCurrentViewMode('day')}\n >\n Day\n </button>\n </div>\n </div>\n </div>\n )}\n\n {currentViewMode === 'month' && (\n <div className={`${styles.weekDays} ${showWeekNumbers ? styles.withWeekNumbers : ''}`}>\n {showWeekNumbers && <div className={styles.weekNumberHeader}>Wk</div>}\n {finalDayLabels.map((day) => (\n <div key={day} className={styles.weekDay}>\n {day}\n </div>\n ))}\n </div>\n )}\n \n {currentViewMode === 'day' ? (\n // Day view layout — positioned events with duration, all-day strip, now-line\n (() => {\n const dayEvents = getDayEvents(currentDate);\n const scheduled = dayEvents.filter(e => !e.allDay && e.time);\n const allDayEvents = dayEvents.filter(e => e.allDay || !e.time);\n\n const hours = Array.from({ length: endHour - startHour }, (_, i) => startHour + i);\n const timelineHeight = hours.length * hourHeight;\n\n const now = new Date();\n const dayIsToday = currentDate.toDateString() === now.toDateString();\n const nowMinutesFromStart = (now.getHours() - startHour) * 60 + now.getMinutes();\n const nowOffset = (nowMinutesFromStart / 60) * hourHeight;\n const showNow = dayIsToday && nowOffset >= 0 && nowOffset <= timelineHeight;\n\n const eventMinutes = (time: string) => {\n const [h, m] = time.split(':').map(Number);\n return h * 60 + m;\n };\n const eventDuration = (event: CalendarEvent) => {\n if (!event.time || !event.endTime) return 30;\n const d = eventMinutes(event.endTime) - eventMinutes(event.time);\n return d > 0 ? d : 30;\n };\n\n const dayLayout = layoutOverlappingEvents(scheduled);\n\n const handleSlotClick = (hour: number, minute: number) => {\n if (onTimeSlotClick) {\n const slotDate = new Date(currentDate);\n slotDate.setHours(hour, minute, 0, 0);\n const timeString = `${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}`;\n onTimeSlotClick(slotDate, hour, timeString);\n }\n };\n\n const handleEventDragEnd = (event: CalendarEvent, clientY: number) => {\n if (!onEventDrop) return;\n const gridEl = dayViewScrollRef.current?.querySelector(`.${styles.dayTimelineGrid}`) as HTMLElement | null;\n if (!gridEl) return;\n const rect = gridEl.getBoundingClientRect();\n const relativeY = clientY - rect.top;\n const slotSize = halfHourSlots ? hourHeight / 2 : hourHeight;\n const slotIndex = Math.max(0, Math.floor(relativeY / slotSize));\n const totalSlots = halfHourSlots ? hours.length * 2 : hours.length;\n const clamped = Math.min(totalSlots - 1, slotIndex);\n const newHour = startHour + Math.floor(halfHourSlots ? clamped / 2 : clamped);\n const newMinute = halfHourSlots && clamped % 2 === 1 ? 30 : 0;\n const newDate = new Date(currentDate);\n newDate.setHours(newHour, newMinute, 0, 0);\n onEventDrop(event, newDate);\n };\n\n return (\n <div className={styles.dayView}>\n <div className={styles.dayViewHeader}>\n <div className={styles.timeColumnHeader}></div>\n <div className={styles.dayColumnHeader}>\n {currentDate.toLocaleDateString(locale, { weekday: 'short', day: 'numeric' })}\n </div>\n </div>\n\n {allDayEvents.length > 0 && (\n <div className={styles.allDayStrip}>\n <span className={styles.allDayLabel}>All day</span>\n <div className={styles.allDayList}>\n {allDayEvents.map(event => (\n <DayEventCard\n key={event.id}\n event={event}\n color={getEventColor(event)}\n textColor={getEventTextColor(event)}\n onComplete={onEventComplete ?? (onEventClick ? handleEventClick : undefined)}\n onEdit={onEventEdit}\n onDelete={onEventDelete}\n draggable={false}\n />\n ))}\n </div>\n </div>\n )}\n\n <div className={styles.dayViewScrollContainer} ref={dayViewScrollRef}>\n <div className={styles.dayTimelineGrid} style={{ height: timelineHeight }}>\n {hours.map(hour => (\n <div\n key={hour}\n className={styles.hourRow}\n style={{ height: hourHeight }}\n >\n <span className={styles.hourLabel}>\n {hour.toString().padStart(2, '0')}:00\n </span>\n <div className={styles.hourSlots}>\n {halfHourSlots ? (\n <>\n <div\n className={styles.halfHourSlot}\n onClick={() => handleSlotClick(hour, 0)}\n />\n <div\n className={`${styles.halfHourSlot} ${styles.halfHourSlotBottom}`}\n onClick={() => handleSlotClick(hour, 30)}\n />\n </>\n ) : (\n <div\n className={styles.halfHourSlot}\n onClick={() => handleSlotClick(hour, 0)}\n />\n )}\n </div>\n </div>\n ))}\n\n {scheduled.map((event) => {\n const [h, m] = event.time!.split(':').map(Number);\n const top = (h - startHour) * hourHeight + (m / 60) * hourHeight;\n const duration = eventDuration(event);\n const height = Math.max(24, (duration / 60) * hourHeight - 2);\n const lane = dayLayout.get(event.id);\n const totalCols = lane?.totalCols ?? 1;\n const col = lane?.col ?? 0;\n return (\n <div\n key={event.id}\n className={styles.dayEventAnchor}\n style={{\n top,\n height,\n '--lane-col': col,\n '--lane-total': totalCols,\n } as React.CSSProperties}\n onClick={(e) => e.stopPropagation()}\n >\n <DayEventCard\n event={event}\n color={getEventColor(event)}\n textColor={getEventTextColor(event)}\n onComplete={onEventComplete ?? (onEventClick ? handleEventClick : undefined)}\n onEdit={onEventEdit}\n onDelete={onEventDelete}\n onDragEnd={onEventDrop ? (clientY) => handleEventDragEnd(event, clientY) : undefined}\n />\n </div>\n );\n })}\n\n {showNow && (\n <div\n className={styles.currentTimeIndicator}\n style={{ top: `${nowOffset}px` }}\n />\n )}\n </div>\n </div>\n </div>\n );\n })()\n ) : currentViewMode === 'week' ? (\n // Week view layout — 7 side-by-side day timelines. Drag events across\n // columns to reschedule to a different day + hour in one gesture.\n (() => {\n const days = calendarData.days;\n const hours = Array.from({ length: endHour - startHour }, (_, i) => startHour + i);\n const timelineHeight = hours.length * hourHeight;\n\n const now = new Date();\n const todayIdx = days.findIndex(d => d.toDateString() === now.toDateString());\n const nowMinutesFromStart = (now.getHours() - startHour) * 60 + now.getMinutes();\n const nowOffset = (nowMinutesFromStart / 60) * hourHeight;\n const showNow = todayIdx >= 0 && nowOffset >= 0 && nowOffset <= timelineHeight;\n\n const eventMinutes = (time: string) => {\n const [h, m] = time.split(':').map(Number);\n return h * 60 + m;\n };\n const eventDuration = (event: CalendarEvent) => {\n if (!event.time || !event.endTime) return 30;\n const d = eventMinutes(event.endTime) - eventMinutes(event.time);\n return d > 0 ? d : 30;\n };\n\n const handleWeekSlotClick = (day: Date, hour: number, minute: number) => {\n if (!onTimeSlotClick) return;\n const slotDate = new Date(day);\n slotDate.setHours(hour, minute, 0, 0);\n const timeString = `${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}`;\n onTimeSlotClick(slotDate, hour, timeString);\n };\n\n const handleWeekDragEnd = (event: CalendarEvent, clientY: number, clientX: number) => {\n if (!onEventDrop) return;\n const gridEl = weekViewScrollRef.current?.querySelector(`.${styles.weekDayColumns}`) as HTMLElement | null;\n if (!gridEl) return;\n const rect = gridEl.getBoundingClientRect();\n const relativeX = clientX - rect.left;\n const relativeY = clientY - rect.top;\n const columnWidth = rect.width / 7;\n const columnIndex = Math.min(6, Math.max(0, Math.floor(relativeX / columnWidth)));\n const targetDay = days[columnIndex];\n const slotSize = halfHourSlots ? hourHeight / 2 : hourHeight;\n const totalSlots = halfHourSlots ? hours.length * 2 : hours.length;\n const slotIndex = Math.min(totalSlots - 1, Math.max(0, Math.floor(relativeY / slotSize)));\n const newHour = startHour + Math.floor(halfHourSlots ? slotIndex / 2 : slotIndex);\n const newMinute = halfHourSlots && slotIndex % 2 === 1 ? 30 : 0;\n const newDate = new Date(targetDay);\n newDate.setHours(newHour, newMinute, 0, 0);\n onEventDrop(event, newDate);\n };\n\n return (\n <div className={styles.weekTimeline}>\n <div className={styles.weekTimelineHeader}>\n <div className={styles.timeColumnHeader} />\n {days.map(day => {\n const dayIsToday = day.toDateString() === now.toDateString();\n const dayIsSelected = selectedDate && day.toDateString() === selectedDate.toDateString();\n return (\n <button\n key={day.toISOString()}\n type=\"button\"\n className={`${styles.weekDayColumnHeader} ${dayIsToday ? styles.today : ''} ${dayIsSelected ? styles.selected : ''}`}\n onClick={() => handleDateClick(day)}\n >\n <span className={styles.weekDayLabel}>\n {day.toLocaleDateString(locale, { weekday: 'short' })}\n </span>\n <span className={styles.weekDayNumber}>{day.getDate()}</span>\n </button>\n );\n })}\n </div>\n\n <div className={styles.weekTimelineScroll} ref={weekViewScrollRef}>\n <div className={styles.weekTimelineGrid} style={{ height: timelineHeight }}>\n <div className={styles.weekTimeColumn}>\n {hours.map(hour => (\n <div\n key={hour}\n className={styles.weekTimeSlot}\n style={{ height: hourHeight }}\n >\n <span className={styles.weekHourLabel}>\n {hour.toString().padStart(2, '0')}:00\n </span>\n </div>\n ))}\n </div>\n\n <div className={styles.weekDayColumns}>\n {days.map(day => {\n const dayEvents = getDayEvents(day).filter(e => !e.allDay && e.time);\n const dayIsToday = day.toDateString() === now.toDateString();\n const dayLayout = layoutOverlappingEvents(dayEvents);\n return (\n <div key={day.toISOString()} className={styles.weekDayColumn}>\n {hours.map(hour => (\n <div\n key={hour}\n className={styles.weekHourRow}\n style={{ height: hourHeight }}\n >\n {halfHourSlots ? (\n <>\n <div\n className={styles.halfHourSlot}\n onClick={() => handleWeekSlotClick(day, hour, 0)}\n />\n <div\n className={`${styles.halfHourSlot} ${styles.halfHourSlotBottom}`}\n onClick={() => handleWeekSlotClick(day, hour, 30)}\n />\n </>\n ) : (\n <div\n className={styles.halfHourSlot}\n onClick={() => handleWeekSlotClick(day, hour, 0)}\n />\n )}\n </div>\n ))}\n\n {dayEvents.map(event => {\n const [h, m] = event.time!.split(':').map(Number);\n const top = (h - startHour) * hourHeight + (m / 60) * hourHeight;\n const duration = eventDuration(event);\n const height = Math.max(24, (duration / 60) * hourHeight - 2);\n const lane = dayLayout.get(event.id);\n const totalCols = lane?.totalCols ?? 1;\n const col = lane?.col ?? 0;\n return (\n <div\n key={event.id}\n className={styles.weekEventAnchor}\n style={{\n top,\n height,\n '--lane-col': col,\n '--lane-total': totalCols,\n } as React.CSSProperties}\n onClick={(e) => e.stopPropagation()}\n >\n <DayEventCard\n event={event}\n color={getEventColor(event)}\n textColor={getEventTextColor(event)}\n onComplete={onEventComplete ?? (onEventClick ? handleEventClick : undefined)}\n onEdit={onEventEdit}\n onDelete={onEventDelete}\n onDragEnd={onEventDrop ? (cy, cx) => handleWeekDragEnd(event, cy, cx) : undefined}\n />\n </div>\n );\n })}\n\n {dayIsToday && showNow && (\n <div\n className={styles.currentTimeIndicator}\n style={{ top: `${nowOffset}px`, left: 0 }}\n />\n )}\n </div>\n );\n })}\n </div>\n </div>\n </div>\n </div>\n );\n })()\n ) : (\n (() => {\n // Fixed month-view cell height derived from maxEventsPerDay.\n // Day number + padding ≈ 40px, each event row ≈ 24px.\n // Week and compact views keep their own CSS-driven sizing.\n const monthCellHeight = !compact ? 40 + maxEventsPerDay * 24 : undefined;\n return (\n <div className={`${styles.daysGrid} ${showWeekNumbers ? styles.withWeekNumbers : ''}`}>\n {calendarData.days.map((day, index) => {\n const dayEvents = getDayEvents(day);\n const dayIsToday = isToday(day);\n const isInCurrentMonth = isCurrentMonth(day);\n const isWeekStart = showWeekNumbers && (index % 7 === 0);\n const dayIsSelected = selectedDate && day.toDateString() === selectedDate.toDateString();\n\n return (\n <Fragment key={`${day.getFullYear()}-${day.getMonth()}-${day.getDate()}`}>\n {isWeekStart && (\n <div\n className={styles.weekNumberCell}\n style={monthCellHeight !== undefined ? { height: monthCellHeight, minHeight: monthCellHeight } : undefined}\n >\n {getWeekNumber(day)}\n </div>\n )}\n <motion.div\n className={`${styles.dayCell} ${dayIsToday ? styles.today : ''} ${!isInCurrentMonth ? styles.otherMonth : ''} ${dayIsSelected ? styles.selected : ''}`}\n style={monthCellHeight !== undefined ? { height: monthCellHeight, minHeight: monthCellHeight } : undefined}\n initial={{ opacity: 0, y: 20 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{\n duration: 0.3,\n delay: index * 0.02,\n ease: \"easeOut\"\n }}\n onClick={() => handleDateClick(day)}\n >\n <div className={styles.dayNumber}>\n {day.getDate()}\n </div>\n {dayEvents.length > 0 && compact && currentViewMode === 'month' ? (\n <div className={styles.dots}>\n {dayEvents.slice(0, maxEventsPerDay).map((event) => (\n <span\n key={event.id}\n className={styles.dot}\n style={{\n backgroundColor:\n event.status === 'completed'\n ? '#047857'\n : getEventColor(event),\n }}\n />\n ))}\n {dayEvents.length > maxEventsPerDay && (\n <span className={styles.dotMore}>\n +{dayEvents.length - maxEventsPerDay}\n </span>\n )}\n </div>\n ) : dayEvents.length > 0 ? (\n <div className={styles.events}>\n {dayEvents.slice(0, maxEventsPerDay).map((event, eventIndex) => (\n <motion.div\n key={event.id}\n className={`${styles.event} ${event.status === 'completed' ? styles.completed : ''}`}\n style={{\n backgroundColor: getEventColor(event),\n color: getEventTextColor(event),\n opacity: event.status === 'completed' ? 0.7 : 1\n }}\n onClick={(e) => {\n e.stopPropagation();\n handleEventClick(event);\n }}\n initial={{ opacity: 0, x: -10 }}\n animate={{ opacity: 1, x: 0 }}\n transition={{\n duration: 0.2,\n delay: eventIndex * 0.05,\n ease: \"easeOut\"\n }}\n whileHover={{\n scale: 1.02,\n y: -1,\n transition: { duration: 0.1 }\n }}\n whileTap={{\n scale: 0.98,\n transition: { duration: 0.1 }\n }}\n >\n {iconRenderer && iconRenderer(event)}\n <span className={styles.eventTitle}>\n {event.time && (\n <span className={styles.eventTime}>\n {event.time}\n </span>\n )}\n {event.title}\n </span>\n {event.status === 'completed' && (\n <svg className={styles.completedIcon} width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n <polyline points=\"20,6 9,17 4,12\" />\n </svg>\n )}\n </motion.div>\n ))}\n {dayEvents.length > maxEventsPerDay && (\n <div className={styles.moreEvents}>\n +{dayEvents.length - maxEventsPerDay} more\n </div>\n )}\n </div>\n ) : emptyState ? (\n <div className={styles.emptyState}>\n {emptyState}\n </div>\n ) : null}\n </motion.div>\n </Fragment>\n );\n })}\n </div>\n );\n })()\n )}\n </div>\n );\n}","import React, { useState, useEffect, useMemo, useRef } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { Menu, X } from 'lucide-react';\nimport desktopStyles from './styles/Navbar.module.css';\nimport mobileStyles from './styles/Navbar.mobile.module.css';\nimport { useComponentSound, ComponentSoundConfig } from '../../../utils/useSound';\n\nexport interface NavItem {\n id: string;\n label: React.ReactNode;\n icon?: React.ComponentType<{ className?: string }>;\n href?: string;\n onClick?: () => void;\n isActive?: boolean;\n badge?: string | number;\n children?: NavItem[];\n}\n\nexport interface NavbarProps {\n items: NavItem[];\n logo?: {\n src?: string;\n alt?: string;\n text?: React.ReactNode;\n subtitle?: React.ReactNode;\n };\n onItemClick?: (item: NavItem) => void;\n variant?: 'sidebar' | 'top' | 'minimal';\n isMobile?: boolean;\n footer?: React.ReactNode;\n className?: string;\n soundConfig?: ComponentSoundConfig;\n colorfulIcons?: boolean;\n}\n\nexport const Navbar: React.FC<NavbarProps> = ({\n items,\n logo,\n onItemClick,\n variant = 'sidebar',\n isMobile = false,\n footer,\n className = '',\n soundConfig,\n colorfulIcons = false,\n}) => {\n const coloredIconsAttr = colorfulIcons ? 'true' : undefined;\n const styles = useMemo(() => (isMobile ? mobileStyles : desktopStyles), [isMobile]);\n const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);\n const [expandedItems, setExpandedItems] = useState<Set<string>>(new Set());\n const { handlers, playSound } = useComponentSound(soundConfig);\n\n // Close mobile menu when switching away from mobile\n useEffect(() => {\n if (!isMobile) {\n setIsMobileMenuOpen(false);\n }\n }, [isMobile]);\n\n // Swipe from left edge to open menu\n const touchStartRef = useRef<{ x: number; y: number } | null>(null);\n\n useEffect(() => {\n if (!isMobile) return;\n\n const handleTouchStart = (e: TouchEvent) => {\n const touch = e.touches[0];\n if (touch.clientX < 30) {\n touchStartRef.current = { x: touch.clientX, y: touch.clientY };\n }\n };\n\n const handleTouchEnd = (e: TouchEvent) => {\n if (!touchStartRef.current) return;\n const touch = e.changedTouches[0];\n const dx = touch.clientX - touchStartRef.current.x;\n const dy = Math.abs(touch.clientY - touchStartRef.current.y);\n touchStartRef.current = null;\n\n if (dx > 60 && dy < dx) {\n setIsMobileMenuOpen(true);\n playSound('toggle');\n }\n };\n\n document.addEventListener('touchstart', handleTouchStart, { passive: true });\n document.addEventListener('touchend', handleTouchEnd, { passive: true });\n\n return () => {\n document.removeEventListener('touchstart', handleTouchStart);\n document.removeEventListener('touchend', handleTouchEnd);\n };\n }, [isMobile, playSound]);\n\n // Lock body scroll when overlay is open (position: fixed is more reliable on mobile)\n useEffect(() => {\n if (isMobileMenuOpen) {\n const scrollY = window.scrollY;\n document.body.style.position = 'fixed';\n document.body.style.top = `-${scrollY}px`;\n document.body.style.left = '0';\n document.body.style.right = '0';\n document.body.style.overflow = 'hidden';\n } else {\n const scrollY = document.body.style.top;\n document.body.style.position = '';\n document.body.style.top = '';\n document.body.style.left = '';\n document.body.style.right = '';\n document.body.style.overflow = '';\n if (scrollY) {\n window.scrollTo(0, parseInt(scrollY, 10) * -1);\n }\n }\n return () => {\n document.body.style.position = '';\n document.body.style.top = '';\n document.body.style.left = '';\n document.body.style.right = '';\n document.body.style.overflow = '';\n };\n }, [isMobileMenuOpen]);\n\n const toggleMobileMenu = () => {\n playSound('toggle');\n setIsMobileMenuOpen(!isMobileMenuOpen);\n };\n\n const toggleExpanded = (itemId: string) => {\n setExpandedItems((prev) => {\n const newSet = new Set(prev);\n if (newSet.has(itemId)) {\n newSet.delete(itemId);\n } else {\n newSet.add(itemId);\n }\n return newSet;\n });\n };\n\n const handleItemClick = (item: NavItem) => {\n handlers.onClick?.();\n if (item.children && item.children.length > 0) {\n toggleExpanded(item.id);\n } else {\n if (item.onClick) {\n item.onClick();\n }\n if (onItemClick) {\n onItemClick(item);\n }\n if (isMobile || isMobileMenuOpen) {\n setIsMobileMenuOpen(false);\n }\n }\n };\n\n const renderNavItem = (item: NavItem, index: number, depth: number = 0) => {\n const Icon = item.icon;\n const isExpanded = expandedItems.has(item.id);\n const hasChildren = item.children && item.children.length > 0;\n\n return (\n <motion.li\n key={item.id}\n className={`${styles.navItem} ${depth > 0 ? styles.subNavItem : ''}`}\n initial={{ opacity: 0, x: -20 }}\n animate={{ opacity: 1, x: 0 }}\n transition={{ delay: index * 0.05 }}\n >\n <motion.button\n className={`${styles.navLink} ${item.isActive ? styles.active : ''}`}\n onClick={() => handleItemClick(item)}\n onMouseEnter={handlers.onMouseEnter}\n whileHover={{ x: 5 }}\n whileTap={{ scale: 0.98 }}\n >\n {item.isActive && (\n <motion.div\n className={styles.activeBackground}\n layoutId=\"activeNavBackground\"\n initial={false}\n transition={{\n type: 'spring',\n stiffness: 500,\n damping: 35,\n }}\n />\n )}\n\n {Icon && (\n <Icon\n className={`${styles.navIcon} ${item.isActive ? styles.activeIcon : ''}`}\n />\n )}\n\n <span className={`${styles.navText} ${item.isActive ? styles.activeText : ''}`}>\n {item.label}\n </span>\n\n {item.badge && <span className={styles.navBadge}>{item.badge}</span>}\n\n {hasChildren && (\n <motion.span\n className={styles.chevron}\n animate={{ rotate: isExpanded ? 180 : 0 }}\n transition={{ duration: 0.2 }}\n >\n ▼\n </motion.span>\n )}\n </motion.button>\n\n {hasChildren && (\n <AnimatePresence>\n {isExpanded && (\n <motion.ul\n className={styles.subNavList}\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n transition={{ duration: 0.2 }}\n >\n {item.children!.map((child, childIndex) =>\n renderNavItem(child, childIndex, depth + 1)\n )}\n </motion.ul>\n )}\n </AnimatePresence>\n )}\n </motion.li>\n );\n };\n\n const navContent = (\n <>\n {logo && (\n <motion.div\n className={styles.navLogo}\n initial={{ opacity: 0, y: -20 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: 0.1 }}\n >\n <div className={styles.logoContainer}>\n {logo.src ? (\n <motion.img\n src={logo.src}\n alt={logo.alt || 'Logo'}\n className={styles.logoImage}\n onMouseEnter={handlers.onMouseEnter}\n whileHover={{ scale: 1.05 }}\n transition={{ type: 'spring', stiffness: 400 }}\n />\n ) : (\n <div className={styles.logoPlaceholder}>\n {typeof logo.text === 'string'\n ? logo.text.charAt(0) || 'L'\n : 'L'}\n </div>\n )}\n\n {(logo.text || logo.subtitle) && (\n <div className={styles.logoContent}>\n {logo.text && <span className={styles.logoText}>{logo.text}</span>}\n {logo.subtitle && (\n <span className={styles.logoSubtitle}>{logo.subtitle}</span>\n )}\n </div>\n )}\n </div>\n </motion.div>\n )}\n\n <ul className={styles.navList}>\n {items.map((item, index) => renderNavItem(item, index))}\n </ul>\n\n {footer && (\n <motion.div\n className={styles.navFooter}\n initial={{ opacity: 0, y: 20 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: 0.3 }}\n >\n {footer}\n </motion.div>\n )}\n </>\n );\n\n if (variant === 'top') {\n return (\n <motion.nav\n className={`${styles.navbar} ${styles.navbarTop} ${className}`}\n data-colored-icons={coloredIconsAttr}\n initial={{ y: -100 }}\n animate={{ y: 0 }}\n transition={{ type: 'spring', stiffness: 300, damping: 30 }}\n >\n {navContent}\n </motion.nav>\n );\n }\n\n if (isMobile) {\n return (\n <>\n {/* Mobile top bar */}\n <nav className={`${styles.navbar} ${className}`} data-colored-icons={coloredIconsAttr}>\n {logo && (\n <div className={styles.navLogo}>\n <div className={styles.logoContainer}>\n {logo.src ? (\n <img\n src={logo.src}\n alt={logo.alt || 'Logo'}\n className={styles.logoImage}\n />\n ) : (\n <div className={styles.logoPlaceholder}>\n {typeof logo.text === 'string'\n ? logo.text.charAt(0) || 'L'\n : 'L'}\n </div>\n )}\n {logo.text && (\n <div className={styles.logoContent}>\n <span className={styles.logoText}>{logo.text}</span>\n </div>\n )}\n </div>\n </div>\n )}\n\n <div className={styles.navActions}>\n {footer && <div className={styles.navFooter}>{footer}</div>}\n\n <button\n className={`${styles.mobileMenuButton} ${isMobileMenuOpen ? styles.menuOpen : ''}`}\n onClick={toggleMobileMenu}\n aria-label=\"Toggle navigation menu\"\n >\n {isMobileMenuOpen ? <X /> : <Menu />}\n </button>\n </div>\n </nav>\n\n {/* Full-screen overlay */}\n <AnimatePresence>\n {isMobileMenuOpen && (\n <motion.div\n className={styles.mobileBackdrop}\n data-colored-icons={coloredIconsAttr}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.2 }}\n onClick={() => setIsMobileMenuOpen(false)}\n >\n <motion.div\n initial={{ y: -20, opacity: 0 }}\n animate={{ y: 0, opacity: 1 }}\n exit={{ y: -20, opacity: 0 }}\n transition={{ duration: 0.2 }}\n onClick={(e) => e.stopPropagation()}\n >\n <ul className={styles.navList}>\n {items.map((item, index) => renderNavItem(item, index))}\n </ul>\n </motion.div>\n </motion.div>\n )}\n </AnimatePresence>\n </>\n );\n }\n\n return (\n <>\n {/* Desktop Navbar */}\n <motion.nav\n className={`${styles.navbar} ${styles[`navbar${variant.charAt(0).toUpperCase() + variant.slice(1)}`]} ${className}`}\n data-colored-icons={coloredIconsAttr}\n initial={variant === 'sidebar' ? { x: -300 } : { opacity: 0 }}\n animate={variant === 'sidebar' ? { x: 0 } : { opacity: 1 }}\n transition={{ type: 'spring', stiffness: 300, damping: 30 }}\n >\n {navContent}\n </motion.nav>\n </>\n );\n};\n","import React, { useState, useEffect, useMemo, useRef, useId } from 'react'\nimport * as d3 from 'd3'\nimport styles from './MoodChart.module.css'\n\ninterface MoodNoteData {\n date: string\n rating: number\n tag?: string\n comment?: string\n}\n\ninterface ParsedMoodData extends Omit<MoodNoteData, 'tag'> {\n tags: string[]\n}\n\ninterface MoodChartProps {\n moodData: MoodNoteData[]\n width?: number\n height?: number\n}\n\ntype ProcessedMoodData = Omit<ParsedMoodData, 'date'> & { date: Date }\n\nexport const MoodChart: React.FC<MoodChartProps> = ({\n moodData,\n width = 800,\n height = 400\n}) => {\n const svgRef = useRef<SVGSVGElement>(null)\n const containerRef = useRef<HTMLDivElement>(null)\n const tooltipRef = useRef<HTMLDivElement>(null)\n const isHoveringTooltipRef = useRef(false)\n const rawId = useId()\n const gradientId = useMemo(() => `mood-area-${rawId.replace(/[^a-zA-Z0-9]/g, '_')}`, [rawId])\n const [selectedMood, setSelectedMood] = useState<ProcessedMoodData | null>(null)\n const [tooltipPosition, setTooltipPosition] = useState({ x: 0, y: 0 })\n const [isHoveringTooltip, setIsHoveringTooltip] = useState(false)\n\n useEffect(() => {\n isHoveringTooltipRef.current = isHoveringTooltip\n }, [isHoveringTooltip])\n\n const margin = useMemo(() => ({ top: 20, right: 20, bottom: 50, left: 40 }), [])\n const chartWidth = width - margin.left - margin.right\n const chartHeight = height - margin.top - margin.bottom\n\n const processedData = useMemo(() => {\n return moodData\n .map(mood => {\n const tags = mood.tag\n ? mood.tag.split(',').map(t => t.trim()).filter(t => t)\n : []\n\n return {\n date: new Date(mood.date),\n rating: mood.rating,\n tags,\n comment: mood.comment\n }\n })\n .filter(mood =>\n !isNaN(mood.date.getTime()) &&\n isFinite(mood.rating)\n )\n .sort((a, b) => a.date.getTime() - b.date.getTime()) as ProcessedMoodData[]\n }, [moodData])\n\n const colorScale = useMemo(() => {\n return d3.scaleLinear<string>()\n .domain([1, 5, 10])\n .range(['#FF6B6B', '#FFD93D', '#6BCB77'])\n .clamp(true)\n }, [])\n\n useEffect(() => {\n if (!svgRef.current || processedData.length === 0) return\n\n const svg = d3.select(svgRef.current)\n svg.selectAll('*').remove()\n\n const defs = svg.append('defs')\n const gradient = defs.append('linearGradient')\n .attr('id', gradientId)\n .attr('x1', '0%').attr('y1', '0%')\n .attr('x2', '0%').attr('y2', '100%')\n gradient.append('stop').attr('offset', '0%').attr('class', styles.areaStopTop)\n gradient.append('stop').attr('offset', '100%').attr('class', styles.areaStopBottom)\n\n const g = svg.append('g')\n .attr('transform', `translate(${margin.left},${margin.top})`)\n\n const extentDates = d3.extent(processedData, d => d.date) as [Date, Date]\n if (!extentDates[0] || !extentDates[1]) return\n\n const xScale = d3.scaleTime()\n .domain(extentDates)\n .range([0, chartWidth])\n\n const yScale = d3.scaleLinear()\n .domain([1, 10])\n .range([chartHeight, 0])\n\n const line = d3.line<ProcessedMoodData>()\n .x(d => xScale(d.date))\n .y(d => yScale(d.rating))\n .curve(d3.curveMonotoneX)\n\n const area = d3.area<ProcessedMoodData>()\n .x(d => xScale(d.date))\n .y0(chartHeight)\n .y1(d => yScale(d.rating))\n .curve(d3.curveMonotoneX)\n\n // Grid lines (fade in)\n g.selectAll('.grid-line-y')\n .data(yScale.ticks(5))\n .enter().append('line')\n .attr('class', styles.gridLine)\n .attr('x1', 0)\n .attr('y1', d => yScale(d))\n .attr('x2', chartWidth)\n .attr('y2', d => yScale(d))\n .style('opacity', 0)\n .transition()\n .duration(500)\n .ease(d3.easeCubicOut)\n .style('opacity', 1)\n\n // Axes (fade in)\n g.append('g')\n .attr('class', styles.xAxis)\n .attr('transform', `translate(0,${chartHeight})`)\n .style('opacity', 0)\n .call(d3.axisBottom(xScale)\n .tickFormat(d => d3.timeFormat('%m/%d')(d as Date)))\n .transition()\n .duration(600)\n .delay(100)\n .style('opacity', 1)\n\n g.append('g')\n .attr('class', styles.yAxis)\n .style('opacity', 0)\n .call(d3.axisLeft(yScale))\n .transition()\n .duration(600)\n .delay(100)\n .style('opacity', 1)\n\n // Area fill (fades in after line draws past it)\n const areaPath = g.append('path')\n .datum(processedData)\n .attr('class', styles.area)\n .attr('fill', `url(#${gradientId})`)\n .attr('d', area)\n .style('opacity', 0)\n\n // Line (draw-in animation via stroke-dasharray)\n const linePath = g.append('path')\n .datum(processedData)\n .attr('class', styles.line)\n .attr('d', line)\n\n const lineNode = linePath.node() as SVGPathElement | null\n const totalLength = lineNode && typeof lineNode.getTotalLength === 'function'\n ? lineNode.getTotalLength()\n : 0\n const lineDuration = 1200\n\n if (totalLength > 0) {\n linePath\n .attr('stroke-dasharray', `${totalLength} ${totalLength}`)\n .attr('stroke-dashoffset', totalLength)\n .transition()\n .duration(lineDuration)\n .ease(d3.easeCubicOut)\n .attr('stroke-dashoffset', 0)\n .on('end', () => {\n linePath.attr('stroke-dasharray', null)\n })\n }\n\n areaPath\n .transition()\n .delay(lineDuration * 0.4)\n .duration(800)\n .ease(d3.easeCubicOut)\n .style('opacity', 1)\n\n // Crosshair (vertical guide on hover)\n const crosshair = g.append('line')\n .attr('class', styles.crosshair)\n .attr('y1', 0)\n .attr('y2', chartHeight)\n .style('opacity', 0)\n .style('pointer-events', 'none')\n\n // Pulsing halo behind active point\n const halo = g.append('circle')\n .attr('class', styles.halo)\n .attr('r', 0)\n .style('opacity', 0)\n .style('pointer-events', 'none')\n\n // Data points (staggered entrance keyed to line draw)\n const minX = xScale(extentDates[0])\n const maxX = xScale(extentDates[1])\n const xRange = Math.max(1, maxX - minX)\n\n const pointSel = g.selectAll('.mood-circle')\n .data(processedData)\n .enter().append('circle')\n .attr('class', styles.dataPoint)\n .attr('cx', d => xScale(d.date))\n .attr('cy', d => yScale(d.rating))\n .attr('r', 0)\n .attr('fill', d => colorScale(d.rating))\n .style('opacity', 0)\n .style('pointer-events', 'none')\n\n pointSel.transition()\n .delay(d => 100 + lineDuration * ((xScale(d.date) - minX) / xRange))\n .duration(380)\n .ease(d3.easeBackOut.overshoot(2))\n .attr('r', 5)\n .style('opacity', 1)\n\n const pointNodes = pointSel.nodes()\n\n // Active state lives in mutable refs (closure over redraw)\n let activeIndex: number | null = null\n\n const startHaloPulse = (cx: number, cy: number, fill: string) => {\n halo\n .interrupt('halo-pulse')\n .interrupt('halo-out')\n .attr('cx', cx)\n .attr('cy', cy)\n .attr('fill', fill)\n\n const pulseOnce = () => {\n halo\n .attr('r', 5)\n .style('opacity', 0.55)\n .transition('halo-pulse')\n .duration(900)\n .ease(d3.easeCubicOut)\n .attr('r', 20)\n .style('opacity', 0)\n .on('end', pulseOnce)\n }\n pulseOnce()\n }\n\n const stopHaloPulse = () => {\n halo\n .interrupt('halo-pulse')\n .transition('halo-out')\n .duration(180)\n .style('opacity', 0)\n .attr('r', 0)\n }\n\n const setActive = (idx: number, clientX: number, clientY: number) => {\n const d = processedData[idx]\n if (!d) return\n\n const cx = xScale(d.date)\n const cy = yScale(d.rating)\n\n const rect = svgRef.current?.getBoundingClientRect()\n if (rect) {\n let x = clientX - rect.left + 12\n let y = clientY - rect.top - 12\n const estW = 280\n if (x + estW > chartWidth + margin.left - 20) {\n x = clientX - rect.left - estW - 12\n if (x < 0) x = 10\n }\n if (y < 0) y = 10\n setTooltipPosition({ x, y })\n }\n setSelectedMood(d)\n\n crosshair\n .attr('x1', cx).attr('x2', cx)\n .interrupt('crosshair-fade')\n .transition('crosshair-fade')\n .duration(120)\n .style('opacity', 1)\n\n if (activeIndex !== idx) {\n if (activeIndex !== null) {\n d3.select(pointNodes[activeIndex] as Element)\n .transition('point-scale')\n .duration(180)\n .ease(d3.easeCubicOut)\n .attr('r', 5)\n }\n d3.select(pointNodes[idx] as Element)\n .transition('point-scale')\n .duration(180)\n .ease(d3.easeBackOut.overshoot(2))\n .attr('r', 8)\n startHaloPulse(cx, cy, colorScale(d.rating))\n activeIndex = idx\n }\n }\n\n const clearActive = () => {\n crosshair\n .interrupt('crosshair-fade')\n .transition('crosshair-fade')\n .duration(180)\n .style('opacity', 0)\n if (activeIndex !== null) {\n d3.select(pointNodes[activeIndex] as Element)\n .transition('point-scale')\n .duration(180)\n .attr('r', 5)\n activeIndex = null\n }\n stopHaloPulse()\n setSelectedMood(null)\n }\n\n // Overlay captures mouse for nearest-point lookup (rendered last so it sits on top)\n const bisect = d3.bisector<ProcessedMoodData, Date>(d => d.date).center\n\n g.append('rect')\n .attr('class', styles.overlay)\n .attr('width', chartWidth)\n .attr('height', chartHeight)\n .on('mousemove', function (event: MouseEvent) {\n const [mx] = d3.pointer(event, this as SVGRectElement)\n const xDate = xScale.invert(mx)\n const idx = Math.max(0, Math.min(processedData.length - 1, bisect(processedData, xDate)))\n setActive(idx, event.clientX, event.clientY)\n })\n .on('mouseleave', () => {\n window.setTimeout(() => {\n if (!isHoveringTooltipRef.current) {\n clearActive()\n }\n }, 220)\n })\n\n }, [processedData, chartWidth, chartHeight, colorScale, margin, gradientId])\n\n // Clean up tooltip on unmount\n useEffect(() => {\n return () => {\n setSelectedMood(null)\n }\n }, [])\n\n\n return (\n <div className={styles.container} ref={containerRef}>\n <svg\n ref={svgRef}\n width={width}\n height={height}\n className={styles.chart}\n />\n {selectedMood && (\n <div\n ref={tooltipRef}\n className={styles.tooltip}\n style={{\n position: 'absolute',\n pointerEvents: 'auto',\n left: tooltipPosition.x,\n top: tooltipPosition.y,\n zIndex: 1000\n }}\n onMouseEnter={() => setIsHoveringTooltip(true)}\n onMouseLeave={() => {\n setIsHoveringTooltip(false)\n setSelectedMood(null)\n }}\n >\n <div className={styles.tooltipHeader}>\n <div className={styles.tooltipDate}>\n {selectedMood.date.toLocaleDateString()}\n </div>\n <div className={styles.tooltipRating}>\n <span className={styles.ratingValue}>{selectedMood.rating}</span>\n <span className={styles.ratingMax}>/10</span>\n </div>\n </div>\n {selectedMood.tags.length > 0 && (\n <div className={styles.tooltipTags}>\n {selectedMood.tags.map((tag, index) => (\n <span key={index} className={styles.tag}>\n {tag}\n </span>\n ))}\n </div>\n )}\n {selectedMood.comment && (\n <div className={styles.tooltipComment}>\n {selectedMood.comment}\n </div>\n )}\n </div>\n )}\n </div>\n )\n}\n","import React, { useState, useEffect, useRef, useMemo, useCallback } from 'react'\nimport * as d3 from 'd3'\nimport { BarChart3, Calendar, CalendarDays, CalendarRange, Divide, Sigma } from 'lucide-react'\nimport styles from './QuantifiableHabitsChart.module.css'\n\nexport type ViewType = 'daily' | 'weekly' | 'monthly' | 'quarterly'\n\ninterface AggregatedData {\n dates: string[]\n [habit: string]: number[] | string[]\n}\n\ninterface ChartData {\n dates: string[]\n [habit: string]: number[] | string[]\n}\n\ninterface TooltipData {\n habit: string\n date: string\n value: number\n x: number\n y: number\n}\n\ninterface QuantifiableHabitsChartProps {\n data: ChartData\n width?: number\n height?: number\n defaultViewType?: ViewType\n periodType?: 'week' | 'month' | 'quarter' | 'year' | 'allTime'\n habitColors?: { [key: string]: string }\n habitEmojis?: { [key: string]: string }\n onDataPointClick?: (habit: string, date: string, value: number) => void\n hideControls?: boolean\n compactLegend?: boolean\n}\n\nconst DEFAULT_HABIT_COLORS: { [key: string]: string } = {\n 'Exercise': '#6BCB77',\n 'Meditation': '#4D96FF',\n 'Reading': '#FFB319',\n 'Water': '#00D9FF',\n 'Steps': '#FF6B6B',\n 'Sleep': '#9B59B6',\n 'Calories': '#FF9F1C',\n 'Study': '#C774E8'\n}\n\ninterface LineDatum {\n habit: string\n color: string\n points: [Date, number][]\n}\n\n// Smoothly interpolate between two SVG path strings by resampling both\n// at evenly-spaced arc-length positions and tweening corresponding points.\nconst SVG_NS = 'http://www.w3.org/2000/svg'\nconst pathTween = (oldD: string, newD: string, samples = 80): ((t: number) => string) => {\n const safeOld = oldD && oldD.length > 0 ? oldD : 'M0,0'\n const safeNew = newD && newD.length > 0 ? newD : 'M0,0'\n const oldNode = document.createElementNS(SVG_NS, 'path') as SVGPathElement\n const newNode = document.createElementNS(SVG_NS, 'path') as SVGPathElement\n oldNode.setAttribute('d', safeOld)\n newNode.setAttribute('d', safeNew)\n const oldLen = typeof oldNode.getTotalLength === 'function' ? oldNode.getTotalLength() : 0\n const newLen = typeof newNode.getTotalLength === 'function' ? newNode.getTotalLength() : 0\n if (oldLen === 0 || newLen === 0) {\n return () => safeNew\n }\n const old: [number, number][] = []\n const next: [number, number][] = []\n for (let i = 0; i < samples; i++) {\n const u = samples === 1 ? 0 : i / (samples - 1)\n const op = oldNode.getPointAtLength(u * oldLen)\n const np = newNode.getPointAtLength(u * newLen)\n old.push([op.x, op.y])\n next.push([np.x, np.y])\n }\n return (t: number) => {\n let s = ''\n for (let i = 0; i < samples; i++) {\n const x = old[i][0] + (next[i][0] - old[i][0]) * t\n const y = old[i][1] + (next[i][1] - old[i][1]) * t\n s += (i === 0 ? 'M' : 'L') + x + ',' + y\n }\n return s\n }\n}\n\nexport const QuantifiableHabitsChart: React.FC<QuantifiableHabitsChartProps> = ({\n data,\n width = 800,\n height = 400,\n defaultViewType = 'daily',\n periodType = 'month',\n habitColors: customHabitColors = {},\n habitEmojis: customHabitEmojis = {},\n onDataPointClick,\n hideControls = false,\n compactLegend = false\n}) => {\n const svgRef = useRef<SVGSVGElement>(null)\n const tooltipRef = useRef<HTMLDivElement>(null)\n const onClickRef = useRef(onDataPointClick)\n const hasMountedRef = useRef(false)\n const [viewType, setViewType] = useState<ViewType>(defaultViewType)\n const [activeHabits, setActiveHabits] = useState<string[]>([])\n const [hoveredHabit, setHoveredHabit] = useState<string | null>(null)\n const [tooltipData, setTooltipData] = useState<TooltipData | null>(null)\n const [aggregationMode, setAggregationMode] = useState<'average' | 'sum'>('average')\n\n useEffect(() => {\n onClickRef.current = onDataPointClick\n }, [onDataPointClick])\n\n const margin = useMemo(() => ({ top: 20, right: 20, bottom: 50, left: 50 }), [])\n const chartWidth = width - margin.left - margin.right\n const chartHeight = height - margin.top - margin.bottom\n\n const habits = useMemo(() =>\n Object.keys(data).filter(key => key !== 'dates'),\n [data]\n )\n\n useEffect(() => {\n setActiveHabits(habits)\n }, [habits])\n\n useEffect(() => {\n const handleScroll = () => {\n setTooltipData(null)\n }\n window.addEventListener('scroll', handleScroll, true)\n return () => {\n window.removeEventListener('scroll', handleScroll, true)\n }\n }, [])\n\n const availableViewTypes = useMemo(() => {\n switch (periodType) {\n case 'week':\n return ['daily'] as ViewType[]\n case 'month':\n return ['daily', 'weekly'] as ViewType[]\n case 'quarter':\n return ['weekly', 'monthly'] as ViewType[]\n case 'year':\n return ['daily', 'weekly', 'monthly', 'quarterly'] as ViewType[]\n case 'allTime':\n return ['monthly', 'quarterly'] as ViewType[]\n default:\n return ['daily'] as ViewType[]\n }\n }, [periodType])\n\n const getColor = useCallback((habit: string): string => {\n return customHabitColors[habit] || DEFAULT_HABIT_COLORS[habit] || `hsl(${Math.abs(habit.split('').reduce((a, b) => a + b.charCodeAt(0), 0)) % 360}, 70%, 50%)`\n }, [customHabitColors])\n\n const aggregateData = useMemo((): AggregatedData => {\n if (viewType === 'daily' || !data.dates.length) {\n return data\n }\n\n const aggregated: AggregatedData = { dates: [] }\n const dateGroups: Map<string, number[]> = new Map()\n\n data.dates.forEach((dateStr, index) => {\n const date = new Date(dateStr)\n let groupKey: string\n\n switch (viewType) {\n case 'weekly': {\n const weekStart = new Date(date)\n const day = weekStart.getDay()\n const diff = weekStart.getDate() - day + (day === 0 ? -6 : 1)\n weekStart.setDate(diff)\n groupKey = weekStart.toISOString().split('T')[0]\n break\n }\n case 'monthly':\n groupKey = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-01`\n break\n case 'quarterly': {\n const quarter = Math.floor(date.getMonth() / 3) + 1\n const quarterStartMonth = (quarter - 1) * 3\n const quarterStart = new Date(date.getFullYear(), quarterStartMonth, 1)\n groupKey = quarterStart.toISOString().split('T')[0]\n break\n }\n default:\n groupKey = dateStr\n }\n\n if (!dateGroups.has(groupKey)) {\n dateGroups.set(groupKey, [])\n }\n dateGroups.get(groupKey)!.push(index)\n })\n\n aggregated.dates = Array.from(dateGroups.keys()).sort()\n\n habits.forEach(habit => {\n aggregated[habit] = aggregated.dates.map(groupKey => {\n const indices = dateGroups.get(groupKey)!\n const values = indices\n .map(i => data[habit][i] as number)\n .filter(v => typeof v === 'number' && !isNaN(v))\n\n if (values.length === 0) return 0\n\n if (aggregationMode === 'sum') {\n return Math.round(values.reduce((sum, v) => sum + v, 0))\n } else {\n return Math.round(values.reduce((sum, v) => sum + v, 0) / values.length)\n }\n })\n })\n\n return aggregated\n }, [data, viewType, habits, aggregationMode])\n\n const toggleHabit = (habit: string) => {\n setActiveHabits(prev =>\n prev.includes(habit)\n ? prev.filter(h => h !== habit)\n : [...prev, habit]\n )\n }\n\n useEffect(() => {\n if (!svgRef.current || aggregateData.dates.length === 0) return\n\n const svg = d3.select(svgRef.current)\n const isFirstRender = !hasMountedRef.current\n hasMountedRef.current = true\n\n // Acquire/create persistent root group + sub-groups\n let root = svg.select<SVGGElement>('g.qhc-root')\n if (root.empty()) {\n root = svg.append<SVGGElement>('g').attr('class', 'qhc-root')\n }\n root.attr('transform', `translate(${margin.left},${margin.top})`)\n\n const ensureGroup = (cls: string) => {\n let s = root.select<SVGGElement>(`g.${cls}`)\n if (s.empty()) s = root.append<SVGGElement>('g').attr('class', cls)\n return s\n }\n\n const gridGroup = ensureGroup('qhc-grid')\n const linesGroup = ensureGroup('qhc-lines')\n const pointsGroup = ensureGroup('qhc-points')\n const axesGroup = ensureGroup('qhc-axes')\n const uiGroup = ensureGroup('qhc-ui')\n\n const dates = aggregateData.dates.map(d => new Date(d))\n\n const xScale = d3.scaleTime()\n .domain(d3.extent(dates) as [Date, Date])\n .range([0, chartWidth])\n\n const maxValue = Math.max(\n 1,\n ...activeHabits.flatMap(habit =>\n (aggregateData[habit] as number[]).filter(v => typeof v === 'number')\n )\n )\n\n const yScale = d3.scaleLinear()\n .domain([0, maxValue * 1.1])\n .range([chartHeight, 0])\n\n const lineGen = d3.line<[Date, number]>()\n .x(d => xScale(d[0]))\n .y(d => yScale(d[1]))\n .curve(d3.curveMonotoneX)\n\n // -------- Grid --------\n const gridSel = gridGroup.selectAll<SVGLineElement, number>('line.qhc-grid-line')\n .data(yScale.ticks(5), d => String(d))\n gridSel.exit().remove()\n const gridEnter = gridSel.enter().append('line')\n .attr('class', `${styles.gridLine} qhc-grid-line`)\n .style('opacity', 0)\n gridEnter.merge(gridSel)\n .attr('x1', 0)\n .attr('x2', chartWidth)\n .attr('y1', d => yScale(d))\n .attr('y2', d => yScale(d))\n .transition()\n .duration(400)\n .style('opacity', 1)\n\n // -------- Axes --------\n const getISOWeek = (date: Date) => {\n const d = new Date(date)\n d.setHours(0, 0, 0, 0)\n d.setDate(d.getDate() + 3 - (d.getDay() + 6) % 7)\n const week1 = new Date(d.getFullYear(), 0, 4)\n return 1 + Math.round(((d.getTime() - week1.getTime()) / 86400000 - 3 + (week1.getDay() + 6) % 7) / 7)\n }\n\n const xAxisFormat = (() => {\n switch (viewType) {\n case 'daily':\n return d3.timeFormat('%m-%d')\n case 'weekly':\n return (d: Date) => `W${getISOWeek(d).toString().padStart(2, '0')}`\n case 'monthly':\n return d3.timeFormat('%b')\n case 'quarterly':\n return (d: Date) => `Q${Math.floor(d.getMonth() / 3) + 1}`\n default:\n return d3.timeFormat('%m-%d')\n }\n })()\n\n const tickCount = (() => {\n switch (viewType) {\n case 'daily':\n return Math.min(10, aggregateData.dates.length)\n case 'weekly':\n return Math.min(12, aggregateData.dates.length)\n case 'monthly':\n return Math.min(12, aggregateData.dates.length)\n case 'quarterly':\n return aggregateData.dates.length\n default:\n return undefined\n }\n })()\n\n const xAxisGenerator = d3.axisBottom(xScale)\n .tickFormat(d => xAxisFormat(d as Date))\n if (viewType === 'quarterly') {\n xAxisGenerator.tickValues(dates)\n } else if (tickCount) {\n xAxisGenerator.ticks(tickCount)\n }\n\n let xAxis = axesGroup.select<SVGGElement>('g.qhc-x-axis')\n if (xAxis.empty()) {\n xAxis = axesGroup.append<SVGGElement>('g').attr('class', `${styles.xAxis} qhc-x-axis`)\n }\n xAxis.attr('transform', `translate(0,${chartHeight})`).call(xAxisGenerator as never)\n xAxis.selectAll('text')\n .style('text-anchor', viewType === 'daily' || viewType === 'weekly' ? 'end' : 'middle')\n .attr('dx', viewType === 'daily' || viewType === 'weekly' ? '-.8em' : '0')\n .attr('dy', viewType === 'daily' || viewType === 'weekly' ? '.15em' : '.71em')\n .attr('transform', viewType === 'daily' || viewType === 'weekly' ? 'rotate(-45)' : null)\n\n let yAxis = axesGroup.select<SVGGElement>('g.qhc-y-axis')\n if (yAxis.empty()) {\n yAxis = axesGroup.append<SVGGElement>('g').attr('class', `${styles.yAxis} qhc-y-axis`)\n }\n yAxis.call(d3.axisLeft(yScale) as never)\n\n if (isFirstRender) {\n xAxis.style('opacity', 0).transition().duration(500).delay(80).style('opacity', 1)\n yAxis.style('opacity', 0).transition().duration(500).delay(80).style('opacity', 1)\n }\n\n // -------- Lines (data join, morph on update) --------\n const lineData: LineDatum[] = activeHabits.map(habit => {\n const points = dates\n .map((date, i) => [date, aggregateData[habit][i]] as [Date, number])\n .filter(d => typeof d[1] === 'number')\n return { habit, color: getColor(habit), points }\n })\n\n const lineSel = linesGroup.selectAll<SVGPathElement, LineDatum>('path.qhc-line')\n .data(lineData, (d: LineDatum) => d.habit)\n\n lineSel.exit()\n .transition('line-exit')\n .duration(300)\n .style('opacity', 0)\n .remove()\n\n const lineEnter = lineSel.enter().append('path')\n .attr('class', `${styles.line} qhc-line`)\n .attr('data-habit', d => d.habit)\n .attr('fill', 'none')\n .attr('stroke', d => d.color)\n .attr('opacity', 0)\n .attr('d', d => lineGen(d.points) || '')\n .each(function () {\n const node = this as SVGPathElement\n const len = typeof node.getTotalLength === 'function' ? node.getTotalLength() : 0\n if (len > 0) {\n d3.select(node)\n .attr('stroke-dasharray', `${len} ${len}`)\n .attr('stroke-dashoffset', len)\n }\n })\n\n lineEnter.transition('line-enter')\n .duration(900)\n .ease(d3.easeCubicOut)\n .attr('opacity', 1)\n .attr('stroke-dashoffset', 0)\n .on('end', function () {\n d3.select(this).attr('stroke-dasharray', null)\n })\n\n lineSel.transition('line-update')\n .duration(700)\n .ease(d3.easeCubicInOut)\n .attr('stroke', d => d.color)\n .attrTween('d', function (d) {\n const oldD = d3.select(this).attr('d') || ''\n const newD = lineGen(d.points) || ''\n return pathTween(oldD, newD, 90)\n })\n .on('end', function (d) {\n d3.select(this).attr('d', lineGen(d.points) || '')\n })\n\n // -------- Points --------\n // Clear and re-add (simpler than join when both habit set + count change).\n // Hide them during line morph, then spring up from baseline.\n pointsGroup.selectAll('*').remove()\n\n type PointDatum = { habit: string; color: string; date: Date; value: number }\n const allPoints: PointDatum[] = []\n activeHabits.forEach(habit => {\n const color = getColor(habit)\n dates.forEach((date, i) => {\n const v = aggregateData[habit][i] as number\n if (typeof v === 'number' && !isNaN(v)) {\n allPoints.push({ habit, color, date, value: v })\n }\n })\n })\n\n const minX = xScale(dates[0])\n const maxX = xScale(dates[dates.length - 1])\n const xRange = Math.max(1, maxX - minX)\n const pointAppearDelay = isFirstRender ? 100 : 350\n const pointAppearTotal = isFirstRender ? 1100 : 600\n\n pointsGroup.selectAll<SVGCircleElement, PointDatum>('circle.qhc-point')\n .data(allPoints)\n .enter().append('circle')\n .attr('class', `${styles.dataPoint} qhc-point`)\n .attr('data-habit', d => d.habit)\n .attr('cx', d => xScale(d.date))\n .attr('cy', chartHeight)\n .attr('r', 0)\n .attr('fill', d => d.color)\n .style('opacity', 0)\n .transition('point-enter')\n .delay(d => pointAppearDelay + pointAppearTotal * ((xScale(d.date) - minX) / xRange))\n .duration(420)\n .ease(d3.easeBackOut.overshoot(2))\n .attr('cy', d => yScale(d.value))\n .attr('r', 4)\n .style('opacity', 1)\n\n // -------- UI layer (crosshair, halo, overlay) --------\n uiGroup.selectAll('*').remove()\n\n const crosshair = uiGroup.append('line')\n .attr('class', styles.crosshair)\n .attr('y1', 0)\n .attr('y2', chartHeight)\n .style('opacity', 0)\n .style('pointer-events', 'none')\n\n const halo = uiGroup.append('circle')\n .attr('class', styles.halo)\n .attr('r', 0)\n .style('opacity', 0)\n .style('pointer-events', 'none')\n\n let activeKey: string | null = null\n\n const startHaloPulse = (cx: number, cy: number, fill: string) => {\n halo.interrupt('halo-pulse').interrupt('halo-out')\n .attr('cx', cx).attr('cy', cy).attr('fill', fill)\n const pulseOnce = () => {\n halo.attr('r', 4).style('opacity', 0.55)\n .transition('halo-pulse').duration(900).ease(d3.easeCubicOut)\n .attr('r', 18).style('opacity', 0)\n .on('end', pulseOnce)\n }\n pulseOnce()\n }\n const stopHaloPulse = () => {\n halo.interrupt('halo-pulse')\n .transition('halo-out').duration(180)\n .style('opacity', 0).attr('r', 0)\n }\n\n type ActivePt = { habit: string; date: Date; value: number; x: number; y: number }\n const activeAll: ActivePt[] = allPoints.map(p => ({\n habit: p.habit,\n date: p.date,\n value: p.value,\n x: xScale(p.date),\n y: yScale(p.value)\n }))\n\n const setActive = (pt: ActivePt, clientX: number, clientY: number) => {\n const key = `${pt.habit}|${pt.date.toISOString()}`\n const color = getColor(pt.habit)\n\n crosshair.attr('x1', pt.x).attr('x2', pt.x)\n .interrupt('crosshair-fade')\n .transition('crosshair-fade').duration(120).style('opacity', 1)\n\n if (activeKey !== key) {\n pointsGroup.selectAll<SVGCircleElement, unknown>('circle.qhc-point')\n .filter(function () { return d3.select(this).attr('data-active') === 'true' })\n .attr('data-active', null)\n .transition('point-scale').duration(150).attr('r', 4)\n\n pointsGroup.selectAll<SVGCircleElement, unknown>('circle.qhc-point')\n .filter(function () {\n const cx = +d3.select(this).attr('cx')\n const cy = +d3.select(this).attr('cy')\n const habit = d3.select(this).attr('data-habit')\n return habit === pt.habit && Math.abs(cx - pt.x) < 0.5 && Math.abs(cy - pt.y) < 0.5\n })\n .attr('data-active', 'true')\n .transition('point-scale').duration(180).ease(d3.easeBackOut.overshoot(2))\n .attr('r', 7)\n\n startHaloPulse(pt.x, pt.y, color)\n activeKey = key\n }\n\n setTooltipData({\n habit: pt.habit,\n date: pt.date.toISOString().split('T')[0],\n value: pt.value,\n x: clientX,\n y: clientY\n })\n }\n\n const clearActive = () => {\n crosshair.interrupt('crosshair-fade')\n .transition('crosshair-fade').duration(180).style('opacity', 0)\n pointsGroup.selectAll<SVGCircleElement, unknown>('circle.qhc-point')\n .filter(function () { return d3.select(this).attr('data-active') === 'true' })\n .attr('data-active', null)\n .transition('point-scale').duration(180).attr('r', 4)\n stopHaloPulse()\n activeKey = null\n setTooltipData(null)\n }\n\n uiGroup.append('rect')\n .attr('class', styles.overlay)\n .attr('width', chartWidth)\n .attr('height', chartHeight)\n .on('mousemove', function (event: MouseEvent) {\n if (activeAll.length === 0) return\n const [mx, my] = d3.pointer(event, this as SVGRectElement)\n let nearest = activeAll[0]\n let nearestDist = Infinity\n for (const p of activeAll) {\n const dx = p.x - mx\n const dy = p.y - my\n const dist = dx * dx + dy * dy\n if (dist < nearestDist) {\n nearestDist = dist\n nearest = p\n }\n }\n setActive(nearest, event.clientX, event.clientY)\n })\n .on('mouseleave', () => {\n clearActive()\n })\n .on('click', function (event: MouseEvent) {\n if (activeAll.length === 0 || !onClickRef.current) return\n const [mx, my] = d3.pointer(event, this as SVGRectElement)\n let nearest = activeAll[0]\n let nearestDist = Infinity\n for (const p of activeAll) {\n const dx = p.x - mx\n const dy = p.y - my\n const dist = dx * dx + dy * dy\n if (dist < nearestDist) {\n nearestDist = dist\n nearest = p\n }\n }\n onClickRef.current(nearest.habit, nearest.date.toISOString().split('T')[0], nearest.value)\n })\n\n uiGroup.raise()\n\n }, [aggregateData, activeHabits, chartWidth, chartHeight, margin, getColor, viewType, width, height])\n\n // Hover dimming: update opacity on existing elements without redrawing.\n useEffect(() => {\n if (!svgRef.current) return\n const svg = d3.select(svgRef.current)\n svg.selectAll<SVGPathElement, unknown>('path.qhc-line')\n .each(function () {\n const habit = (this as SVGPathElement).getAttribute('data-habit')\n const dim = hoveredHabit && hoveredHabit !== habit\n d3.select(this)\n .transition('hover-dim')\n .duration(180)\n .attr('opacity', dim ? 0.25 : 1)\n })\n svg.selectAll<SVGCircleElement, unknown>('circle.qhc-point')\n .each(function () {\n const habit = (this as SVGCircleElement).getAttribute('data-habit')\n const dim = hoveredHabit && hoveredHabit !== habit\n d3.select(this)\n .transition('hover-dim')\n .duration(180)\n .attr('opacity', dim ? 0.25 : 1)\n })\n }, [hoveredHabit])\n\n const formatTooltipDate = (dateStr: string, viewType: ViewType): string => {\n const date = new Date(dateStr)\n switch (viewType) {\n case 'daily':\n return date.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' })\n case 'weekly':\n return `Week of ${date.toLocaleDateString('en-US', { month: 'short', day: 'numeric' })}`\n case 'monthly':\n return date.toLocaleDateString('en-US', { month: 'long', year: 'numeric' })\n case 'quarterly': {\n const quarter = Math.floor(date.getMonth() / 3) + 1\n return `Q${quarter} ${date.getFullYear()}`\n }\n default:\n return dateStr\n }\n }\n\n const viewTypeConfig = {\n daily: { Icon: Calendar, label: 'Daily' },\n weekly: { Icon: CalendarDays, label: 'Weekly' },\n monthly: { Icon: CalendarRange, label: 'Monthly' },\n quarterly: { Icon: BarChart3, label: 'Quarterly' }\n }\n\n const shouldShowAggregationToggle = viewType !== 'daily'\n\n return (\n <div className={styles.container}>\n {!hideControls && (\n <div className={styles.controls}>\n <div className={styles.viewToggle}>\n {availableViewTypes.map(type => {\n const { Icon, label } = viewTypeConfig[type]\n return (\n <button\n key={type}\n className={`${styles.viewButton} ${viewType === type ? styles.active : ''}`}\n onClick={() => setViewType(type)}\n title={label}\n >\n <span className={styles.viewIcon}><Icon size={16} /></span>\n <span className={styles.viewLabel}>{label}</span>\n </button>\n )\n })}\n </div>\n {shouldShowAggregationToggle && (\n <div className={styles.aggregationToggle}>\n <button\n className={`${styles.aggregationButton} ${aggregationMode === 'average' ? styles.active : ''}`}\n onClick={() => setAggregationMode('average')}\n title=\"Show average values for each period\"\n >\n <span className={styles.aggregationIcon}><Divide size={16} /></span>\n <span className={styles.aggregationLabel}>Average</span>\n </button>\n <button\n className={`${styles.aggregationButton} ${aggregationMode === 'sum' ? styles.active : ''}`}\n onClick={() => setAggregationMode('sum')}\n title=\"Show total values for each period\"\n >\n <span className={styles.aggregationIcon}><Sigma size={16} /></span>\n <span className={styles.aggregationLabel}>Sum</span>\n </button>\n </div>\n )}\n </div>\n )}\n\n <div className={`${styles.legend}${compactLegend ? ` ${styles.compactLegend}` : ''}`}>\n {habits.map(habit => (\n <button\n key={habit}\n className={`${styles.legendItem} ${!activeHabits.includes(habit) ? styles.inactive : ''}`}\n onClick={() => toggleHabit(habit)}\n onMouseEnter={() => setHoveredHabit(habit)}\n onMouseLeave={() => setHoveredHabit(null)}\n >\n <span className={styles.legendEmoji}>\n {customHabitEmojis[habit] || '📊'}\n </span>\n <span\n className={styles.legendColor}\n style={{ backgroundColor: getColor(habit) }}\n />\n <span className={styles.legendLabel}>{habit}</span>\n </button>\n ))}\n </div>\n\n <svg\n ref={svgRef}\n viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"xMidYMid meet\"\n className={styles.chart}\n />\n\n {tooltipData && (\n <div\n ref={tooltipRef}\n className={`${styles.tooltip} ${tooltipData ? styles.visible : ''}`}\n style={{\n left: `${tooltipData.x}px`,\n top: `${tooltipData.y - 80}px`\n }}\n >\n <div className={styles.tooltipHeader}>\n <span className={styles.tooltipEmoji}>\n {customHabitEmojis[tooltipData.habit] || '📊'}\n </span>\n <span\n className={styles.tooltipDot}\n style={{ backgroundColor: getColor(tooltipData.habit) }}\n />\n <span>{tooltipData.habit}</span>\n </div>\n <div className={styles.tooltipInfo}>\n <div className={styles.tooltipDate}>\n {formatTooltipDate(tooltipData.date, viewType)}\n </div>\n <div className={styles.tooltipValue}>\n <strong>{Math.round(tooltipData.value * 10) / 10}</strong>\n <span style={{ fontSize: '12px', fontWeight: 'normal', opacity: 0.6 }}>units</span>\n </div>\n </div>\n </div>\n )}\n </div>\n )\n}\n","import React, { useState, useEffect, useMemo, useRef, useCallback } from 'react'\nimport * as d3 from 'd3'\nimport { ScatterChart, BarChart3 } from 'lucide-react'\nimport styles from './HabitTimeOfDayChart.module.css'\n\nexport interface HabitEvent {\n loggedAt: string\n habitKey: string\n}\n\nexport type HabitTimeOfDayView = 'scatter' | 'totals'\n\ninterface HabitTimeOfDayChartProps {\n events: HabitEvent[]\n width?: number\n height?: number\n startDate?: string\n endDate?: string\n habitColors?: { [key: string]: string }\n habitEmojis?: { [key: string]: string }\n defaultView?: HabitTimeOfDayView\n hideControls?: boolean\n compactLegend?: boolean\n}\n\ninterface TooltipData {\n x: number\n y: number\n habit?: string\n hour: number\n minute?: number\n date?: string\n count: number\n breakdown?: { habit: string; count: number }[]\n}\n\nconst DEFAULT_HABIT_COLORS: { [key: string]: string } = {\n Exercise: '#6BCB77',\n Meditation: '#4D96FF',\n Reading: '#FFB319',\n Water: '#00D9FF',\n Steps: '#FF6B6B',\n Sleep: '#9B59B6',\n Calories: '#FF9F1C',\n Study: '#C774E8',\n}\n\nconst getDateKey = (d: Date): string => {\n const y = d.getFullYear()\n const m = String(d.getMonth() + 1).padStart(2, '0')\n const day = String(d.getDate()).padStart(2, '0')\n return `${y}-${m}-${day}`\n}\n\nconst formatHour = (hour: number): string => {\n const h = ((hour % 24) + 24) % 24\n return `${String(h).padStart(2, '0')}:00`\n}\n\nconst formatTime = (hour: number, minute: number): string => {\n const h = ((hour % 24) + 24) % 24\n return `${String(h).padStart(2, '0')}:${String(minute).padStart(2, '0')}`\n}\n\nconst enumerateDates = (start: string, end: string): string[] => {\n const dates: string[] = []\n const [sy, sm, sd] = start.split('-').map(Number)\n const [ey, em, ed] = end.split('-').map(Number)\n const current = new Date(sy, sm - 1, sd)\n const last = new Date(ey, em - 1, ed)\n while (current <= last) {\n dates.push(getDateKey(current))\n current.setDate(current.getDate() + 1)\n }\n return dates\n}\n\ninterface ParsedEvent {\n habitKey: string\n date: string\n hour: number\n minute: number\n hourFraction: number\n}\n\ninterface DotCluster {\n habitKey: string\n date: string\n hour: number\n minute: number\n hourFraction: number\n count: number\n xOffsetPx: number\n}\n\nexport const HabitTimeOfDayChart: React.FC<HabitTimeOfDayChartProps> = ({\n events,\n width = 800,\n height = 400,\n startDate,\n endDate,\n habitColors: customHabitColors = {},\n habitEmojis: customHabitEmojis = {},\n defaultView = 'scatter',\n hideControls = false,\n compactLegend = false,\n}) => {\n const svgRef = useRef<SVGSVGElement>(null)\n const [view, setView] = useState<HabitTimeOfDayView>(defaultView)\n const [activeHabits, setActiveHabits] = useState<string[]>([])\n const [hoveredHabit, setHoveredHabit] = useState<string | null>(null)\n const [tooltipData, setTooltipData] = useState<TooltipData | null>(null)\n\n const margin = useMemo(() => ({ top: 20, right: 20, bottom: 50, left: 70 }), [])\n const chartWidth = width - margin.left - margin.right\n const chartHeight = height - margin.top - margin.bottom\n\n const getColor = useCallback(\n (habit: string): string => {\n return (\n customHabitColors[habit] ||\n DEFAULT_HABIT_COLORS[habit] ||\n `hsl(${Math.abs(habit.split('').reduce((a, b) => a + b.charCodeAt(0), 0)) % 360}, 70%, 50%)`\n )\n },\n [customHabitColors]\n )\n\n const parsed = useMemo<ParsedEvent[]>(() => {\n return events\n .map(e => {\n const d = new Date(e.loggedAt)\n if (Number.isNaN(d.getTime())) return null\n const hour = d.getHours()\n const minute = d.getMinutes()\n const second = d.getSeconds()\n return {\n habitKey: e.habitKey,\n date: getDateKey(d),\n hour,\n minute,\n hourFraction: hour + minute / 60 + second / 3600,\n }\n })\n .filter((e): e is ParsedEvent => e !== null)\n }, [events])\n\n const habits = useMemo(() => {\n const set = new Set<string>()\n parsed.forEach(e => set.add(e.habitKey))\n return Array.from(set).sort()\n }, [parsed])\n\n useEffect(() => {\n setActiveHabits(habits)\n }, [habits])\n\n useEffect(() => {\n const handleScroll = () => setTooltipData(null)\n window.addEventListener('scroll', handleScroll, true)\n return () => window.removeEventListener('scroll', handleScroll, true)\n }, [])\n\n const dateRange = useMemo(() => {\n if (startDate && endDate) return enumerateDates(startDate, endDate)\n if (parsed.length === 0) return []\n const sorted = [...parsed].map(p => p.date).sort()\n return enumerateDates(sorted[0], sorted[sorted.length - 1])\n }, [parsed, startDate, endDate])\n\n const filtered = useMemo(() => {\n const active = new Set(activeHabits)\n return parsed.filter(e => active.has(e.habitKey))\n }, [parsed, activeHabits])\n\n // Group events that land on the same minute (same habit) into a single\n // cluster so overlapping dots become one sized/counted dot. Then, for any\n // (date, minute) coord with multiple habits, fan them out horizontally so\n // different-colored dots stop masking each other.\n const clusters = useMemo<DotCluster[]>(() => {\n const byKey = new Map<string, DotCluster>()\n filtered.forEach(e => {\n const bucketFraction = Math.round(e.hourFraction * 60) / 60\n const bucketMinute = Math.round(bucketFraction * 60) % 60\n const bucketHour = Math.floor(bucketFraction)\n const key = `${e.date}|${e.habitKey}|${bucketFraction}`\n const existing = byKey.get(key)\n if (existing) {\n existing.count += 1\n } else {\n byKey.set(key, {\n habitKey: e.habitKey,\n date: e.date,\n hour: bucketHour,\n minute: bucketMinute,\n hourFraction: bucketFraction,\n count: 1,\n xOffsetPx: 0,\n })\n }\n })\n\n const coordGroups = new Map<string, DotCluster[]>()\n byKey.forEach(c => {\n const coordKey = `${c.date}|${c.hourFraction}`\n const arr = coordGroups.get(coordKey)\n if (arr) arr.push(c)\n else coordGroups.set(coordKey, [c])\n })\n\n const out: DotCluster[] = []\n const spacing = 10\n coordGroups.forEach(group => {\n group.sort((a, b) => a.habitKey.localeCompare(b.habitKey))\n const mid = (group.length - 1) / 2\n group.forEach((c, i) => {\n out.push({ ...c, xOffsetPx: (i - mid) * spacing })\n })\n })\n return out\n }, [filtered])\n\n const hourlyTotals = useMemo(() => {\n const totals = Array.from({ length: 24 }, (_, hour) => ({\n hour,\n total: 0,\n byHabit: new Map<string, number>(),\n }))\n filtered.forEach(e => {\n const bucket = totals[e.hour]\n bucket.total += 1\n bucket.byHabit.set(e.habitKey, (bucket.byHabit.get(e.habitKey) || 0) + 1)\n })\n return totals\n }, [filtered])\n\n const maxHourTotal = useMemo(\n () => hourlyTotals.reduce((m, b) => Math.max(m, b.total), 0),\n [hourlyTotals]\n )\n\n const toggleHabit = (habit: string) => {\n setActiveHabits(prev =>\n prev.includes(habit) ? prev.filter(h => h !== habit) : [...prev, habit]\n )\n }\n\n useEffect(() => {\n if (!svgRef.current) return\n const svg = d3.select(svgRef.current)\n svg.selectAll('*').remove()\n\n svg.append('rect')\n .attr('width', width)\n .attr('height', height)\n .attr('fill', 'transparent')\n .style('pointer-events', 'all')\n .on('mouseleave', () => setTooltipData(null))\n\n const g = svg\n .append('g')\n .attr('transform', `translate(${margin.left},${margin.top})`)\n\n if (view === 'scatter') {\n if (dateRange.length === 0) return\n\n const xScale = d3.scaleLinear()\n .domain([0, 24])\n .range([0, chartWidth])\n\n const yScale = d3.scaleBand<string>()\n .domain(dateRange)\n .range([0, chartHeight])\n .padding(0.1)\n\n // Vertical grid lines per 3 hours\n g.selectAll('line.xgrid')\n .data([0, 3, 6, 9, 12, 15, 18, 21, 24])\n .enter()\n .append('line')\n .attr('class', styles.gridLine)\n .attr('x1', d => xScale(d))\n .attr('x2', d => xScale(d))\n .attr('y1', 0)\n .attr('y2', chartHeight)\n\n // Dots\n const rowHeight = yScale.bandwidth()\n const baseRadius = Math.min(5, Math.max(2, rowHeight / 2))\n const maxRadius = baseRadius * 2.2\n g.selectAll('circle.dot')\n .data(clusters)\n .enter()\n .append('circle')\n .attr('class', styles.dot)\n .attr('cx', d => xScale(d.hourFraction) + d.xOffsetPx)\n .attr('cy', d => (yScale(d.date) ?? 0) + rowHeight / 2)\n .attr('r', d => Math.min(maxRadius, baseRadius * Math.sqrt(d.count)))\n .attr('fill', d => getColor(d.habitKey))\n .attr('opacity', d =>\n hoveredHabit && hoveredHabit !== d.habitKey ? 0.15 : 0.8\n )\n .style('cursor', 'pointer')\n .on('mouseenter', function (_event: MouseEvent, d) {\n const rect = svgRef.current?.getBoundingClientRect()\n if (!rect) return\n setTooltipData({\n x: xScale(d.hourFraction) + d.xOffsetPx + margin.left + rect.left,\n y: (yScale(d.date) ?? 0) + margin.top + rect.top,\n habit: d.habitKey,\n hour: d.hour,\n minute: d.minute,\n date: d.date,\n count: d.count,\n })\n })\n .on('mouseleave', () => setTooltipData(null))\n\n // X axis (hours)\n const xAxis = d3.axisBottom(xScale)\n .tickValues([0, 3, 6, 9, 12, 15, 18, 21])\n .tickFormat(d => formatHour(d as number))\n g.append('g')\n .attr('class', styles.xAxis)\n .attr('transform', `translate(0,${chartHeight})`)\n .call(xAxis)\n\n // Y axis (dates) — evenly spaced\n const yTickCount = Math.min(8, dateRange.length)\n const yStep = Math.max(1, Math.floor(dateRange.length / yTickCount))\n const yTickValues = dateRange.filter((_, i) => i % yStep === 0)\n const yAxis = d3.axisLeft(yScale)\n .tickValues(yTickValues)\n .tickFormat(d => {\n const [, m, day] = (d as string).split('-')\n return `${m}/${day}`\n })\n g.append('g').attr('class', styles.yAxis).call(yAxis)\n } else {\n // Totals view: stacked bar by hour\n const xScale = d3.scaleBand<number>()\n .domain(d3.range(24))\n .range([0, chartWidth])\n .padding(0.15)\n\n const yScale = d3.scaleLinear()\n .domain([0, Math.max(1, maxHourTotal)])\n .nice()\n .range([chartHeight, 0])\n\n g.selectAll('line.grid')\n .data(yScale.ticks(5))\n .enter()\n .append('line')\n .attr('class', styles.gridLine)\n .attr('x1', 0)\n .attr('x2', chartWidth)\n .attr('y1', d => yScale(d))\n .attr('y2', d => yScale(d))\n\n hourlyTotals.forEach(bucket => {\n let cumulative = 0\n const entries = Array.from(bucket.byHabit.entries()).sort(([a], [b]) =>\n a.localeCompare(b)\n )\n entries.forEach(([habit, count]) => {\n const y = yScale(cumulative + count)\n const barHeight = Math.max(0, yScale(cumulative) - yScale(cumulative + count))\n g.append('rect')\n .attr('class', styles.bar)\n .attr('x', xScale(bucket.hour) ?? 0)\n .attr('y', y)\n .attr('width', xScale.bandwidth())\n .attr('height', barHeight)\n .attr('fill', getColor(habit))\n .attr('opacity', hoveredHabit && hoveredHabit !== habit ? 0.3 : 1)\n cumulative += count\n })\n\n if (bucket.total > 0) {\n g.append('rect')\n .attr('x', xScale(bucket.hour) ?? 0)\n .attr('y', 0)\n .attr('width', xScale.bandwidth())\n .attr('height', chartHeight)\n .attr('fill', 'transparent')\n .style('cursor', 'pointer')\n .on('mouseenter', function () {\n const rect = svgRef.current?.getBoundingClientRect()\n if (!rect) return\n setTooltipData({\n x: (xScale(bucket.hour) ?? 0) + xScale.bandwidth() / 2 + margin.left + rect.left,\n y: yScale(bucket.total) + margin.top + rect.top,\n hour: bucket.hour,\n count: bucket.total,\n breakdown: Array.from(bucket.byHabit.entries())\n .map(([habit, count]) => ({ habit, count }))\n .sort((a, b) => b.count - a.count),\n })\n })\n .on('mouseleave', () => setTooltipData(null))\n }\n })\n\n const xAxis = d3.axisBottom(xScale)\n .tickValues([0, 3, 6, 9, 12, 15, 18, 21])\n .tickFormat(d => formatHour(d as number))\n g.append('g')\n .attr('class', styles.xAxis)\n .attr('transform', `translate(0,${chartHeight})`)\n .call(xAxis)\n\n g.append('g').attr('class', styles.yAxis).call(d3.axisLeft(yScale).ticks(5))\n }\n }, [\n view,\n filtered,\n clusters,\n hourlyTotals,\n dateRange,\n maxHourTotal,\n chartWidth,\n chartHeight,\n margin,\n width,\n height,\n hoveredHabit,\n getColor,\n ])\n\n const viewConfig = {\n scatter: { icon: <ScatterChart size={16} />, label: 'Scatter' },\n totals: { icon: <BarChart3 size={16} />, label: 'Totals' },\n }\n\n const formatTooltipDate = (date: string): string => {\n const [y, m, d] = date.split('-').map(Number)\n return new Date(y, m - 1, d).toLocaleDateString('en-US', {\n weekday: 'short',\n month: 'short',\n day: 'numeric',\n })\n }\n\n return (\n <div className={styles.container}>\n {!hideControls && (\n <div className={styles.controls}>\n <div className={styles.viewToggle}>\n {(['scatter', 'totals'] as HabitTimeOfDayView[]).map(type => (\n <button\n key={type}\n className={`${styles.viewButton} ${view === type ? styles.active : ''}`}\n onClick={() => setView(type)}\n title={viewConfig[type].label}\n >\n <span className={styles.viewIcon}>{viewConfig[type].icon}</span>\n <span className={styles.viewLabel}>{viewConfig[type].label}</span>\n </button>\n ))}\n </div>\n </div>\n )}\n\n {habits.length > 0 && (\n <div className={`${styles.legend}${compactLegend ? ` ${styles.compactLegend}` : ''}`}>\n {habits.map(habit => (\n <button\n key={habit}\n className={`${styles.legendItem} ${!activeHabits.includes(habit) ? styles.inactive : ''}`}\n onClick={() => toggleHabit(habit)}\n onMouseEnter={() => setHoveredHabit(habit)}\n onMouseLeave={() => setHoveredHabit(null)}\n >\n <span className={styles.legendEmoji}>\n {customHabitEmojis[habit] || '📊'}\n </span>\n <span\n className={styles.legendColor}\n style={{ backgroundColor: getColor(habit) }}\n />\n <span className={styles.legendLabel}>{habit}</span>\n </button>\n ))}\n </div>\n )}\n\n <svg\n ref={svgRef}\n viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"xMidYMid meet\"\n className={styles.chart}\n />\n\n {tooltipData && (\n <div\n className={`${styles.tooltip} ${styles.visible}`}\n style={{ left: `${tooltipData.x}px`, top: `${tooltipData.y - 70}px` }}\n >\n {tooltipData.habit ? (\n <>\n <div className={styles.tooltipHeader}>\n <span\n className={styles.tooltipDot}\n style={{ backgroundColor: getColor(tooltipData.habit) }}\n />\n <span>\n {customHabitEmojis[tooltipData.habit] || ''} {tooltipData.habit}\n </span>\n </div>\n <div className={styles.tooltipInfo}>\n <div className={styles.tooltipDate}>\n {tooltipData.date ? formatTooltipDate(tooltipData.date) : ''}\n {tooltipData.minute !== undefined\n ? ` · ${formatTime(tooltipData.hour, tooltipData.minute)}`\n : ''}\n </div>\n {tooltipData.count > 1 && (\n <div className={styles.tooltipValue}>\n <strong>{tooltipData.count}</strong>\n <span className={styles.tooltipUnits}>events</span>\n </div>\n )}\n </div>\n </>\n ) : (\n <>\n <div className={styles.tooltipHeader}>\n <span>{formatHour(tooltipData.hour)}</span>\n </div>\n <div className={styles.tooltipInfo}>\n <div className={styles.tooltipValue}>\n <strong>{tooltipData.count}</strong>\n <span className={styles.tooltipUnits}>\n event{tooltipData.count === 1 ? '' : 's'}\n </span>\n </div>\n {tooltipData.breakdown && tooltipData.breakdown.length > 1 && (\n <div className={styles.tooltipBreakdown}>\n {tooltipData.breakdown.map(({ habit, count }) => (\n <div key={habit} className={styles.tooltipBreakdownRow}>\n <span\n className={styles.tooltipDot}\n style={{ backgroundColor: getColor(habit) }}\n />\n <span>\n {customHabitEmojis[habit] || ''} {habit}\n </span>\n <span className={styles.tooltipCount}>{count}</span>\n </div>\n ))}\n </div>\n )}\n </div>\n </>\n )}\n </div>\n )}\n </div>\n )\n}\n","import React, { useEffect, useRef, useMemo, useState } from 'react'\nimport * as d3 from 'd3'\nimport styles from './SleepChart.module.css'\n\ninterface SleepData {\n date: string\n sleep_time: string | null\n wake_hour: string | null\n}\n\ninterface TooltipData {\n date: string\n sleepTime: string | null\n wakeTime: string | null\n duration: number | null\n x: number\n y: number\n}\n\ninterface SleepChartProps {\n sleepData: SleepData[]\n width?: number\n height?: number\n onDateClick?: (date: string) => void\n}\n\nconst parseTimeToDecimal = (time: string): number => {\n const [hours, minutes] = time.split(':').map(Number)\n return hours + minutes / 60\n}\n\nconst formatTime = (hour: number): string => {\n const h24 = Math.floor(hour % 24)\n const minutes = Math.round((hour % 1) * 60)\n return `${h24.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`\n}\n\nconst formatDuration = (decimal: number): string => {\n const h = Math.floor(decimal)\n const m = Math.round((decimal % 1) * 60)\n return `${h}h ${m.toString().padStart(2, '0')}m`\n}\n\n// Build an SVG sine-wave path between two x-coordinates at a given baseline y.\n// Two quadratic curves per cycle keep the curve smooth without needing cubic control points.\nconst buildSquigglePath = (\n x1: number,\n x2: number,\n y: number,\n amplitude: number,\n wavelength: number\n): string => {\n const distance = Math.max(0, x2 - x1)\n if (distance === 0) return `M ${x1} ${y}`\n const cycles = Math.max(1, Math.round(distance / wavelength))\n const halfStep = distance / (cycles * 2)\n let path = `M ${x1} ${y}`\n for (let i = 0; i < cycles * 2; i++) {\n const cx = x1 + (i + 0.5) * halfStep\n const cy = y + (i % 2 === 0 ? -amplitude : amplitude)\n const ex = x1 + (i + 1) * halfStep\n path += ` Q ${cx} ${cy} ${ex} ${y}`\n }\n return path\n}\n\nexport const SleepChart: React.FC<SleepChartProps> = ({\n sleepData,\n width = 800,\n height = 400,\n onDateClick,\n}) => {\n const svgRef = useRef<SVGSVGElement>(null)\n const [tooltipData, setTooltipData] = useState<TooltipData | null>(null)\n\n const margin = useMemo(() => ({ top: 12, right: 16, bottom: 32, left: 64 }), [])\n const chartWidth = width - margin.left - margin.right\n const chartHeight = height - margin.top - margin.bottom\n\n useEffect(() => {\n const handleScroll = () => setTooltipData(null)\n window.addEventListener('scroll', handleScroll, true)\n return () => window.removeEventListener('scroll', handleScroll, true)\n }, [])\n\n useEffect(() => {\n if (!svgRef.current || sleepData.length === 0) return\n\n const svg = d3.select(svgRef.current)\n svg.selectAll('*').remove()\n\n svg.append('rect')\n .attr('width', width)\n .attr('height', height)\n .attr('fill', 'transparent')\n .style('pointer-events', 'all')\n .on('mouseleave', () => setTooltipData(null))\n\n const g = svg\n .append('g')\n .attr('transform', `translate(${margin.left},${margin.top})`)\n\n const xScale = d3.scaleLinear().domain([18, 42]).range([0, chartWidth])\n\n const yDomain = sleepData.map((d) => d.date)\n const yScale = d3\n .scaleBand()\n .domain(yDomain)\n .range([0, chartHeight])\n .paddingInner(0.35)\n .paddingOuter(0.1)\n\n // Dotted vertical gridlines; midnight/noon are slightly more present.\n g.selectAll('.grid-line-x')\n .data(d3.range(18, 43, 3))\n .enter()\n .append('line')\n .attr('class', styles.gridLine)\n .attr('x1', (d) => xScale(d))\n .attr('y1', 0)\n .attr('x2', (d) => xScale(d))\n .attr('y2', chartHeight)\n .classed(styles.gridLineAccent, (d) => {\n const hour = d % 24\n return hour === 0 || hour === 12\n })\n\n sleepData.forEach((dayData) => {\n const yValue = yScale(dayData.date)\n if (yValue === undefined) return\n\n const barHeight = yScale.bandwidth()\n const sleepGroup = g\n .append('g')\n .attr('class', styles.sleepBar)\n .style('cursor', onDateClick ? 'pointer' : 'default')\n .on('click', () => onDateClick?.(dayData.date))\n\n let sleepHour: number | null = null\n let wakeHour: number | null = null\n\n if (dayData.sleep_time) {\n sleepHour = parseTimeToDecimal(dayData.sleep_time)\n if (sleepHour < 18) sleepHour += 24\n }\n\n if (dayData.wake_hour) {\n wakeHour = parseTimeToDecimal(dayData.wake_hour)\n if (sleepHour !== null) {\n if (wakeHour < sleepHour || (sleepHour >= 18 && wakeHour < 18)) {\n wakeHour += 24\n }\n } else if (wakeHour < 12) {\n wakeHour += 24\n }\n }\n\n if (sleepHour !== null && wakeHour !== null) {\n const x1 = xScale(sleepHour)\n const x2 = xScale(wakeHour)\n const y = yValue + barHeight / 2\n const amplitude = Math.min(barHeight / 2.2, 7)\n const wavelength = 14\n\n const d = buildSquigglePath(x1, x2, y, amplitude, wavelength)\n\n const path = sleepGroup\n .append('path')\n .attr('class', styles.squiggle)\n .attr('d', d)\n .attr('fill', 'none')\n\n const node = path.node() as SVGPathElement\n const length =\n typeof node.getTotalLength === 'function'\n ? node.getTotalLength()\n : (x2 - x1) * 1.8\n path.attr('stroke-dasharray', length)\n .attr('stroke-dashoffset', length)\n .transition()\n .duration(540)\n .ease(d3.easeCubicOut)\n .attr('stroke-dashoffset', 0)\n }\n\n if (sleepHour !== null) {\n sleepGroup\n .append('circle')\n .attr('class', `${styles.endpoint} ${styles.endpointSleep}`)\n .attr('cx', xScale(sleepHour))\n .attr('cy', yValue + barHeight / 2)\n .attr('r', 0)\n .transition()\n .duration(280)\n .delay(160)\n .ease(d3.easeCubicOut)\n .attr('r', 3.5)\n }\n\n if (wakeHour !== null) {\n sleepGroup\n .append('circle')\n .attr('class', `${styles.endpoint} ${styles.endpointWake}`)\n .attr('cx', xScale(wakeHour))\n .attr('cy', yValue + barHeight / 2)\n .attr('r', 0)\n .transition()\n .duration(280)\n .delay(220)\n .ease(d3.easeCubicOut)\n .attr('r', 3.5)\n }\n\n sleepGroup\n .on('mouseenter', function (event) {\n d3.select(this).classed(styles.sleepBarHover, true)\n const duration =\n sleepHour !== null && wakeHour !== null ? wakeHour - sleepHour : null\n setTooltipData({\n date: dayData.date,\n sleepTime: sleepHour !== null ? formatTime(sleepHour) : null,\n wakeTime: wakeHour !== null ? formatTime(wakeHour) : null,\n duration:\n duration !== null ? Math.round(duration * 100) / 100 : null,\n x: event.pageX,\n y: event.pageY - 12,\n })\n })\n .on('mouseleave', function () {\n d3.select(this).classed(styles.sleepBarHover, false)\n setTooltipData(null)\n })\n .on('mousemove', function (event) {\n setTooltipData((prev) =>\n prev ? { ...prev, x: event.pageX, y: event.pageY - 12 } : null\n )\n })\n })\n\n const xAxisTicks = d3.range(18, 43, 3).map((hour) => ({\n value: hour,\n label: `${(hour % 24).toString().padStart(2, '0')}:00`,\n }))\n\n const xAxis = g\n .append('g')\n .attr('class', styles.xAxis)\n .attr('transform', `translate(0,${chartHeight})`)\n .call(\n d3\n .axisBottom(xScale)\n .tickValues(xAxisTicks.map((t) => t.value))\n .tickFormat((d) => {\n const tick = xAxisTicks.find((t) => t.value === d)\n return tick ? tick.label : ''\n })\n .tickSize(0)\n .tickPadding(10)\n )\n xAxis.select('.domain').remove()\n\n const tickEvery = Math.max(1, Math.ceil(yDomain.length / 8))\n const yAxisTicks = yDomain.filter((_, i) => i % tickEvery === 0)\n\n const yAxis = g\n .append('g')\n .attr('class', styles.yAxis)\n .call(\n d3\n .axisLeft(yScale)\n .tickValues(yAxisTicks)\n .tickFormat((d) => {\n const date = new Date(d)\n return `${(date.getMonth() + 1)\n .toString()\n .padStart(2, '0')}/${date.getDate().toString().padStart(2, '0')}`\n })\n .tickSize(0)\n .tickPadding(12)\n )\n yAxis.select('.domain').remove()\n }, [sleepData, chartWidth, chartHeight, margin, onDateClick, height, width])\n\n return (\n <div className={styles.container}>\n <header className={styles.header}>\n <span className={styles.eyebrow}>the night</span>\n <h3 className={styles.title}>\n <em>Sleep</em> pattern\n </h3>\n </header>\n\n <svg ref={svgRef} width={width} height={height} className={styles.chart} />\n\n {tooltipData && (\n <div\n className={`${styles.tooltip} ${styles.visible}`}\n style={{ left: `${tooltipData.x}px`, top: `${tooltipData.y}px` }}\n >\n <div className={styles.tooltipDate}>\n {new Date(tooltipData.date).toLocaleDateString('en-US', {\n weekday: 'short',\n month: 'short',\n day: 'numeric',\n })}\n </div>\n <div className={styles.tooltipBody}>\n {tooltipData.sleepTime && (\n <div className={styles.tooltipRow}>\n <em>sleep</em>\n <time>{tooltipData.sleepTime}</time>\n </div>\n )}\n {tooltipData.wakeTime && (\n <div className={styles.tooltipRow}>\n <em>wake</em>\n <time>{tooltipData.wakeTime}</time>\n </div>\n )}\n {tooltipData.duration !== null && (\n <div className={`${styles.tooltipRow} ${styles.tooltipTotal}`}>\n <em>total</em>\n <time>{formatDuration(tooltipData.duration)}</time>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n )\n}\n","import React, { useEffect, useRef, useMemo } from 'react'\nimport * as d3 from 'd3'\nimport styles from './BooleansHeatmap.module.css'\n\ninterface HeatmapChartProps {\n data: { [date: string]: boolean }\n habitName: string\n width?: number\n height?: number\n habitColor?: string\n habitEmoji?: string\n}\n\nconst DAYS_OF_WEEK = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']\nconst MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\n\nexport const BooleansHeatmap: React.FC<HeatmapChartProps> = ({\n data,\n habitName,\n width = 800,\n height = 200,\n habitColor = '#6BCB77',\n habitEmoji = '✓'\n}) => {\n const svgRef = useRef<SVGSVGElement>(null)\n\n const { startDate, endDate, weeksToShow } = useMemo(() => {\n const dates = Object.keys(data).sort()\n if (dates.length === 0) {\n const now = new Date()\n return { \n startDate: now, \n endDate: now, \n weeksToShow: 1 \n }\n }\n \n const start = new Date(dates[0])\n const end = new Date(dates[dates.length - 1])\n const daysDiff = Math.ceil((end.getTime() - start.getTime()) / (1000 * 60 * 60 * 24)) + 1\n const weeksDiff = Math.ceil(daysDiff / 7)\n \n return { \n startDate: start, \n endDate: end, \n weeksToShow: weeksDiff\n }\n }, [data])\n\n useEffect(() => {\n if (!svgRef.current) return\n\n const svg = d3.select(svgRef.current)\n svg.selectAll('*').remove()\n\n const margin = { top: 40, right: 20, bottom: 20, left: 40 }\n const chartWidth = width - margin.left - margin.right\n const chartHeight = height - margin.top - margin.bottom\n\n const cellSize = Math.min(\n Math.floor(chartHeight / 7) - 1,\n Math.floor(chartWidth / weeksToShow) - 1,\n 20\n )\n const cellGap = 2\n\n const g = svg.append('g')\n .attr('transform', `translate(${margin.left},${margin.top})`)\n\n const startDayOffset = (startDate.getDay() + 6) % 7\n\n const monthPositions = new Map<number, number>()\n let currentMonth = startDate.getMonth()\n monthPositions.set(currentMonth, 0)\n\n for (let weekIndex = 0; weekIndex < weeksToShow; weekIndex++) {\n const weekStart = new Date(startDate)\n weekStart.setDate(weekStart.getDate() + weekIndex * 7 - startDayOffset)\n \n if (weekStart.getMonth() !== currentMonth) {\n currentMonth = weekStart.getMonth()\n monthPositions.set(currentMonth, weekIndex)\n }\n }\n\n monthPositions.forEach((weekIndex, month) => {\n g.append('text')\n .attr('x', weekIndex * (cellSize + cellGap))\n .attr('y', -10)\n .attr('class', styles.monthLabel)\n .text(MONTHS[month])\n })\n\n DAYS_OF_WEEK.forEach((day, index) => {\n g.append('text')\n .attr('x', -10)\n .attr('y', index * (cellSize + cellGap) + cellSize / 2)\n .attr('class', styles.dayLabel)\n .attr('text-anchor', 'end')\n .attr('alignment-baseline', 'middle')\n .text(day)\n })\n\n const tooltip = d3.select('body').append('div')\n .attr('class', styles.tooltip)\n .style('opacity', 0)\n .style('position', 'absolute')\n\n const daysToShow = weeksToShow * 7\n \n for (let i = 0; i < daysToShow; i++) {\n const date = new Date(startDate)\n date.setDate(date.getDate() + i - startDayOffset)\n \n if (date < startDate || date > endDate) continue\n \n const dateString = date.toISOString().split('T')[0]\n const dayOfWeek = (date.getDay() + 6) % 7\n const weekIndex = Math.floor((i + startDayOffset) / 7)\n \n const isTrue = dateString in data && data[dateString]\n \n const rect = g.append('rect')\n .attr('x', weekIndex * (cellSize + cellGap))\n .attr('y', dayOfWeek * (cellSize + cellGap))\n .attr('width', cellSize)\n .attr('height', cellSize)\n .attr('rx', 3)\n .attr('class', styles.cell)\n .attr('data-date', dateString)\n .attr('data-value', isTrue ? 'true' : 'false')\n .style('fill', isTrue ? habitColor : '#4D4D4DFF')\n \n rect.on('mouseover', function(event) {\n tooltip.transition()\n .duration(200)\n .style('opacity', 1)\n \n const formatDate = d3.timeFormat('%b %d, %Y')\n const status = isTrue ? `${habitEmoji} Done` : '✗ Not done'\n \n tooltip.html(`\n <div><strong>${habitName}</strong></div>\n <div>${formatDate(date)}</div>\n <div>${status}</div>\n `)\n .style('left', (event.pageX + 10) + 'px')\n .style('top', (event.pageY - 28) + 'px')\n })\n .on('mouseout', function() {\n tooltip.transition()\n .duration(500)\n .style('opacity', 0)\n })\n }\n\n return () => {\n tooltip.remove()\n }\n }, [data, habitName, width, height, startDate, endDate, weeksToShow, habitColor, habitEmoji])\n\n return (\n <div className={styles.container}>\n <h3 className={styles.title}>\n <span className={styles.habitEmoji}>{habitEmoji}</span>\n {habitName}\n </h3>\n <svg\n ref={svgRef}\n width={width}\n height={height}\n className={styles.chart}\n />\n <div className={styles.legend}>\n <span className={styles.legendItem}>\n <span \n className={styles.legendColor} \n style={{ backgroundColor: habitColor }}\n ></span>\n Done\n </span>\n <span className={styles.legendItem}>\n <span \n className={styles.legendColor} \n style={{ backgroundColor: '#4D4D4DFF' }}\n ></span>\n Not done\n </span>\n </div>\n </div>\n )\n}","import React, { useRef, useEffect, useCallback } from 'react';\nimport * as d3 from 'd3';\nimport styles from './SunburstChart.module.css';\n\nexport interface SunBurstRecord {\n\tname: string;\n\tsize?: number;\n\tchildren?: SunBurstRecord[];\n}\n\ninterface SunburstChartProps {\n\tdata: SunBurstRecord;\n\twidth?: number;\n\theight?: number;\n\ttitle?: string;\n\ttagColors?: Record<string, string>;\n\tunit?: string;\n\tcenterLabel?: string;\n}\n\nconst COLOR_PALETTE = [\n\t'#6366f1',\n\t'#8b5cf6',\n\t'#06b6d4',\n\t'#10b981',\n\t'#f59e0b',\n\t'#ef4444',\n\t'#ec4899',\n\t'#84cc16',\n\t'#f97316',\n\t'#3b82f6',\n\t'#14b8a6',\n\t'#f59e0b',\n];\n\nexport const SunburstChart: React.FC<SunburstChartProps> = ({\n\tdata,\n\twidth = 500,\n\theight = 500,\n\ttitle = 'Sunburst Chart',\n\ttagColors = {},\n\tunit = 'items',\n\tcenterLabel,\n}) => {\n\tconst svgRef = useRef<SVGSVGElement>(null);\n\tconst colorMap = useRef(new Map<string, string>()).current;\n\tconst colorIndex = useRef(0);\n\tconst focusedNodeRef = useRef<d3.HierarchyRectangularNode<SunBurstRecord> | null>(null);\n\n\tconst radius = Math.min(width, height) / 2;\n\n\tconst getColor = useCallback(\n\t\t(name: string, depth: number): string => {\n\t\t\t// First check if we have a tag color for this name\n\t\t\tif (tagColors[name]) {\n\t\t\t\tconst color = d3.color(tagColors[name]);\n\t\t\t\tif (color) {\n\t\t\t\t\t// Darken for deeper levels\n\t\t\t\t\treturn depth > 1\n\t\t\t\t\t\t? color.darker((depth - 1) * 0.3).toString()\n\t\t\t\t\t\t: color.toString();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fallback to color palette\n\t\t\tif (!colorMap.has(name)) {\n\t\t\t\tcolorMap.set(name, COLOR_PALETTE[colorIndex.current % COLOR_PALETTE.length]);\n\t\t\t\tcolorIndex.current++;\n\t\t\t}\n\t\t\tconst baseColor = colorMap.get(name) || '#d4af37';\n\n\t\t\tconst color = d3.color(baseColor);\n\t\t\tif (color) {\n\t\t\t\treturn color.darker(depth * 0.3).toString();\n\t\t\t}\n\t\t\treturn baseColor;\n\t\t},\n\t\t[tagColors, colorMap]\n\t);\n\n\tuseEffect(() => {\n\t\tif (!svgRef.current || !data) return;\n\n\t\tconst svg = d3.select(svgRef.current);\n\t\tsvg.selectAll('*').remove();\n\n\t\tconst g = svg.append('g').attr('transform', `translate(${width / 2},${height / 2})`);\n\n\t\tconst root = d3\n\t\t\t.hierarchy(data)\n\t\t\t.sum((d) => d.size ?? 0)\n\t\t\t.sort((a, b) => (b.value ?? 0) - (a.value ?? 0));\n\n\t\tconst partition = d3.partition<SunBurstRecord>().size([2 * Math.PI, radius * radius]);\n\n\t\tconst nodes = partition(root).descendants();\n\n\t\t// Store original positions for reset\n\t\tinterface ExtendedNode extends d3.HierarchyRectangularNode<SunBurstRecord> {\n\t\t\tx0Original: number;\n\t\t\tx1Original: number;\n\t\t\ty0Original: number;\n\t\t\ty1Original: number;\n\t\t}\n\n\t\tnodes.forEach((d) => {\n\t\t\tconst node = d as ExtendedNode;\n\t\t\tnode.x0Original = d.x0;\n\t\t\tnode.x1Original = d.x1;\n\t\t\tnode.y0Original = d.y0;\n\t\t\tnode.y1Original = d.y1;\n\t\t});\n\n\t\tconst arc = d3\n\t\t\t.arc<d3.HierarchyRectangularNode<SunBurstRecord>>()\n\t\t\t.startAngle((d) => d.x0)\n\t\t\t.endAngle((d) => d.x1)\n\t\t\t.innerRadius((d) => Math.sqrt(d.y0))\n\t\t\t.outerRadius((d) => Math.sqrt(d.y1))\n\t\t\t.cornerRadius(3);\n\n\t\tconst tooltip = d3\n\t\t\t.select('body')\n\t\t\t.append('div')\n\t\t\t.attr('class', styles.tooltip)\n\t\t\t.style('opacity', 0)\n\t\t\t.style('position', 'absolute');\n\n\t\t// Function to reset to original view\n\t\tconst resetView = () => {\n\t\t\tfocusedNodeRef.current = null;\n\n\t\t\tconst transition = d3.transition().duration(750).ease(d3.easeCubicInOut);\n\n\t\t\t// First show all elements\n\t\t\tpaths.style('opacity', 1);\n\n\t\t\tpaths\n\t\t\t\t.transition(\n\t\t\t\t\ttransition as d3.Transition<\n\t\t\t\t\t\tany,\n\t\t\t\t\t\td3.HierarchyRectangularNode<SunBurstRecord>,\n\t\t\t\t\t\tany,\n\t\t\t\t\t\tany\n\t\t\t\t\t>\n\t\t\t\t)\n\t\t\t\t.attrTween('d', (d) => {\n\t\t\t\t\tconst node = d as ExtendedNode;\n\n\t\t\t\t\treturn (t: number) => {\n\t\t\t\t\t\t// Calculate interpolated positions\n\t\t\t\t\t\tconst currX0 = d3.interpolate(node.x0, node.x0Original)(t);\n\t\t\t\t\t\tconst currX1 = d3.interpolate(node.x1, node.x1Original)(t);\n\t\t\t\t\t\tconst currY0 = d3.interpolate(node.y0, node.y0Original)(t);\n\t\t\t\t\t\tconst currY1 = d3.interpolate(node.y1, node.y1Original)(t);\n\n\t\t\t\t\t\t// Update node positions continuously\n\t\t\t\t\t\tnode.x0 = currX0;\n\t\t\t\t\t\tnode.x1 = currX1;\n\t\t\t\t\t\tnode.y0 = currY0;\n\t\t\t\t\t\tnode.y1 = currY1;\n\n\t\t\t\t\t\tconst interpolatedArc = d3\n\t\t\t\t\t\t\t.arc<any>()\n\t\t\t\t\t\t\t.startAngle(() => currX0)\n\t\t\t\t\t\t\t.endAngle(() => currX1)\n\t\t\t\t\t\t\t.innerRadius(() => Math.min(radius, Math.sqrt(Math.max(0, currY0))))\n\t\t\t\t\t\t\t.outerRadius(() => Math.min(radius, Math.sqrt(Math.max(0, currY1))))\n\t\t\t\t\t\t\t.cornerRadius(3);\n\n\t\t\t\t\t\treturn interpolatedArc(node) || '';\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t// Restore cursor style based on whether nodes have children\n\t\t\tpaths.style('cursor', (d) =>\n\t\t\t\t!d.children || d.children.length === 0 ? 'default' : 'pointer'\n\t\t\t);\n\n\t\t\t// Reset center button cursor\n\t\t\tcenterResetButton.style('cursor', 'default');\n\n\t\t\t// Update labels\n\t\t\tupdateLabels(transition, nodes, true);\n\t\t};\n\n\t\t// Function to handle click and expand\n\t\tconst handleClick = (\n\t\t\tevent: MouseEvent,\n\t\t\tclickedNode: d3.HierarchyRectangularNode<SunBurstRecord>\n\t\t) => {\n\t\t\tevent.stopPropagation();\n\n\t\t\t// If already focused on a node, don't allow clicking on other segments\n\t\t\t// Only allow reset through the center button\n\t\t\tif (focusedNodeRef.current) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Don't allow clicking on leaf nodes (nodes without children)\n\t\t\tif (!clickedNode.children || clickedNode.children.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfocusedNodeRef.current = clickedNode;\n\n\t\t\tconst transition = d3.transition().duration(750).ease(d3.easeCubicInOut);\n\n\t\t\t// Zoom to clicked node - scale to fill the entire circle\n\t\t\tconst clickedOriginal = clickedNode as ExtendedNode;\n\n\t\t\t// Ensure we use the original x values for proper scaling\n\t\t\t// The x-scale maps the clicked node's angular extent to the full circle\n\t\t\tconst xScale = d3\n\t\t\t\t.scaleLinear()\n\t\t\t\t.domain([clickedOriginal.x0Original, clickedOriginal.x1Original])\n\t\t\t\t.range([0, 2 * Math.PI])\n\t\t\t\t.clamp(true); // Ensure values stay within bounds\n\n\t\t\t// For the radial scale, always use the full radius available\n\t\t\t// Find the deepest descendant to ensure all children fit\n\t\t\tconst descendants = nodes.filter((d) => isParentOf(clickedNode, d));\n\t\t\tconst maxChildRadius = Math.max(\n\t\t\t\t...descendants.map((d) => (d as ExtendedNode).y1Original)\n\t\t\t);\n\n\t\t\t// Always scale to use the full radius, regardless of original size\n\t\t\tconst yScale = d3\n\t\t\t\t.scaleLinear()\n\t\t\t\t.domain([clickedOriginal.y0Original, maxChildRadius])\n\t\t\t\t.range([0, radius * radius])\n\t\t\t\t.clamp(true); // Ensure values stay within bounds\n\n\t\t\t// First, immediately hide elements that shouldn't be visible\n\t\t\tpaths.style('opacity', (d) => (isParentOf(clickedNode, d) ? 1 : 0));\n\n\t\t\tpaths\n\t\t\t\t.transition(\n\t\t\t\t\ttransition as d3.Transition<\n\t\t\t\t\t\tany,\n\t\t\t\t\t\td3.HierarchyRectangularNode<SunBurstRecord>,\n\t\t\t\t\t\tany,\n\t\t\t\t\t\tany\n\t\t\t\t\t>\n\t\t\t\t)\n\t\t\t\t.attrTween('d', (d) => {\n\t\t\t\t\tconst node = d as ExtendedNode;\n\t\t\t\t\t// Only transform nodes that are descendants of the clicked node\n\t\t\t\t\tif (!isParentOf(clickedNode, d)) {\n\t\t\t\t\t\t// Keep them hidden\n\t\t\t\t\t\treturn () => '';\n\t\t\t\t\t}\n\n\t\t\t\t\t// Calculate new positions based on the original positions\n\t\t\t\t\t// ALWAYS scale to fill the full circle, no minimum size preservation\n\t\t\t\t\tconst newX0 = xScale(node.x0Original);\n\t\t\t\t\tlet newX1 = xScale(node.x1Original);\n\n\t\t\t\t\t// Ensure proper scaling even for very small segments\n\t\t\t\t\t// The clicked node's extent should always map to full circle\n\t\t\t\t\tif (newX1 <= newX0) {\n\t\t\t\t\t\t// Force proper angular extent based on proportion\n\t\t\t\t\t\tconst proportion =\n\t\t\t\t\t\t\t(node.x1Original - node.x0Original) /\n\t\t\t\t\t\t\t(clickedOriginal.x1Original - clickedOriginal.x0Original);\n\t\t\t\t\t\tnewX1 = newX0 + 2 * Math.PI * proportion;\n\t\t\t\t\t}\n\n\t\t\t\t\t// For radial positions, scale appropriately\n\t\t\t\t\tlet newY0, newY1;\n\t\t\t\t\tif (node === clickedNode) {\n\t\t\t\t\t\t// The clicked node itself should fill from center\n\t\t\t\t\t\tnewY0 = 0;\n\t\t\t\t\t\t// If it has children, leave room for them; otherwise fill to edge\n\t\t\t\t\t\tif (node.children && node.children.length > 0) {\n\t\t\t\t\t\t\tconst childrenY0 = Math.min(\n\t\t\t\t\t\t\t\t...node.children.map((c) => (c as ExtendedNode).y0Original)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tnewY1 = yScale(childrenY0) * 0.98; // Very slight gap for visual separation\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnewY1 = radius * radius * 0.98; // Fill almost to edge\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Child nodes should be scaled to fill the remaining space proportionally\n\t\t\t\t\t\t// NO minimum size enforcement - pure proportional scaling\n\t\t\t\t\t\tnewY0 = yScale(node.y0Original);\n\t\t\t\t\t\tnewY1 = yScale(node.y1Original);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Use current positions as start (they should be at original if not previously zoomed)\n\t\t\t\t\tconst startX0 = node.x0;\n\t\t\t\t\tconst startX1 = node.x1;\n\t\t\t\t\tconst startY0 = node.y0;\n\t\t\t\t\tconst startY1 = node.y1;\n\n\t\t\t\t\treturn (t: number) => {\n\t\t\t\t\t\t// Calculate interpolated positions\n\t\t\t\t\t\tconst currX0 = d3.interpolate(startX0, newX0)(t);\n\t\t\t\t\t\tconst currX1 = d3.interpolate(startX1, newX1)(t);\n\t\t\t\t\t\tconst currY0 = d3.interpolate(startY0, newY0)(t);\n\t\t\t\t\t\tconst currY1 = d3.interpolate(startY1, newY1)(t);\n\n\t\t\t\t\t\t// Update node positions continuously\n\t\t\t\t\t\tnode.x0 = currX0;\n\t\t\t\t\t\tnode.x1 = currX1;\n\t\t\t\t\t\tnode.y0 = currY0;\n\t\t\t\t\t\tnode.y1 = currY1;\n\n\t\t\t\t\t\tconst interpolatedArc = d3\n\t\t\t\t\t\t\t.arc<any>()\n\t\t\t\t\t\t\t.startAngle(() => currX0)\n\t\t\t\t\t\t\t.endAngle(() => currX1)\n\t\t\t\t\t\t\t.innerRadius(() => Math.min(radius, Math.sqrt(Math.max(0, currY0))))\n\t\t\t\t\t\t\t.outerRadius(() => Math.min(radius, Math.sqrt(Math.max(0, currY1))))\n\t\t\t\t\t\t\t.cornerRadius(3);\n\n\t\t\t\t\t\treturn interpolatedArc(node) || '';\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t// Update labels for zoomed view\n\t\t\tupdateLabels(\n\t\t\t\ttransition,\n\t\t\t\tnodes.filter((d) => isParentOf(clickedNode, d)),\n\t\t\t\tfalse\n\t\t\t);\n\n\t\t\t// Update cursor style to indicate segments are not clickable\n\t\t\tpaths.style('cursor', 'default');\n\n\t\t\t// Update center button to be clickable\n\t\t\tcenterResetButton.style('cursor', 'pointer');\n\t\t};\n\n\t\t// Helper function to check if a node is parent of another\n\t\tconst isParentOf = (\n\t\t\tparent: d3.HierarchyNode<SunBurstRecord>,\n\t\t\tdescendant: d3.HierarchyNode<SunBurstRecord>\n\t\t): boolean => {\n\t\t\tif (parent === descendant) return true;\n\t\t\tlet current = descendant.parent;\n\t\t\twhile (current) {\n\t\t\t\tif (current === parent) return true;\n\t\t\t\tcurrent = current.parent;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tconst paths = g\n\t\t\t.selectAll('path')\n\t\t\t.data(nodes.filter((d) => d.depth > 0 && d.value && d.value > 0))\n\t\t\t.enter()\n\t\t\t.append('path')\n\t\t\t.attr('d', arc as any)\n\t\t\t.attr('fill', (d) => {\n\t\t\t\tlet ancestor = d;\n\t\t\t\twhile (ancestor.depth > 1 && ancestor.parent) {\n\t\t\t\t\tancestor = ancestor.parent;\n\t\t\t\t}\n\t\t\t\treturn getColor(ancestor.data.name, d.depth);\n\t\t\t})\n\t\t\t.attr('stroke', () => {\n\t\t\t\t// Get computed border color from theme\n\t\t\t\tconst computedStyle = window.getComputedStyle(svgRef.current!);\n\t\t\t\treturn computedStyle.getPropertyValue('--color-border') || '#e2e8f0';\n\t\t\t})\n\t\t\t.attr('stroke-width', 2)\n\t\t\t.style('cursor', (d) =>\n\t\t\t\t!d.children || d.children.length === 0 ? 'default' : 'pointer'\n\t\t\t)\n\t\t\t.on('click', handleClick)\n\t\t\t.on('mouseover', function (event, d) {\n\t\t\t\t// Don't show hover effect if already focused\n\t\t\t\tif (focusedNodeRef.current) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst hoveredElement = event.currentTarget;\n\n\t\t\t\t// Show tooltip for all nodes\n\t\t\t\ttooltip.transition().duration(200).style('opacity', 1);\n\n\t\t\t\tconst value = d.value || 0;\n\t\t\t\tconst percentage = ((value / (root.value || 1)) * 100).toFixed(1);\n\n\t\t\t\ttooltip\n\t\t\t\t\t.html(\n\t\t\t\t\t\t`\n <div><strong>${d.data.name}</strong></div>\n <div>Value: ${value}</div>\n <div>${percentage}% of total</div>\n `\n\t\t\t\t\t)\n\t\t\t\t\t.style('left', (event as MouseEvent).pageX + 10 + 'px')\n\t\t\t\t\t.style('top', (event as MouseEvent).pageY - 28 + 'px');\n\n\t\t\t\t// Apply blur to all other segments\n\t\t\t\tpaths.each(function () {\n\t\t\t\t\tif (this !== hoveredElement) {\n\t\t\t\t\t\td3.select(this)\n\t\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t\t.duration(200)\n\t\t\t\t\t\t\t.style('opacity', 0.3)\n\t\t\t\t\t\t\t.style('filter', 'blur(1px)');\n\t\t\t\t\t} else {\n\t\t\t\t\t\td3.select(this)\n\t\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t\t.duration(200)\n\t\t\t\t\t\t\t.style('opacity', 1)\n\t\t\t\t\t\t\t.style('filter', 'none');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mouseout', function () {\n\t\t\t\t// Hide tooltip\n\t\t\t\ttooltip.transition().duration(500).style('opacity', 0);\n\n\t\t\t\t// Reset all segments\n\t\t\t\tpaths.transition().duration(200).style('opacity', 1).style('filter', 'none');\n\t\t\t})\n\t\t\t.on('mousemove', function (event) {\n\t\t\t\t// Update tooltip position on mouse move\n\t\t\t\ttooltip\n\t\t\t\t\t.style('left', (event as MouseEvent).pageX + 10 + 'px')\n\t\t\t\t\t.style('top', (event as MouseEvent).pageY - 28 + 'px');\n\t\t\t});\n\n\t\tconst shouldDisplayLabel = (d: d3.HierarchyRectangularNode<SunBurstRecord>) => {\n\t\t\tconst angle = d.x1 - d.x0;\n\t\t\t// When zoomed in, be more lenient with label display since segments are larger\n\t\t\tconst minAngle = focusedNodeRef.current ? 0.05 : 0.15;\n\t\t\treturn angle > minAngle && d.depth <= 2;\n\t\t};\n\n\t\t// Function to update labels after transitions\n\t\tconst updateLabels = (\n\t\t\ttransition: d3.Transition<d3.BaseType, unknown, d3.BaseType, unknown>,\n\t\t\tvisibleNodes: d3.HierarchyRectangularNode<SunBurstRecord>[],\n\t\t\t_isReset: boolean\n\t\t) => {\n\t\t\t// Remove old labels\n\t\t\tg.selectAll('text.segment-label').remove();\n\t\t\tg.selectAll('text.center-label').remove();\n\n\t\t\t// Wait for transition to complete before adding new labels\n\t\t\ttransition.on('end', () => {\n\t\t\t\t// Filter out the focused node itself when zoomed (it's shown in center)\n\t\t\t\tconst nodesToLabel = visibleNodes.filter((d) => {\n\t\t\t\t\tif (focusedNodeRef.current && d === focusedNodeRef.current) {\n\t\t\t\t\t\treturn false; // Don't show label for the zoomed parent node\n\t\t\t\t\t}\n\t\t\t\t\treturn d.depth > 0 && d.value && d.value > 0 && shouldDisplayLabel(d);\n\t\t\t\t});\n\n\t\t\t\tg.selectAll('text.segment-label')\n\t\t\t\t\t.data(nodesToLabel)\n\t\t\t\t\t.enter()\n\t\t\t\t\t.append('text')\n\t\t\t\t\t.attr('class', 'segment-label')\n\t\t\t\t\t.attr('transform', (d) => {\n\t\t\t\t\t\tconst angle = (d.x0 + d.x1) / 2;\n\t\t\t\t\t\tconst radiusVal = (Math.sqrt(d.y0) + Math.sqrt(d.y1)) / 2;\n\t\t\t\t\t\tconst x = Math.cos(angle - Math.PI / 2) * radiusVal;\n\t\t\t\t\t\tconst y = Math.sin(angle - Math.PI / 2) * radiusVal;\n\t\t\t\t\t\treturn `translate(${x},${y})`;\n\t\t\t\t\t})\n\t\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t\t.attr('alignment-baseline', 'middle')\n\t\t\t\t\t.attr('font-size', (d) => (d.depth === 1 ? '14px' : '12px'))\n\t\t\t\t\t.attr('fill', 'var(--color-text)')\n\t\t\t\t\t.attr('font-weight', '700')\n\t\t\t\t\t.style('pointer-events', 'none')\n\t\t\t\t\t.style('text-shadow', 'none')\n\t\t\t\t\t.text((d) => {\n\t\t\t\t\t\tconst maxLength = d.depth === 1 ? 12 : 8;\n\t\t\t\t\t\treturn d.data.name.substring(0, maxLength);\n\t\t\t\t\t})\n\t\t\t\t\t.style('opacity', 0)\n\t\t\t\t\t.transition()\n\t\t\t\t\t.duration(200)\n\t\t\t\t\t.style('opacity', 1);\n\n\t\t\t\t// Update center text\n\t\t\t\tconst currentNode = focusedNodeRef.current || root;\n\t\t\t\tconst computedStyle = window.getComputedStyle(svgRef.current!);\n\t\t\t\tconst centerTextColor =\n\t\t\t\t\tcomputedStyle.getPropertyValue('--text-primary') ||\n\t\t\t\t\t(computedStyle.getPropertyValue('--bg-primary') === '#000000' ||\n\t\t\t\t\tcomputedStyle.getPropertyValue('color-scheme') === 'dark'\n\t\t\t\t\t\t? '#ffffff'\n\t\t\t\t\t\t: '#000000');\n\n\t\t\t\tg.append('text')\n\t\t\t\t\t.attr('class', 'center-label')\n\t\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t\t.attr('alignment-baseline', 'middle')\n\t\t\t\t\t.attr('font-size', '18px')\n\t\t\t\t\t.attr('font-weight', 'bold')\n\t\t\t\t\t.attr('fill', centerTextColor)\n\t\t\t\t\t.style('pointer-events', 'none')\n\t\t\t\t\t.text(\n\t\t\t\t\t\tcurrentNode === root\n\t\t\t\t\t\t\t? centerLabel || data.name || 'Total'\n\t\t\t\t\t\t\t: currentNode.data.name\n\t\t\t\t\t)\n\t\t\t\t\t.style('opacity', 0)\n\t\t\t\t\t.transition()\n\t\t\t\t\t.duration(200)\n\t\t\t\t\t.style('opacity', 1);\n\n\t\t\t\tg.append('text')\n\t\t\t\t\t.attr('class', 'center-label')\n\t\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t\t.attr('alignment-baseline', 'middle')\n\t\t\t\t\t.attr('y', 20)\n\t\t\t\t\t.attr('font-size', '14px')\n\t\t\t\t\t.attr('font-weight', '500')\n\t\t\t\t\t.attr('fill', centerTextColor)\n\t\t\t\t\t.style('pointer-events', 'none')\n\t\t\t\t\t.text(`${(currentNode.value || 0).toLocaleString()} ${unit}`)\n\t\t\t\t\t.style('opacity', 0)\n\t\t\t\t\t.transition()\n\t\t\t\t\t.duration(200)\n\t\t\t\t\t.style('opacity', 1);\n\t\t\t});\n\t\t};\n\n\t\t// Add invisible center reset button (circle in the middle)\n\t\tconst centerRadius = Math.sqrt(nodes[0].y0) || radius * 0.3;\n\n\t\tconst centerResetButton = g\n\t\t\t.append('circle')\n\t\t\t.attr('class', 'center-reset-button')\n\t\t\t.attr('r', centerRadius)\n\t\t\t.attr('fill', 'transparent')\n\t\t\t.style('cursor', 'default')\n\t\t\t.on('click', () => {\n\t\t\t\tif (focusedNodeRef.current) {\n\t\t\t\t\tresetView();\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('mouseover', function () {\n\t\t\t\tif (focusedNodeRef.current) {\n\t\t\t\t\td3.select(this)\n\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t.duration(150)\n\t\t\t\t\t\t.attr('fill', 'rgba(100, 100, 100, 0.1)')\n\t\t\t\t\t\t.attr('stroke', 'rgba(100, 100, 100, 0.3)')\n\t\t\t\t\t\t.attr('stroke-width', 2);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('mouseout', function () {\n\t\t\t\tif (focusedNodeRef.current) {\n\t\t\t\t\td3.select(this)\n\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t.duration(150)\n\t\t\t\t\t\t.attr('fill', 'transparent')\n\t\t\t\t\t\t.attr('stroke', 'none');\n\t\t\t\t}\n\t\t\t});\n\n\t\t// Calculate center text color - get computed theme color\n\t\tconst computedStyle = window.getComputedStyle(svgRef.current!);\n\t\tconst centerTextColor =\n\t\t\tcomputedStyle.getPropertyValue('--text-primary') ||\n\t\t\t(computedStyle.getPropertyValue('--bg-primary') === '#000000' ||\n\t\t\tcomputedStyle.getPropertyValue('color-scheme') === 'dark'\n\t\t\t\t? '#ffffff'\n\t\t\t\t: '#000000');\n\n\t\t// Add center text\n\t\tg.append('text')\n\t\t\t.attr('class', 'center-label')\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.attr('alignment-baseline', 'middle')\n\t\t\t.attr('font-size', '18px')\n\t\t\t.attr('font-weight', 'bold')\n\t\t\t.attr('fill', centerTextColor)\n\t\t\t.style('pointer-events', 'none')\n\t\t\t.text(centerLabel || data.name || 'Total');\n\n\t\tg.append('text')\n\t\t\t.attr('class', 'center-label')\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.attr('alignment-baseline', 'middle')\n\t\t\t.attr('y', 20)\n\t\t\t.attr('font-size', '14px')\n\t\t\t.attr('font-weight', '500')\n\t\t\t.attr('fill', centerTextColor)\n\t\t\t.style('pointer-events', 'none')\n\t\t\t.text(`${(root.value || 0).toLocaleString()} ${unit}`);\n\n\t\tg.selectAll('text.segment-label')\n\t\t\t.data(\n\t\t\t\tnodes.filter((d) => d.depth > 0 && d.value && d.value > 0 && shouldDisplayLabel(d))\n\t\t\t)\n\t\t\t.enter()\n\t\t\t.append('text')\n\t\t\t.attr('class', 'segment-label')\n\t\t\t.attr('transform', (d) => {\n\t\t\t\tconst angle = (d.x0 + d.x1) / 2;\n\t\t\t\tconst radiusVal = (Math.sqrt(d.y0) + Math.sqrt(d.y1)) / 2;\n\t\t\t\tconst x = Math.cos(angle - Math.PI / 2) * radiusVal;\n\t\t\t\tconst y = Math.sin(angle - Math.PI / 2) * radiusVal;\n\t\t\t\treturn `translate(${x},${y})`;\n\t\t\t})\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.attr('alignment-baseline', 'middle')\n\t\t\t.attr('font-size', (d) => (d.depth === 1 ? '14px' : '12px'))\n\t\t\t.attr('fill', 'var(--color-text)')\n\t\t\t.attr('font-weight', '700')\n\t\t\t.style('pointer-events', 'none')\n\t\t\t.style('text-shadow', 'none')\n\t\t\t.text((d) => {\n\t\t\t\tconst maxLength = d.depth === 1 ? 12 : 8;\n\t\t\t\treturn d.data.name.substring(0, maxLength);\n\t\t\t});\n\n\t\treturn () => {\n\t\t\ttooltip.remove();\n\t\t};\n\t}, [data, width, height, colorMap, radius, tagColors, unit, centerLabel]);\n\n\treturn (\n\t\t<div className={styles.container}>\n\t\t\t<h3 className={styles.title}>{title}</h3>\n\t\t\t<svg ref={svgRef} viewBox={`0 0 ${width} ${height}`} className={styles.chart} />\n\t\t</div>\n\t);\n};\n","import React, { useRef, useEffect } from 'react'\nimport * as d3 from 'd3'\nimport styles from './PieChart.module.css'\n\ninterface PieDataPoint {\n name: string\n value: number\n color?: string\n}\n\ninterface PieChartProps {\n data: PieDataPoint[]\n width?: number\n height?: number\n title?: string\n showLegend?: boolean\n unit?: string\n centerLabel?: string\n}\n\nconst DEFAULT_COLORS = [\n '#6366f1', '#8b5cf6', '#06b6d4', '#10b981',\n '#f59e0b', '#ef4444', '#ec4899', '#84cc16',\n '#f97316', '#3b82f6', '#8b5cf6', '#14b8a6',\n '#f59e0b', '#ef4444', '#06b6d4', '#10b981'\n]\n\n// Calculate text color based on background luminance for optimal contrast\nconst getTextColor = (backgroundColor: string): string => {\n const color = d3.color(backgroundColor);\n if (!color) return '#ffffff';\n\n const rgb = color.rgb();\n // Calculate relative luminance using WCAG formula\n const luminance = (0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b) / 255;\n\n // Return white text for dark backgrounds, black for light backgrounds\n return luminance > 0.5 ? '#000000' : '#ffffff';\n}\n\nexport const PieChart: React.FC<PieChartProps> = ({\n data,\n width = 400,\n height = 400,\n title = 'Distribution',\n showLegend = true,\n unit = 'items',\n centerLabel\n}) => {\n const svgRef = useRef<SVGSVGElement>(null)\n const radius = Math.min(width, height) / 2 - 20\n\n useEffect(() => {\n if (!svgRef.current || !data.length) return\n\n const svg = d3.select(svgRef.current)\n svg.selectAll('*').remove()\n\n const g = svg.append('g')\n .attr('transform', `translate(${width / 2},${height / 2})`)\n\n const pie = d3.pie<PieDataPoint>()\n .value(d => d.value)\n .sort(null)\n\n const arc = d3.arc<d3.PieArcDatum<PieDataPoint>>()\n .innerRadius(radius * 0.4)\n .outerRadius(radius)\n .cornerRadius(4)\n\n const labelArc = d3.arc<d3.PieArcDatum<PieDataPoint>>()\n .innerRadius(radius * 0.7)\n .outerRadius(radius * 0.7)\n\n const tooltip = d3.select('body').append('div')\n .attr('class', styles.tooltip)\n .style('opacity', 0)\n .style('position', 'absolute')\n\n const pieData = pie(data)\n const total = d3.sum(data, d => d.value)\n\n const arcs = g.selectAll('.arc')\n .data(pieData)\n .enter().append('g')\n .attr('class', 'arc')\n\n arcs.append('path')\n .attr('d', d => arc(d))\n .attr('fill', (d, i) => d.data.color || DEFAULT_COLORS[i % DEFAULT_COLORS.length])\n .attr('stroke', 'var(--bg-primary)')\n .attr('stroke-width', 3)\n .style('cursor', 'pointer')\n .style('filter', 'drop-shadow(0 2px 8px rgba(0,0,0,0.15))')\n .on('mouseover', function(event, d) {\n const hoverArc = d3.arc<d3.PieArcDatum<PieDataPoint>>()\n .innerRadius(radius * 0.4)\n .outerRadius(radius * 1.05)\n .cornerRadius(4)\n\n d3.select(this)\n .transition()\n .duration(200)\n .attr('d', (d) => hoverArc(d as d3.PieArcDatum<PieDataPoint>))\n .style('filter', 'drop-shadow(0 4px 12px rgba(0,0,0,0.25))')\n\n tooltip.transition()\n .duration(200)\n .style('opacity', 1)\n\n const percentage = ((d.data.value / total) * 100).toFixed(1)\n\n tooltip.html(`\n <div><strong>${d.data.name}</strong></div>\n <div>Value: ${d.data.value.toLocaleString()}</div>\n <div>${percentage}% of total</div>\n `)\n .style('left', (event.pageX + 10) + 'px')\n .style('top', (event.pageY - 28) + 'px')\n })\n .on('mouseout', function(_event, _d) {\n d3.select(this)\n .transition()\n .duration(200)\n .attr('d', (d) => arc(d as d3.PieArcDatum<PieDataPoint>))\n .style('filter', 'drop-shadow(0 2px 8px rgba(0,0,0,0.15))')\n\n tooltip.transition()\n .duration(500)\n .style('opacity', 0)\n })\n\n // Calculate average background color for center text contrast\n const colors = data.map((d, i) => d.color || DEFAULT_COLORS[i % DEFAULT_COLORS.length])\n const avgColor = colors.length >= 2\n ? d3.interpolateRgb.gamma(2.2)(colors[0], colors[1])(0.5)\n : colors[0] || '#ffffff';\n const centerTextColor = getTextColor(avgColor);\n\n // Add center text for donut\n g.append('text')\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .attr('font-size', '20px')\n .attr('font-weight', 'bold')\n .attr('fill', centerTextColor)\n .style('text-shadow', centerTextColor === '#ffffff' ? '0 1px 3px rgba(0,0,0,0.5)' : '0 1px 3px rgba(255,255,255,0.5)')\n .text(centerLabel || 'Total')\n\n g.append('text')\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .attr('y', 22)\n .attr('font-size', '16px')\n .attr('font-weight', '600')\n .attr('fill', centerTextColor)\n .style('text-shadow', centerTextColor === '#ffffff' ? '0 1px 2px rgba(0,0,0,0.4)' : '0 1px 2px rgba(255,255,255,0.4)')\n .text(`${total.toLocaleString()} ${unit}`)\n\n arcs.filter(d => (d.endAngle - d.startAngle) > 0.2)\n .append('text')\n .attr('transform', d => `translate(${labelArc.centroid(d)})`)\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .attr('font-size', '13px')\n .attr('fill', (d, i) => {\n const segmentColor = d.data.color || DEFAULT_COLORS[i % DEFAULT_COLORS.length];\n return getTextColor(segmentColor);\n })\n .attr('font-weight', '600')\n .style('pointer-events', 'none')\n .style('text-shadow', (d, i) => {\n const segmentColor = d.data.color || DEFAULT_COLORS[i % DEFAULT_COLORS.length];\n const textColor = getTextColor(segmentColor);\n // Use contrasting shadow color\n const shadowColor = textColor === '#ffffff' ? 'rgba(0,0,0,0.4)' : 'rgba(255,255,255,0.4)';\n return `0 1px 2px ${shadowColor}`;\n })\n .text(d => {\n const percentage = ((d.data.value / total) * 100)\n return percentage > 8 ? `${percentage.toFixed(0)}%` : ''\n })\n\n return () => {\n tooltip.remove()\n }\n }, [data, width, height, radius, centerLabel, unit])\n\n return (\n <div className={styles.container}>\n <h3 className={styles.title}>{title}</h3>\n <div className={styles.chartContainer}>\n <svg\n ref={svgRef}\n width={width}\n height={height}\n className={styles.chart}\n />\n {showLegend && (\n <div className={styles.legend}>\n {data.map((item, index) => (\n <div key={item.name} className={styles.legendItem}>\n <span\n className={styles.legendColor}\n style={{\n backgroundColor: item.color || DEFAULT_COLORS[index % DEFAULT_COLORS.length]\n }}\n />\n <span className={styles.legendLabel}>\n {item.name}\n </span>\n <span className={styles.legendValue}>\n {item.value.toLocaleString()}\n </span>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n )\n}","import React, { useState, useCallback, useEffect, useRef } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { ChevronLeft, ChevronRight, Play, Pause, Maximize, Download, Share2 } from 'lucide-react';\nimport styles from './ImageSlideshow.module.css';\n\nexport interface SlideshowImage {\n id: string;\n src: string;\n alt: string;\n caption?: string;\n title?: string;\n srcSet?: string;\n sizes?: string;\n downloadUrl?: string;\n metadata?: {\n width?: number;\n height?: number;\n photographer?: string;\n location?: string;\n camera?: string;\n [key: string]: unknown;\n };\n}\n\nexport interface ImageSlideshowProps {\n images: SlideshowImage[];\n autoPlay?: boolean;\n autoPlayInterval?: number;\n showThumbnails?: boolean;\n showControls?: boolean;\n showIndicators?: boolean;\n showCaptions?: boolean;\n loop?: boolean;\n fadeTransition?: boolean;\n enableFullscreen?: boolean;\n enableDownload?: boolean;\n enableShare?: boolean;\n enableDragReorder?: boolean;\n lazyLoading?: boolean;\n preloadAdjacent?: boolean;\n className?: string;\n onImageChange?: (index: number, image: SlideshowImage) => void;\n onDownload?: (image: SlideshowImage) => void;\n onShare?: (image: SlideshowImage) => void;\n onImageReorder?: (newOrder: SlideshowImage[]) => void;\n initialIndex?: number;\n}\n\nexport const ImageSlideshow: React.FC<ImageSlideshowProps> = ({\n images,\n autoPlay = false,\n autoPlayInterval = 3000,\n showThumbnails = true,\n showControls = true,\n showIndicators = true,\n showCaptions = true,\n loop = true,\n fadeTransition = false,\n enableFullscreen = true,\n enableDownload = false,\n enableShare = false,\n enableDragReorder = false,\n lazyLoading = true,\n preloadAdjacent = true,\n className = '',\n onImageChange,\n onDownload,\n onShare,\n onImageReorder,\n initialIndex = 0,\n}) => {\n const [currentIndex, setCurrentIndex] = useState(initialIndex);\n const [isPlaying, setIsPlaying] = useState(autoPlay);\n const [touchStart, setTouchStart] = useState<number | null>(null);\n const [touchEnd, setTouchEnd] = useState<number | null>(null);\n const [isFullscreen, setIsFullscreen] = useState(false);\n const [loadedImages, setLoadedImages] = useState<Set<string>>(new Set());\n const [imageOrder, setImageOrder] = useState(images);\n const [isDragging, setIsDragging] = useState(false);\n const [draggedIndex, setDraggedIndex] = useState<number | null>(null);\n \n const slideshowRef = useRef<HTMLDivElement>(null);\n const imageRef = useRef<HTMLImageElement>(null);\n const observerRef = useRef<IntersectionObserver | null>(null);\n\n const minSwipeDistance = 50;\n\n const goToSlide = useCallback((index: number) => {\n const newIndex = Math.max(0, Math.min(index, imageOrder.length - 1));\n setCurrentIndex(newIndex);\n if (onImageChange) {\n onImageChange(newIndex, imageOrder[newIndex]);\n }\n }, [imageOrder, onImageChange]);\n\n const goToNext = useCallback(() => {\n if (currentIndex < imageOrder.length - 1) {\n goToSlide(currentIndex + 1);\n } else if (loop) {\n goToSlide(0);\n }\n }, [currentIndex, imageOrder.length, loop, goToSlide]);\n\n const goToPrevious = useCallback(() => {\n if (currentIndex > 0) {\n goToSlide(currentIndex - 1);\n } else if (loop) {\n goToSlide(imageOrder.length - 1);\n }\n }, [currentIndex, imageOrder.length, loop, goToSlide]);\n\n const togglePlayPause = useCallback(() => {\n setIsPlaying(prev => !prev);\n }, []);\n\n\n\n\n const toggleFullscreen = () => {\n if (!document.fullscreenElement) {\n slideshowRef.current?.requestFullscreen();\n setIsFullscreen(true);\n } else {\n document.exitFullscreen();\n setIsFullscreen(false);\n }\n };\n\n const handleImageLoad = (imageId: string) => {\n setLoadedImages(prev => new Set([...prev, imageId]));\n };\n\n const handleDownload = () => {\n const currentImage = imageOrder[currentIndex];\n if (onDownload) {\n onDownload(currentImage);\n } else if (currentImage.downloadUrl || currentImage.src) {\n const link = document.createElement('a');\n link.href = currentImage.downloadUrl || currentImage.src;\n link.download = currentImage.title || currentImage.alt || 'image';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n };\n\n const handleShare = async () => {\n const currentImage = imageOrder[currentIndex];\n if (onShare) {\n onShare(currentImage);\n } else if (navigator.share) {\n try {\n await navigator.share({\n title: currentImage.title || currentImage.alt,\n text: currentImage.caption,\n url: currentImage.src\n });\n } catch (error) {\n console.log('Error sharing:', error);\n }\n } else {\n navigator.clipboard.writeText(currentImage.src);\n }\n };\n\n const handleDragStart = (e: React.DragEvent, index: number) => {\n if (!enableDragReorder) return;\n setIsDragging(true);\n setDraggedIndex(index);\n e.dataTransfer.effectAllowed = 'move';\n };\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n };\n\n const handleDrop = (e: React.DragEvent, dropIndex: number) => {\n e.preventDefault();\n if (draggedIndex === null || draggedIndex === dropIndex) return;\n \n const newOrder = [...imageOrder];\n const draggedItem = newOrder[draggedIndex];\n newOrder.splice(draggedIndex, 1);\n newOrder.splice(dropIndex, 0, draggedItem);\n \n setImageOrder(newOrder);\n setIsDragging(false);\n setDraggedIndex(null);\n \n if (onImageReorder) {\n onImageReorder(newOrder);\n }\n };\n\n const preloadImage = (src: string) => {\n const img = new Image();\n img.src = src;\n };\n\n const onTouchStart = (e: React.TouchEvent) => {\n setTouchEnd(null);\n setTouchStart(e.targetTouches[0].clientX);\n };\n\n const onTouchMove = (e: React.TouchEvent) => {\n setTouchEnd(e.targetTouches[0].clientX);\n };\n\n const onTouchEnd = () => {\n if (!touchStart || !touchEnd) return;\n const distance = touchStart - touchEnd;\n const isLeftSwipe = distance > minSwipeDistance;\n const isRightSwipe = distance < -minSwipeDistance;\n\n if (isLeftSwipe) {\n goToNext();\n } else if (isRightSwipe) {\n goToPrevious();\n }\n };\n\n useEffect(() => {\n if (!isPlaying || imageOrder.length <= 1) return;\n\n const interval = setInterval(() => {\n goToNext();\n }, autoPlayInterval);\n\n return () => clearInterval(interval);\n }, [isPlaying, autoPlayInterval, goToNext, imageOrder.length]);\n\n useEffect(() => {\n setImageOrder(images);\n }, [images]);\n\n useEffect(() => {\n if (preloadAdjacent) {\n const preloadIndices = [\n currentIndex - 1,\n currentIndex + 1,\n loop && currentIndex === 0 ? imageOrder.length - 1 : -1,\n loop && currentIndex === imageOrder.length - 1 ? 0 : -1\n ].filter(i => i >= 0 && i < imageOrder.length);\n \n preloadIndices.forEach(index => {\n if (imageOrder[index]) {\n preloadImage(imageOrder[index].src);\n }\n });\n }\n }, [currentIndex, imageOrder, images, loop, preloadAdjacent]);\n\n useEffect(() => {\n const handleFullscreenChange = () => {\n setIsFullscreen(!!document.fullscreenElement);\n };\n \n document.addEventListener('fullscreenchange', handleFullscreenChange);\n return () => document.removeEventListener('fullscreenchange', handleFullscreenChange);\n }, []);\n\n useEffect(() => {\n if (lazyLoading) {\n observerRef.current = new IntersectionObserver(\n (entries) => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n const img = entry.target as HTMLImageElement;\n const src = img.dataset.src;\n if (src) {\n img.src = src;\n img.removeAttribute('data-src');\n observerRef.current?.unobserve(img);\n }\n }\n });\n },\n { threshold: 0.1 }\n );\n }\n \n return () => {\n observerRef.current?.disconnect();\n };\n }, [lazyLoading]);\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowLeft':\n goToPrevious();\n break;\n case 'ArrowRight':\n goToNext();\n break;\n case ' ':\n e.preventDefault();\n togglePlayPause();\n break;\n case 'f':\n case 'F':\n if (enableFullscreen) {\n toggleFullscreen();\n }\n break;\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [goToPrevious, goToNext, enableFullscreen, togglePlayPause]);\n\n if (!imageOrder || imageOrder.length === 0) {\n return (\n <div className={`${styles.slideshow} ${styles.empty} ${className}`}>\n <div className={styles.emptyState}>\n <span>No images to display</span>\n </div>\n </div>\n );\n }\n\n const slideVariants = {\n enter: (direction: number) => ({\n x: direction > 0 ? 1000 : -1000,\n opacity: fadeTransition ? 0 : 1,\n }),\n center: {\n zIndex: 1,\n x: 0,\n opacity: 1,\n },\n exit: (direction: number) => ({\n zIndex: 0,\n x: direction < 0 ? 1000 : -1000,\n opacity: fadeTransition ? 0 : 1,\n }),\n };\n\n const currentImage = imageOrder[currentIndex];\n const isImageLoaded = loadedImages.has(currentImage.id);\n\n return (\n <div \n ref={slideshowRef}\n className={`${styles.slideshow} ${isFullscreen ? styles.fullscreen : ''} ${showThumbnails && imageOrder.length > 1 ? styles.hasThumbnails : ''} ${className}`}\n >\n <div \n className={styles.mainContainer}\n onTouchStart={onTouchStart}\n onTouchMove={onTouchMove}\n onTouchEnd={onTouchEnd}\n >\n <AnimatePresence mode=\"wait\" custom={1}>\n <motion.div\n key={currentIndex}\n custom={1}\n variants={slideVariants}\n initial=\"enter\"\n animate=\"center\"\n exit=\"exit\"\n transition={{\n x: { type: \"spring\", stiffness: 300, damping: 30 },\n opacity: { duration: 0.3 }\n }}\n className={styles.slide}\n >\n <img\n ref={imageRef}\n src={lazyLoading && !isImageLoaded ? undefined : currentImage.src}\n data-src={lazyLoading ? currentImage.src : undefined}\n srcSet={currentImage.srcSet}\n sizes={currentImage.sizes}\n alt={currentImage.alt}\n className={styles.image}\n draggable={false}\n onLoad={() => handleImageLoad(currentImage.id)}\n style={{\n opacity: lazyLoading && !isImageLoaded ? 0 : 1,\n transition: 'opacity 0.3s ease'\n }}\n />\n {lazyLoading && !isImageLoaded && (\n <div className={styles.imageLoader}>\n <div className={styles.spinner} />\n </div>\n )}\n </motion.div>\n </AnimatePresence>\n\n {showControls && imageOrder.length > 1 && (\n <>\n <button\n className={`${styles.control} ${styles.controlPrev}`}\n onClick={goToPrevious}\n disabled={!loop && currentIndex === 0}\n aria-label=\"Previous image\"\n >\n <ChevronLeft />\n </button>\n\n <button\n className={`${styles.control} ${styles.controlNext}`}\n onClick={goToNext}\n disabled={!loop && currentIndex === imageOrder.length - 1}\n aria-label=\"Next image\"\n >\n <ChevronRight />\n </button>\n </>\n )}\n\n <div className={styles.topControls}>\n {enableFullscreen && (\n <button\n className={`${styles.control} ${styles.controlAction}`}\n onClick={toggleFullscreen}\n aria-label={isFullscreen ? 'Exit fullscreen' : 'Enter fullscreen'}\n title={isFullscreen ? 'Exit fullscreen (F)' : 'Enter fullscreen (F)'}\n >\n <span style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', width: '100%', height: '100%' }}>\n <Maximize />\n </span>\n </button>\n )}\n \n {enableDownload && (\n <button\n className={`${styles.control} ${styles.controlAction}`}\n onClick={handleDownload}\n aria-label=\"Download image\"\n title=\"Download image\"\n >\n <span style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', width: '100%', height: '100%' }}>\n <Download />\n </span>\n </button>\n )}\n \n {enableShare && (\n <button\n className={`${styles.control} ${styles.controlAction}`}\n onClick={handleShare}\n aria-label=\"Share image\"\n title=\"Share image\"\n >\n <span style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', width: '100%', height: '100%' }}>\n <Share2 />\n </span>\n </button>\n )}\n </div>\n\n {autoPlay && imageOrder.length > 1 && (\n <button\n className={`${styles.control} ${styles.controlPlay}`}\n onClick={togglePlayPause}\n aria-label={isPlaying ? 'Pause slideshow' : 'Play slideshow'}\n title={isPlaying ? 'Pause slideshow (Space)' : 'Play slideshow (Space)'}\n >\n {isPlaying ? <Pause /> : <Play />}\n </button>\n )}\n\n {showCaptions && (currentImage.caption || currentImage.title) && (\n <motion.div\n className={styles.caption}\n initial={{ opacity: 0, y: 20 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: 0.3 }}\n >\n {currentImage.title && (\n <h3 className={styles.captionTitle}>{currentImage.title}</h3>\n )}\n {currentImage.caption && (\n <p className={styles.captionText}>{currentImage.caption}</p>\n )}\n {currentImage.metadata && (\n <div className={styles.imageMetadata}>\n {currentImage.metadata.photographer && (\n <span className={styles.metadataItem}>\n 📷 {currentImage.metadata.photographer}\n </span>\n )}\n {currentImage.metadata.location && (\n <span className={styles.metadataItem}>\n 📍 {currentImage.metadata.location}\n </span>\n )}\n {currentImage.metadata.camera && (\n <span className={styles.metadataItem}>\n 📹 {currentImage.metadata.camera}\n </span>\n )}\n </div>\n )}\n </motion.div>\n )}\n </div>\n\n {showIndicators && imageOrder.length > 1 && (\n <div className={styles.indicators}>\n {imageOrder.map((_, index) => (\n <motion.button\n key={index}\n className={`${styles.indicator} ${index === currentIndex ? styles.indicatorActive : ''}`}\n onClick={() => goToSlide(index)}\n whileHover={{ scale: 1.2 }}\n whileTap={{ scale: 0.8 }}\n aria-label={`Go to slide ${index + 1}`}\n />\n ))}\n </div>\n )}\n\n {showThumbnails && imageOrder.length > 1 && (\n <div className={`${styles.thumbnails} ${isDragging ? styles.thumbnailsDragging : ''}`}>\n {imageOrder.map((image, index) => (\n <motion.button\n key={image.id}\n className={`${styles.thumbnail} ${index === currentIndex ? styles.thumbnailActive : ''} ${draggedIndex === index ? styles.thumbnailDragged : ''}`}\n onClick={() => goToSlide(index)}\n whileHover={{ scale: 1.05 }}\n whileTap={{ scale: 0.95 }}\n aria-label={`Go to ${image.alt}`}\n draggable={enableDragReorder}\n onDragStart={(e) => handleDragStart(e as unknown as React.DragEvent<HTMLButtonElement>, index)}\n onDragOver={handleDragOver}\n onDrop={(e) => handleDrop(e as unknown as React.DragEvent<HTMLButtonElement>, index)}\n title={image.title || image.alt}\n >\n <img\n src={image.src}\n alt={image.alt}\n className={styles.thumbnailImage}\n draggable={false}\n />\n </motion.button>\n ))}\n </div>\n )}\n </div>\n );\n};","import { useState, useMemo, useCallback, ReactNode, memo } from 'react'\nimport { motion, AnimatePresence, LayoutGroup } from 'framer-motion'\nimport styles from './Table.module.css'\n\n/**\n * Column configuration for the Table component\n * @template T - The type of data objects in the table\n */\nexport interface Column<T = object> {\n /** The key to access the data field in each row object */\n key: string\n /** The display text for the column header */\n header: string\n /** Whether this column can be sorted */\n sortable?: boolean\n /** Whether this column can be filtered */\n filterable?: boolean\n /** CSS width value for the column */\n width?: string\n /** Text alignment for the column content */\n align?: 'left' | 'center' | 'right'\n /** Custom renderer function for cell content */\n render?: (value: unknown, item: T, index: number) => ReactNode\n /** Additional CSS class for the column */\n className?: string\n}\n\n/**\n * Styling configuration for action buttons\n */\nexport interface ActionButtonStyles {\n /** Button size in pixels */\n size?: number\n /** Border radius (CSS value or number for px) */\n borderRadius?: string | number\n /** Button padding (CSS value) */\n padding?: string\n /** Font size (CSS value or number for px) */\n fontSize?: string | number\n /** Icon size (CSS value or number for px) */\n iconSize?: string | number\n /** Additional CSS class name */\n className?: string\n /** Inline styles object */\n style?: React.CSSProperties\n}\n\n/**\n * Configuration for row action buttons\n * @template T - The type of data objects in the table\n */\nexport interface RowAction<T = object> {\n /** Icon to display in the action button */\n icon: ReactNode\n /** Accessible label for the action button */\n label: string\n /** Function called when the action is clicked */\n onClick: (item: T, index: number) => void\n /** Visual variant of the action button */\n variant?: 'primary' | 'secondary' | 'danger' | 'warning' | 'success' | 'custom'\n /** Function to determine if action should be disabled for specific row */\n disabled?: (item: T) => boolean\n /** Custom CSS class for this specific action button */\n className?: string\n /** Custom inline styles for this specific action button */\n style?: React.CSSProperties\n /** Override button styling for this specific action */\n buttonStyles?: ActionButtonStyles\n}\n\n/**\n * Configuration for bulk action buttons that appear when rows are selected\n * @template T - The type of data objects in the table\n */\nexport interface BulkAction<T = object> {\n /** Icon to display in the bulk action button */\n icon: ReactNode\n /** Label for the bulk action button */\n label: string\n /** Function called when bulk action is clicked with selected items */\n onClick: (selectedItems: T[]) => void | Promise<void>\n /** Visual variant of the bulk action button */\n variant?: 'primary' | 'secondary' | 'danger' | 'warning' | 'success' | 'custom'\n /** Function to determine if bulk action should be disabled based on selected items */\n disabled?: (selectedItems: T[]) => boolean\n /** Minimum number of selected items required to enable this action */\n minSelection?: number\n /** Maximum number of selected items allowed for this action */\n maxSelection?: number\n /** Custom CSS class for this bulk action button */\n className?: string\n /** Custom inline styles for this bulk action button */\n style?: React.CSSProperties\n /** Confirm message before executing action (optional) */\n confirmMessage?: string | ((selectedItems: T[]) => string)\n}\n\n/**\n * Props for the Table component\n * @template T - The type of data objects in the table\n */\nexport interface TableProps<T = object> {\n /** Array of data objects to display in the table */\n data: T[]\n /** Column configuration defining how to display data fields */\n columns: Column<T>[]\n /** Field name to use as unique identifier for rows (defaults to 'id') */\n keyField?: string\n /** Optional title displayed above the table */\n title?: string\n /** Enable global search functionality */\n searchable?: boolean\n /** Enable row selection with checkboxes */\n selectable?: boolean\n /** Enable pagination (boolean for default settings or object for custom configuration) */\n pagination?: boolean | { pageSize?: number; pageSizeOptions?: number[] }\n /** Function called when a table row is clicked */\n onRowClick?: (item: T, index: number) => void\n /** Function called when row selection changes (only when selectable=true) */\n onSelectionChange?: (selectedItems: T[]) => void\n /** Array of bulk actions available when rows are selected */\n bulkActions?: BulkAction<T>[]\n /** @deprecated Use bulkActions instead. Function that returns action buttons for selected rows */\n actions?: (selectedItems: T[]) => ReactNode\n /** Configuration for action buttons displayed in each row */\n rowActions?: RowAction<T>[]\n /** Global styling configuration for all action buttons */\n actionButtonStyles?: ActionButtonStyles\n /** Message displayed when table is empty */\n emptyMessage?: string\n /** Show loading state */\n loading?: boolean\n /** Apply alternating row background colors */\n striped?: boolean\n /** Enable hover effects on table rows */\n hoverable?: boolean\n /** Use compact row spacing */\n compact?: boolean\n /** Make table header sticky when scrolling */\n stickyHeader?: boolean\n /** Enable Framer Motion animations (disable for better performance with large datasets) */\n animated?: boolean\n /** Enable horizontal scrolling for tables with many columns */\n horizontalScroll?: boolean\n /** Additional CSS class for the table container */\n className?: string\n}\n\ntype SortConfig = {\n key: string | null\n direction: 'asc' | 'desc'\n}\n\n/**\n * A comprehensive table component with sorting, filtering, pagination, selection, and row actions.\n *\n * Features:\n * - Sorting by clicking column headers\n * - Global search and per-column filtering\n * - Row selection with bulk actions\n * - Pagination with customizable page sizes\n * - Row-level action buttons\n * - Responsive design with sticky headers\n * - Framer Motion animations (can be disabled for performance)\n * - Full theme integration via CSS custom properties\n *\n * @template T - The type of data objects in the table\n * @param props - Table configuration and data\n * @returns React component\n *\n * @example\n * ```tsx\n * const users = [{ id: 1, name: 'John', email: 'john@example.com' }]\n * const columns = [\n * { key: 'name', header: 'Name', sortable: true },\n * { key: 'email', header: 'Email', filterable: true }\n * ]\n *\n * <Table\n * data={users}\n * columns={columns}\n * searchable\n * pagination\n * rowActions={[\n * {\n * icon: <EditIcon />,\n * label: 'Edit user',\n * onClick: (user) => editUser(user),\n * variant: 'primary'\n * }\n * ]}\n * />\n * ```\n */\nconst TableComponent = function Table<T extends object>({\n data,\n columns,\n keyField = 'id',\n title,\n searchable = false,\n selectable = false,\n pagination = false,\n onRowClick,\n onSelectionChange,\n actions,\n bulkActions,\n rowActions,\n actionButtonStyles,\n emptyMessage = 'No data available',\n loading = false,\n striped = false,\n hoverable = true,\n compact = false,\n stickyHeader = false,\n animated = true,\n horizontalScroll = false,\n className = ''\n}: TableProps<T>) {\n // State\n const [selectedRows, setSelectedRows] = useState<Set<unknown>>(new Set())\n const [searchQuery, setSearchQuery] = useState('')\n const [columnFilters, setColumnFilters] = useState<Record<string, string>>({})\n const [sortConfig, setSortConfig] = useState<SortConfig>({ key: null, direction: 'asc' })\n const [currentPage, setCurrentPage] = useState(1)\n const [pageSize, setPageSize] = useState(\n typeof pagination === 'object' && pagination.pageSize ? pagination.pageSize : 10\n )\n\n // Pagination options\n const pageSizeOptions = useMemo(() => {\n if (typeof pagination === 'object' && pagination.pageSizeOptions) {\n return pagination.pageSizeOptions\n }\n return [10, 25, 50, 100]\n }, [pagination])\n\n // Memoize search columns for performance\n const searchableColumns = useMemo(() =>\n columns.map(col => col.key),\n [columns]\n )\n\n // Filter data\n const filteredData = useMemo(() => {\n if (!searchQuery && Object.keys(columnFilters).length === 0) {\n return data\n }\n\n let filtered = data\n\n // Global search\n if (searchable && searchQuery) {\n const query = searchQuery.toLowerCase()\n filtered = filtered.filter(item => {\n return searchableColumns.some(key => {\n const value = item[key as keyof T]\n return value != null && String(value).toLowerCase().includes(query)\n })\n })\n }\n\n // Column filters\n for (const [key, filterValue] of Object.entries(columnFilters)) {\n if (filterValue) {\n const lowerFilterValue = filterValue.toLowerCase()\n filtered = filtered.filter(item => {\n const value = item[key as keyof T]\n return value != null && String(value).toLowerCase().includes(lowerFilterValue)\n })\n }\n }\n\n return filtered\n }, [data, searchableColumns, searchQuery, columnFilters, searchable])\n\n // Sort data\n const sortedData = useMemo(() => {\n if (!sortConfig.key) return filteredData\n\n return [...filteredData].sort((a, b) => {\n const aValue = a[sortConfig.key! as keyof T]\n const bValue = b[sortConfig.key! as keyof T]\n\n if (aValue === null || aValue === undefined) return 1\n if (bValue === null || bValue === undefined) return -1\n\n let comparison = 0\n if (typeof aValue === 'number' && typeof bValue === 'number') {\n comparison = aValue - bValue\n } else if (aValue instanceof Date && bValue instanceof Date) {\n comparison = aValue.getTime() - bValue.getTime()\n } else {\n comparison = String(aValue).localeCompare(String(bValue))\n }\n\n return sortConfig.direction === 'asc' ? comparison : -comparison\n })\n }, [filteredData, sortConfig])\n\n // Paginate data\n const paginatedData = useMemo(() => {\n if (!pagination) return sortedData\n\n const startIndex = (currentPage - 1) * pageSize\n const endIndex = startIndex + pageSize\n return sortedData.slice(startIndex, endIndex)\n }, [sortedData, pagination, currentPage, pageSize])\n\n const totalPages = useMemo(() => {\n if (!pagination) return 1\n return Math.ceil(sortedData.length / pageSize)\n }, [sortedData, pageSize, pagination])\n\n // Handlers\n const handleSort = useCallback((key: string) => {\n setSortConfig(prev => {\n if (prev.key !== key) {\n return { key, direction: 'asc' }\n }\n if (prev.direction === 'asc') {\n return { key, direction: 'desc' }\n }\n return { key: null, direction: 'asc' }\n })\n }, [])\n\n const handleSelectAll = useCallback(() => {\n const currentPageIds = paginatedData.map(item => item[keyField as keyof T])\n const allSelected = currentPageIds.every(id => selectedRows.has(id))\n\n const newSelected = new Set(selectedRows)\n if (allSelected) {\n currentPageIds.forEach(id => newSelected.delete(id))\n } else {\n currentPageIds.forEach(id => newSelected.add(id))\n }\n\n setSelectedRows(newSelected)\n if (onSelectionChange) {\n const selectedItems = data.filter(item => newSelected.has(item[keyField as keyof T]))\n onSelectionChange(selectedItems)\n }\n }, [paginatedData, selectedRows, keyField, data, onSelectionChange])\n\n const handleSelectRow = useCallback((itemId: unknown) => {\n const newSelected = new Set(selectedRows)\n if (newSelected.has(itemId)) {\n newSelected.delete(itemId)\n } else {\n newSelected.add(itemId)\n }\n\n setSelectedRows(newSelected)\n if (onSelectionChange) {\n const selectedItems = data.filter(item => newSelected.has(item[keyField as keyof T]))\n onSelectionChange(selectedItems)\n }\n }, [selectedRows, data, keyField, onSelectionChange])\n\n const handleColumnFilter = useCallback((key: string, value: string) => {\n setColumnFilters(prev => ({ ...prev, [key]: value }))\n setCurrentPage(1)\n }, [])\n\n const clearFilters = useCallback(() => {\n setSearchQuery('')\n setColumnFilters({})\n setSortConfig({ key: null, direction: 'asc' })\n setCurrentPage(1)\n }, [])\n\n // Computed values\n const hasActiveFilters = searchQuery || Object.values(columnFilters).some(v => v)\n const currentPageIds = paginatedData.map(item => item[keyField as keyof T])\n const allCurrentPageSelected = selectable && currentPageIds.length > 0 &&\n currentPageIds.every(id => selectedRows.has(id))\n const someCurrentPageSelected = selectable &&\n currentPageIds.some(id => selectedRows.has(id))\n\n const selectedItems = useMemo(() => {\n return data.filter(item => selectedRows.has(item[keyField as keyof T]))\n }, [data, selectedRows, keyField])\n\n // Helper function to merge button styles\n const getButtonStyles = useCallback((action: RowAction<T>) => {\n const defaultSize = actionButtonStyles?.size || 36\n const actionSize = action.buttonStyles?.size || defaultSize\n\n const baseStyles: React.CSSProperties & Record<string, unknown> = {\n width: actionSize,\n height: actionSize,\n borderRadius: action.buttonStyles?.borderRadius || actionButtonStyles?.borderRadius || '50%',\n fontSize: action.buttonStyles?.fontSize || actionButtonStyles?.fontSize,\n padding: action.buttonStyles?.padding || actionButtonStyles?.padding,\n ...actionButtonStyles?.style,\n ...action.style,\n ...action.buttonStyles?.style\n }\n\n // Handle icon size - set CSS custom property\n if (action.buttonStyles?.iconSize || actionButtonStyles?.iconSize) {\n baseStyles['--icon-size'] = typeof (action.buttonStyles?.iconSize || actionButtonStyles?.iconSize) === 'number'\n ? `${action.buttonStyles?.iconSize || actionButtonStyles?.iconSize}px`\n : action.buttonStyles?.iconSize || actionButtonStyles?.iconSize\n }\n\n return baseStyles as React.CSSProperties\n }, [actionButtonStyles])\n\n const getButtonClassName = useCallback((action: RowAction<T>) => {\n const baseClass = styles.actionButton\n const variantClass = action.variant === 'primary' ? styles.actionButtonPrimary :\n action.variant === 'danger' ? styles.actionButtonDanger :\n action.variant === 'warning' ? styles.actionButtonWarning :\n action.variant === 'success' ? styles.actionButtonSuccess :\n action.variant === 'custom' ? '' :\n styles.actionButtonSecondary\n\n const globalCustomClass = actionButtonStyles?.className || ''\n const actionCustomClass = action.className || ''\n const buttonCustomClass = action.buttonStyles?.className || ''\n\n return `${baseClass} ${variantClass} ${globalCustomClass} ${actionCustomClass} ${buttonCustomClass}`.trim()\n }, [actionButtonStyles])\n\n // Loading state\n if (loading) {\n return (\n <div className={`${styles.container} ${className}`}>\n <div className={styles.loading}>\n <div className={styles.spinner} />\n <span>Loading...</span>\n </div>\n </div>\n )\n }\n\n // Empty state\n if (data.length === 0) {\n return (\n <div className={`${styles.container} ${className}`}>\n {title && <h2 className={styles.title}>{title}</h2>}\n <div className={styles.empty}>\n <span className={styles.emptyIcon}>📊</span>\n <p>{emptyMessage}</p>\n </div>\n </div>\n )\n }\n\n return (\n <div className={`${styles.container} ${className}`}>\n {/* Header */}\n {(title || actions || bulkActions) && (\n <div className={styles.header}>\n {title && <h2 className={styles.title}>{title}</h2>}\n {(actions || bulkActions) && (\n <div className={styles.bulkActions}>\n {/* Legacy actions support */}\n {actions && selectedItems.length > 0 && (\n <div className={styles.actions}>\n {actions(selectedItems)}\n </div>\n )}\n {/* New bulk actions */}\n {bulkActions && bulkActions.length > 0 && selectedItems.length > 0 && (\n <div className={styles.bulkActionButtons}>\n {bulkActions.map((bulkAction, index) => {\n const isDisabled =\n (bulkAction.disabled && bulkAction.disabled(selectedItems)) ||\n (bulkAction.minSelection && selectedItems.length < bulkAction.minSelection) ||\n (bulkAction.maxSelection && selectedItems.length > bulkAction.maxSelection)\n\n return (\n <button\n key={index}\n className={`${styles.bulkActionButton} ${\n bulkAction.variant === 'primary' ? styles.bulkPrimary :\n bulkAction.variant === 'secondary' ? styles.bulkSecondary :\n bulkAction.variant === 'danger' ? styles.bulkDanger :\n bulkAction.variant === 'warning' ? styles.bulkWarning :\n bulkAction.variant === 'success' ? styles.bulkSuccess :\n bulkAction.variant === 'custom' ? styles.bulkCustom :\n styles.bulkPrimary\n } ${bulkAction.className || ''}`}\n style={bulkAction.style}\n disabled={!!isDisabled}\n onClick={async () => {\n if (bulkAction.confirmMessage) {\n const message = typeof bulkAction.confirmMessage === 'function'\n ? bulkAction.confirmMessage(selectedItems)\n : bulkAction.confirmMessage\n if (!confirm(message)) return\n }\n await bulkAction.onClick(selectedItems)\n }}\n title={bulkAction.label}\n aria-label={bulkAction.label}\n >\n {bulkAction.icon}\n <span>{bulkAction.label}</span>\n <span className={styles.selectionCount}>({selectedItems.length})</span>\n </button>\n )\n })}\n </div>\n )}\n </div>\n )}\n </div>\n )}\n\n {/* Controls */}\n {(searchable || hasActiveFilters) && (\n <div className={styles.controls}>\n {searchable && (\n <div className={styles.searchBox}>\n <span className={styles.searchIcon}>🔍</span>\n <input\n type=\"text\"\n placeholder=\"Search...\"\n value={searchQuery}\n onChange={e => {\n setSearchQuery(e.target.value)\n setCurrentPage(1)\n }}\n className={styles.searchInput}\n />\n {searchQuery && (\n <button\n className={styles.clearButton}\n onClick={() => setSearchQuery('')}\n >\n ✕\n </button>\n )}\n </div>\n )}\n {hasActiveFilters && (\n <button\n className={styles.clearFiltersButton}\n onClick={clearFilters}\n >\n Clear All Filters\n </button>\n )}\n <div className={styles.resultCount}>\n {filteredData.length} {filteredData.length === 1 ? 'result' : 'results'}\n </div>\n </div>\n )}\n\n {/* Table */}\n <div className={`${styles.tableWrapper} ${stickyHeader ? styles.stickyHeader : ''} ${horizontalScroll ? styles.horizontalScroll : ''}`}>\n <table\n className={`\n ${styles.table}\n ${striped ? styles.striped : ''}\n ${hoverable ? styles.hoverable : ''}\n ${compact ? styles.compact : ''}\n `}\n role=\"table\"\n aria-label={title || 'Data table'}\n aria-rowcount={sortedData.length}\n aria-describedby={title ? `${title.replace(/\\s+/g, '-').toLowerCase()}-summary` : undefined}\n >\n <thead>\n <tr>\n {selectable && (\n <th className={styles.checkboxColumn} scope=\"col\">\n <input\n type=\"checkbox\"\n checked={allCurrentPageSelected}\n ref={input => {\n if (input) {\n input.indeterminate = !allCurrentPageSelected && someCurrentPageSelected\n }\n }}\n onChange={handleSelectAll}\n className={styles.checkbox}\n aria-label=\"Select all rows\"\n />\n </th>\n )}\n {columns.map(column => (\n <th\n key={column.key}\n className={`${styles.th} ${column.className || ''}`}\n style={{\n width: column.width,\n textAlign: column.align || 'left'\n }}\n scope=\"col\"\n role=\"columnheader\"\n aria-sort={\n sortConfig.key === column.key\n ? sortConfig.direction === 'asc' ? 'ascending' : 'descending'\n : column.sortable ? 'none' : undefined\n }\n >\n <div className={styles.headerCell}>\n {column.sortable ? (\n <button\n className={styles.sortButton}\n onClick={() => handleSort(column.key)}\n aria-label={`Sort by ${column.header} ${\n sortConfig.key === column.key\n ? sortConfig.direction === 'asc' ? '(descending)' : '(ascending)'\n : '(ascending)'\n }`}\n >\n <span>{column.header}</span>\n <span className={styles.sortIcon} aria-hidden=\"true\">\n {sortConfig.key === column.key ? (\n sortConfig.direction === 'asc' ? '↑' : '↓'\n ) : '↕'}\n </span>\n </button>\n ) : (\n <span className={styles.headerText}>{column.header}</span>\n )}\n {column.filterable && (\n <input\n type=\"text\"\n placeholder=\"Filter...\"\n value={columnFilters[column.key] || ''}\n onChange={e => handleColumnFilter(column.key, e.target.value)}\n onClick={e => e.stopPropagation()}\n className={styles.columnFilter}\n aria-label={`Filter ${column.header}`}\n />\n )}\n </div>\n </th>\n ))}\n {rowActions && rowActions.length > 0 && (\n <th className={styles.actionsColumn} scope=\"col\">\n <span className={styles.headerText}>Actions</span>\n </th>\n )}\n </tr>\n </thead>\n <tbody>\n {animated ? (\n <LayoutGroup>\n <AnimatePresence mode=\"popLayout\">\n {paginatedData.map((item, index) => (\n <motion.tr\n key={`${String(item[keyField as keyof T])}-${currentPage}`}\n layout=\"position\"\n initial={{ opacity: 0, scale: 0.98 }}\n animate={{\n opacity: 1,\n scale: 1,\n transition: {\n duration: 0.12,\n delay: Math.min(index * 0.005, 0.08),\n ease: [0.25, 0.46, 0.45, 0.94]\n }\n }}\n exit={{\n opacity: 0,\n scale: 0.98,\n transition: { duration: 0.08 }\n }}\n className={`\n ${styles.tr}\n ${selectedRows.has(item[keyField as keyof T]) ? styles.selected : ''}\n ${onRowClick ? styles.clickable : ''}\n `}\n onClick={() => onRowClick?.(item, index)}\n >\n {selectable && (\n <td className={styles.checkboxColumn}>\n <input\n type=\"checkbox\"\n checked={selectedRows.has(item[keyField as keyof T])}\n onChange={() => handleSelectRow(item[keyField as keyof T])}\n onClick={e => e.stopPropagation()}\n className={styles.checkbox}\n />\n </td>\n )}\n {columns.map(column => (\n <td\n key={column.key}\n className={`${styles.td} ${column.className || ''}`}\n style={{ textAlign: column.align || 'left' }}\n >\n {column.render\n ? column.render(item[column.key as keyof T], item, index)\n : formatValue(item[column.key as keyof T])\n }\n </td>\n ))}\n {rowActions && rowActions.length > 0 && (\n <td\n className={styles.actionsColumn}\n onClick={e => e.stopPropagation()}\n >\n <div className={styles.actionButtons}>\n {rowActions.map((action, actionIndex) => (\n <button\n key={actionIndex}\n className={getButtonClassName(action)}\n style={getButtonStyles(action)}\n onClick={() => action.onClick(item, index)}\n disabled={action.disabled ? action.disabled(item) : false}\n title={action.label}\n aria-label={action.label}\n >\n {action.icon}\n </button>\n ))}\n </div>\n </td>\n )}\n </motion.tr>\n ))}\n </AnimatePresence>\n </LayoutGroup>\n ) : (\n paginatedData.map((item, index) => (\n <tr\n key={String(item[keyField as keyof T])}\n className={`\n ${styles.tr}\n ${selectedRows.has(item[keyField as keyof T]) ? styles.selected : ''}\n ${onRowClick ? styles.clickable : ''}\n `}\n onClick={() => onRowClick?.(item, index)}\n >\n {selectable && (\n <td className={styles.checkboxColumn}>\n <input\n type=\"checkbox\"\n checked={selectedRows.has(item[keyField as keyof T])}\n onChange={() => handleSelectRow(item[keyField as keyof T])}\n onClick={e => e.stopPropagation()}\n className={styles.checkbox}\n />\n </td>\n )}\n {columns.map(column => (\n <td\n key={column.key}\n className={`${styles.td} ${column.className || ''}`}\n style={{ textAlign: column.align || 'left' }}\n >\n {column.render\n ? column.render(item[column.key as keyof T], item, index)\n : formatValue(item[column.key as keyof T])\n }\n </td>\n ))}\n {rowActions && rowActions.length > 0 && (\n <td\n className={styles.actionsColumn}\n onClick={e => e.stopPropagation()}\n >\n <div className={styles.actionButtons}>\n {rowActions.map((action, actionIndex) => (\n <button\n key={actionIndex}\n className={getButtonClassName(action)}\n style={getButtonStyles(action)}\n onClick={() => action.onClick(item, index)}\n disabled={action.disabled ? action.disabled(item) : false}\n title={action.label}\n aria-label={action.label}\n >\n {action.icon}\n </button>\n ))}\n </div>\n </td>\n )}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n\n {/* Pagination */}\n {pagination && totalPages > 1 && (\n <div className={styles.pagination}>\n <div className={styles.pageInfo}>\n Showing {((currentPage - 1) * pageSize) + 1}-\n {Math.min(currentPage * pageSize, sortedData.length)} of {sortedData.length}\n </div>\n\n <div className={styles.pageControls}>\n <button\n className={styles.pageButton}\n onClick={() => setCurrentPage(1)}\n disabled={currentPage === 1}\n >\n ⟨⟨\n </button>\n <button\n className={styles.pageButton}\n onClick={() => setCurrentPage(prev => Math.max(1, prev - 1))}\n disabled={currentPage === 1}\n >\n ⟨\n </button>\n\n <span className={styles.pageNumber}>\n Page {currentPage} of {totalPages}\n </span>\n\n <button\n className={styles.pageButton}\n onClick={() => setCurrentPage(prev => Math.min(totalPages, prev + 1))}\n disabled={currentPage === totalPages}\n >\n ⟩\n </button>\n <button\n className={styles.pageButton}\n onClick={() => setCurrentPage(totalPages)}\n disabled={currentPage === totalPages}\n >\n ⟩⟩\n </button>\n </div>\n\n {typeof pagination === 'object' && (\n <select\n className={styles.pageSizeSelect}\n value={pageSize}\n onChange={e => {\n setPageSize(Number(e.target.value))\n setCurrentPage(1)\n }}\n >\n {pageSizeOptions.map(size => (\n <option key={size} value={size}>\n {size} per page\n </option>\n ))}\n </select>\n )}\n </div>\n )}\n </div>\n )\n}\n\n// Helper function to format values\nfunction formatValue(value: unknown): ReactNode {\n if (value === null || value === undefined) {\n return <span className={styles.nullValue}>—</span>\n }\n\n if (typeof value === 'boolean') {\n return (\n <span className={`${styles.badge} ${value ? styles.badgeSuccess : styles.badgeDanger}`}>\n {value ? '✓' : '✗'}\n </span>\n )\n }\n\n if (value instanceof Date) {\n return value.toLocaleDateString()\n }\n\n if (typeof value === 'object') {\n return <code className={styles.code}>{JSON.stringify(value, null, 2)}</code>\n }\n\n return String(value)\n}\n\n// Memoized Table component to prevent unnecessary re-renders\nexport const Table = memo(TableComponent) as <T extends object>(\n props: TableProps<T>\n) => JSX.Element\n","import React from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { Button } from '../../atoms/Button/Button';\nimport styles from './ConfirmationModal.module.css';\n\nexport interface ConfirmationModalProps {\n isOpen: boolean;\n onClose: () => void;\n onConfirm: () => void;\n title: string;\n message: string;\n confirmText?: string;\n cancelText?: string;\n isLoading?: boolean;\n variant?: 'danger' | 'warning' | 'info';\n}\n\n/**\n * ConfirmationModal Component\n *\n * A specialized modal for confirm/cancel flows with variant styling.\n *\n * @example\n * <ConfirmationModal\n * isOpen={showDelete}\n * onClose={() => setShowDelete(false)}\n * onConfirm={handleDelete}\n * title=\"Delete item?\"\n * message=\"This action cannot be undone.\"\n * variant=\"danger\"\n * confirmText=\"Delete\"\n * />\n */\nexport const ConfirmationModal: React.FC<ConfirmationModalProps> = ({\n isOpen,\n onClose,\n onConfirm,\n title,\n message,\n confirmText = 'Confirm',\n cancelText = 'Cancel',\n isLoading = false,\n variant = 'info',\n}) => {\n const handleConfirm = (e: React.MouseEvent) => {\n if (!isLoading) {\n e.preventDefault();\n e.stopPropagation();\n onConfirm();\n }\n };\n\n return (\n <AnimatePresence>\n {isOpen && (\n <>\n <motion.div\n className={styles.overlay}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n onClick={!isLoading ? onClose : undefined}\n />\n <div className={styles.positioner}>\n <motion.div\n className={styles.modal}\n initial={{ opacity: 0, scale: 0.9, y: 20 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.9, y: 20 }}\n transition={{ type: 'spring', stiffness: 300, damping: 30 }}\n >\n <div className={`${styles.header} ${styles[variant]}`}>\n <h2 className={styles.title}>{title}</h2>\n {!isLoading && (\n <button\n className={styles.closeButton}\n onClick={onClose}\n type=\"button\"\n aria-label=\"Close\"\n >\n &#x2715;\n </button>\n )}\n </div>\n\n <div className={styles.content}>\n <p className={styles.message}>{message}</p>\n </div>\n\n <div className={styles.footer}>\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={onClose}\n disabled={isLoading}\n >\n {cancelText}\n </Button>\n <Button\n type=\"button\"\n variant={variant === 'danger' ? 'danger' : 'primary'}\n onClick={handleConfirm}\n disabled={isLoading}\n loading={isLoading}\n >\n {confirmText}\n </Button>\n </div>\n </motion.div>\n </div>\n </>\n )}\n </AnimatePresence>\n );\n};\n"],"names":["useRef","useEffect","useCallback","styles","_jsxs","motion","_jsx","useState","AnimatePresence","useDragControls","createPortal","X","CalendarIcon","ChevronDown","Search","Check","Edit","Folder","Users","Book","MessageSquare","UserPlus","createTheme","useMemo","ThemeProvider","LocalizationProvider","AdapterDayjs","MobileTimePicker","createContext","useContext","Sun","Moon","Info","Github","SquareKanban","ChevronRight","Plus","_Fragment","RRule","MONTHS","Terminal","FileText","Pencil","FilePlus","FolderSearch","Brain","Play","Loader2","AlertTriangle","useMotionValue","useTransform","animate","Trash2","GripVertical","Download","Fragment","Menu","useId","d3","DEFAULT_HABIT_COLORS","Calendar","CalendarDays","CalendarRange","BarChart3","Divide","Sigma","formatTime","ScatterChart","ChevronLeft","Maximize","Share2","Pause","LayoutGroup","memo"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/utils/soundUtils.ts","../src/utils/useSound.ts","../src/components/atoms/Button/Button.tsx","../src/components/atoms/Card/Card.tsx","../src/components/atoms/EmptyState/EmptyState.tsx","../src/components/atoms/Modal/Modal.tsx","../src/components/atoms/Checkbox/Checkbox.tsx","../src/utils/formUtils.ts","../src/components/atoms/DateInput/DateInput.tsx","../src/components/atoms/SearchableDropdown/SearchableDropdown.tsx","../src/components/atoms/SelectInput/SelectInput.tsx","../src/components/atoms/TextArea/TextArea.tsx","../src/components/atoms/TextInput/TextInput.tsx","../src/components/atoms/Toggle/Toggle.tsx","../src/components/atoms/NumberStepper/NumberStepper.tsx","../src/components/atoms/ToggleButton/ToggleButton.tsx","../src/components/atoms/Slider/Slider.tsx","../src/components/atoms/LoadingSpinner/LoadingSpinner.tsx","../src/components/atoms/DecryptedText/DecryptedText.tsx","../src/components/molecules/ArrayInput/ArrayInput.tsx","../src/components/molecules/EditFAB/EditFAB.tsx","../src/components/molecules/SearchBar/SearchBar.tsx","../src/components/molecules/TimeInput/TimeInput.tsx","../src/components/organisms/ThemeProvider/ThemeProvider.tsx","../src/components/molecules/ThemeSwitcher/ThemeSwitcher.tsx","../src/components/molecules/Tabs/Tabs.tsx","../src/components/molecules/Toast/Toast.tsx","../src/components/molecules/Breadcrumb/Breadcrumb.tsx","../src/components/molecules/LiquidButton/LiquidButton.tsx","../src/components/molecules/RecurrencePicker/RecurrencePicker.tsx","../src/components/molecules/StreamConsole/StreamConsole.tsx","../src/components/organisms/Calendar/DayEventCard.tsx","../src/components/organisms/Calendar/exportEvents.ts","../src/components/organisms/Calendar/Calendar.tsx","../src/components/organisms/Navbar/Navbar.tsx","../src/components/organisms/charts/MoodChart/MoodChart.tsx","../src/components/organisms/charts/QuantifiableHabitsChart/QuantifiableHabitsChart.tsx","../src/components/organisms/charts/HabitTimeOfDayChart/HabitTimeOfDayChart.tsx","../src/components/organisms/charts/SleepChart/SleepChart.tsx","../src/components/organisms/charts/BooleansHeatmap/BooleansHeatmap.tsx","../src/components/organisms/charts/SunburstChart/SunburstChart.tsx","../src/components/organisms/charts/PieChart/PieChart.tsx","../src/components/organisms/charts/ProgressRings/ProgressRings.tsx","../src/components/organisms/charts/RadialDayChart/RadialDayChart.tsx","../src/components/organisms/charts/ChordDiagram/ChordDiagram.tsx","../src/components/organisms/charts/PolarHeatmap/PolarHeatmap.tsx","../src/components/organisms/ImageSlideshow/ImageSlideshow.tsx","../src/components/organisms/Table/Table.tsx","../src/components/organisms/ConfirmationModal/ConfirmationModal.tsx"],"sourcesContent":["export type SoundType = 'click' | 'hover' | 'success' | 'error' | 'warning' | 'toggle' | 'type' | 'delete';\n\nexport type SoundPack = 'digital' | 'fantasy' | 'retro' | 'minimal' | 'mechanical';\n\nexport interface SoundConfig {\n enabled?: boolean;\n volume?: number;\n soundPack?: SoundPack;\n sounds?: Partial<Record<SoundType, string>>;\n}\n\nexport interface ComponentSoundConfig {\n onClick?: string | boolean;\n onHover?: string | boolean;\n onError?: string | boolean;\n onSuccess?: string | boolean;\n}\n\ninterface SoundDefinition {\n tones: Array<{\n freq: number | (() => number);\n duration: number;\n type: OscillatorType;\n volume?: number;\n delay?: number;\n }>;\n}\n\ntype SoundPackDefinition = Record<SoundType | 'celebration' | 'milestone', SoundDefinition>;\n\nconst SOUND_PACKS: Record<SoundPack, SoundPackDefinition> = {\n digital: {\n click: {\n tones: [\n { freq: 440, duration: 0.1, type: 'sine', volume: 0.4 }\n ]\n },\n hover: {\n tones: [\n { freq: 880, duration: 0.04, type: 'sine', volume: 0.3 }\n ]\n },\n success: {\n tones: [\n { freq: 523.25, duration: 0.15, type: 'sine', delay: 0 },\n { freq: 659.25, duration: 0.15, type: 'sine', delay: 0.1 },\n { freq: 783.99, duration: 0.2, type: 'sine', delay: 0.2 }\n ]\n },\n error: {\n tones: [\n { freq: 329.63, duration: 0.2, type: 'sawtooth', volume: 0.4 },\n { freq: 246.94, duration: 0.25, type: 'sawtooth', volume: 0.3, delay: 0.15 }\n ]\n },\n warning: {\n tones: [\n { freq: 554.37, duration: 0.15, type: 'triangle' },\n { freq: 554.37, duration: 0.15, type: 'triangle', delay: 0.2 }\n ]\n },\n toggle: {\n tones: [\n { freq: 493.88, duration: 0.12, type: 'sine' },\n { freq: 587.33, duration: 0.1, type: 'sine', delay: 0.08 }\n ]\n },\n type: {\n tones: [\n { freq: () => 800 + Math.random() * 400, duration: 0.08, type: 'square', volume: 0.5 },\n { freq: 1600, duration: 0.03, type: 'sine', volume: 0.3, delay: 0.02 }\n ]\n },\n delete: {\n tones: [\n { freq: 350, duration: 0.08, type: 'triangle', volume: 0.3 }\n ]\n },\n celebration: {\n tones: [\n { freq: 523.25, duration: 0.2, type: 'sine', delay: 0 },\n { freq: 659.25, duration: 0.2, type: 'sine', delay: 0.15 },\n { freq: 783.99, duration: 0.2, type: 'sine', delay: 0.3 },\n { freq: 1046.5, duration: 0.3, type: 'sine', delay: 0.45 }\n ]\n },\n milestone: {\n tones: [\n { freq: 698.46, duration: 0.2, type: 'triangle' },\n { freq: 880, duration: 0.25, type: 'triangle', delay: 0.15 }\n ]\n }\n },\n \n fantasy: {\n click: {\n tones: [\n // Magical chime\n { freq: 1174.66, duration: 0.15, type: 'triangle', volume: 0.3 }, // D6\n { freq: 1567.98, duration: 0.1, type: 'sine', volume: 0.2, delay: 0.05 }, // G6\n { freq: 2093, duration: 0.08, type: 'sine', volume: 0.15, delay: 0.08 } // C7\n ]\n },\n hover: {\n tones: [\n // Fairy dust sprinkle\n { freq: 2637.02, duration: 0.03, type: 'sine', volume: 0.2 }, // E7\n { freq: 3135.96, duration: 0.025, type: 'sine', volume: 0.15, delay: 0.02 } // G7\n ]\n },\n success: {\n tones: [\n // Triumphant fanfare\n { freq: 523.25, duration: 0.2, type: 'triangle', delay: 0 }, // C5\n { freq: 659.25, duration: 0.2, type: 'triangle', delay: 0.15 }, // E5\n { freq: 783.99, duration: 0.2, type: 'triangle', delay: 0.3 }, // G5\n { freq: 1046.5, duration: 0.35, type: 'sine', delay: 0.45 }, // C6\n { freq: 1318.51, duration: 0.15, type: 'sine', volume: 0.3, delay: 0.6 } // E6 harmony\n ]\n },\n error: {\n tones: [\n // Dark spell fail\n { freq: 138.59, duration: 0.3, type: 'sawtooth', volume: 0.4 }, // C#3\n { freq: 103.83, duration: 0.4, type: 'sawtooth', volume: 0.3, delay: 0.2 }, // G#2\n { freq: 87.31, duration: 0.2, type: 'triangle', volume: 0.2, delay: 0.4 } // F2\n ]\n },\n warning: {\n tones: [\n // Mystical alert\n { freq: 466.16, duration: 0.2, type: 'triangle', volume: 0.5 }, // A#4\n { freq: 622.25, duration: 0.15, type: 'sine', delay: 0.15 }, // D#5\n { freq: 466.16, duration: 0.2, type: 'triangle', volume: 0.4, delay: 0.25 } // A#4\n ]\n },\n toggle: {\n tones: [\n // Magic switch\n { freq: 698.46, duration: 0.15, type: 'sine' }, // F5\n { freq: 1046.5, duration: 0.12, type: 'triangle', delay: 0.1 }, // C6\n { freq: 1396.91, duration: 0.08, type: 'sine', volume: 0.3, delay: 0.18 } // F6\n ]\n },\n type: {\n tones: [\n // Quill on parchment\n { freq: () => 2000 + Math.random() * 500, duration: 0.04, type: 'triangle', volume: 0.3 },\n { freq: () => 3000 + Math.random() * 200, duration: 0.02, type: 'sine', volume: 0.2, delay: 0.01 }\n ]\n },\n delete: {\n tones: [\n // Magic erase\n { freq: 880, duration: 0.1, type: 'triangle', volume: 0.3 },\n { freq: 440, duration: 0.08, type: 'sine', volume: 0.2, delay: 0.05 }\n ]\n },\n celebration: {\n tones: [\n // Victory fanfare\n { freq: 392, duration: 0.25, type: 'triangle', delay: 0 }, // G4\n { freq: 523.25, duration: 0.25, type: 'triangle', delay: 0.2 }, // C5\n { freq: 659.25, duration: 0.25, type: 'triangle', delay: 0.4 }, // E5\n { freq: 783.99, duration: 0.25, type: 'sine', delay: 0.6 }, // G5\n { freq: 1046.5, duration: 0.4, type: 'sine', delay: 0.8 }, // C6\n { freq: 1318.51, duration: 0.2, type: 'sine', volume: 0.4, delay: 1.0 } // E6\n ]\n },\n milestone: {\n tones: [\n // Achievement unlocked\n { freq: 523.25, duration: 0.2, type: 'triangle' }, // C5\n { freq: 783.99, duration: 0.2, type: 'triangle', delay: 0.15 }, // G5\n { freq: 1046.5, duration: 0.3, type: 'sine', delay: 0.3 } // C6\n ]\n }\n },\n \n retro: {\n click: {\n tones: [\n // 8-bit beep\n { freq: 800, duration: 0.05, type: 'square', volume: 0.4 },\n { freq: 400, duration: 0.03, type: 'square', volume: 0.3, delay: 0.03 }\n ]\n },\n hover: {\n tones: [\n { freq: 1200, duration: 0.03, type: 'square', volume: 0.2 }\n ]\n },\n success: {\n tones: [\n // Classic level up\n { freq: 440, duration: 0.1, type: 'square', delay: 0 },\n { freq: 554.37, duration: 0.1, type: 'square', delay: 0.1 },\n { freq: 659.25, duration: 0.1, type: 'square', delay: 0.2 },\n { freq: 880, duration: 0.2, type: 'square', delay: 0.3 }\n ]\n },\n error: {\n tones: [\n // Retro fail\n { freq: 200, duration: 0.3, type: 'square', volume: 0.5 },\n { freq: 150, duration: 0.4, type: 'square', volume: 0.4, delay: 0.2 }\n ]\n },\n warning: {\n tones: [\n { freq: 600, duration: 0.1, type: 'square' },\n { freq: 600, duration: 0.1, type: 'square', delay: 0.15 },\n { freq: 600, duration: 0.1, type: 'square', delay: 0.3 }\n ]\n },\n toggle: {\n tones: [\n { freq: 400, duration: 0.08, type: 'square' },\n { freq: 800, duration: 0.08, type: 'square', delay: 0.06 }\n ]\n },\n type: {\n tones: [\n { freq: () => 500 + Math.random() * 100, duration: 0.04, type: 'square', volume: 0.3 }\n ]\n },\n delete: {\n tones: [\n { freq: 300, duration: 0.06, type: 'square', volume: 0.3 }\n ]\n },\n celebration: {\n tones: [\n // Victory jingle\n { freq: 659.25, duration: 0.1, type: 'square', delay: 0 },\n { freq: 783.99, duration: 0.1, type: 'square', delay: 0.1 },\n { freq: 987.77, duration: 0.1, type: 'square', delay: 0.2 },\n { freq: 1318.51, duration: 0.3, type: 'square', delay: 0.3 }\n ]\n },\n milestone: {\n tones: [\n { freq: 523.25, duration: 0.15, type: 'square' },\n { freq: 1046.5, duration: 0.2, type: 'square', delay: 0.1 }\n ]\n }\n },\n \n minimal: {\n click: {\n tones: [\n { freq: 1000, duration: 0.03, type: 'sine', volume: 0.3 }\n ]\n },\n hover: {\n tones: [\n { freq: 1500, duration: 0.02, type: 'sine', volume: 0.15 }\n ]\n },\n success: {\n tones: [\n { freq: 800, duration: 0.15, type: 'sine', volume: 0.3 },\n { freq: 1200, duration: 0.1, type: 'sine', volume: 0.2, delay: 0.1 }\n ]\n },\n error: {\n tones: [\n { freq: 300, duration: 0.2, type: 'sine', volume: 0.3 }\n ]\n },\n warning: {\n tones: [\n { freq: 600, duration: 0.15, type: 'sine', volume: 0.35 }\n ]\n },\n toggle: {\n tones: [\n { freq: 700, duration: 0.08, type: 'sine', volume: 0.3 }\n ]\n },\n type: {\n tones: [\n { freq: 1800, duration: 0.02, type: 'sine', volume: 0.2 }\n ]\n },\n delete: {\n tones: [\n { freq: 400, duration: 0.05, type: 'sine', volume: 0.25 }\n ]\n },\n celebration: {\n tones: [\n { freq: 800, duration: 0.2, type: 'sine', volume: 0.3 },\n { freq: 1200, duration: 0.2, type: 'sine', volume: 0.25, delay: 0.15 }\n ]\n },\n milestone: {\n tones: [\n { freq: 1000, duration: 0.2, type: 'sine', volume: 0.3 }\n ]\n }\n },\n \n mechanical: {\n click: {\n tones: [\n // Mechanical keyboard click\n { freq: 4000, duration: 0.01, type: 'square', volume: 0.3 },\n { freq: 800, duration: 0.04, type: 'sawtooth', volume: 0.4, delay: 0.01 },\n { freq: 200, duration: 0.03, type: 'triangle', volume: 0.2, delay: 0.02 }\n ]\n },\n hover: {\n tones: [\n { freq: 3000, duration: 0.02, type: 'sawtooth', volume: 0.1 }\n ]\n },\n success: {\n tones: [\n // Gear engagement\n { freq: 200, duration: 0.05, type: 'sawtooth', delay: 0 },\n { freq: 400, duration: 0.05, type: 'sawtooth', delay: 0.05 },\n { freq: 600, duration: 0.05, type: 'sawtooth', delay: 0.1 },\n { freq: 800, duration: 0.15, type: 'triangle', delay: 0.15 }\n ]\n },\n error: {\n tones: [\n // Grinding gears\n { freq: 150, duration: 0.2, type: 'sawtooth', volume: 0.5 },\n { freq: 100, duration: 0.15, type: 'square', volume: 0.3, delay: 0.1 },\n { freq: 80, duration: 0.1, type: 'sawtooth', volume: 0.2, delay: 0.2 }\n ]\n },\n warning: {\n tones: [\n // Steam whistle\n { freq: 800, duration: 0.3, type: 'sawtooth', volume: 0.4 },\n { freq: 1200, duration: 0.2, type: 'triangle', volume: 0.3, delay: 0 }\n ]\n },\n toggle: {\n tones: [\n // Switch flip\n { freq: 600, duration: 0.02, type: 'square', volume: 0.5 },\n { freq: 300, duration: 0.05, type: 'triangle', delay: 0.02 },\n { freq: 150, duration: 0.03, type: 'sawtooth', volume: 0.3, delay: 0.05 }\n ]\n },\n type: {\n tones: [\n // Typewriter key\n { freq: () => 3000 + Math.random() * 1000, duration: 0.01, type: 'square', volume: 0.4 },\n { freq: () => 400 + Math.random() * 200, duration: 0.03, type: 'sawtooth', volume: 0.3, delay: 0.01 }\n ]\n },\n delete: {\n tones: [\n { freq: 250, duration: 0.08, type: 'sawtooth', volume: 0.35 }\n ]\n },\n celebration: {\n tones: [\n // Machine startup\n { freq: 100, duration: 0.1, type: 'sawtooth', delay: 0 },\n { freq: 200, duration: 0.1, type: 'sawtooth', delay: 0.1 },\n { freq: 400, duration: 0.1, type: 'sawtooth', delay: 0.2 },\n { freq: 800, duration: 0.1, type: 'triangle', delay: 0.3 },\n { freq: 1200, duration: 0.2, type: 'sine', delay: 0.4 }\n ]\n },\n milestone: {\n tones: [\n // Pneumatic hiss\n { freq: 3000, duration: 0.05, type: 'sawtooth', volume: 0.3 },\n { freq: 1000, duration: 0.15, type: 'triangle', delay: 0.05 },\n { freq: 500, duration: 0.1, type: 'sine', delay: 0.15 }\n ]\n }\n }\n};\n\nclass SoundManager {\n private static instance: SoundManager;\n private audioContext: AudioContext | null = null;\n private config: SoundConfig = {\n enabled: false,\n volume: 0.5,\n soundPack: 'digital'\n };\n\n private constructor() {\n this.init();\n }\n\n static getInstance(): SoundManager {\n if (!SoundManager.instance) {\n SoundManager.instance = new SoundManager();\n }\n return SoundManager.instance;\n }\n\n private init() {\n try {\n // AudioContext will be created on first user interaction\n this.audioContext = null;\n } catch (error) {\n console.warn('Audio not supported:', error);\n this.config.enabled = false;\n }\n }\n\n private ensureAudioContext() {\n if (!this.audioContext && this.config.enabled) {\n try {\n this.audioContext = new (window.AudioContext || (window as unknown as { webkitAudioContext: typeof AudioContext }).webkitAudioContext)();\n } catch (error) {\n console.warn('Could not create audio context:', error);\n this.config.enabled = false;\n }\n }\n }\n\n private playTone(\n frequency: number, \n duration: number, \n type: OscillatorType = 'sine', \n volume?: number,\n delay: number = 0\n ) {\n if (!this.config.enabled) return;\n \n this.ensureAudioContext();\n if (!this.audioContext) return;\n\n const finalVolume = (volume ?? this.config.volume ?? 0.5) * 0.2; // Scale down for comfort\n\n try {\n const oscillator = this.audioContext.createOscillator();\n const gainNode = this.audioContext.createGain();\n\n oscillator.connect(gainNode);\n gainNode.connect(this.audioContext.destination);\n\n oscillator.frequency.value = frequency;\n oscillator.type = type;\n\n const startTime = this.audioContext.currentTime + delay;\n \n gainNode.gain.setValueAtTime(0, startTime);\n gainNode.gain.linearRampToValueAtTime(finalVolume, startTime + 0.01);\n gainNode.gain.exponentialRampToValueAtTime(0.001, startTime + duration);\n\n oscillator.start(startTime);\n oscillator.stop(startTime + duration);\n } catch (error) {\n console.debug('Could not play sound:', error);\n }\n }\n\n private playFromDefinition(definition: SoundDefinition) {\n definition.tones.forEach(tone => {\n const frequency = typeof tone.freq === 'function' ? tone.freq() : tone.freq;\n this.playTone(\n frequency,\n tone.duration,\n tone.type,\n tone.volume,\n tone.delay || 0\n );\n });\n }\n\n play(soundType: SoundType | string): void {\n if (!this.config.enabled) return;\n\n const pack = SOUND_PACKS[this.config.soundPack || 'digital'];\n const soundDef = pack[soundType as keyof SoundPackDefinition];\n \n if (soundDef) {\n this.playFromDefinition(soundDef);\n } else {\n // Fallback to digital pack for unknown sounds\n const digitalSound = SOUND_PACKS.digital[soundType as keyof SoundPackDefinition];\n if (digitalSound) {\n this.playFromDefinition(digitalSound);\n }\n }\n }\n\n // Special effect sounds\n celebration(): void {\n if (!this.config.enabled) return;\n const pack = SOUND_PACKS[this.config.soundPack || 'digital'];\n this.playFromDefinition(pack.celebration);\n }\n\n milestone(): void {\n if (!this.config.enabled) return;\n const pack = SOUND_PACKS[this.config.soundPack || 'digital'];\n this.playFromDefinition(pack.milestone);\n }\n\n configure(config: SoundConfig): void {\n this.config = { ...this.config, ...config };\n }\n\n getConfig(): SoundConfig {\n return this.config;\n }\n\n setVolume(volume: number): void {\n this.config.volume = Math.max(0, Math.min(1, volume));\n }\n\n setEnabled(enabled: boolean): void {\n this.config.enabled = enabled;\n if (enabled) {\n this.ensureAudioContext();\n }\n }\n\n setSoundPack(pack: SoundPack): void {\n this.config.soundPack = pack;\n }\n\n getSoundPack(): SoundPack {\n return this.config.soundPack || 'digital';\n }\n\n isEnabled(): boolean {\n return this.config.enabled || false;\n }\n\n getAvailablePacks(): SoundPack[] {\n return ['digital', 'fantasy', 'retro', 'minimal', 'mechanical'];\n }\n}\n\nexport const soundManager = SoundManager.getInstance();","import { useCallback, useEffect, useRef } from 'react';\nimport { soundManager, SoundType, ComponentSoundConfig } from './soundUtils';\n\nexport type { ComponentSoundConfig, SoundType } from './soundUtils';\n\nexport interface UseSoundOptions {\n enabled?: boolean;\n volume?: number;\n debounceMs?: number;\n}\n\nexport interface UseSoundReturn {\n playSound: (soundType: SoundType | string) => void;\n isEnabled: () => boolean;\n setEnabled: (enabled: boolean) => void;\n setVolume: (volume: number) => void;\n}\n\nexport function useSound(options?: UseSoundOptions): UseSoundReturn {\n const lastPlayedRef = useRef<{ [key: string]: number }>({});\n const debounceMs = options?.debounceMs || 50;\n\n useEffect(() => {\n if (options?.enabled !== undefined) {\n soundManager.setEnabled(options.enabled);\n }\n if (options?.volume !== undefined) {\n soundManager.setVolume(options.volume);\n }\n }, [options?.enabled, options?.volume]);\n\n const playSound = useCallback((soundType: SoundType | string) => {\n const now = Date.now();\n const lastPlayed = lastPlayedRef.current[soundType] || 0;\n \n if (now - lastPlayed > debounceMs) {\n soundManager.play(soundType);\n lastPlayedRef.current[soundType] = now;\n }\n }, [debounceMs]);\n\n const isEnabled = useCallback(() => soundManager.isEnabled(), []);\n const setEnabled = useCallback((enabled: boolean) => soundManager.setEnabled(enabled), []);\n const setVolume = useCallback((volume: number) => soundManager.setVolume(volume), []);\n\n return {\n playSound,\n isEnabled,\n setEnabled,\n setVolume\n };\n}\n\nexport function useComponentSound(config?: ComponentSoundConfig, options?: UseSoundOptions): {\n handlers: {\n onClick?: () => void;\n onMouseEnter?: () => void;\n };\n playSound: (soundType: SoundType | string) => void;\n} {\n const { playSound } = useSound(options);\n\n const handlers: {\n onClick?: () => void;\n onMouseEnter?: () => void;\n } = {};\n\n if (config?.onClick) {\n handlers.onClick = () => {\n const sound = typeof config.onClick === 'string' ? config.onClick : 'click';\n playSound(sound);\n };\n }\n\n if (config?.onHover) {\n handlers.onMouseEnter = () => {\n const sound = typeof config.onHover === 'string' ? config.onHover : 'hover';\n playSound(sound);\n };\n }\n\n return { handlers, playSound };\n}","import React, { ButtonHTMLAttributes, ReactNode } from 'react';\nimport { motion, HTMLMotionProps } from 'framer-motion';\nimport styles from './Button.module.css';\nimport { useComponentSound, ComponentSoundConfig } from '../../../utils/useSound';\n\n/**\n * Props for the Button component\n * @interface ButtonProps\n */\nexport interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onAnimationStart' | 'onDragStart' | 'onDragEnd' | 'onDrag'> {\n\t/** Visual style variant of the button */\n\tvariant?: 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger' | 'icon';\n\t/** Size of the button */\n\tsize?: 'small' | 'medium' | 'large';\n\t/** Whether the button should take full width of its container */\n\tfullWidth?: boolean;\n\t/** Whether the button is in loading state (shows spinner, disabled interaction) */\n\tloading?: boolean;\n\t/** Icon to display on the left side of the button text */\n\ticonLeft?: ReactNode;\n\t/** Icon to display on the right side of the button text */\n\ticonRight?: ReactNode;\n\t/** Button content (text, elements, etc.) */\n\tchildren?: ReactNode;\n\t/** Additional Framer Motion props for custom animations */\n\tmotionProps?: HTMLMotionProps<\"button\">;\n\t/** Optional sound configuration for button interactions */\n\tsoundConfig?: ComponentSoundConfig;\n}\n\n/**\n * Button Component\n * \n * @component\n * @description\n * A versatile, animated button component built with Framer Motion. Supports multiple \n * variants, sizes, loading states, and icons. Includes smooth hover/tap animations\n * and full accessibility support.\n * \n * @example\n * // Basic usage\n * <Button onClick={handleClick}>Click me</Button>\n * \n * @example\n * // With variant and size\n * <Button variant=\"secondary\" size=\"large\">\n * Large Secondary Button\n * </Button>\n * \n * @example\n * // With icons and loading state\n * <Button \n * variant=\"primary\" \n * iconLeft={<Icon />}\n * loading={isLoading}\n * onClick={handleSubmit}\n * >\n * Submit Form\n * </Button>\n * \n * @example\n * // Full width danger button\n * <Button variant=\"danger\" fullWidth>\n * Delete Account\n * </Button>\n * \n * @param {ButtonProps} props - The props for the Button component\n * @returns {JSX.Element} The rendered Button component\n */\nexport const Button: React.FC<ButtonProps> = ({\n\tvariant = 'primary',\n\tsize = 'medium',\n\tfullWidth = false,\n\tloading = false,\n\ticonLeft,\n\ticonRight,\n\tchildren,\n\tclassName = '',\n\tdisabled,\n\tmotionProps,\n\tsoundConfig,\n\tonClick,\n\tonMouseEnter,\n\tonFocus,\n\t...rest\n}) => {\n\tconst { handlers } = useComponentSound(soundConfig);\n\n\tconst isIcon = variant === 'icon';\n\n\tconst buttonClasses = [\n\t\tstyles.button,\n\t\tstyles[variant],\n\t\t!isIcon && styles[size],\n\t\tfullWidth && styles.fullWidth,\n\t\tloading && styles.loading,\n\t\tclassName\n\t].filter(Boolean).join(' ');\n\n\tconst handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n\t\thandlers.onClick?.();\n\t\tonClick?.(e);\n\t};\n\n\tconst handleMouseEnter = (e: React.MouseEvent<HTMLButtonElement>) => {\n\t\thandlers.onMouseEnter?.();\n\t\tonMouseEnter?.(e);\n\t};\n\n\treturn (\n\t\t<motion.button\n\t\t\tclassName={buttonClasses}\n\t\t\tdisabled={disabled || loading}\n\t\t\twhileHover={isIcon ? undefined : { scale: disabled || loading ? 1 : 1.02 }}\n\t\t\twhileTap={{ scale: disabled || loading ? 1 : (isIcon ? 0.9 : 0.98) }}\n\t\t\ttransition={{ type: \"spring\", stiffness: 400, damping: 17 }}\n\t\t\tonClick={handleClick}\n\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\tonFocus={onFocus}\n\t\t\t{...motionProps}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{loading && <span className={styles.spinner} />}\n\t\t\t{iconLeft && <span className={styles.iconLeft}>{iconLeft}</span>}\n\t\t\t{children}\n\t\t\t{iconRight && <span className={styles.iconRight}>{iconRight}</span>}\n\t\t</motion.button>\n\t);\n};","import React, { HTMLAttributes, ReactNode, useState } from 'react';\nimport { motion, HTMLMotionProps, AnimatePresence } from 'framer-motion';\nimport styles from './Card.module.css';\n\n/**\n * Props for the Card component\n * @interface CardProps\n */\nexport interface CardProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onAnimationStart' | 'onDragStart' | 'onDragEnd' | 'onDrag'> {\n\t/** Visual style variant of the card */\n\tvariant?: 'elevated' | 'outlined' | 'flat' | 'glass';\n\t/** Whether the card should have hover animations */\n\thoverable?: boolean;\n\t/** Whether the card should be clickable (adds pointer cursor and click handler) */\n\tclickable?: boolean;\n\t/** Whether the card content should have padding */\n\tpadding?: boolean;\n\t/** URL for an optional image at the top of the card */\n\timage?: string;\n\t/** Alt text for the card image */\n\timageAlt?: string;\n\t/** Title text for the card header */\n\ttitle?: string;\n\t/** Subtitle text for the card header */\n\tsubtitle?: string;\n\t/** Custom header content (overrides title/subtitle) */\n\theader?: ReactNode;\n\t/** Footer content for the bottom of the card */\n\tfooter?: ReactNode;\n\t/** Main content of the card */\n\tchildren?: ReactNode;\n\t/** Whether the card is expandable/collapsible */\n\texpandable?: boolean;\n\t/** Initial expanded state (default: false) */\n\tdefaultExpanded?: boolean;\n\t/** Controlled expanded state */\n\texpanded?: boolean;\n\t/** Callback when expand state changes */\n\tonExpandChange?: (expanded: boolean) => void;\n\t/** Additional Framer Motion props for custom animations */\n\tmotionProps?: HTMLMotionProps<\"div\">;\n}\n\n/**\n * Card Component\n * \n * @component\n * @description\n * A flexible container component that can display content in a structured card layout.\n * Supports multiple visual styles, optional images, headers, footers, and smooth animations\n * powered by Framer Motion.\n * \n * @example\n * // Basic card with content\n * <Card>\n * <p>This is card content</p>\n * </Card>\n * \n * @example\n * // Card with title and subtitle\n * <Card \n * title=\"Card Title\" \n * subtitle=\"Card subtitle\" \n * variant=\"outlined\"\n * >\n * Card body content here\n * </Card>\n * \n * @example\n * // Interactive card with image\n * <Card \n * image=\"/path/to/image.jpg\"\n * imageAlt=\"Description\"\n * hoverable\n * clickable\n * onClick={handleCardClick}\n * >\n * <h4>Interactive Card</h4>\n * <p>Click me!</p>\n * </Card>\n * \n * @example\n * // Card with custom header and footer\n * <Card \n * header={<CustomHeader />}\n * footer={<CustomFooter />}\n * variant=\"flat\"\n * >\n * Main content area\n * </Card>\n * \n * @param {CardProps} props - The props for the Card component\n * @returns {JSX.Element} The rendered Card component\n */\nexport const Card: React.FC<CardProps> = ({\n\tvariant = 'elevated',\n\thoverable = false,\n\tclickable = false,\n\tpadding = true,\n\timage,\n\timageAlt = '',\n\ttitle,\n\tsubtitle,\n\theader,\n\tfooter,\n\tchildren,\n\texpandable = false,\n\tdefaultExpanded = false,\n\texpanded: controlledExpanded,\n\tonExpandChange,\n\tclassName = '',\n\tonClick,\n\tmotionProps,\n\t...rest\n}) => {\n\t// State management for expandable cards\n\tconst [internalExpanded, setInternalExpanded] = useState(defaultExpanded);\n\tconst isExpanded = controlledExpanded !== undefined ? controlledExpanded : internalExpanded;\n\t\n\tconst handleToggleExpand = () => {\n\t\tconst newExpanded = !isExpanded;\n\t\tif (controlledExpanded === undefined) {\n\t\t\tsetInternalExpanded(newExpanded);\n\t\t}\n\t\tonExpandChange?.(newExpanded);\n\t};\n\n\tconst cardClasses = [\n\t\tstyles.card,\n\t\tstyles[variant],\n\t\thoverable && styles.hoverable,\n\t\tclickable && styles.clickable,\n\t\t!padding && styles.noPadding,\n\t\texpandable && styles.expandable,\n\t\tclassName\n\t].filter(Boolean).join(' ');\n\n\tconst renderHeader = () => {\n\t\tif (header) {\n\t\t\treturn (\n\t\t\t\t<div className={styles.header}>\n\t\t\t\t\t<div className={styles.headerContent}>\n\t\t\t\t\t\t{header}\n\t\t\t\t\t</div>\n\t\t\t\t\t{expandable && (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclassName={styles.expandButton}\n\t\t\t\t\t\t\tonClick={handleToggleExpand}\n\t\t\t\t\t\t\taria-label={isExpanded ? 'Collapse card' : 'Expand card'}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\twidth=\"16\"\n\t\t\t\t\t\t\t\theight=\"16\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\tclassName={styles.expandIcon}\n\t\t\t\t\t\t\t\tstyle={{ transform: isExpanded ? 'rotate(180deg)' : 'rotate(0deg)' }}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<path d=\"M6 9l6 6 6-6\" />\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\t\t\n\t\tif (title || subtitle) {\n\t\t\treturn (\n\t\t\t\t<div className={styles.header}>\n\t\t\t\t\t<div className={styles.headerContent}>\n\t\t\t\t\t\t{title && <h3 className={styles.title}>{title}</h3>}\n\t\t\t\t\t\t{subtitle && <p className={styles.subtitle}>{subtitle}</p>}\n\t\t\t\t\t</div>\n\t\t\t\t\t{expandable && (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclassName={styles.expandButton}\n\t\t\t\t\t\t\tonClick={handleToggleExpand}\n\t\t\t\t\t\t\taria-label={isExpanded ? 'Collapse card' : 'Expand card'}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\twidth=\"16\"\n\t\t\t\t\t\t\t\theight=\"16\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\tclassName={styles.expandIcon}\n\t\t\t\t\t\t\t\tstyle={{ transform: isExpanded ? 'rotate(180deg)' : 'rotate(0deg)' }}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<path d=\"M6 9l6 6 6-6\" />\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\t\t\n\t\treturn null;\n\t};\n\n\tconst cardContent = (\n\t\t<>\n\t\t\t{image && (\n\t\t\t\t<div className={styles.imageContainer}>\n\t\t\t\t\t<img src={image} alt={imageAlt} className={styles.image} />\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{renderHeader()}\n\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t{(!expandable || isExpanded) && (\n\t\t\t\t\t<motion.div\n\t\t\t\t\t\tkey=\"content\"\n\t\t\t\t\t\tinitial={expandable ? { height: 0, opacity: 0 } : undefined}\n\t\t\t\t\t\tanimate={expandable ? { height: 'auto', opacity: 1 } : undefined}\n\t\t\t\t\t\texit={expandable ? { height: 0, opacity: 0 } : undefined}\n\t\t\t\t\t\ttransition={{ duration: 0.3, ease: \"easeInOut\" }}\n\t\t\t\t\t\tclassName={styles.expandableContent}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children && (\n\t\t\t\t\t\t\t<div className={padding ? styles.body : undefined}>\n\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{footer && <div className={styles.footer}>{footer}</div>}\n\t\t\t\t\t</motion.div>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t</>\n\t);\n\n\treturn (\n\t\t<motion.div\n\t\t\tclassName={cardClasses}\n\t\t\tonClick={clickable ? onClick : undefined}\n\t\t\twhileHover={hoverable ? { y: -4 } : undefined}\n\t\t\ttransition={{ type: \"spring\", stiffness: 400, damping: 17 }}\n\t\t\t{...motionProps}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{cardContent}\n\t\t</motion.div>\n\t);\n};","import React, { ReactNode } from 'react';\nimport styles from './EmptyState.module.css';\n\n/**\n * Props for the EmptyState component\n * @interface EmptyStateProps\n */\nexport interface EmptyStateProps {\n\t/** Optional icon (usually a lucide-react icon) rendered above the message */\n\ticon?: ReactNode;\n\t/** Optional heading shown above the message */\n\ttitle?: string;\n\t/** The main message describing why the state is empty and what to do next */\n\tmessage: string;\n\t/** Optional action slot (e.g. a Button CTA) rendered under the message */\n\taction?: ReactNode;\n\t/** Size variant — `compact` fits inline slots, `default` fills a panel, `large` fills the viewport */\n\tsize?: 'compact' | 'default' | 'large';\n}\n\n/**\n * EmptyState Component\n *\n * @component\n * @description\n * A composable placeholder for empty lists, empty sidebars, and\n * \"nothing to show\" panels. Renders an icon, optional title, message,\n * and optional action CTA in a vertically-centered stack. Pure layout —\n * no fetching, no state.\n *\n * @example\n * // Minimal: just a message\n * <EmptyState message=\"No documents yet.\" />\n *\n * @example\n * // With an icon\n * import { FileText } from 'lucide-react';\n * <EmptyState\n * icon={<FileText size={32} />}\n * message=\"Select a document from the sidebar to start editing.\"\n * />\n *\n * @example\n * // Full: icon + title + message + action\n * <EmptyState\n * icon={<FolderKanban size={40} />}\n * title=\"No projects\"\n * message=\"Create your first project to get started.\"\n * action={<Button onClick={handleCreate}>New project</Button>}\n * />\n *\n * @param {EmptyStateProps} props - The props for the EmptyState component\n * @returns {JSX.Element} The rendered EmptyState component\n */\nexport const EmptyState: React.FC<EmptyStateProps> = ({\n\ticon,\n\ttitle,\n\tmessage,\n\taction,\n\tsize = 'default',\n}) => {\n\tconst wrapperClass = [styles.wrapper, styles[size]].filter(Boolean).join(' ');\n\treturn (\n\t\t<div className={wrapperClass}>\n\t\t\t{icon && <div className={styles.icon}>{icon}</div>}\n\t\t\t{title && <h3 className={styles.title}>{title}</h3>}\n\t\t\t<p className={styles.message}>{message}</p>\n\t\t\t{action && <div className={styles.action}>{action}</div>}\n\t\t</div>\n\t);\n};\n","import React, { ReactNode, useEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { motion, AnimatePresence, useDragControls } from 'framer-motion';\nimport { X } from 'lucide-react';\nimport styles from './Modal.module.css';\n\n/**\n * Props for the Modal component\n * @interface ModalProps\n */\nexport interface ModalProps {\n\t/** Whether the modal is currently visible */\n\topen: boolean;\n\t/** Title shown in the modal header */\n\ttitle: string;\n\t/** Callback fired when the user requests to close the modal (backdrop click, Escape, or X button) */\n\tonClose: () => void;\n\t/** Modal body content */\n\tchildren: ReactNode;\n\t/** Width variant. `default` fits typical forms; `compact` is narrower; `wide` is for editors */\n\tsize?: 'default' | 'compact' | 'wide';\n\t/** Optional slot rendered in the header next to the close button (e.g. action buttons) */\n\tactions?: ReactNode;\n\t/** When true, the body is padded; when false, the body is flush to the edges */\n\tpadding?: boolean;\n\t/** How the modal renders on narrow viewports. `sheet` slides from the bottom; `center` stays centered. Defaults to `sheet`. */\n\tmobileVariant?: 'sheet' | 'center';\n\t/** When the modal is in sheet mode on mobile, allow the user to swipe the header down to dismiss. Defaults to true. */\n\tdraggable?: boolean;\n}\n\nconst MOBILE_BREAKPOINT = '(max-width: 640px)';\n\nconst useIsMobile = (): boolean => {\n\tconst [isMobile, setIsMobile] = useState(() => {\n\t\tif (typeof window === 'undefined') return false;\n\t\treturn window.matchMedia(MOBILE_BREAKPOINT).matches;\n\t});\n\n\tuseEffect(() => {\n\t\tif (typeof window === 'undefined') return;\n\t\tconst mq = window.matchMedia(MOBILE_BREAKPOINT);\n\t\tconst onChange = (e: MediaQueryListEvent) => setIsMobile(e.matches);\n\t\tmq.addEventListener('change', onChange);\n\t\treturn () => mq.removeEventListener('change', onChange);\n\t}, []);\n\n\treturn isMobile;\n};\n\nexport const Modal: React.FC<ModalProps> = ({\n\topen,\n\ttitle,\n\tonClose,\n\tchildren,\n\tsize = 'default',\n\tactions,\n\tpadding = true,\n\tmobileVariant = 'sheet',\n\tdraggable = true,\n}) => {\n\tconst isMobile = useIsMobile();\n\tconst dragControls = useDragControls();\n\tconst headerRef = useRef<HTMLDivElement>(null);\n\n\tuseEffect(() => {\n\t\tif (!open) return;\n\t\tconst onKey = (e: KeyboardEvent) => {\n\t\t\tif (e.key === 'Escape') onClose();\n\t\t};\n\t\tdocument.addEventListener('keydown', onKey);\n\t\treturn () => document.removeEventListener('keydown', onKey);\n\t}, [open, onClose]);\n\n\tif (typeof document === 'undefined') return null;\n\n\tconst isSheet = mobileVariant === 'sheet' && isMobile;\n\tconst isDraggable = isSheet && draggable;\n\n\tconst backdropClass = [styles.backdrop, isSheet && styles.backdropSheet]\n\t\t.filter(Boolean)\n\t\t.join(' ');\n\n\tconst dialogClass = [\n\t\tstyles.dialog,\n\t\tsize === 'compact' && styles.dialogCompact,\n\t\tsize === 'wide' && styles.dialogWide,\n\t\tisSheet && styles.dialogSheet,\n\t]\n\t\t.filter(Boolean)\n\t\t.join(' ');\n\n\tconst enteringAnimation = isSheet\n\t\t? { initial: { y: '100%' }, animate: { y: 0 }, exit: { y: '100%' } }\n\t\t: {\n\t\t\t\tinitial: { opacity: 0, scale: 0.96, y: 8 },\n\t\t\t\tanimate: { opacity: 1, scale: 1, y: 0 },\n\t\t\t\texit: { opacity: 0, scale: 0.96, y: 8 },\n\t\t\t};\n\n\treturn createPortal(\n\t\t<AnimatePresence>\n\t\t\t{open && (\n\t\t\t\t<motion.div\n\t\t\t\t\tclassName={backdropClass}\n\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\ttransition={{ duration: 0.15 }}\n\t\t\t\t\tonClick={onClose}\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t>\n\t\t\t\t\t<motion.div\n\t\t\t\t\t\tclassName={dialogClass}\n\t\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\t\taria-label={title}\n\t\t\t\t\t\t{...enteringAnimation}\n\t\t\t\t\t\ttransition={\n\t\t\t\t\t\t\tisSheet\n\t\t\t\t\t\t\t\t? { type: 'spring', stiffness: 320, damping: 32 }\n\t\t\t\t\t\t\t\t: { duration: 0.15, ease: 'easeOut' }\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\t\t\tdrag={isDraggable ? 'y' : false}\n\t\t\t\t\t\tdragControls={isDraggable ? dragControls : undefined}\n\t\t\t\t\t\tdragConstraints={{ top: 0 }}\n\t\t\t\t\t\tdragElastic={{ top: 0, bottom: 0.3 }}\n\t\t\t\t\t\tdragListener={false}\n\t\t\t\t\t\tonDragEnd={(_, info) => {\n\t\t\t\t\t\t\tif (info.offset.y > 80) onClose();\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isSheet && <div className={styles.grabBar} />}\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tref={headerRef}\n\t\t\t\t\t\t\tclassName={styles.header}\n\t\t\t\t\t\t\tonPointerDown={(e) => {\n\t\t\t\t\t\t\t\tif (!isDraggable) return;\n\t\t\t\t\t\t\t\tif ((e.target as HTMLElement).closest('button')) return;\n\t\t\t\t\t\t\t\tdragControls.start(e);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span className={styles.title}>{title}</span>\n\t\t\t\t\t\t\t{actions && <div className={styles.headerActions}>{actions}</div>}\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tclassName={styles.closeButton}\n\t\t\t\t\t\t\t\tonClick={onClose}\n\t\t\t\t\t\t\t\taria-label=\"Close modal\"\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<X size={16} />\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className={padding ? styles.body : styles.bodyFlush}>{children}</div>\n\t\t\t\t\t</motion.div>\n\t\t\t\t</motion.div>\n\t\t\t)}\n\t\t</AnimatePresence>,\n\t\tdocument.body\n\t);\n};\n","import React, { useRef, useEffect } from 'react';\nimport styles from './Checkbox.module.css';\nimport { useComponentSound, ComponentSoundConfig } from '../../../utils/useSound';\n\n/**\n * Props for the Checkbox component\n * @interface CheckboxProps\n */\nexport interface CheckboxProps {\n /** Whether the checkbox is checked */\n checked: boolean;\n /** Callback fired when checkbox state changes */\n onChange: (checked: boolean) => void;\n /** Label text to display next to the checkbox */\n label?: string;\n /** Whether the checkbox is disabled */\n disabled?: boolean;\n /** Whether the checkbox is in indeterminate state (partial selection) */\n indeterminate?: boolean;\n /** HTML id attribute for the checkbox input */\n id?: string;\n /** HTML name attribute for form submission */\n name?: string;\n /** HTML value attribute for form submission */\n value?: string;\n /** Optional sound configuration for checkbox interactions */\n soundConfig?: ComponentSoundConfig;\n}\n\n/**\n * Checkbox component - Modern interactive checkbox with animations\n *\n * @component\n * @description\n * A customizable checkbox component with smooth animations, hover effects,\n * and support for checked, unchecked, and indeterminate states. Features\n * gradient backgrounds, bounce animations, and accessible focus states.\n *\n * @example\n * // Basic usage\n * <Checkbox\n * checked={isChecked}\n * onChange={setIsChecked}\n * label=\"Accept terms and conditions\"\n * />\n *\n * @example\n * // Indeterminate state\n * <Checkbox\n * checked={false}\n * indeterminate={true}\n * onChange={handleChange}\n * label=\"Select all\"\n * />\n *\n * @example\n * // Disabled state\n * <Checkbox\n * checked={true}\n * onChange={handleChange}\n * label=\"Premium feature\"\n * disabled={true}\n * />\n */\nexport const Checkbox: React.FC<CheckboxProps> = ({\n checked,\n onChange,\n label,\n disabled = false,\n indeterminate = false,\n id,\n name,\n value,\n soundConfig\n}) => {\n const checkboxRef = useRef<HTMLInputElement>(null);\n const { playSound } = useComponentSound(soundConfig);\n\n useEffect(() => {\n if (checkboxRef.current) {\n checkboxRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n return (\n <label className={styles.checkboxLabel}>\n <input\n ref={checkboxRef}\n type=\"checkbox\"\n checked={checked}\n onChange={(e) => {\n const isChecked = e.target.checked;\n onChange(isChecked);\n if (soundConfig?.onClick !== false) {\n playSound('toggle');\n }\n }}\n className={styles.checkbox}\n disabled={disabled}\n id={id}\n name={name}\n value={value}\n aria-checked={indeterminate ? 'mixed' : checked}\n />\n {label && <span className={styles.checkboxText}>{label}</span>}\n </label>\n );\n};","export const formatDateToEuropean = (date: string | Date | undefined): string => {\n if (!date) return '';\n const d = new Date(date);\n if (isNaN(d.getTime())) return '';\n const day = d.getDate().toString().padStart(2, '0');\n const month = (d.getMonth() + 1).toString().padStart(2, '0');\n const year = d.getFullYear();\n return `${day}/${month}/${year}`;\n};\n\nexport const parseEuropeanDate = (dateString: string): string => {\n if (!dateString) return '';\n \n const cleanDate = dateString.replace(/[^\\d/]/g, '');\n const parts = cleanDate.split('/');\n \n if (parts.length === 3) {\n const [day, month, year] = parts;\n const fullYear = year.length === 2 ? `20${year}` : year;\n const isoDate = `${fullYear}-${month.padStart(2, '0')}-${day.padStart(2, '0')}`;\n \n const testDate = new Date(isoDate);\n if (!isNaN(testDate.getTime())) {\n return isoDate;\n }\n }\n return '';\n};\n\n","import React from \"react\";\nimport { Calendar as CalendarIcon } from \"lucide-react\";\nimport { useComponentSound, ComponentSoundConfig } from '../../../utils/useSound';\nimport { formatDateToEuropean, parseEuropeanDate } from \"../../../utils/formUtils\";\nimport styles from \"./DateInput.module.css\";\n\n/**\n * Props for the DateInput component\n * @interface DateInputProps\n */\nexport interface DateInputProps {\n /** Label text displayed above the input field */\n label?: string;\n /** Current date value (ISO format or European DD/MM/YYYY format) */\n value: string;\n /** Callback fired when date value changes */\n onChange: (newValue: string) => void;\n /** Placeholder text shown in European format (e.g., \"31/12/2024\") */\n placeholder?: string;\n /** Callback fired when input receives focus */\n onFocus?: () => void;\n /** Callback fired when input loses focus */\n onBlur?: () => void;\n /** Whether to show error styling */\n error?: boolean;\n /** Whether to show success styling */\n success?: boolean;\n /** Whether the input is in loading state */\n loading?: boolean;\n /** Whether the input is disabled */\n disabled?: boolean;\n /** Sound configuration for interactions */\n soundConfig?: ComponentSoundConfig;\n}\n\n/**\n * DateInput component - European format date picker with manual input support\n *\n * @component\n * @description\n * A date input component that supports both manual text entry in DD/MM/YYYY format\n * and native calendar picker selection. Automatically formats dates as users type,\n * adding slashes at appropriate positions. Stores dates internally in ISO format\n * while displaying them in European format for better UX in European contexts.\n *\n * Features:\n * - Auto-formatting while typing (adds slashes automatically)\n * - Calendar icon for native date picker access (Safari/iOS compatible)\n * - Seamless conversion between European display and ISO storage formats\n * - Mobile-optimized with proper touch targets\n *\n * @example\n * // Basic usage\n * <DateInput\n * label=\"Date of Birth\"\n * value={birthDate}\n * onChange={setBirthDate}\n * placeholder=\"31/12/2000\"\n * />\n */\nexport function DateInput({\n label,\n value,\n onChange,\n placeholder = \"25/12/2024\",\n onFocus,\n onBlur,\n error = false,\n success = false,\n loading = false,\n disabled = false,\n soundConfig\n}: Readonly<DateInputProps>) {\n const { handlers, playSound } = useComponentSound(soundConfig);\n\n const handleTextChange = (textValue: string) => {\n // Auto-format as user types\n let formatted = textValue.replace(/[^\\d/]/g, '');\n\n // Add slashes automatically\n if (formatted.length >= 2 && formatted.charAt(2) !== '/') {\n formatted = formatted.substring(0, 2) + '/' + formatted.substring(2);\n }\n if (formatted.length >= 5 && formatted.charAt(5) !== '/') {\n formatted = formatted.substring(0, 5) + '/' + formatted.substring(5);\n }\n\n // Limit length\n if (formatted.length > 10) {\n formatted = formatted.substring(0, 10);\n }\n\n // Convert to ISO format when complete and valid, otherwise store display format\n if (formatted.length === 10) {\n const isoDate = parseEuropeanDate(formatted);\n onChange(isoDate || formatted);\n } else {\n onChange(formatted);\n }\n };\n\n const handleCalendarChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const isoDate = e.target.value;\n playSound('click');\n if (isoDate) {\n onChange(isoDate);\n }\n };\n\n const getClassName = () => {\n const classes = [styles.dateInput];\n if (error) classes.push(styles.error);\n if (success) classes.push(styles.success);\n if (loading) classes.push(styles.loading);\n return classes.join(' ');\n };\n\n // Current ISO value for the native date input (or '' if empty/unparseable)\n const isoValue = value.includes('-') ? value : (parseEuropeanDate(value) || '');\n\n return (\n <div className={getClassName()}>\n <label className={styles.label}>{label}</label>\n <div className={styles.inputWrapper}>\n <input\n type=\"text\"\n value={value.includes('-') ? formatDateToEuropean(value) : value}\n onChange={(e) => handleTextChange(e.target.value)}\n onFocus={onFocus}\n onBlur={onBlur}\n placeholder={placeholder}\n className={styles.textInput}\n disabled={disabled || loading}\n {...handlers}\n />\n <span className={styles.calendarButton} aria-hidden=\"true\">\n <CalendarIcon />\n <input\n type=\"date\"\n value={isoValue}\n onChange={handleCalendarChange}\n className={styles.nativeDateInput}\n title=\"Select date from calendar\"\n aria-label={label ? `${label} calendar picker` : 'Calendar picker'}\n disabled={disabled || loading}\n />\n </span>\n </div>\n </div>\n );\n}\n","import { useState, useRef, useEffect, KeyboardEvent } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { ChevronDown, Search, Check } from 'lucide-react';\nimport styles from \"./SearchableDropdown.module.css\";\n\ntype Option = { label: string; value: string };\n\n/**\n * Props for the SearchableDropdown component\n * @interface SearchableDropdownProps\n */\nexport interface SearchableDropdownProps {\n /** Label text displayed above the dropdown */\n label: string;\n /** Currently selected value */\n value: string;\n /** Callback fired when selection changes */\n onChange: (value: string) => void;\n /** Array of options with label and value properties */\n options: Option[];\n /** Placeholder text shown when no option is selected */\n placeholder?: string;\n /** Whether to include an empty \"(none)\" option */\n allowEmpty?: boolean;\n /** Whether the dropdown is disabled */\n disabled?: boolean;\n /** Whether the dropdown is in loading state */\n loading?: boolean;\n /** Whether to show error styling */\n error?: boolean;\n}\n\n/**\n * SearchableDropdown component - Modern filterable dropdown with animations\n * \n * @component\n * @description\n * A sophisticated dropdown component with real-time search filtering, smooth animations,\n * and keyboard navigation support. Features gradient backgrounds, slide-in animations\n * for options, and a sliding indicator on hover. The dropdown menu includes a search\n * field that filters options as you type.\n * \n * Features:\n * - Real-time search filtering\n * - Smooth animations with Framer Motion\n * - Keyboard navigation (Arrow keys, Enter, Escape)\n * - Custom scrollbar styling\n * - Mobile-optimized with modal-like behavior on small screens\n * - Loading and error states\n * - Selected item highlighting with gradient background\n * \n * @example\n * // Basic usage\n * <SearchableDropdown\n * label=\"Select Country\"\n * value={selectedCountry}\n * onChange={setSelectedCountry}\n * options={countryOptions}\n * placeholder=\"Choose a country...\"\n * />\n * \n * @example\n * // With empty option disabled\n * <SearchableDropdown\n * label=\"Required Field\"\n * value={requiredValue}\n * onChange={setRequiredValue}\n * options={options}\n * allowEmpty={false}\n * error={!requiredValue}\n * />\n */\nexport function SearchableDropdown({\n label,\n value,\n onChange,\n options,\n placeholder = \"Select...\",\n allowEmpty = true,\n disabled = false,\n loading = false,\n error = false\n}: Readonly<SearchableDropdownProps>) {\n const [isOpen, setIsOpen] = useState(false);\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Get the selected option's label\n const selectedOption = options.find(opt => opt.value === value);\n const displayValue = selectedOption ? selectedOption.label : '';\n\n // Filter options based on search\n const filteredOptions = options.filter(opt => \n opt.label.toLowerCase().includes(searchTerm.toLowerCase())\n );\n \n // Add empty option to filtered list if allowed\n const allOptions = allowEmpty ? [{ label: '(none)', value: '' }, ...filteredOptions] : filteredOptions;\n\n // Close dropdown when clicking outside\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n setSearchTerm(\"\");\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n // Focus search input when dropdown opens\n useEffect(() => {\n if (isOpen && inputRef.current) {\n inputRef.current.focus();\n }\n }, [isOpen]);\n\n const handleSelect = (optionValue: string) => {\n onChange(optionValue);\n setIsOpen(false);\n setSearchTerm(\"\");\n setHighlightedIndex(-1);\n };\n \n const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n if (!isOpen) return;\n \n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n setHighlightedIndex(prev => \n prev < allOptions.length - 1 ? prev + 1 : 0\n );\n break;\n case 'ArrowUp':\n e.preventDefault();\n setHighlightedIndex(prev => \n prev > 0 ? prev - 1 : allOptions.length - 1\n );\n break;\n case 'Enter':\n e.preventDefault();\n if (highlightedIndex >= 0 && highlightedIndex < allOptions.length) {\n handleSelect(allOptions[highlightedIndex].value);\n }\n break;\n case 'Escape':\n e.preventDefault();\n setIsOpen(false);\n setSearchTerm(\"\");\n setHighlightedIndex(-1);\n break;\n }\n };\n\n const getTriggerClassName = () => {\n const classes = [styles.dropdownTrigger];\n if (isOpen) classes.push(styles.open);\n if (loading) classes.push(styles.loading);\n if (error) classes.push(styles.error);\n return classes.join(' ');\n };\n\n return (\n <div className={styles.searchableDropdown} ref={dropdownRef} onKeyDown={handleKeyDown}>\n <label>{label}</label>\n \n <motion.button\n type=\"button\"\n className={getTriggerClassName()}\n onClick={() => !disabled && !loading && setIsOpen(!isOpen)}\n whileTap={{ scale: disabled ? 1 : 0.98 }}\n style={{ willChange: 'transform' }}\n disabled={disabled}\n >\n <span className={`${styles.dropdownValue} ${!displayValue ? styles.placeholder : ''}`}>\n {displayValue || placeholder}\n </span>\n <ChevronDown className={styles.dropdownArrow} />\n </motion.button>\n\n <AnimatePresence>\n {isOpen && (\n <motion.div \n className={styles.dropdownMenu}\n initial={{ opacity: 0, y: -10, scale: 0.95 }}\n animate={{ opacity: 1, y: 0, scale: 1 }}\n exit={{ opacity: 0, y: -10, scale: 0.95 }}\n transition={{ duration: 0.2, ease: \"easeOut\" }}\n >\n <div className={styles.dropdownSearch}>\n <Search className={styles.searchIcon} />\n <input\n ref={inputRef}\n type=\"text\"\n className={styles.searchInput}\n placeholder=\"Cerca...\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n onClick={(e) => e.stopPropagation()}\n />\n </div>\n \n <div className={styles.dropdownOptions}>\n {allOptions.map((opt, index) => {\n const isSelected = value === opt.value;\n const isHighlighted = highlightedIndex === index;\n \n return (\n <motion.button\n type=\"button\"\n key={`${opt.value}-${index}`}\n className={`${styles.dropdownOption} ${isSelected ? styles.selected : ''} ${isHighlighted ? styles.highlighted : ''}`}\n onClick={() => handleSelect(opt.value)}\n onMouseEnter={() => setHighlightedIndex(index)}\n initial={{ opacity: 0, x: -20 }}\n animate={{ opacity: 1, x: 0 }}\n transition={{ delay: index * 0.02 }}\n whileTap={{ scale: 0.98 }}\n style={{ willChange: 'transform' }}\n >\n <span>{opt.label}</span>\n {isSelected && <Check className={styles.checkIcon} />}\n </motion.button>\n );\n })}\n {allOptions.length === 0 && (\n <motion.div \n className={styles.dropdownNoResults}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n >\n No results found\n </motion.div>\n )}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n}","import { ChevronDown } from 'lucide-react';\nimport { useComponentSound, ComponentSoundConfig } from '../../../utils/useSound';\nimport styles from \"./SelectInput.module.css\";\n\ntype Option = string | { label: string; value: string };\n\n/**\n * Props for the SelectInput component\n * @interface SelectInputProps\n */\nexport interface SelectInputProps {\n /** Label text displayed above the select input */\n label?: string;\n /** Currently selected value */\n value: string;\n /** Callback fired when selection changes */\n onChange: (value: string) => void;\n /** Array of options - can be strings or {label, value} objects */\n options: Readonly<Option[]>;\n /** Placeholder text shown when no option is selected */\n placeholder?: string;\n /** Whether the select is disabled */\n disabled?: boolean;\n /** Whether to show error styling */\n error?: boolean;\n /** Whether to show success styling */\n success?: boolean;\n /** Whether the select is in loading state */\n loading?: boolean;\n /** Whether the field is required (shows asterisk) */\n required?: boolean;\n /** Sound configuration for interactions */\n soundConfig?: ComponentSoundConfig;\n /** Additional CSS class name for the outermost wrapper */\n className?: string;\n}\n\n/**\n * SelectInput component - Styled dropdown selector with flexible option format\n * \n * @component\n * @description\n * A customizable select dropdown that accepts both simple string arrays and\n * label-value object arrays for options. Features custom styling that maintains\n * consistency across browsers while preserving native select functionality.\n * Includes a styled chevron icon for better visual feedback.\n * \n * @example\n * // With simple string options\n * <SelectInput\n * label=\"Country\"\n * value={country}\n * onChange={setCountry}\n * options={['Italy', 'France', 'Spain', 'Germany']}\n * placeholder=\"Select a country\"\n * />\n * \n * @example\n * // With label-value pairs\n * <SelectInput\n * label=\"Status\"\n * value={status}\n * onChange={setStatus}\n * options={[\n * { label: 'Active', value: 'active' },\n * { label: 'Pending', value: 'pending' },\n * { label: 'Archived', value: 'archived' }\n * ]}\n * />\n */\nexport function SelectInput({\n label,\n value,\n onChange,\n options,\n placeholder = \"Select...\",\n disabled = false,\n error = false,\n success = false,\n loading = false,\n required = false,\n soundConfig,\n className\n}: Readonly<SelectInputProps>) {\n const { handlers, playSound } = useComponentSound(soundConfig);\n const getClassName = () => {\n const classes = [styles.selectInput];\n if (error) classes.push(styles.error);\n if (success) classes.push(styles.success);\n if (loading) classes.push(styles.loading);\n return classes.join(' ');\n };\n\n return (\n <div className={`${getClassName()}${className ? ` ${className}` : ''}`}>\n <label>\n {label}\n {required && <span style={{ color: 'var(--color-error)' }}> *</span>}\n </label>\n <div className={styles.selectWrapper}>\n <select \n value={value} \n onChange={e => {\n playSound('click');\n onChange(e.target.value);\n }}\n disabled={disabled || loading}\n required={required}\n {...handlers}\n >\n <option value=\"\">{placeholder}</option>\n {options.map(opt => {\n const optionValue = typeof opt === 'string' ? opt : opt.value;\n const optionLabel = typeof opt === 'string' ? opt : opt.label;\n return (\n <option key={optionValue} value={optionValue}>{optionLabel}</option>\n );\n })}\n </select>\n <ChevronDown className={styles.selectIcon} />\n </div>\n </div>\n );\n}","import styles from \"./TextArea.module.css\";\n\n/**\n * Props for the TextArea component\n * @interface TextAreaProps\n */\nexport interface TextAreaProps {\n /** Label text displayed above the textarea - can be empty string for no label */\n label: string;\n /** Current value of the textarea */\n value: string;\n /** Callback fired when textarea value changes */\n onChange: (newValue: string) => void;\n /** Number of visible text lines (height) */\n rows?: number;\n /** Placeholder text shown when textarea is empty */\n placeholder?: string;\n /** Whether the field is required (shows asterisk) */\n required?: boolean;\n /** Maximum number of characters allowed (shows counter) */\n maxLength?: number;\n /** Whether the textarea is disabled */\n disabled?: boolean;\n /** Whether to show error styling */\n error?: boolean;\n /** Whether to show success styling */\n success?: boolean;\n /** Whether the textarea is in loading state */\n loading?: boolean;\n /** Whether to enable focus mode styling for distraction-free writing */\n focusMode?: boolean;\n /** Compact mode for use in arrays or dense layouts */\n compact?: boolean;\n /** Custom CSS class name(s) to apply to the container */\n className?: string;\n}\n\n/**\n * TextArea component - Multi-line text input with character counting\n *\n * @component\n * @description\n * A resizable text area component designed for longer form content like descriptions,\n * comments, or messages. Features automatic character counting when maxLength is set,\n * and maintains consistent styling with other form inputs. The component is optimized\n * for both desktop and mobile experiences with appropriate touch targets.\n *\n * @example\n * // Basic usage\n * <TextArea\n * label=\"Description\"\n * value={description}\n * onChange={setDescription}\n * rows={4}\n * placeholder=\"Enter a detailed description...\"\n * />\n *\n * @example\n * // With character limit\n * <TextArea\n * label=\"Bio\"\n * value={bio}\n * onChange={setBio}\n * maxLength={500}\n * required\n * />\n */\nexport function TextArea({\n label,\n value,\n onChange,\n rows = 5,\n placeholder = \"\",\n required = false,\n maxLength,\n disabled = false,\n error = false,\n success = false,\n loading = false,\n focusMode = false,\n compact = false,\n className = \"\"\n}: Readonly<TextAreaProps>) {\n const textareaId = `textarea-${Math.random().toString(36).substr(2, 9)}`;\n\n const getContainerClassName = () => {\n const classes = [styles.textareaContainer];\n if (error) classes.push(styles.error);\n if (success) classes.push(styles.success);\n if (loading) classes.push(styles.loading);\n if (focusMode) classes.push(styles.focusMode);\n if (compact) classes.push(styles.compact);\n if (className) classes.push(className);\n return classes.join(' ');\n };\n\n const getCharCountClassName = () => {\n if (!maxLength) return styles.characterCount;\n\n const classes = [styles.characterCount];\n const percentage = (value.length / maxLength) * 100;\n\n if (percentage >= 100) {\n classes.push(styles.atLimit);\n } else if (percentage >= 80) {\n classes.push(styles.nearLimit);\n }\n\n return classes.join(' ');\n };\n\n return (\n <div className={getContainerClassName()}>\n {label && (\n <label htmlFor={textareaId} className={styles.textareaLabel}>\n {label}\n {required && <span className={styles.requiredIndicator}>*</span>}\n </label>\n )}\n <textarea\n id={textareaId}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n rows={rows}\n placeholder={placeholder}\n maxLength={maxLength}\n className={styles.textareaInput}\n aria-required={required}\n disabled={disabled || loading}\n aria-invalid={error}\n />\n {maxLength && (\n <div className={getCharCountClassName()}>\n <span>{value.length}</span>\n <span style={{ opacity: 0.7 }}> / </span>\n <span>{maxLength}</span>\n </div>\n )}\n </div>\n );\n}","import React, { ReactNode } from 'react';\nimport styles from './TextInput.module.css';\nimport { useComponentSound, ComponentSoundConfig } from '../../../utils/useSound';\n\n/**\n * Props for the TextInput component\n * @interface TextInputProps\n */\nexport interface TextInputProps {\n /** Label text displayed above the input field */\n label?: string;\n /** Current value of the input */\n value: string;\n /** Callback fired when input value changes */\n onChange: (newValue: string) => void;\n /** HTML input type (text, email, password, etc.) */\n type?: string;\n /** Callback fired when input loses focus */\n onBlur?: () => void;\n /** Placeholder text shown when input is empty */\n placeholder?: string;\n /** Error message to display below the input */\n error?: string;\n /** Whether the field is required (shows asterisk) */\n required?: boolean;\n /** Whether the input is disabled */\n disabled?: boolean;\n /** Whether to show success styling */\n success?: boolean;\n /** Whether the input is in loading state */\n loading?: boolean;\n /** Icon to display inside the input field */\n icon?: ReactNode;\n /** Optional action button displayed at the end of the input */\n actionButton?: {\n /** Button label text */\n label: string;\n /** Button click handler */\n onClick: () => void;\n };\n /** Maximum number of characters allowed */\n maxLength?: number;\n /** HTML autocomplete attribute value */\n autoComplete?: string;\n /** Optional sound configuration for input interactions */\n soundConfig?: ComponentSoundConfig;\n /** Enable typing sounds */\n enableTypingSounds?: boolean;\n}\n\n/**\n * TextInput component - A versatile text input field with label and error handling\n * \n * @component\n * @description\n * A foundational input component that provides a clean, accessible text field with\n * built-in support for labels, validation errors, and various HTML5 input types.\n * Follows design system tokens for consistent theming across light/dark modes.\n * \n * @example\n * // Basic usage\n * <TextInput\n * label=\"Email Address\"\n * value={email}\n * onChange={setEmail}\n * type=\"email\"\n * placeholder=\"Enter your email\"\n * />\n * \n * @example\n * // With validation error\n * <TextInput\n * label=\"Password\"\n * value={password}\n * onChange={setPassword}\n * type=\"password\"\n * error=\"Password must be at least 8 characters\"\n * required\n * />\n */\nexport function TextInput({ \n label, \n value, \n onChange, \n type = \"text\", \n onBlur, \n placeholder, \n error, \n required,\n disabled = false,\n success = false,\n loading = false,\n icon,\n actionButton,\n maxLength,\n autoComplete,\n soundConfig,\n enableTypingSounds = false\n}: Readonly<TextInputProps>) {\n const inputId = `input-${Math.random().toString(36).substr(2, 9)}`;\n const { handlers, playSound } = useComponentSound(soundConfig);\n const prevValueRef = React.useRef(value);\n \n const getContainerClassName = () => {\n const classes = [styles.textInput];\n if (success) classes.push(styles.success);\n if (loading) classes.push(styles.loading);\n if (icon) classes.push(styles.withIcon);\n if (actionButton) classes.push(styles.withAction);\n return classes.join(' ');\n };\n \n React.useEffect(() => {\n prevValueRef.current = value;\n }, [value]);\n \n return (\n <div className={getContainerClassName()}>\n <label htmlFor={inputId}>\n {label}\n {required && <span className={styles.required}>*</span>}\n </label>\n <div style={{ position: 'relative' }}>\n {icon && <div className={styles.inputIcon}>{icon}</div>}\n <input\n id={inputId}\n type={type}\n value={value}\n onChange={(e) => {\n const newValue = e.target.value;\n const oldValue = prevValueRef.current;\n \n onChange(newValue);\n \n // Play typing sounds if enabled\n if (enableTypingSounds || soundConfig?.onClick) {\n if (newValue.length > oldValue.length) {\n playSound('type');\n } else if (newValue.length < oldValue.length) {\n playSound('delete');\n }\n }\n \n if (error && soundConfig?.onError) {\n playSound(typeof soundConfig.onError === 'string' ? soundConfig.onError : 'error');\n }\n }}\n onBlur={onBlur}\n placeholder={placeholder}\n className={error ? styles.inputError : ''}\n aria-invalid={!!error}\n aria-describedby={error ? `${inputId}-error` : undefined}\n disabled={disabled || loading}\n maxLength={maxLength}\n autoComplete={autoComplete}\n />\n {actionButton && (\n <button\n type=\"button\"\n className={styles.actionButton}\n onClick={() => {\n handlers.onClick?.();\n actionButton.onClick();\n }}\n disabled={disabled || loading}\n >\n {actionButton.label}\n </button>\n )}\n </div>\n {error && (\n <span id={`${inputId}-error`} className={styles.errorMessage}>\n {error}\n </span>\n )}\n </div>\n );\n}","import React, { useRef } from 'react';\nimport { motion } from 'framer-motion';\nimport { useComponentSound, ComponentSoundConfig } from '../../../utils/useSound';\nimport type { SoundPack } from '../../../utils/soundUtils';\nimport styles from './Toggle.module.css';\n\n/**\n * Props for the Toggle component\n * @interface ToggleProps\n */\nexport interface ToggleProps {\n /** Whether the toggle is in the \"on\" (right side) state */\n readonly isOn: boolean;\n /** Callback fired when toggle state changes */\n readonly onToggle: (isOn: boolean) => void;\n /** Label text for the left (off) option */\n readonly leftLabel?: string;\n /** Label text for the right (on) option */\n readonly rightLabel?: string;\n /** Icon to display with the left option */\n readonly leftIcon?: React.ReactNode;\n /** Icon to display with the right option */\n readonly rightIcon?: React.ReactNode;\n /** Optional CSS class name */\n readonly className?: string;\n /** Optional inline styles */\n readonly style?: React.CSSProperties;\n /** Sound configuration for interactions */\n readonly soundConfig?: ComponentSoundConfig;\n /** Sound pack for this toggle */\n readonly soundTheme?: SoundPack;\n /** Enable celebration effects on toggle */\n readonly enableCelebration?: boolean;\n}\n\n/**\n * Toggle Component\n *\n * @component\n * @description\n * A two-state toggle switch component that allows users to choose between two options.\n * Displays as a segmented control with smooth animations and hover effects.\n * Supports both text labels and icons for each option.\n *\n * @example\n * // Basic toggle with labels and sound theme\n * <Toggle\n * isOn={darkMode}\n * onToggle={setDarkMode}\n * leftLabel=\"Light\"\n * rightLabel=\"Dark\"\n * soundTheme=\"digital\"\n * enableCelebration={true}\n * />\n *\n * @example\n * // Toggle with icons\n * <Toggle\n * isOn={viewMode === 'grid'}\n * onToggle={(isGrid) => setViewMode(isGrid ? 'grid' : 'list')}\n * leftIcon={<ListIcon />}\n * rightIcon={<GridIcon />}\n * leftLabel=\"List\"\n * rightLabel=\"Grid\"\n * />\n *\n * @example\n * // Simple on/off toggle\n * <Toggle\n * isOn={notifications}\n * onToggle={setNotifications}\n * leftLabel=\"Off\"\n * rightLabel=\"On\"\n * />\n *\n * @param {ToggleProps} props - The props for the Toggle component\n * @returns {JSX.Element} The rendered Toggle component\n */\nexport function Toggle(props: Readonly<ToggleProps>) {\n const { isOn, onToggle, leftLabel, rightLabel, leftIcon, rightIcon, className, style, soundConfig, enableCelebration = false } = props;\n const leftButtonRef = useRef<HTMLButtonElement>(null);\n const rightButtonRef = useRef<HTMLButtonElement>(null);\n const { handlers, playSound } = useComponentSound(\n {\n ...soundConfig,\n onClick: soundConfig?.onClick ?? 'toggle',\n onHover: soundConfig?.onHover ?? 'hover'\n }\n );\n\n // Ensure content stays centered by merging styles\n const buttonStyle = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n ...style\n };\n\n return (\n <div className={`${styles.toggleContainer} ${className || ''}`}>\n <motion.button\n ref={leftButtonRef}\n className={`${styles.toggleButton} ${!isOn ? styles.active : ''}`}\n whileHover={{ scale: 1.05 }}\n whileTap={{ scale: 0.95 }}\n transition={{ type: \"spring\", stiffness: 400, damping: 17 }}\n onClick={() => {\n if (!isOn) {\n // Already on left\n if (enableCelebration) {\n playSound('success');\n } else {\n playSound('click');\n }\n } else {\n // Switching to left\n playSound('toggle');\n }\n onToggle(false);\n }}\n onMouseEnter={() => handlers.onMouseEnter?.()}\n style={buttonStyle}\n >\n <motion.div\n animate={{ scale: !isOn ? 1.1 : 1, rotate: !isOn ? [0, -5, 5, 0] : 0 }}\n transition={{ duration: 0.3 }}\n >\n {leftIcon}\n </motion.div>\n {leftLabel}\n </motion.button>\n\n <motion.button\n ref={rightButtonRef}\n className={`${styles.toggleButton} ${isOn ? styles.active : ''}`}\n whileHover={{ scale: 1.05 }}\n whileTap={{ scale: 0.95 }}\n transition={{ type: \"spring\", stiffness: 400, damping: 17 }}\n onClick={() => {\n if (isOn) {\n // Already on right\n if (enableCelebration) {\n playSound('success');\n } else {\n playSound('click');\n }\n } else {\n // Switching to right\n playSound('success');\n }\n onToggle(true);\n }}\n onMouseEnter={() => handlers.onMouseEnter?.()}\n style={buttonStyle}\n >\n <motion.div\n animate={{ scale: isOn ? 1.1 : 1, rotate: isOn ? [0, 5, -5, 0] : 0 }}\n transition={{ duration: 0.3 }}\n >\n {rightIcon}\n </motion.div>\n {rightLabel}\n </motion.button>\n </div>\n );\n}","import React, { useCallback, useState, useEffect } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { useComponentSound, ComponentSoundConfig } from '../../../utils/useSound';\nimport styles from './NumberStepper.module.css';\n\n/**\n * Props for the NumberStepper component\n * @interface NumberStepperProps\n */\nexport interface NumberStepperProps {\n /** Current value */\n value: number;\n /** Callback when value changes */\n onChange: (value: number) => void;\n /** Minimum allowed value */\n min?: number;\n /** Maximum allowed value */\n max?: number;\n /** Step increment/decrement amount */\n step?: number;\n /** Label text */\n label?: string;\n /** Icon or emoji to display */\n icon?: string;\n /** Whether the stepper is disabled */\n disabled?: boolean;\n /** Size variant */\n size?: 'small' | 'medium' | 'large';\n /** Visual variant */\n variant?: 'default' | 'outlined' | 'filled' | 'minimal' | 'custom' | 'tally';\n /** Color for the `tally` variant strokes + numeric value. Ignored by other variants. */\n color?: string;\n /** Hint text shown in place of tally marks when value === 0 (tally variant). */\n tallyEmptyHint?: string;\n /** Show plus/minus icons instead of arrows */\n showPlusMinus?: boolean;\n /** Allow keyboard navigation */\n allowKeyboard?: boolean;\n /** Custom className */\n className?: string;\n /** Custom styles for different parts of the component */\n customStyles?: {\n container?: React.CSSProperties;\n header?: React.CSSProperties;\n icon?: React.CSSProperties;\n label?: React.CSSProperties;\n stepper?: React.CSSProperties;\n button?: React.CSSProperties;\n buttonHover?: React.CSSProperties;\n buttonIcon?: React.CSSProperties;\n value?: React.CSSProperties;\n valueContainer?: React.CSSProperties;\n limits?: React.CSSProperties;\n };\n /** Custom button content (overrides default icons) */\n customButtons?: {\n increment?: React.ReactNode;\n decrement?: React.ReactNode;\n };\n /** Hide the limits display */\n hideLimits?: boolean;\n /** Layout direction */\n layout?: 'horizontal' | 'vertical';\n /** Sound configuration for interactions */\n soundConfig?: ComponentSoundConfig;\n}\n\n/**\n * NumberStepper Component\n * \n * @component\n * @description\n * A number input component with increment and decrement controls.\n * Supports keyboard navigation, min/max limits, and custom step values.\n * \n * @example\n * // Basic usage\n * <NumberStepper\n * value={count}\n * onChange={setCount}\n * min={0}\n * max={10}\n * />\n * \n * @example\n * // With label and icon\n * <NumberStepper\n * value={5}\n * onChange={(val) => setValue(val)}\n * min={0}\n * max={100}\n * step={5}\n * label=\"Quantity\"\n * icon=\"📦\"\n * />\n * \n * @example\n * // With custom styles\n * <NumberStepper\n * value={volume}\n * onChange={setVolume}\n * min={0}\n * max={100}\n * label=\"Volume\"\n * icon=\"🔊\"\n * customStyles={{\n * container: {\n * background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',\n * padding: '20px',\n * borderRadius: '16px',\n * },\n * label: { color: 'white', fontWeight: 'bold' },\n * button: {\n * background: 'rgba(255,255,255,0.2)',\n * color: 'white',\n * },\n * buttonHover: {\n * background: 'rgba(255,255,255,0.3)',\n * },\n * value: {\n * color: 'white',\n * fontSize: '24px',\n * fontWeight: 'bold',\n * },\n * }}\n * />\n * \n * @example\n * // Custom variant with horizontal layout\n * <NumberStepper\n * value={discount}\n * onChange={setDiscount}\n * min={0}\n * max={100}\n * step={5}\n * label=\"Discount %\"\n * icon=\"🏷️\"\n * variant=\"custom\"\n * customStyles={{\n * container: {\n * display: 'flex',\n * alignItems: 'center',\n * gap: '16px',\n * },\n * header: { flex: 1, marginBottom: 0 },\n * }}\n * />\n * \n * @example\n * // With custom buttons\n * <NumberStepper\n * value={rating}\n * onChange={setRating}\n * min={1}\n * max={5}\n * customButtons={{\n * decrement: <span>👎</span>,\n * increment: <span>👍</span>,\n * }}\n * />\n * \n * @param {NumberStepperProps} props - The props for the NumberStepper component\n * @returns {JSX.Element} The rendered NumberStepper component\n */\nexport const NumberStepper: React.FC<NumberStepperProps> = ({\n value,\n onChange,\n min = -Infinity,\n max = Infinity,\n step = 1,\n label,\n icon,\n disabled = false,\n size = 'medium',\n variant = 'default',\n showPlusMinus = false,\n allowKeyboard = true,\n className = '',\n customStyles = {},\n customButtons = {},\n hideLimits = false,\n layout = 'horizontal',\n soundConfig,\n color,\n tallyEmptyHint = '—'\n}) => {\n const { handlers, playSound } = useComponentSound(soundConfig);\n const [isIncrementing, setIsIncrementing] = useState(false);\n const [isDecrementing, setIsDecrementing] = useState(false);\n const [displayValue, setDisplayValue] = useState<number | string>(value);\n\n useEffect(() => {\n setDisplayValue(value);\n }, [value]);\n\n const handleIncrement = useCallback(() => {\n if (disabled || value >= max) return;\n \n playSound('click');\n const newValue = Math.min(value + step, max);\n onChange(newValue);\n setIsIncrementing(true);\n setTimeout(() => setIsIncrementing(false), 200);\n }, [value, onChange, max, step, disabled, playSound]);\n\n const handleDecrement = useCallback(() => {\n if (disabled || value <= min) return;\n \n playSound('click');\n const newValue = Math.max(value - step, min);\n onChange(newValue);\n setIsDecrementing(true);\n setTimeout(() => setIsDecrementing(false), 200);\n }, [value, onChange, min, step, disabled, playSound]);\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (!allowKeyboard || disabled) return;\n\n switch (e.key) {\n case 'ArrowUp':\n e.preventDefault();\n handleIncrement();\n break;\n case 'ArrowDown':\n e.preventDefault();\n handleDecrement();\n break;\n case 'PageUp': {\n e.preventDefault();\n const bigIncrease = Math.min(value + (step * 10), max);\n onChange(bigIncrease);\n break;\n }\n case 'PageDown': {\n e.preventDefault();\n const bigDecrease = Math.max(value - (step * 10), min);\n onChange(bigDecrease);\n break;\n }\n case 'Home':\n e.preventDefault();\n if (min !== -Infinity) onChange(min);\n break;\n case 'End':\n e.preventDefault();\n if (max !== Infinity) onChange(max);\n break;\n }\n }, [allowKeyboard, disabled, handleIncrement, handleDecrement, value, step, min, max, onChange]);\n\n const handleInputChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const inputValue = e.target.value;\n \n if (inputValue === '' || inputValue === '-') {\n setDisplayValue(inputValue);\n return;\n }\n\n const numValue = parseFloat(inputValue);\n if (!isNaN(numValue)) {\n setDisplayValue(numValue);\n }\n }, []);\n\n const handleInputBlur = useCallback(() => {\n let finalValue = typeof displayValue === 'string' \n ? (displayValue === '' || displayValue === '-' ? min : parseFloat(displayValue))\n : displayValue;\n\n if (isNaN(finalValue)) {\n finalValue = min;\n }\n\n finalValue = Math.max(min, Math.min(max, finalValue));\n \n if (step !== 1) {\n finalValue = Math.round(finalValue / step) * step;\n }\n\n onChange(finalValue);\n setDisplayValue(finalValue);\n }, [displayValue, min, max, step, onChange]);\n\n const containerClasses = [\n styles.container,\n styles[size],\n styles[variant],\n layout === 'vertical' && styles.vertical,\n disabled && styles.disabled,\n className\n ].filter(Boolean).join(' ');\n\n // Merge custom styles with hover states\n const [isButtonHovered, setIsButtonHovered] = useState<'increment' | 'decrement' | null>(null);\n\n const isDecrementDisabled = disabled || value <= min;\n const isIncrementDisabled = disabled || value >= max;\n\n const stepperContent = (\n <div className={styles.stepper} style={customStyles.stepper} onKeyDown={handleKeyDown} tabIndex={disabled ? -1 : 0} {...handlers}>\n <motion.button\n className={styles.button}\n style={{\n ...customStyles.button,\n ...(isButtonHovered === 'decrement' && customStyles.buttonHover)\n }}\n onMouseEnter={() => setIsButtonHovered('decrement')}\n onMouseLeave={() => setIsButtonHovered(null)}\n onClick={handleDecrement}\n disabled={isDecrementDisabled}\n whileTap={!isDecrementDisabled ? { scale: 0.9 } : undefined}\n animate={isDecrementing ? { scale: [1, 1.2, 1] } : undefined}\n transition={{ duration: 0.2 }}\n aria-label=\"Decrease value\"\n >\n {customButtons.decrement || (showPlusMinus ? (\n <span className={styles.buttonIcon} style={customStyles.buttonIcon}>−</span>\n ) : (\n <svg className={styles.buttonIcon} style={customStyles.buttonIcon} viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M15 18L9 12L15 6\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n ))}\n </motion.button>\n\n <div className={styles.valueContainer} style={customStyles.valueContainer}>\n <AnimatePresence mode=\"wait\">\n <motion.div\n key={value}\n initial={{ y: isIncrementing ? 10 : isDecrementing ? -10 : 0, opacity: 0 }}\n animate={{ y: 0, opacity: 1 }}\n exit={{ y: isIncrementing ? -10 : isDecrementing ? 10 : 0, opacity: 0 }}\n transition={{ duration: 0.15 }}\n className={styles.valueWrapper}\n >\n <input\n type=\"text\"\n className={styles.value}\n style={customStyles.value}\n value={displayValue}\n onChange={handleInputChange}\n onBlur={handleInputBlur}\n disabled={disabled}\n aria-label={label || \"Number input\"}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n />\n </motion.div>\n </AnimatePresence>\n </div>\n\n <motion.button\n className={styles.button}\n style={{\n ...customStyles.button,\n ...(isButtonHovered === 'increment' && customStyles.buttonHover)\n }}\n onMouseEnter={() => setIsButtonHovered('increment')}\n onMouseLeave={() => setIsButtonHovered(null)}\n onClick={handleIncrement}\n disabled={isIncrementDisabled}\n whileTap={!isIncrementDisabled ? { scale: 0.9 } : undefined}\n animate={isIncrementing ? { scale: [1, 1.2, 1] } : undefined}\n transition={{ duration: 0.2 }}\n aria-label=\"Increase value\"\n >\n {customButtons.increment || (showPlusMinus ? (\n <span className={styles.buttonIcon} style={customStyles.buttonIcon}>+</span>\n ) : (\n <svg className={styles.buttonIcon} style={customStyles.buttonIcon} viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M9 18L15 12L9 6\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n ))}\n </motion.button>\n </div>\n );\n\n // ── Tally variant: pen-stroke counter with explicit +/- buttons.\n if (variant === 'tally') {\n return (\n <TallyRow\n value={value}\n label={label}\n icon={icon}\n color={color}\n disabled={disabled}\n emptyHint={tallyEmptyHint}\n className={containerClasses}\n customStyles={customStyles}\n onIncrement={handleIncrement}\n onDecrement={handleDecrement}\n ariaLabel={label || 'Tally counter'}\n isDecrementDisabled={isDecrementDisabled}\n isIncrementDisabled={isIncrementDisabled}\n />\n );\n }\n\n // For custom variant with horizontal layout, render differently\n if (variant === 'custom' && (label || icon)) {\n return (\n <div className={containerClasses} style={{...customStyles.container, display: 'flex', alignItems: 'center'}}>\n <div className={styles.header} style={{...customStyles.header, flex: 1, marginBottom: 0}}>\n {icon && <span className={styles.icon} style={customStyles.icon}>{icon}</span>}\n {label && <label className={styles.label} style={customStyles.label}>{label}</label>}\n </div>\n {stepperContent}\n {!hideLimits && (min !== -Infinity || max !== Infinity) && (\n <div className={styles.limits} style={customStyles.limits}>\n <span className={styles.limit}>\n {min !== -Infinity && `Min: ${min}`}\n </span>\n <span className={styles.limit}>\n {max !== Infinity && `Max: ${max}`}\n </span>\n </div>\n )}\n </div>\n );\n }\n\n return (\n <div className={containerClasses} style={customStyles.container}>\n {(label || icon) && (\n <div className={styles.header} style={customStyles.header}>\n {icon && <span className={styles.icon} style={customStyles.icon}>{icon}</span>}\n {label && <label className={styles.label} style={customStyles.label}>{label}</label>}\n </div>\n )}\n \n {stepperContent}\n \n {!hideLimits && (min !== -Infinity || max !== Infinity) && (\n <div className={styles.limits} style={customStyles.limits}>\n <span className={styles.limit}>\n {min !== -Infinity && `Min: ${min}`}\n </span>\n <span className={styles.limit}>\n {max !== Infinity && `Max: ${max}`}\n </span>\n </div>\n )}\n </div>\n );\n};\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Tally variant internals\n// ─────────────────────────────────────────────────────────────────────────────\n\ninterface TallyMarksProps {\n count: number;\n color: string;\n}\n\nconst TallyMarks: React.FC<TallyMarksProps> = ({ count, color }) => {\n const groups: number[] = [];\n let left = Math.max(0, Math.floor(count));\n while (left > 0) {\n const n = Math.min(5, left);\n groups.push(n);\n left -= n;\n }\n return (\n <div className={styles.tallyMarks} aria-hidden=\"true\">\n {groups.map((n, i) => (\n <svg\n key={i}\n className={styles.tallyGroup}\n width=\"38\"\n height=\"22\"\n viewBox=\"0 0 38 22\"\n >\n {[0, 1, 2, 3].slice(0, Math.min(4, n)).map((j) => (\n <line\n key={j}\n x1={4 + j * 6}\n y1=\"2\"\n x2={4 + j * 6}\n y2=\"20\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n ))}\n {n === 5 && (\n <line\n x1=\"1\"\n y1=\"18\"\n x2=\"27\"\n y2=\"4\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n )}\n </svg>\n ))}\n </div>\n );\n};\n\ninterface TallyRowProps {\n value: number;\n label?: string;\n icon?: string;\n color?: string;\n disabled: boolean;\n emptyHint: string;\n className: string;\n customStyles: NonNullable<NumberStepperProps['customStyles']>;\n onIncrement: () => void;\n onDecrement: () => void;\n ariaLabel: string;\n isDecrementDisabled: boolean;\n isIncrementDisabled: boolean;\n}\n\nconst TallyRow: React.FC<TallyRowProps> = ({\n value,\n label,\n icon,\n color,\n disabled,\n emptyHint,\n className,\n customStyles,\n onIncrement,\n onDecrement,\n ariaLabel,\n isDecrementDisabled,\n isIncrementDisabled\n}) => {\n const resolvedColor = color || 'currentColor';\n\n return (\n <div\n aria-label={ariaLabel}\n aria-disabled={disabled || undefined}\n className={`${className} ${styles.tallyRow}`}\n style={customStyles.container}\n >\n {icon && (\n <span\n className={styles.tallyIcon}\n style={{ color: resolvedColor, ...customStyles.icon }}\n >\n {icon}\n </span>\n )}\n {label && (\n <span className={styles.tallyLabel} style={customStyles.label}>\n {label}\n </span>\n )}\n <div className={styles.tallyBody}>\n {value <= 0 ? (\n <span className={styles.tallyHint}>{emptyHint}</span>\n ) : (\n <TallyMarks count={value} color={resolvedColor} />\n )}\n </div>\n <button\n type=\"button\"\n className={styles.tallyButton}\n onClick={onDecrement}\n disabled={isDecrementDisabled}\n aria-label={`Decrease ${label || 'value'}`}\n >\n <span className={styles.tallyButtonIcon}>−</span>\n </button>\n <span\n className={styles.tallyValue}\n style={{ color: resolvedColor, ...customStyles.value }}\n aria-hidden=\"true\"\n >\n {value}\n </span>\n <button\n type=\"button\"\n className={styles.tallyButton}\n onClick={onIncrement}\n disabled={isIncrementDisabled}\n aria-label={`Increase ${label || 'value'}`}\n >\n <span className={styles.tallyButtonIcon}>+</span>\n </button>\n </div>\n );\n};","import React from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { useComponentSound, ComponentSoundConfig } from '../../../utils/useSound';\nimport styles from './ToggleButton.module.css';\n\n/**\n * Props for the ToggleButton component\n * @interface ToggleButtonProps\n */\nexport interface ToggleButtonProps {\n /** Whether the button is active/selected */\n active: boolean;\n /** Click handler */\n onClick: () => void;\n /** Icon or emoji to display */\n icon?: string | React.ReactNode;\n /** Label text */\n label?: string;\n /** Whether the button is disabled */\n disabled?: boolean;\n /** Size variant */\n size?: 'small' | 'medium' | 'large';\n /** Visual variant */\n variant?: 'default' | 'outlined' | 'filled' | 'ghost';\n /** Color when active */\n activeColor?: 'primary' | 'secondary' | 'success' | 'danger' | 'warning';\n /** Show a checkmark when active */\n showCheckmark?: boolean;\n /** Animation type for state change */\n animation?: 'scale' | 'rotate' | 'flip' | 'none';\n /** Custom className */\n className?: string;\n /** Custom inline styles */\n style?: React.CSSProperties;\n /** Custom color for border/background when active */\n color?: string;\n /** Tooltip text */\n tooltip?: string;\n /** Whether to show the label on mobile */\n hideLabelOnMobile?: boolean;\n /** Sound configuration for interactions */\n soundConfig?: ComponentSoundConfig;\n}\n\n/**\n * ToggleButton Component\n * \n * @component\n * @description\n * A toggle button component that can be activated/deactivated with a click.\n * Different from a toggle switch, this is a button with on/off states.\n * Perfect for boolean habits tracking or feature toggles.\n * \n * @example\n * // Basic usage\n * <ToggleButton\n * active={isActive}\n * onClick={() => setIsActive(!isActive)}\n * icon=\"🦷\"\n * label=\"Teeth\"\n * />\n * \n * @example\n * // With custom styling and animation\n * <ToggleButton\n * active={isEnabled}\n * onClick={handleToggle}\n * icon={<CustomIcon />}\n * label=\"Feature\"\n * variant=\"filled\"\n * activeColor=\"success\"\n * animation=\"flip\"\n * showCheckmark\n * />\n * \n * @param {ToggleButtonProps} props - The props for the ToggleButton component\n * @returns {JSX.Element} The rendered ToggleButton component\n */\nexport const ToggleButton: React.FC<ToggleButtonProps> = ({\n active,\n onClick,\n icon,\n label,\n disabled = false,\n size = 'medium',\n variant = 'default',\n activeColor = 'primary',\n showCheckmark = false,\n animation = 'scale',\n className = '',\n style = {},\n color,\n tooltip,\n hideLabelOnMobile = false,\n soundConfig\n}) => {\n const { handlers, playSound } = useComponentSound(soundConfig);\n const buttonClasses = [\n styles.button,\n styles[size],\n styles[variant],\n active && styles.active,\n active && styles[`active-${activeColor}`],\n disabled && styles.disabled,\n animation !== 'none' && styles[`animation-${animation}`],\n className\n ].filter(Boolean).join(' ');\n\n const labelClasses = [\n styles.label,\n hideLabelOnMobile && styles.hideMobile\n ].filter(Boolean).join(' ');\n\n const iconVariants = {\n scale: {\n inactive: { scale: 1 },\n active: { scale: [1, 1.2, 1] }\n },\n rotate: {\n inactive: { rotate: 0 },\n active: { rotate: 360 }\n },\n flip: {\n inactive: { rotateY: 0 },\n active: { rotateY: 180 }\n },\n none: {\n inactive: {},\n active: {}\n }\n };\n\n const checkmarkVariants = {\n hidden: { \n scale: 0, \n opacity: 0,\n rotate: -90\n },\n visible: { \n scale: 1, \n opacity: 1,\n rotate: 0,\n transition: {\n type: \"spring\" as const,\n stiffness: 500,\n damping: 25\n }\n }\n };\n\n const backgroundVariants = {\n inactive: {\n scale: 0,\n opacity: 0\n },\n active: {\n scale: 1,\n opacity: 1,\n transition: {\n type: \"spring\" as const,\n stiffness: 400,\n damping: 20\n }\n }\n };\n\n // Create dynamic styles with color prop\n const dynamicStyle = {\n ...style,\n ...(color && {\n '--toggle-color': color,\n '--toggle-border-color': active ? color : `${color}40`,\n '--toggle-bg-color': active ? `${color}20` : 'transparent'\n } as React.CSSProperties)\n };\n\n return (\n <motion.button\n className={buttonClasses}\n style={dynamicStyle}\n onClick={() => {\n playSound('toggle');\n onClick();\n }}\n disabled={disabled}\n whileHover={!disabled ? { scale: 1.05 } : undefined}\n whileTap={!disabled ? { scale: 0.95 } : undefined}\n title={tooltip}\n aria-pressed={active}\n aria-label={label}\n {...handlers}\n >\n <motion.div\n className={styles.background}\n variants={backgroundVariants}\n initial=\"inactive\"\n animate={active ? \"active\" : \"inactive\"}\n />\n\n <div className={styles.content}>\n {icon && (\n <motion.div \n className={styles.iconWrapper}\n variants={iconVariants[animation]}\n initial=\"inactive\"\n animate={active ? \"active\" : \"inactive\"}\n transition={{ duration: 0.3 }}\n >\n {typeof icon === 'string' ? (\n <span className={styles.icon}>{icon}</span>\n ) : (\n <div className={styles.icon}>{icon}</div>\n )}\n </motion.div>\n )}\n\n {label && <span className={labelClasses}>{label}</span>}\n\n <AnimatePresence>\n {showCheckmark && active && (\n <motion.div\n className={styles.checkmark}\n variants={checkmarkVariants}\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"hidden\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\">\n <path \n d=\"M20 6L9 17L4 12\" \n stroke=\"currentColor\" \n strokeWidth=\"3\" \n strokeLinecap=\"round\" \n strokeLinejoin=\"round\"\n />\n </svg>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n\n {/* Ripple effect */}\n <AnimatePresence>\n {active && (\n <motion.div\n className={styles.ripple}\n initial={{ scale: 0, opacity: 0.5 }}\n animate={{ scale: 2, opacity: 0 }}\n exit={{ scale: 0, opacity: 0 }}\n transition={{ duration: 0.6 }}\n />\n )}\n </AnimatePresence>\n </motion.button>\n );\n};","import { useState } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { useComponentSound, ComponentSoundConfig } from '../../../utils/useSound';\nimport styles from './Slider.module.css';\n\n/**\n * Label configuration for the slider endpoints\n * @interface SliderLabel\n */\nexport interface SliderLabel {\n /** Label text or emoji */\n label: string;\n /** Optional color override */\n color?: string;\n /** Position: 'start' | 'end' | number (percentage) */\n position?: 'start' | 'end' | number;\n}\n\n/**\n * Configuration for custom styling\n * @interface SliderConfig\n */\nexport interface SliderConfig {\n /** Custom color scheme */\n colors?: {\n track?: string;\n fill?: string;\n thumb?: string;\n thumbHover?: string;\n text?: string;\n label?: string;\n };\n /** Custom size preset */\n size?: 'sm' | 'md' | 'lg';\n /** Reserved for future use */\n animations?: {\n duration?: number;\n bounceIntensity?: number;\n };\n}\n\n/**\n * Props for the Slider component\n * @interface SliderProps\n */\nexport interface SliderProps {\n /** Current slider value */\n value: number;\n /** Callback when value changes */\n onChange: (value: number) => void;\n /** Minimum value */\n min?: number;\n /** Maximum value */\n max?: number;\n /** Step increment */\n step?: number;\n /** Optional label */\n label?: string;\n /** Show persistent value display below the track */\n showValue?: boolean;\n /** Custom value formatter */\n valueFormatter?: (value: number) => string;\n /** Labels for slider endpoints or custom positions */\n labels?: SliderLabel[];\n /** Custom styling configuration */\n config?: SliderConfig;\n /** Disabled state */\n disabled?: boolean;\n /** Custom CSS class */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Loading state */\n loading?: boolean;\n /** Color function for dynamic coloring */\n colorFunction?: (value: number) => string;\n /** Show a tooltip above the thumb while dragging */\n showTooltip?: boolean;\n /** Custom tooltip content */\n tooltipContent?: (value: number) => string;\n /** Sound configuration for interactions */\n soundConfig?: ComponentSoundConfig;\n /** Visual variant: 'track' (default range slider) or 'dots' (tally strip) */\n variant?: 'track' | 'dots';\n}\n\n/**\n * Slider component — responsive, accessible range input with a styled track, fill, and thumb.\n *\n * The thumb is inset at the track endpoints so it never overflows. Drag state is tracked\n * via pointer events (works on mouse, touch, and pen).\n */\nexport function Slider({\n value,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n label,\n showValue = false,\n valueFormatter,\n labels = [],\n config = {},\n disabled = false,\n className = '',\n style = {},\n loading = false,\n colorFunction,\n showTooltip = false,\n tooltipContent,\n soundConfig,\n variant = 'track',\n}: SliderProps) {\n const { handlers, playSound } = useComponentSound(soundConfig);\n const [isDragging, setIsDragging] = useState(false);\n\n const { colors = {}, size = 'md' } = config;\n\n const percentage = Math.max(0, Math.min(100, ((value - min) / (max - min)) * 100));\n\n const getDynamicColor = () => {\n if (colorFunction) return colorFunction(value);\n if (colors.fill) return colors.fill;\n return 'var(--color-primary)';\n };\n\n const formatValue = (val: number) => {\n if (valueFormatter) return valueFormatter(val);\n return `${val}${max <= 10 ? `/${max}` : ''}`;\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled || loading) return;\n const newValue = Number(e.target.value);\n playSound('click');\n onChange(newValue);\n };\n\n const startDrag = () => {\n if (disabled || loading) return;\n setIsDragging(true);\n };\n\n const endDrag = () => setIsDragging(false);\n\n const dynamicColor = getDynamicColor();\n const sizeClass = styles[`size-${size}`];\n const stateClass = disabled ? styles.disabled : '';\n const dragClass = isDragging ? styles.dragging : '';\n\n if (loading) {\n return (\n <div\n className={`${styles.slider} ${sizeClass} ${styles.loading} ${className}`}\n style={style}\n >\n {label && <label className={styles.label}>{label}</label>}\n <div className={styles.loadingTrack}>\n <motion.div\n className={styles.loadingIndicator}\n animate={{ x: ['-100%', '200%'] }}\n transition={{ repeat: Infinity, duration: 1.5, ease: 'easeInOut' }}\n />\n </div>\n </div>\n );\n }\n\n if (variant === 'dots') {\n const dotCount = Math.max(0, Math.floor((max - min) / step));\n const dotValues = Array.from({ length: dotCount }, (_, i) => min + (i + 1) * step);\n\n const handleDotClick = (dotValue: number) => {\n if (disabled || loading) return;\n playSound('click');\n const next = value === dotValue ? dotValue - step : dotValue;\n onChange(Math.max(min, next));\n };\n\n return (\n <div\n className={`${styles.slider} ${sizeClass} ${stateClass} ${className}`}\n style={style}\n {...handlers}\n >\n {label && <label className={styles.label}>{label}</label>}\n\n <div\n className={styles.dotsContainer}\n role=\"slider\"\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n aria-label={label}\n >\n {dotValues.map((dotValue) => {\n const filled = dotValue <= value;\n return (\n <button\n key={dotValue}\n type=\"button\"\n className={`${styles.dot} ${filled ? styles.dotFilled : ''}`}\n style={\n filled\n ? {\n backgroundColor: dynamicColor,\n borderColor: dynamicColor,\n }\n : undefined\n }\n onClick={() => handleDotClick(dotValue)}\n disabled={disabled}\n aria-label={\n valueFormatter\n ? valueFormatter(dotValue)\n : `Set to ${dotValue}`\n }\n />\n );\n })}\n </div>\n\n {showValue && (\n <div className={styles.valueDisplay} style={{ color: dynamicColor }}>\n {formatValue(value)}\n </div>\n )}\n </div>\n );\n }\n\n // Inset the thumb so its bounding box stays inside the track at 0/100%.\n // At percentage=0: marginLeft=0 → thumb flush-left. At 100%: marginLeft=-thumbSize → flush-right.\n const insetStyle = {\n left: `${percentage}%`,\n marginLeft: `calc(var(--slider-thumb-size) * ${-percentage / 100})`,\n };\n\n return (\n <div\n className={`${styles.slider} ${sizeClass} ${stateClass} ${dragClass} ${className}`}\n style={style}\n >\n {label && <label className={styles.label}>{label}</label>}\n\n <div className={styles.sliderContainer}>\n <div className={styles.track}>\n <div\n className={styles.fill}\n style={{ width: `${percentage}%`, backgroundColor: dynamicColor }}\n />\n </div>\n\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={value}\n onChange={handleChange}\n onPointerDown={startDrag}\n onPointerUp={endDrag}\n onPointerCancel={endDrag}\n onBlur={endDrag}\n {...handlers}\n className={styles.input}\n disabled={disabled}\n aria-label={label}\n />\n\n <div\n className={styles.thumb}\n style={{\n ...insetStyle,\n backgroundColor: dynamicColor,\n borderColor: colors.thumb || dynamicColor,\n }}\n />\n\n <AnimatePresence>\n {showTooltip && isDragging && !disabled && (\n <motion.div\n className={styles.tooltip}\n style={{ ...insetStyle, backgroundColor: dynamicColor }}\n initial={{ opacity: 0, y: 6, scale: 0.9 }}\n animate={{ opacity: 1, y: 0, scale: 1 }}\n exit={{ opacity: 0, y: 6, scale: 0.9 }}\n transition={{ duration: 0.15 }}\n >\n {tooltipContent ? tooltipContent(value) : formatValue(value)}\n <div\n className={styles.tooltipArrow}\n style={{ borderTopColor: dynamicColor }}\n />\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n\n {showValue && (\n <div className={styles.valueDisplay} style={{ color: dynamicColor }}>\n {formatValue(value)}\n </div>\n )}\n\n {labels.length > 0 && (\n <div className={styles.labelsContainer}>\n {labels.map((labelConfig, index) => {\n let position = 0;\n if (labelConfig.position === 'start') position = 0;\n else if (labelConfig.position === 'end') position = 100;\n else if (typeof labelConfig.position === 'number')\n position = labelConfig.position;\n\n return (\n <div\n key={index}\n className={styles.labelItem}\n style={{ left: `${position}%`, color: labelConfig.color }}\n >\n {labelConfig.label}\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n","import React, { useState, useEffect } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport styles from './LoadingSpinner.module.css';\n\n/**\n * Props for the LoadingSpinner component\n * @interface LoadingSpinnerProps\n */\nexport interface LoadingSpinnerProps {\n /** Static message to display. If not provided, will cycle through default messages */\n message?: string;\n /** Size variant of the loading spinner */\n size?: 'small' | 'medium' | 'large';\n /** Visual style variant of the loading spinner */\n variant?: 'dots' | 'spinner' | 'pulse';\n /** Additional CSS class names to apply */\n className?: string;\n /** Whether to show the text message below the spinner */\n showMessage?: boolean;\n /** Custom array of messages to rotate through (only used when message is not provided) */\n customMessages?: string[];\n /** Interval in milliseconds for message rotation (default: 2500ms) */\n messageRotationInterval?: number;\n /** Whether to show decorative sparkle effects */\n showSparkles?: boolean;\n /** Whether to render as a full-screen overlay */\n fullScreen?: boolean;\n /** Whether to show a backdrop behind the spinner (only with fullScreen) */\n overlay?: boolean;\n /** Custom color for the spinner elements (CSS color value) */\n color?: string;\n /** Custom background color (CSS color value) */\n backgroundColor?: string;\n}\n\nconst defaultMessages = [\n 'Loading your content...',\n 'Just a moment please...',\n 'Preparing something awesome...',\n 'Almost ready...',\n 'Working on it...',\n 'Just a sec...',\n 'Loading with care...',\n 'Getting things ready...',\n 'Almost there...',\n 'Polishing the details...'\n];\n\n/**\n * LoadingSpinner Component\n *\n * @component\n * @description\n * A highly customizable, animated loading spinner component built with Framer Motion.\n * Supports multiple visual variants, sizes, custom messages, and advanced styling options.\n * Perfect for indicating loading states across different contexts in your application.\n *\n * Features:\n * - Multiple spinner variants (dots, spinner, pulse)\n * - Three size options (small, medium, large)\n * - Rotating or static messages\n * - Customizable colors and styling\n * - Full-screen overlay support\n * - Decorative sparkle effects\n * - Accessibility support (respects reduced motion preferences)\n * - Theme-aware styling\n *\n * @example\n * // Basic usage\n * <LoadingSpinner />\n *\n * @example\n * // With custom message and variant\n * <LoadingSpinner\n * variant=\"pulse\"\n * message=\"Saving your changes...\"\n * size=\"large\"\n * />\n *\n * @example\n * // Full-screen overlay\n * <LoadingSpinner\n * fullScreen\n * overlay\n * message=\"Loading application...\"\n * />\n *\n * @example\n * // Custom messages and styling\n * <LoadingSpinner\n * customMessages={['Processing...', 'Almost done...', 'Final touches...']}\n * color=\"#ff6b6b\"\n * backgroundColor=\"#f8f9fa\"\n * showSparkles={false}\n * />\n *\n * @param {LoadingSpinnerProps} props - The props for the LoadingSpinner component\n * @returns {JSX.Element} The rendered LoadingSpinner component\n */\nexport const LoadingSpinner: React.FC<LoadingSpinnerProps> = ({\n message,\n size = 'medium',\n variant = 'dots',\n className = '',\n showMessage = true,\n customMessages,\n messageRotationInterval = 2500,\n showSparkles = true,\n fullScreen = false,\n overlay = false,\n color,\n backgroundColor\n}) => {\n const messagesToUse = customMessages || defaultMessages;\n const [currentMessageIndex, setCurrentMessageIndex] = useState(0);\n const [currentMessage, setCurrentMessage] = useState(message || messagesToUse[0]);\n\n useEffect(() => {\n if (!message && showMessage) {\n const interval = setInterval(() => {\n setCurrentMessageIndex((prev) => (prev + 1) % messagesToUse.length);\n }, messageRotationInterval);\n\n return () => clearInterval(interval);\n }\n return undefined;\n }, [message, showMessage, messagesToUse.length, messageRotationInterval]);\n\n useEffect(() => {\n if (!message && showMessage) {\n setCurrentMessage(messagesToUse[currentMessageIndex]);\n }\n }, [currentMessageIndex, message, messagesToUse, showMessage]);\n\n const containerClasses = [\n styles.loadingContainer,\n styles[size],\n styles[variant],\n fullScreen && styles.fullScreen,\n overlay && styles.overlay,\n className\n ].filter(Boolean).join(' ');\n\n const customStyle = {\n ...(color && { '--spinner-color': color }),\n ...(backgroundColor && { '--spinner-background': backgroundColor }),\n } as React.CSSProperties;\n\n const renderDots = () => (\n <motion.div\n className={styles.dotsSpinner}\n animate={{ rotate: 360 }}\n transition={{\n duration: 2,\n repeat: Infinity,\n ease: 'linear'\n }}\n >\n <motion.div\n className={styles.dot1}\n animate={{\n scale: [1, 1.3, 1],\n y: [0, -6, 0]\n }}\n transition={{\n duration: 1.5,\n repeat: Infinity,\n ease: 'easeInOut',\n delay: 0\n }}\n />\n <motion.div\n className={styles.dot2}\n animate={{\n scale: [1, 1.3, 1],\n y: [0, -6, 0]\n }}\n transition={{\n duration: 1.5,\n repeat: Infinity,\n ease: 'easeInOut',\n delay: 0.5\n }}\n />\n <motion.div\n className={styles.dot3}\n animate={{\n scale: [1, 1.3, 1],\n y: [0, -6, 0]\n }}\n transition={{\n duration: 1.5,\n repeat: Infinity,\n ease: 'easeInOut',\n delay: 1\n }}\n />\n </motion.div>\n );\n\n const renderSpinner = () => (\n <motion.div\n className={styles.circleSpinner}\n animate={{ rotate: 360 }}\n transition={{\n duration: 1,\n repeat: Infinity,\n ease: 'linear'\n }}\n />\n );\n\n const renderPulse = () => (\n <motion.div\n className={styles.pulseSpinner}\n animate={{\n scale: [1, 1.2, 1],\n opacity: [1, 0.7, 1]\n }}\n transition={{\n duration: 1.5,\n repeat: Infinity,\n ease: 'easeInOut'\n }}\n />\n );\n\n const renderSpinnerVariant = () => {\n switch (variant) {\n case 'spinner':\n return renderSpinner();\n case 'pulse':\n return renderPulse();\n case 'dots':\n default:\n return renderDots();\n }\n };\n\n return (\n <div className={containerClasses} style={customStyle}>\n {renderSpinnerVariant()}\n\n {showMessage && (\n <AnimatePresence mode=\"wait\">\n <motion.p\n key={currentMessage}\n className={styles.loadingText}\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -10 }}\n transition={{\n duration: 0.4,\n ease: 'easeOut'\n }}\n >\n {currentMessage}\n </motion.p>\n </AnimatePresence>\n )}\n\n {showSparkles && (\n <div className={styles.sparkleContainer}>\n {[...Array(4)].map((_, i) => (\n <motion.div\n key={i}\n className={styles.sparkle}\n animate={{\n opacity: [0, 1, 0],\n scale: [0.5, 1, 0.5],\n rotate: [0, 180, 360]\n }}\n transition={{\n duration: 3,\n repeat: Infinity,\n delay: i * 0.75,\n ease: 'easeInOut'\n }}\n style={{\n left: `${20 + (i % 2) * 60}%`,\n top: `${20 + Math.floor(i / 2) * 60}%`\n }}\n />\n ))}\n </div>\n )}\n </div>\n );\n};","import { useEffect, useState, useRef } from 'react';\nimport { motion, HTMLMotionProps } from 'framer-motion';\nimport styles from './DecryptedText.module.css';\n\nexport interface DecryptedTextProps extends Omit<HTMLMotionProps<'span'>, 'children'> {\n /** The text to decrypt/reveal */\n text: string;\n /** Animation interval in milliseconds */\n speed?: number;\n /** Maximum iterations before revealing all text (non-sequential mode) */\n maxIterations?: number;\n /** Whether to reveal characters one-by-one or scramble all at once */\n sequential?: boolean;\n /** Starting point for sequential reveal */\n revealDirection?: 'start' | 'end' | 'center';\n /** Limit scrambling to characters from the original text only */\n useOriginalCharsOnly?: boolean;\n /** Pool of characters to use for scrambling animation */\n characters?: string;\n /** Class name for revealed characters */\n className?: string;\n /** Class name for the parent container */\n parentClassName?: string;\n /** Class name for encrypted/scrambled characters */\n encryptedClassName?: string;\n /** When to trigger the animation */\n animateOn?: 'view' | 'hover' | 'both';\n}\n\n/**\n * DecryptedText Component\n *\n * Creates an animated text reveal effect where characters progressively\n * decrypt from scrambled characters to the final text.\n *\n * @example\n * // Basic usage - animates on hover\n * <DecryptedText text=\"Hello World\" />\n *\n * @example\n * // Animate when scrolled into view\n * <DecryptedText text=\"Welcome\" animateOn=\"view\" />\n *\n * @example\n * // Sequential reveal from center\n * <DecryptedText\n * text=\"Decrypt Me\"\n * sequential\n * revealDirection=\"center\"\n * speed={30}\n * />\n */\nexport const DecryptedText: React.FC<DecryptedTextProps> = ({\n text,\n speed = 50,\n maxIterations = 10,\n sequential = false,\n revealDirection = 'start',\n useOriginalCharsOnly = false,\n characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',\n className = '',\n parentClassName = '',\n encryptedClassName = '',\n animateOn = 'hover',\n ...props\n}) => {\n const [displayText, setDisplayText] = useState<string>(text);\n const [isHovering, setIsHovering] = useState<boolean>(false);\n const [isScrambling, setIsScrambling] = useState<boolean>(false);\n const [revealedIndices, setRevealedIndices] = useState<Set<number>>(new Set());\n const [hasAnimated, setHasAnimated] = useState<boolean>(false);\n const containerRef = useRef<HTMLSpanElement>(null);\n\n useEffect(() => {\n let interval: NodeJS.Timeout;\n let currentIteration = 0;\n\n const getNextIndex = (revealedSet: Set<number>): number => {\n const textLength = text.length;\n switch (revealDirection) {\n case 'start':\n return revealedSet.size;\n case 'end':\n return textLength - 1 - revealedSet.size;\n case 'center': {\n const middle = Math.floor(textLength / 2);\n const offset = Math.floor(revealedSet.size / 2);\n const nextIndex =\n revealedSet.size % 2 === 0 ? middle + offset : middle - offset - 1;\n\n if (nextIndex >= 0 && nextIndex < textLength && !revealedSet.has(nextIndex)) {\n return nextIndex;\n }\n\n for (let i = 0; i < textLength; i++) {\n if (!revealedSet.has(i)) return i;\n }\n return 0;\n }\n default:\n return revealedSet.size;\n }\n };\n\n const availableChars = useOriginalCharsOnly\n ? Array.from(new Set(text.split(''))).filter((char) => char !== ' ')\n : characters.split('');\n\n const shuffleText = (originalText: string, currentRevealed: Set<number>): string => {\n if (useOriginalCharsOnly) {\n const positions = originalText.split('').map((char, i) => ({\n char,\n isSpace: char === ' ',\n index: i,\n isRevealed: currentRevealed.has(i),\n }));\n\n const nonSpaceChars = positions\n .filter((p) => !p.isSpace && !p.isRevealed)\n .map((p) => p.char);\n\n for (let i = nonSpaceChars.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [nonSpaceChars[i], nonSpaceChars[j]] = [nonSpaceChars[j], nonSpaceChars[i]];\n }\n\n let charIndex = 0;\n return positions\n .map((p) => {\n if (p.isSpace) return ' ';\n if (p.isRevealed) return originalText[p.index];\n return nonSpaceChars[charIndex++];\n })\n .join('');\n } else {\n return originalText\n .split('')\n .map((char, i) => {\n if (char === ' ') return ' ';\n if (currentRevealed.has(i)) return originalText[i];\n return availableChars[Math.floor(Math.random() * availableChars.length)];\n })\n .join('');\n }\n };\n\n if (isHovering) {\n setIsScrambling(true);\n interval = setInterval(() => {\n setRevealedIndices((prevRevealed) => {\n if (sequential) {\n if (prevRevealed.size < text.length) {\n const nextIndex = getNextIndex(prevRevealed);\n const newRevealed = new Set(prevRevealed);\n newRevealed.add(nextIndex);\n setDisplayText(shuffleText(text, newRevealed));\n return newRevealed;\n } else {\n clearInterval(interval);\n setIsScrambling(false);\n return prevRevealed;\n }\n } else {\n setDisplayText(shuffleText(text, prevRevealed));\n currentIteration++;\n if (currentIteration >= maxIterations) {\n clearInterval(interval);\n setIsScrambling(false);\n setDisplayText(text);\n }\n return prevRevealed;\n }\n });\n }, speed);\n } else {\n setDisplayText(text);\n setRevealedIndices(new Set());\n setIsScrambling(false);\n }\n\n return () => {\n if (interval) clearInterval(interval);\n };\n }, [\n isHovering,\n text,\n speed,\n maxIterations,\n sequential,\n revealDirection,\n characters,\n useOriginalCharsOnly,\n ]);\n\n useEffect(() => {\n if (animateOn !== 'view' && animateOn !== 'both') return;\n\n const observerCallback = (entries: IntersectionObserverEntry[]) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting && !hasAnimated) {\n setIsHovering(true);\n setHasAnimated(true);\n }\n });\n };\n\n const observerOptions = {\n root: null,\n rootMargin: '0px',\n threshold: 0.1,\n };\n\n const observer = new IntersectionObserver(observerCallback, observerOptions);\n const currentRef = containerRef.current;\n if (currentRef) {\n observer.observe(currentRef);\n }\n\n return () => {\n if (currentRef) {\n observer.unobserve(currentRef);\n }\n };\n }, [animateOn, hasAnimated]);\n\n const hoverProps =\n animateOn === 'hover' || animateOn === 'both'\n ? {\n onMouseEnter: () => setIsHovering(true),\n onMouseLeave: () => setIsHovering(false),\n }\n : {};\n\n return (\n <motion.span\n className={`${styles.wrapper} ${parentClassName}`}\n ref={containerRef}\n {...hoverProps}\n {...props}\n >\n <span className={styles.srOnly}>{displayText}</span>\n\n <span aria-hidden=\"true\">\n {displayText.split('').map((char, index) => {\n const isRevealedOrDone =\n revealedIndices.has(index) || !isScrambling || !isHovering;\n\n return (\n <span\n key={index}\n className={isRevealedOrDone ? className : encryptedClassName}\n >\n {char}\n </span>\n );\n })}\n </span>\n </motion.span>\n );\n};\n","import React, { useRef } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { Button } from '../../atoms/Button';\nimport { TextInput } from '../../atoms/TextInput';\nimport { TextArea } from '../../atoms/TextArea';\nimport styles from './ArrayInput.module.css';\n\n/**\n * Configuration for a field in complex object arrays\n * @interface FieldConfig\n */\nexport interface FieldConfig {\n /** The property name in the object */\n name: string;\n /** Display label for the field */\n label: string;\n /** HTML input type (text, email, url, etc.) */\n type?: string;\n /** Placeholder text for the input */\n placeholder?: string;\n /** Whether to use textarea for multiline input */\n multiline?: boolean;\n /** Number of rows for textarea (default: 3) */\n rows?: number;\n}\n\n/**\n * Base props that all array inputs share\n * @interface BaseArrayInputProps\n */\ninterface BaseArrayInputProps {\n /** Label text displayed above the array input */\n label: string;\n /** Style object for individual array items */\n itemStyle?: React.CSSProperties;\n /** Style object for input fields */\n inputStyle?: React.CSSProperties;\n}\n\n/**\n * Props for simple string array input\n * @interface SimpleArrayInputProps\n */\ninterface SimpleArrayInputProps extends BaseArrayInputProps {\n /** Input type - defaults to 'simple' for string arrays */\n type?: 'simple';\n /** Array of string values */\n values: string[];\n /** Callback fired when array values change */\n onChange: (values: string[]) => void;\n /** Placeholder text for individual input fields */\n placeholder?: string;\n /** Whether to use textarea for multiline input */\n multiline?: boolean;\n /** Number of rows for textarea (default: 3) */\n rows?: number;\n /** Button variant for add button (default: 'primary') */\n buttonVariant?: 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger';\n}\n\n/**\n * Props for complex object array input\n * @interface ComplexArrayInputProps\n * @template T - The type of objects in the array\n */\ninterface ComplexArrayInputProps<T extends Record<string, string>> extends BaseArrayInputProps {\n /** Input type - must be 'complex' for object arrays */\n type: 'complex';\n /** Array of object values */\n values: T[];\n /** Callback fired when array values change */\n onChange: (values: T[]) => void;\n /** Configuration for the fields in each object */\n fields: FieldConfig[];\n /** Optional function to generate unique keys for React rendering */\n getKey?: (item: T, index: number) => string;\n /** Button variant for add button (default: 'primary') */\n buttonVariant?: 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger';\n}\n\nexport type ArrayInputProps<T extends Record<string, string> = Record<string, string>> = \n | SimpleArrayInputProps\n | ComplexArrayInputProps<T>;\n\n/**\n * ArrayInput component - Versatile dynamic list manager\n * \n * @component\n * @description\n * A flexible component that can handle both simple string arrays and complex object arrays.\n * Users can add, remove, and edit items dynamically. Supports custom field configurations\n * for complex data structures.\n * \n * @example\n * // Simple string array\n * <ArrayInput\n * label=\"Tags\"\n * values={tags}\n * onChange={setTags}\n * placeholder=\"Enter tag\"\n * />\n * \n * @example\n * // Complex object array\n * <ArrayInput\n * type=\"complex\"\n * label=\"Social Links\"\n * values={links}\n * onChange={setLinks}\n * fields={[\n * { name: 'label', label: 'Label', placeholder: 'GitHub' },\n * { name: 'url', label: 'URL', type: 'url', placeholder: 'https://github.com/...' }\n * ]}\n * />\n */\nexport function ArrayInput<T extends Record<string, string> = Record<string, string>>(\n props: Readonly<ArrayInputProps<T>>\n) {\n if (props.type === 'complex') {\n return <ComplexArrayInput {...props} />;\n }\n \n return <SimpleArrayInput {...props as SimpleArrayInputProps} />;\n}\n\n// Simple string array implementation\nfunction SimpleArrayInput({ \n label, \n values, \n onChange, \n placeholder,\n itemStyle,\n inputStyle,\n multiline = false,\n rows = 3,\n buttonVariant = 'primary'\n}: Readonly<SimpleArrayInputProps>) {\n // Use a ref to store stable IDs that persist across renders\n const itemIdsRef = useRef<string[]>([]);\n \n // Ensure we have an ID for each value\n while (itemIdsRef.current.length < values.length) {\n itemIdsRef.current.push(`item-${Date.now()}-${Math.random()}`);\n }\n \n // Remove excess IDs if values array shrunk\n if (itemIdsRef.current.length > values.length) {\n itemIdsRef.current = itemIdsRef.current.slice(0, values.length);\n }\n \n const handleChange = (index: number, value: string) => {\n const newValues = [...values];\n newValues[index] = value;\n onChange(newValues);\n };\n\n const handleAdd = () => {\n // Add a new ID for the new item\n itemIdsRef.current.push(`item-${Date.now()}-${Math.random()}`);\n onChange([...values, '']);\n };\n\n const handleRemove = (index: number) => {\n const newValues = values.filter((_, i) => i !== index);\n // Remove the corresponding ID\n itemIdsRef.current.splice(index, 1);\n onChange(newValues);\n };\n\n return (\n <div className={styles.arrayInput}>\n <h3 className={styles.arrayInputLabel}>{label}</h3>\n <div>\n <AnimatePresence>\n {values.map((value, index) => (\n <motion.div \n key={itemIdsRef.current[index]} \n className={styles.arrayInputItem}\n style={itemStyle}\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0 }}\n transition={{ \n duration: 0.3,\n ease: \"easeInOut\",\n layout: { duration: 0.2 }\n }}\n >\n <div className={styles.inputWrapper}>\n {multiline ? (\n <div style={inputStyle}>\n <TextArea\n label=\"\"\n value={value}\n onChange={(newValue) => handleChange(index, newValue)}\n placeholder={placeholder}\n rows={rows}\n compact\n />\n </div>\n ) : (\n <input\n type=\"text\"\n value={value}\n onChange={(e) => handleChange(index, e.target.value)}\n placeholder={placeholder}\n className={styles.input}\n style={inputStyle}\n />\n )}\n </div>\n <Button \n variant=\"ghost\"\n size=\"small\"\n onClick={() => handleRemove(index)}\n aria-label=\"Remove item\"\n className={styles.removeButton}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <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\"/>\n </svg>\n </Button>\n </motion.div>\n ))}\n </AnimatePresence>\n </div>\n <Button \n variant={buttonVariant}\n size=\"small\"\n onClick={handleAdd}\n className={styles.addButton}\n >\n {label}\n </Button>\n </div>\n );\n}\n\n// Complex object array implementation\nfunction ComplexArrayInput<T extends Record<string, string>>({ \n label, \n values, \n onChange, \n fields,\n getKey,\n itemStyle,\n inputStyle,\n buttonVariant = 'primary'\n}: Readonly<ComplexArrayInputProps<T>>) {\n const handleChange = (index: number, field: string, value: string) => {\n const newValues = [...values];\n newValues[index] = { ...newValues[index], [field]: value };\n onChange(newValues);\n };\n\n const handleAdd = () => {\n const newItem = fields.reduce((acc, field) => {\n return { ...acc, [field.name]: '' };\n }, {} as T);\n onChange([...values, newItem]);\n };\n\n const handleRemove = (index: number) => {\n const newValues = values.filter((_, i) => i !== index);\n onChange(newValues);\n };\n\n const generateKey = (item: T, index: number) => {\n if (getKey) return getKey(item, index);\n \n // Generate key from all field values\n return fields.map(f => item[f.name] || '').join('-') + `-${index}`;\n };\n\n return (\n <div className={styles.arrayInput}>\n <h3 className={styles.arrayInputLabel}>{label}</h3>\n <div>\n <AnimatePresence>\n {values.map((value, index) => (\n <motion.div \n key={generateKey(value, index)} \n className={`${styles.arrayInputItem} ${fields.length > 1 ? styles.complexItem : ''}`}\n style={itemStyle}\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0 }}\n transition={{ \n duration: 0.3,\n ease: \"easeInOut\",\n layout: { duration: 0.2 }\n }}\n >\n <div className={styles.fieldsWrapper}>\n {fields.map((field) => (\n <div key={field.name} style={inputStyle}>\n {field.multiline ? (\n <TextArea\n value={value[field.name] || ''}\n onChange={(newValue) => handleChange(index, field.name, newValue)}\n label={field.label}\n placeholder={field.placeholder}\n rows={field.rows}\n compact\n />\n ) : (\n <TextInput\n value={value[field.name] || ''}\n onChange={(newValue) => handleChange(index, field.name, newValue)}\n label={field.label}\n type={field.type}\n placeholder={field.placeholder}\n />\n )}\n </div>\n ))}\n </div>\n <Button \n variant=\"ghost\"\n size=\"small\"\n onClick={() => handleRemove(index)}\n aria-label=\"Remove item\"\n className={styles.removeButton}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <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\"/>\n </svg>\n </Button>\n </motion.div>\n ))}\n </AnimatePresence>\n </div>\n <Button \n variant={buttonVariant}\n size=\"small\"\n onClick={handleAdd}\n className={styles.addButton}\n >\n Add {label}\n </Button>\n </div>\n );\n}\n\n// Export the interface for backward compatibility\nexport interface LabeledLink {\n label: string;\n url: string;\n}","import React, { useState, useEffect, useRef } from 'react';\nimport { motion } from 'framer-motion';\nimport { Edit, Check, X } from 'lucide-react';\nimport styles from './EditFAB.module.css';\n\nexport interface EditFABProps {\n canEdit: boolean;\n isEditMode: boolean;\n hasUnsavedChanges?: boolean;\n isSaving?: boolean;\n onEnterEditMode: () => void;\n onExitEditMode: () => void;\n position?: {\n bottom?: string | number;\n right?: string | number;\n top?: string | number;\n left?: string | number;\n };\n}\n\nexport const EditFAB: React.FC<EditFABProps> = ({\n canEdit,\n isEditMode,\n hasUnsavedChanges = false,\n isSaving = false,\n onEnterEditMode,\n onExitEditMode,\n position = { bottom: 32, right: 32 }\n}) => {\n const [isMobile, setIsMobile] = useState(false);\n const [currentPosition, setCurrentPosition] = useState<{ x: number; y: number } | null>(null);\n const [isDragging, setIsDragging] = useState(false);\n const fabRef = useRef<HTMLButtonElement>(null);\n const dragStartPos = useRef<{ x: number; y: number } | null>(null);\n const elementStartPos = useRef<{ x: number; y: number } | null>(null);\n\n useEffect(() => {\n const checkMobile = () => {\n setIsMobile(window.innerWidth <= 768);\n };\n checkMobile();\n window.addEventListener('resize', checkMobile);\n \n return () => {\n window.removeEventListener('resize', checkMobile);\n };\n }, []);\n\n // Touch handlers for mobile dragging\n const handleTouchStart = (e: React.TouchEvent) => {\n if (!isMobile) return;\n \n const touch = e.touches[0];\n const rect = fabRef.current?.getBoundingClientRect();\n \n if (rect) {\n dragStartPos.current = { x: touch.clientX, y: touch.clientY };\n elementStartPos.current = { \n x: rect.left + rect.width / 2, \n y: rect.top + rect.height / 2 \n };\n setIsDragging(true);\n }\n };\n\n const handleTouchMove = (e: React.TouchEvent) => {\n if (!isDragging || !dragStartPos.current || !elementStartPos.current) return;\n \n e.preventDefault();\n const touch = e.touches[0];\n \n const deltaX = touch.clientX - dragStartPos.current.x;\n const deltaY = touch.clientY - dragStartPos.current.y;\n \n let newX = elementStartPos.current.x + deltaX;\n let newY = elementStartPos.current.y + deltaY;\n \n // Keep within viewport bounds\n const padding = 30;\n newX = Math.max(padding, Math.min(window.innerWidth - padding, newX));\n newY = Math.max(padding, Math.min(window.innerHeight - padding, newY));\n \n setCurrentPosition({ x: newX, y: newY });\n };\n\n const handleTouchEnd = () => {\n setIsDragging(false);\n dragStartPos.current = null;\n elementStartPos.current = null;\n };\n\n const handleClick = (_e: React.MouseEvent) => {\n // Only trigger click if we haven't been dragging\n if (!isDragging && !isSaving) {\n if (isEditMode) {\n onExitEditMode();\n } else {\n onEnterEditMode();\n }\n }\n };\n\n if (!canEdit) return null;\n\n const getPositionStyles = (): React.CSSProperties => {\n if (currentPosition) {\n return {\n position: 'fixed',\n left: `${currentPosition.x}px`,\n top: `${currentPosition.y}px`,\n transform: 'translate(-50%, -50%)',\n touchAction: 'none'\n };\n }\n \n return {\n position: 'fixed',\n ...position,\n touchAction: isMobile ? 'none' : 'auto'\n };\n };\n\n const getVariantClass = () => {\n if (isSaving) return styles.primary;\n if (isEditMode) {\n return hasUnsavedChanges ? styles.success : styles.secondary;\n }\n return styles.primary;\n };\n\n const getIcon = () => {\n if (isSaving) {\n return <div className={styles.loader} />;\n }\n if (isEditMode) {\n return hasUnsavedChanges ? <Check size={24} /> : <X size={24} />;\n }\n return <Edit size={24} />;\n };\n\n const getAriaLabel = () => {\n if (isSaving) return \"Saving changes\";\n if (isEditMode) {\n return hasUnsavedChanges ? \"Save and exit edit mode\" : \"Exit edit mode\";\n }\n return \"Enter edit mode\";\n };\n\n return (\n <motion.button\n ref={fabRef}\n className={`${styles.fab} ${getVariantClass()} ${isMobile ? styles.draggable : ''} ${isDragging ? styles.dragging : ''}`}\n style={getPositionStyles()}\n onClick={handleClick}\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n disabled={isSaving}\n aria-label={getAriaLabel()}\n initial={{ scale: 0, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n exit={{ scale: 0, opacity: 0 }}\n whileHover={!isSaving && !isDragging ? { scale: 1.1 } : {}}\n whileTap={!isSaving && !isDragging ? { scale: 0.9 } : {}}\n transition={{ \n type: \"spring\", \n stiffness: 260, \n damping: 20\n }}\n >\n {getIcon()}\n </motion.button>\n );\n};","import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { Search, X, Folder, Users, Book, MessageSquare, UserPlus } from 'lucide-react';\nimport styles from './styles/SearchBar.module.css';\n\nexport interface FilterOption {\n value: string;\n label: string;\n icon: React.ElementType;\n}\n\nexport interface SearchResult {\n id: string;\n type: string;\n title?: string;\n subtitle?: string;\n meta?: string;\n}\n\nexport interface SearchBarProps {\n className?: string;\n placeholder?: string;\n onSearch?: (query: string, filter: string) => Promise<SearchResult[]>;\n onResultClick?: (result: SearchResult) => void;\n onClear?: () => void;\n debounceDelay?: number;\n minSearchLength?: number;\n showFilter?: boolean;\n enableKeyboardShortcut?: boolean;\n filterOptions?: FilterOption[];\n entityIcons?: { [key: string]: React.ElementType };\n}\n\n// Default filter options for backwards compatibility\nconst defaultFilterOptions: FilterOption[] = [\n { value: 'all', label: 'All', icon: Search },\n { value: 'projects', label: 'Projects', icon: Folder },\n { value: 'clients', label: 'Clients', icon: Users },\n { value: 'contacts', label: 'Contacts', icon: Book },\n { value: 'interactions', label: 'Interactions', icon: MessageSquare },\n { value: 'team', label: 'Team', icon: UserPlus },\n];\n\nconst defaultEntityIcons = {\n projects: Folder,\n clients: Users,\n contacts: Book,\n interactions: MessageSquare,\n team: UserPlus,\n};\n\n// Legacy type for backwards compatibility\nexport type SearchFilter = 'all' | 'projects' | 'clients' | 'contacts' | 'interactions' | 'team';\n\nexport const SearchBar: React.FC<SearchBarProps> = ({ \n className,\n placeholder = \"Search (Ctrl+Space)...\",\n onSearch,\n onResultClick,\n onClear,\n debounceDelay = 300,\n minSearchLength = 2,\n showFilter = true,\n enableKeyboardShortcut = true,\n filterOptions: customFilterOptions,\n entityIcons: customEntityIcons\n}) => {\n const filterOptions = customFilterOptions ?? defaultFilterOptions;\n const entityIcons = customEntityIcons ?? defaultEntityIcons;\n \n const [query, setQuery] = useState('');\n const [filter, setFilter] = useState<string>(filterOptions[0]?.value ?? 'all');\n const [results, setResults] = useState<SearchResult[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n const searchRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const debounceTimerRef = useRef<NodeJS.Timeout>();\n const resultsRef = useRef<HTMLDivElement>(null);\n\n // Perform search with debounce\n const performSearch = useCallback(async (searchQuery: string, searchFilter: string) => {\n if (searchQuery.trim().length < minSearchLength) {\n setResults([]);\n setIsDropdownOpen(false);\n return;\n }\n\n if (!onSearch) {\n // If no search handler provided, just show empty results\n setResults([]);\n setIsDropdownOpen(false);\n return;\n }\n\n setIsLoading(true);\n try {\n const searchResults = await onSearch(searchQuery, searchFilter);\n setResults(searchResults);\n setIsDropdownOpen(searchResults.length > 0);\n setHighlightedIndex(-1);\n } catch (error) {\n console.error('Search error:', error);\n setResults([]);\n setIsDropdownOpen(false);\n } finally {\n setIsLoading(false);\n }\n }, [onSearch, minSearchLength]);\n\n // Handle input change with debounce\n useEffect(() => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n\n if (query.trim()) {\n debounceTimerRef.current = setTimeout(() => {\n performSearch(query, filter);\n }, debounceDelay);\n } else {\n setResults([]);\n setIsDropdownOpen(false);\n }\n\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }, [query, filter, performSearch, debounceDelay]);\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (searchRef.current && !searchRef.current.contains(event.target as Node)) {\n setIsDropdownOpen(false);\n setHighlightedIndex(-1);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n // Global keyboard shortcut for search (Ctrl+Space)\n useEffect(() => {\n if (!enableKeyboardShortcut) return;\n\n const handleGlobalKeyDown = (e: KeyboardEvent) => {\n // Ctrl+Space or Cmd+Space to focus search\n if ((e.ctrlKey || e.metaKey) && e.code === 'Space') {\n e.preventDefault();\n inputRef.current?.focus();\n inputRef.current?.select();\n }\n };\n\n document.addEventListener('keydown', handleGlobalKeyDown);\n return () => document.removeEventListener('keydown', handleGlobalKeyDown);\n }, [enableKeyboardShortcut]);\n\n // Auto-scroll to highlighted item\n useEffect(() => {\n if (highlightedIndex >= 0 && resultsRef.current) {\n const highlightedElement = resultsRef.current.querySelector(\n `[data-result-index=\"${highlightedIndex}\"]`\n );\n if (highlightedElement) {\n highlightedElement.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest'\n });\n }\n }\n }, [highlightedIndex]);\n\n // Handle keyboard navigation\n const handleKeyDown = (e: React.KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isDropdownOpen && results.length > 0) {\n setIsDropdownOpen(true);\n setHighlightedIndex(0);\n } else if (results.length > 0) {\n setHighlightedIndex(prev => \n prev < results.length - 1 ? prev + 1 : 0\n );\n }\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (isDropdownOpen && results.length > 0) {\n setHighlightedIndex(prev => \n prev > 0 ? prev - 1 : results.length - 1\n );\n }\n break;\n case 'Enter':\n e.preventDefault();\n if (!isDropdownOpen && results.length > 0) {\n // If dropdown is closed, open it and select first result\n setIsDropdownOpen(true);\n setHighlightedIndex(0);\n } else if (results.length > 0) {\n // If no item is highlighted, select the first one\n const indexToUse = highlightedIndex >= 0 ? highlightedIndex : 0;\n if (indexToUse < results.length) {\n handleResultClick(results[indexToUse]);\n }\n }\n break;\n case 'Escape':\n setIsDropdownOpen(false);\n setHighlightedIndex(-1);\n inputRef.current?.blur();\n break;\n }\n };\n\n // Handle result click\n const handleResultClick = (result: SearchResult) => {\n if (onResultClick) {\n onResultClick(result);\n }\n setQuery('');\n setIsDropdownOpen(false);\n setHighlightedIndex(-1);\n };\n\n // Clear search\n const handleClear = () => {\n setQuery('');\n setResults([]);\n setIsDropdownOpen(false);\n setHighlightedIndex(-1);\n inputRef.current?.focus();\n if (onClear) {\n onClear();\n }\n };\n\n // Group results by type\n const groupedResults = results.reduce((acc, result) => {\n if (!acc[result.type]) {\n acc[result.type] = [];\n }\n acc[result.type].push(result);\n return acc;\n }, {} as Record<string, SearchResult[]>);\n\n // Highlight matching text\n const highlightMatch = (text: string | undefined, highlight: string) => {\n if (!text || !highlight.trim()) return text || '';\n \n const regex = new RegExp(`(${highlight.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')})`, 'gi');\n const parts = text.split(regex);\n \n return parts.map((part, index) => \n regex.test(part) ? (\n <mark key={index} className={styles.highlight}>{part}</mark>\n ) : (\n part\n )\n );\n };\n\n return (\n <div ref={searchRef} className={`${styles.searchContainer} ${className || ''}`}>\n <div className={styles.searchInputWrapper}>\n <Search className={styles.searchIcon} />\n \n <input\n ref={inputRef}\n type=\"text\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n onKeyDown={handleKeyDown}\n onFocus={() => query.trim() && results.length > 0 && setIsDropdownOpen(true)}\n placeholder={placeholder}\n className={styles.searchInput}\n aria-label=\"Search\"\n aria-expanded={isDropdownOpen}\n aria-controls=\"search-results\"\n aria-autocomplete=\"list\"\n />\n\n {query && (\n <motion.button\n className={styles.clearButton}\n onClick={handleClear}\n whileHover={{ scale: 1.1 }}\n whileTap={{ scale: 0.9 }}\n initial={{ opacity: 0, scale: 0.8 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.8 }}\n >\n <X />\n </motion.button>\n )}\n\n {showFilter && (\n <select\n value={filter}\n onChange={(e) => setFilter(e.target.value)}\n className={styles.filterSelect}\n aria-label=\"Filter search results\"\n >\n {filterOptions.map(option => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n )}\n </div>\n\n <AnimatePresence>\n {isDropdownOpen && (\n <motion.div\n ref={resultsRef}\n id=\"search-results\"\n className={styles.resultsDropdown}\n initial={{ opacity: 0, y: -10 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -10 }}\n transition={{ duration: 0.2 }}\n >\n {isLoading ? (\n <div className={styles.loadingState}>\n <div className={styles.spinner} />\n <span>Searching...</span>\n </div>\n ) : results.length === 0 ? (\n <div className={styles.emptyState}>\n No results found for \"{query}\"\n </div>\n ) : (\n <div className={styles.resultsGroups}>\n {Object.entries(groupedResults).map(([type, groupResults]) => {\n const Icon = entityIcons[type as keyof typeof entityIcons];\n return (\n <div key={type} className={styles.resultGroup}>\n <div className={styles.groupHeader}>\n {Icon && <Icon className={styles.groupIcon} />}\n <span className={styles.groupTitle}>\n {type.charAt(0).toUpperCase() + type.slice(1)}\n </span>\n <span className={styles.groupCount}>\n {groupResults.length}\n </span>\n </div>\n <div className={styles.groupResults}>\n {groupResults.map((result) => {\n const globalIndex = results.indexOf(result);\n return (\n <motion.button\n key={`${result.type}-${result.id}`}\n data-result-index={globalIndex}\n className={`${styles.resultItem} ${\n highlightedIndex === globalIndex ? styles.highlighted : ''\n }`}\n onClick={() => handleResultClick(result)}\n whileHover={{ x: 4 }}\n onMouseEnter={() => setHighlightedIndex(globalIndex)}\n >\n <div className={styles.resultContent}>\n <div className={styles.resultTitle}>\n {highlightMatch(result.title || 'Untitled', query)}\n </div>\n {result.subtitle && (\n <div className={styles.resultSubtitle}>\n {highlightMatch(result.subtitle, query)}\n </div>\n )}\n </div>\n {result.meta && (\n <div className={styles.resultMeta}>\n {result.meta}\n </div>\n )}\n </motion.button>\n );\n })}\n </div>\n </div>\n );\n })}\n </div>\n )}\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n};","import { useMemo } from 'react';\nimport dayjs from 'dayjs';\nimport { MobileTimePicker } from '@mui/x-date-pickers/MobileTimePicker';\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';\nimport { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';\nimport { createTheme, ThemeProvider } from '@mui/material/styles';\nimport styles from './TimeInput.module.css';\n\nconst lightTheme = createTheme({\n palette: {\n mode: 'light',\n primary: { main: '#3b82f6' },\n background: {\n default: '#f8fafc',\n paper: '#ffffff',\n },\n text: {\n primary: '#0f172a',\n secondary: '#475569',\n },\n },\n});\n\nconst darkTheme = createTheme({\n palette: {\n mode: 'dark',\n primary: { main: '#f5b829' },\n background: {\n default: '#010907',\n paper: '#0e1a19',\n },\n text: {\n primary: '#f1f5f9',\n secondary: '#cbd5e1',\n },\n },\n});\n\nexport interface TimeInputProps {\n label: string;\n value: string;\n onChange: (newValue: string) => void;\n placeholder?: string;\n onFocus?: () => void;\n onBlur?: () => void;\n error?: boolean;\n success?: boolean;\n loading?: boolean;\n disabled?: boolean;\n required?: boolean;\n className?: string;\n}\n\nexport function TimeInput({\n label,\n value,\n onChange,\n error = false,\n success = false,\n loading = false,\n disabled = false,\n required = false,\n className = '',\n}: Readonly<TimeInputProps>) {\n const dayjsValue = value ? dayjs(`2000-01-01 ${value}`) : null;\n\n const isDark =\n typeof document !== 'undefined' &&\n !!document.documentElement.getAttribute('data-theme')?.includes('dark');\n const muiTheme = useMemo(() => (isDark ? darkTheme : lightTheme), [isDark]);\n\n const getContainerClassName = () => {\n const classes = [styles.timeInput];\n if (error) classes.push(styles.error);\n if (success) classes.push(styles.success);\n if (loading) classes.push(styles.loading);\n if (disabled) classes.push(styles.disabled);\n if (className) classes.push(className);\n return classes.join(' ');\n };\n\n return (\n <div className={getContainerClassName()}>\n {label && (\n <label className={styles.label}>\n {label}\n {required && <span className={styles.required}>*</span>}\n </label>\n )}\n <ThemeProvider theme={muiTheme}>\n <LocalizationProvider dateAdapter={AdapterDayjs}>\n <MobileTimePicker\n value={dayjsValue}\n onChange={(newValue) => {\n onChange(newValue ? newValue.format('HH:mm') : '');\n }}\n ampm={false}\n views={['hours', 'minutes']}\n disabled={disabled || loading}\n slotProps={{\n textField: {\n size: 'small',\n fullWidth: true,\n className: styles.picker,\n sx: {\n '& .MuiPickersOutlinedInput-root': {\n fontFamily:\n \"'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, monospace\",\n fontSize: 'var(--font-size-lg)',\n borderRadius: 'var(--radius-lg)',\n color: 'var(--color-text) !important',\n '& .MuiPickersOutlinedInput-notchedOutline': {\n borderWidth: '2px !important',\n borderColor: 'var(--color-border) !important',\n },\n '&:hover .MuiPickersOutlinedInput-notchedOutline': {\n borderColor: 'var(--color-border-hover) !important',\n },\n '&.Mui-focused .MuiPickersOutlinedInput-notchedOutline': {\n borderColor: 'var(--color-primary) !important',\n },\n },\n '& .MuiIconButton-root': {\n color: 'var(--color-text-secondary) !important',\n },\n },\n },\n }}\n />\n </LocalizationProvider>\n </ThemeProvider>\n </div>\n );\n}\n","import React, { createContext, useContext, useState, useEffect } from 'react';\n\nexport type Theme = 'light' | 'dark' | 'lossito' | 'lossito-dark' | 'dao' | 'dao-dark' | 'crt';\n\ninterface ThemeContextType {\n theme: Theme;\n setTheme: (theme: Theme) => void;\n toggleTheme: () => void;\n}\n\nconst ThemeContext = createContext<ThemeContextType | undefined>(undefined);\n\nexport const useTheme = () => {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within a ThemeProvider');\n }\n return context;\n};\n\n/** Safe version of useTheme that returns null when outside a ThemeProvider */\nexport const useThemeSafe = (): ThemeContextType | null => {\n return useContext(ThemeContext) ?? null;\n};\n\ninterface ThemeProviderProps {\n children: React.ReactNode;\n defaultTheme?: Theme;\n storageKey?: string;\n}\n\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({\n children,\n defaultTheme = 'light',\n storageKey = 'app-theme',\n}) => {\n const [theme, setThemeState] = useState<Theme>(() => {\n // Check localStorage first\n const stored = localStorage.getItem(storageKey);\n if (stored && ['light', 'dark', 'lossito', 'lossito-dark', 'dao', 'dao-dark', 'crt'].includes(stored)) {\n return stored as Theme;\n }\n // Check system preference\n if (window.matchMedia('(prefers-color-scheme: dark)').matches) {\n return 'dark';\n }\n return defaultTheme;\n });\n\n const setTheme = (newTheme: Theme) => {\n setThemeState(newTheme);\n localStorage.setItem(storageKey, newTheme);\n };\n\n const toggleTheme = () => {\n const themeOrder: Theme[] = ['light', 'dark', 'lossito', 'lossito-dark', 'dao', 'dao-dark', 'crt'];\n const currentIndex = themeOrder.indexOf(theme);\n const nextIndex = (currentIndex + 1) % themeOrder.length;\n setTheme(themeOrder[nextIndex]);\n };\n\n useEffect(() => {\n const root = document.documentElement;\n \n // Apply theme attribute\n root.setAttribute('data-theme', theme);\n \n // Apply dark class if needed\n if (theme.includes('dark')) {\n root.classList.add('dark');\n } else {\n root.classList.remove('dark');\n }\n }, [theme]);\n\n // Listen for system theme changes\n useEffect(() => {\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handleChange = (e: MediaQueryListEvent) => {\n const stored = localStorage.getItem(storageKey);\n if (!stored) {\n setThemeState(e.matches ? 'dark' : 'light');\n }\n };\n\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }, [storageKey]);\n\n return (\n <ThemeContext.Provider value={{ theme, setTheme, toggleTheme }}>\n {children}\n </ThemeContext.Provider>\n );\n};","import React from 'react';\nimport { motion } from 'framer-motion';\nimport { Sun, Moon } from 'lucide-react';\nimport { useThemeSafe, Theme } from '../../organisms/ThemeProvider/ThemeProvider';\nimport styles from './ThemeSwitcher.module.css';\n\nexport interface ThemeOption {\n value: Theme;\n label: string;\n icon: React.ReactNode;\n}\n\nexport interface ThemeSwitcherProps {\n variant?: 'button' | 'dropdown' | 'toggle' | 'icon';\n showLabel?: boolean;\n className?: string;\n currentTheme?: Theme;\n onThemeChange?: (theme: Theme) => void;\n themes?: ThemeOption[];\n}\n\nexport const ThemeSwitcher: React.FC<ThemeSwitcherProps> = ({\n variant = 'button',\n showLabel = false,\n className = '',\n currentTheme,\n onThemeChange,\n themes: customThemes,\n}) => {\n // Use safe version that returns null when outside a ThemeProvider\n const contextTheme = useThemeSafe();\n\n const theme = currentTheme ?? contextTheme?.theme ?? 'light';\n const setTheme = onThemeChange ?? contextTheme?.setTheme ?? (() => {});\n\n const defaultThemes: ThemeOption[] = [\n { value: 'light', label: 'Light', icon: <Sun /> },\n { value: 'dark', label: 'Dark', icon: <Moon /> },\n { value: 'lossito', label: 'Lossito Light', icon: '✨' },\n { value: 'lossito-dark', label: 'Lossito Dark', icon: '🌑' },\n { value: 'dao', label: 'Dao Light', icon: '⬜' },\n { value: 'dao-dark', label: 'Dao Dark', icon: '⬛' },\n ];\n\n const themes = customThemes ?? defaultThemes;\n\n const currentThemeIndex = themes.findIndex(t => t.value === theme);\n const currentThemeData = themes[currentThemeIndex] ?? themes[0];\n\n if (variant === 'toggle') {\n // Simple toggle between light and dark\n const isDark = theme.includes('dark');\n return (\n <motion.button\n className={`${styles.toggle} ${className}`}\n onClick={() => setTheme(isDark ? 'light' : 'dark')}\n whileTap={{ scale: 0.95 }}\n aria-label=\"Toggle theme\"\n >\n <motion.div\n className={styles.toggleTrack}\n animate={{ backgroundColor: isDark ? 'var(--color-primary)' : 'var(--color-border)' }}\n >\n <motion.div\n className={styles.toggleThumb}\n animate={{ x: isDark ? 24 : 0 }}\n transition={{ type: 'spring', stiffness: 500, damping: 30 }}\n >\n {isDark ? <Moon size={14} /> : <Sun size={14} />}\n </motion.div>\n </motion.div>\n {showLabel && <span className={styles.label}>{isDark ? 'Dark' : 'Light'}</span>}\n </motion.button>\n );\n }\n\n if (variant === 'icon') {\n return (\n <button\n type=\"button\"\n className={`${styles.iconButton} ${className}`}\n onClick={() => {\n const nextIndex = (currentThemeIndex + 1) % themes.length;\n setTheme(themes[nextIndex].value);\n }}\n aria-label={`Current theme: ${currentThemeData.label}. Click to change.`}\n title={currentThemeData.label}\n >\n {currentThemeData.icon}\n {showLabel && <span className={styles.label}>{currentThemeData.label}</span>}\n </button>\n );\n }\n\n if (variant === 'dropdown') {\n return (\n <div className={`${styles.dropdown} ${className}`}>\n <motion.button\n className={styles.dropdownTrigger}\n whileTap={{ scale: 0.98 }}\n >\n {currentThemeData.icon}\n {showLabel && <span className={styles.label}>{currentThemeData.label}</span>}\n </motion.button>\n <motion.div\n className={styles.dropdownMenu}\n initial={{ opacity: 0, y: -10 }}\n animate={{ opacity: 1, y: 0 }}\n >\n {themes.map((t) => (\n <motion.button\n key={t.value}\n className={`${styles.dropdownItem} ${theme === t.value ? styles.active : ''}`}\n onClick={() => setTheme(t.value)}\n whileHover={{ x: 4 }}\n whileTap={{ scale: 0.98 }}\n >\n <span className={styles.icon}>{t.icon}</span>\n <span className={styles.text}>{t.label}</span>\n </motion.button>\n ))}\n </motion.div>\n </div>\n );\n }\n\n // Default button variant - cycles through themes\n return (\n <motion.button\n className={`${styles.button} ${className}`}\n onClick={() => {\n const nextIndex = (currentThemeIndex + 1) % themes.length;\n setTheme(themes[nextIndex].value);\n }}\n whileTap={{ scale: 0.95 }}\n whileHover={{ scale: 1.05 }}\n aria-label={`Current theme: ${currentThemeData.label}. Click to change.`}\n >\n <motion.div\n key={theme}\n initial={{ rotate: -180, opacity: 0 }}\n animate={{ rotate: 0, opacity: 1 }}\n exit={{ rotate: 180, opacity: 0 }}\n transition={{ duration: 0.3 }}\n className={styles.iconWrapper}\n >\n {currentThemeData.icon}\n </motion.div>\n {showLabel && <span className={styles.label}>{currentThemeData.label}</span>}\n </motion.button>\n );\n};","import React from 'react';\nimport { Info, Github, SquareKanban } from 'lucide-react';\nimport { motion } from 'framer-motion';\nimport styles from './Tabs.module.css';\n\nexport interface Tab {\n id: string;\n label: string;\n icon?: React.ComponentType<object> | React.ReactNode;\n}\n\nexport interface TabsProps {\n activeTab: string;\n onTabChange: (tab: string) => void;\n tabs?: Tab[];\n className?: string;\n /** Stretch each tab to share the available width equally */\n fullWidth?: boolean;\n}\n\n// Default tabs for backwards compatibility\nconst defaultTabs: Tab[] = [\n { id: 'details', icon: Info, label: 'Dettagli' },\n { id: 'github', icon: Github, label: 'GitHub' },\n { id: 'jira', icon: SquareKanban, label: 'Jira' },\n { id: 'functional', icon: Info, label: 'Analisi funzionale' }\n];\n\n// Legacy type for backwards compatibility\nexport type TabType = 'details' | 'github' | 'jira' | 'functional';\n\nexport const Tabs: React.FC<TabsProps> = ({\n activeTab,\n onTabChange,\n tabs: customTabs,\n className = '',\n fullWidth = false\n}) => {\n const tabs = customTabs ?? defaultTabs;\n\n return (\n <div className={`${styles.tabs} ${fullWidth ? styles.fullWidth : ''} ${className}`}>\n {tabs.map((tab) => {\n const isActive = activeTab === tab.id;\n \n return (\n <motion.button\n key={tab.id}\n className={styles.tab}\n data-active={isActive}\n onClick={() => onTabChange(tab.id)}\n style={{ position: 'relative' }}\n >\n <motion.div\n animate={{\n rotate: isActive ? [0, -10, 10, -5, 5, 0] : 0,\n }}\n transition={{\n rotate: {\n duration: 0.5,\n ease: 'easeInOut'\n }\n }}\n >\n {tab.icon && (\n React.isValidElement(tab.icon) ? (\n <span className={styles.tabIcon}>{tab.icon}</span>\n ) : (\n <span className={styles.tabIcon}>\n {React.createElement(tab.icon as React.ComponentType)}\n </span>\n )\n )}\n </motion.div>\n <span>{tab.label}</span>\n </motion.button>\n );\n })}\n </div>\n );\n};","import React, { useEffect, useState } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { createPortal } from 'react-dom';\nimport styles from './Toast.module.css';\n\nexport type ToastType = 'success' | 'error' | 'warning' | 'info';\n\nexport interface ToastData {\n id: string;\n type: ToastType;\n title?: string;\n message: string;\n duration?: number;\n}\n\ninterface ToastProps {\n toasts: ToastData[];\n removeToast: (id: string) => void;\n}\n\nconst getIcon = (type: ToastType) => {\n switch (type) {\n case 'success':\n return (\n <svg className={`${styles.icon} ${styles.iconSuccess}`} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n );\n case 'error':\n return (\n <svg className={`${styles.icon} ${styles.iconError}`} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n );\n case 'warning':\n return (\n <svg className={`${styles.icon} ${styles.iconWarning}`} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <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\" />\n </svg>\n );\n case 'info':\n return (\n <svg className={`${styles.icon} ${styles.iconInfo}`} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <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\" />\n </svg>\n );\n }\n};\n\nconst getToastStyle = (type: ToastType) => {\n switch (type) {\n case 'success': return styles.toastSuccess;\n case 'error': return styles.toastError;\n case 'warning': return styles.toastWarning;\n case 'info': return styles.toastInfo;\n default: return '';\n }\n};\n\nconst ToastItem: React.FC<{ toast: ToastData; removeToast: (id: string) => void }> = ({\n toast,\n removeToast,\n}) => {\n const [progress, setProgress] = useState(100);\n const duration = toast.duration || 5000;\n\n useEffect(() => {\n const timer = setTimeout(() => {\n removeToast(toast.id);\n }, duration);\n\n const interval = setInterval(() => {\n setProgress((prev) => {\n const newProgress = prev - 100 / (duration / 100);\n return newProgress <= 0 ? 0 : newProgress;\n });\n }, 100);\n\n return () => {\n clearTimeout(timer);\n clearInterval(interval);\n };\n }, [toast.id, duration, removeToast]);\n\n return (\n <motion.div\n className={`${styles.toast} ${getToastStyle(toast.type)}`}\n initial={{ opacity: 0, x: 100, scale: 0.9 }}\n animate={{ opacity: 1, x: 0, scale: 1 }}\n exit={{ opacity: 0, x: 100, scale: 0.9 }}\n transition={{ type: 'spring', stiffness: 500, damping: 40 }}\n layout\n >\n {getIcon(toast.type)}\n <div className={styles.content}>\n {toast.title && <p className={styles.title}>{toast.title}</p>}\n <p className={styles.message}>{toast.message}</p>\n </div>\n <button\n className={styles.closeButton}\n onClick={() => removeToast(toast.id)}\n aria-label=\"Close notification\"\n >\n <svg width=\"16\" height=\"16\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n <motion.div\n className={styles.progressBar}\n initial={{ width: '100%' }}\n animate={{ width: `${progress}%` }}\n style={{\n color: toast.type === 'success' ? '#10B981'\n : toast.type === 'error' ? '#EF4444'\n : toast.type === 'warning' ? '#F59E0B'\n : '#3B82F6',\n }}\n />\n </motion.div>\n );\n};\n\nexport const ToastContainer: React.FC<ToastProps> = ({ toasts, removeToast }) => {\n if (typeof document === 'undefined') return null;\n\n return createPortal(\n <div className={styles.toastContainer}>\n <AnimatePresence mode=\"sync\">\n {toasts.map((toast) => (\n <ToastItem key={toast.id} toast={toast} removeToast={removeToast} />\n ))}\n </AnimatePresence>\n </div>,\n document.body\n );\n};\n","import React from 'react';\nimport { ChevronRight } from 'lucide-react';\nimport styles from './Breadcrumb.module.css';\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n}\n\nexport interface BreadcrumbProps {\n items: BreadcrumbItem[];\n onNavigate?: (href: string) => void;\n className?: string;\n}\n\n/**\n * Breadcrumb Component\n *\n * Navigation breadcrumb trail. Router-agnostic: pass onNavigate to handle\n * clicks on breadcrumb links (e.g. with react-router's navigate function).\n *\n * @example\n * <Breadcrumb\n * items={[\n * { label: 'Home', href: '/' },\n * { label: 'Settings', href: '/settings' },\n * { label: 'Profile' },\n * ]}\n * onNavigate={(href) => navigate(href)}\n * />\n */\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({ items, onNavigate, className = '' }) => {\n return (\n <nav className={`${styles.breadcrumb} ${className}`} aria-label=\"Breadcrumb\">\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n\n return (\n <React.Fragment key={index}>\n {index > 0 && <ChevronRight size={14} className={styles.separator} />}\n {isLast || !item.href ? (\n <span className={`${styles.item} ${isLast ? styles.current : ''}`}>\n {item.label}\n </span>\n ) : (\n <button\n className={`${styles.item} ${styles.link}`}\n onClick={() => onNavigate?.(item.href!)}\n >\n {item.label}\n </button>\n )}\n </React.Fragment>\n );\n })}\n </nav>\n );\n};\n","import { useState, useCallback } from 'react';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { Plus, type LucideIcon } from 'lucide-react';\nimport styles from './LiquidButton.module.css';\n\nexport interface QuickAction {\n key: string;\n label: string;\n icon: LucideIcon;\n color?: string;\n onClick: () => void;\n}\n\nexport interface LiquidButtonProps {\n /** Array of quick actions to show when expanded */\n actions: QuickAction[];\n /** Custom icon for the main button (defaults to Plus) */\n icon?: LucideIcon;\n /** Custom class name for the container */\n className?: string;\n}\n\n/**\n * LiquidButton Component\n *\n * A floating action button that expands to reveal quick action options.\n * The main button rotates 45 degrees when expanded (Plus becomes X).\n * Actions fan out above the button with staggered animations.\n *\n * @example\n * <LiquidButton\n * actions={[\n * { key: 'add', label: 'Add Item', icon: Plus, color: '#2196F3', onClick: () => {} },\n * { key: 'edit', label: 'Edit', icon: Edit, color: '#FF9800', onClick: () => {} },\n * ]}\n * />\n */\nexport const LiquidButton: React.FC<LiquidButtonProps> = ({\n actions,\n icon: Icon = Plus,\n className = '',\n}) => {\n const [expanded, setExpanded] = useState(false);\n\n const handleToggle = useCallback(() => {\n setExpanded((prev) => !prev);\n }, []);\n\n const handleAction = useCallback((action: QuickAction) => {\n setExpanded(false);\n action.onClick();\n }, []);\n\n return (\n <>\n <AnimatePresence>\n {expanded && (\n <motion.div\n className={styles.overlay}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n onClick={handleToggle}\n />\n )}\n </AnimatePresence>\n <div className={`${styles.container} ${className}`}>\n <AnimatePresence>\n {expanded && (\n <div className={styles.actions}>\n {actions.map((action, index) => (\n <motion.button\n key={action.key}\n type=\"button\"\n className={styles.actionButton}\n initial={{ opacity: 0, scale: 0.8 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.8 }}\n transition={{\n duration: 0.15,\n delay: (actions.length - 1 - index) * 0.05,\n }}\n onClick={() => handleAction(action)}\n >\n <action.icon size={18} color={action.color} />\n <span className={styles.actionLabel}>{action.label}</span>\n </motion.button>\n ))}\n </div>\n )}\n </AnimatePresence>\n\n <motion.button\n type=\"button\"\n className={styles.button}\n onClick={handleToggle}\n animate={{ rotate: expanded ? 45 : 0 }}\n transition={{ duration: 0.2 }}\n aria-label={expanded ? 'Close actions' : 'Open actions'}\n >\n <Icon size={24} strokeWidth={2.5} />\n </motion.button>\n </div>\n </>\n );\n};\n","import { useEffect, useMemo, useState } from 'react';\nimport { RRule, Weekday } from 'rrule';\nimport { Checkbox } from '../../atoms/Checkbox';\nimport { NumberStepper } from '../../atoms/NumberStepper';\nimport { SelectInput } from '../../atoms/SelectInput';\nimport styles from './RecurrencePicker.module.css';\n\nexport interface RecurrencePickerProps {\n /**\n * Current RRULE body (e.g. `FREQ=WEEKLY;BYDAY=MO`). If omitted, the picker\n * falls back to its internal defaults.\n */\n value?: string;\n /** Called whenever the user changes the rule. */\n onChange: (rule: string) => void;\n /** Custom className applied to the outer container. */\n className?: string;\n}\n\ntype Freq = 'DAILY' | 'WEEKLY' | 'MONTHLY' | 'YEARLY';\n\ninterface State {\n freq: Freq;\n interval: number;\n byDay: string[];\n byMonthDay: number;\n monthlyLast: boolean;\n byMonth: number;\n yearDay: number;\n}\n\nconst DEFAULT_STATE: State = {\n freq: 'WEEKLY',\n interval: 1,\n byDay: ['MO'],\n byMonthDay: 1,\n monthlyLast: false,\n byMonth: 1,\n yearDay: 1,\n};\n\nconst WEEKDAYS: { code: string; label: string; rrule: Weekday }[] = [\n { code: 'MO', label: 'M', rrule: RRule.MO },\n { code: 'TU', label: 'T', rrule: RRule.TU },\n { code: 'WE', label: 'W', rrule: RRule.WE },\n { code: 'TH', label: 'T', rrule: RRule.TH },\n { code: 'FR', label: 'F', rrule: RRule.FR },\n { code: 'SA', label: 'S', rrule: RRule.SA },\n { code: 'SU', label: 'S', rrule: RRule.SU },\n];\n\nconst MONTHS = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\n\nconst FREQ_MAP: Record<Freq, number> = {\n DAILY: RRule.DAILY,\n WEEKLY: RRule.WEEKLY,\n MONTHLY: RRule.MONTHLY,\n YEARLY: RRule.YEARLY,\n};\n\nconst REVERSE_FREQ: Record<number, Freq> = {\n [RRule.DAILY]: 'DAILY',\n [RRule.WEEKLY]: 'WEEKLY',\n [RRule.MONTHLY]: 'MONTHLY',\n [RRule.YEARLY]: 'YEARLY',\n};\n\nconst buildRule = (s: State): string => {\n const opts: Record<string, unknown> = { freq: FREQ_MAP[s.freq] };\n if (s.interval > 1) opts.interval = s.interval;\n\n if (s.freq === 'WEEKLY' && s.byDay.length > 0) {\n opts.byweekday = s.byDay\n .map(c => WEEKDAYS.find(w => w.code === c)?.rrule)\n .filter((w): w is Weekday => !!w);\n }\n if (s.freq === 'MONTHLY') {\n opts.bymonthday = s.monthlyLast ? -1 : s.byMonthDay;\n }\n if (s.freq === 'YEARLY') {\n opts.bymonth = s.byMonth;\n opts.bymonthday = s.yearDay;\n }\n\n const rule = new RRule(opts);\n return rule.toString().replace(/^(?:DTSTART:[^\\n]*\\n)?RRULE:/, '');\n};\n\nconst parseRule = (rule: string): State | null => {\n try {\n const opts = RRule.parseString(rule);\n const freq = REVERSE_FREQ[opts.freq as number];\n if (!freq) return null;\n\n const byweekday = (opts.byweekday as Weekday[] | number[] | undefined) ?? [];\n const byDay = byweekday\n .map(w => {\n const n = typeof w === 'number' ? w : (w as Weekday).weekday;\n return WEEKDAYS.find(d => d.rrule.weekday === n)?.code;\n })\n .filter((c): c is string => !!c);\n\n const bmd = opts.bymonthday;\n const bymonthday = Array.isArray(bmd) ? bmd[0] : bmd;\n\n const bm = opts.bymonth;\n const bymonth = Array.isArray(bm) ? bm[0] : bm;\n\n return {\n freq,\n interval: opts.interval || 1,\n byDay: byDay.length > 0 ? byDay : ['MO'],\n byMonthDay: freq === 'MONTHLY' && bymonthday && bymonthday > 0 ? bymonthday : 1,\n monthlyLast: freq === 'MONTHLY' && bymonthday === -1,\n byMonth: freq === 'YEARLY' ? bymonth || 1 : 1,\n yearDay: freq === 'YEARLY' && bymonthday ? bymonthday : 1,\n };\n } catch {\n return null;\n }\n};\n\nconst stateFromValue = (value: string | undefined): State => {\n if (!value) return DEFAULT_STATE;\n return parseRule(value) ?? DEFAULT_STATE;\n};\n\nexport const RecurrencePicker: React.FC<RecurrencePickerProps> = ({\n value,\n onChange,\n className,\n}) => {\n const [state, setState] = useState<State>(() => stateFromValue(value));\n const built = useMemo(() => buildRule(state), [state]);\n\n // Re-sync internal state if the parent passes a different rule than the one\n // we currently render. The `built === value` guard prevents the loop where\n // our own emit comes back through `value` and triggers a redundant resync.\n useEffect(() => {\n if (value && value !== built) {\n const parsed = parseRule(value);\n if (parsed) setState(parsed);\n }\n }, [value, built]);\n\n // On mount, if the parent didn't seed a rule, push our default up so its\n // state matches what we visually display. Runs once.\n useEffect(() => {\n if (!value) onChange(built);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const update = (patch: Partial<State>) => {\n const next = { ...state, ...patch };\n setState(next);\n onChange(buildRule(next));\n };\n\n const toggleDay = (code: string) => {\n const byDay = state.byDay.includes(code)\n ? state.byDay.filter(c => c !== code)\n : [...state.byDay, code];\n update({ byDay });\n };\n\n const preview = useMemo(() => {\n try {\n return RRule.fromString(built).toText();\n } catch {\n return built;\n }\n }, [built]);\n\n const unitLabel: Record<Freq, string> = {\n DAILY: state.interval === 1 ? 'day' : 'days',\n WEEKLY: state.interval === 1 ? 'week' : 'weeks',\n MONTHLY: state.interval === 1 ? 'month' : 'months',\n YEARLY: state.interval === 1 ? 'year' : 'years',\n };\n\n return (\n <div className={`${styles.container}${className ? ` ${className}` : ''}`}>\n <div className={styles.field}>\n <SelectInput\n label=\"Frequency\"\n value={state.freq}\n onChange={v => update({ freq: v as Freq })}\n options={[\n { value: 'DAILY', label: 'Daily' },\n { value: 'WEEKLY', label: 'Weekly' },\n { value: 'MONTHLY', label: 'Monthly' },\n { value: 'YEARLY', label: 'Yearly' },\n ]}\n />\n </div>\n\n <div className={styles.field}>\n <span className={styles.fieldLabel}>Every</span>\n <div className={styles.fieldRow}>\n <NumberStepper\n value={state.interval}\n onChange={v => update({ interval: Math.max(1, v) })}\n min={1}\n max={99}\n hideLimits\n size=\"small\"\n />\n <span className={styles.fieldUnit}>{unitLabel[state.freq]}</span>\n </div>\n </div>\n\n {state.freq === 'WEEKLY' && (\n <div className={`${styles.field} ${styles.fieldCentered}`}>\n <span className={styles.fieldLabel}>On</span>\n <div className={styles.dayPicker}>\n {WEEKDAYS.map(d => (\n <button\n key={d.code}\n type=\"button\"\n className={`${styles.dayBtn} ${state.byDay.includes(d.code) ? styles.dayBtnActive : ''}`}\n onClick={() => toggleDay(d.code)}\n aria-label={d.code}\n >\n {d.label}\n </button>\n ))}\n </div>\n </div>\n )}\n\n {state.freq === 'MONTHLY' && (\n <div className={styles.field}>\n <span className={styles.fieldLabel}>Day of month</span>\n <div className={styles.fieldRow}>\n <NumberStepper\n value={state.byMonthDay}\n onChange={v =>\n update({ byMonthDay: Math.min(31, Math.max(1, v)) })\n }\n min={1}\n max={31}\n disabled={state.monthlyLast}\n hideLimits\n size=\"small\"\n />\n <Checkbox\n checked={state.monthlyLast}\n onChange={v => update({ monthlyLast: v })}\n label=\"Last day\"\n />\n </div>\n </div>\n )}\n\n {state.freq === 'YEARLY' && (\n <>\n <div className={styles.field}>\n <SelectInput\n label=\"Month\"\n value={String(state.byMonth)}\n onChange={v => update({ byMonth: Number(v) })}\n options={MONTHS.map((m, i) => ({\n value: String(i + 1),\n label: m,\n }))}\n />\n </div>\n <div className={styles.field}>\n <span className={styles.fieldLabel}>Day</span>\n <NumberStepper\n value={state.yearDay}\n onChange={v =>\n update({ yearDay: Math.min(31, Math.max(1, v)) })\n }\n min={1}\n max={31}\n hideLimits\n size=\"small\"\n />\n </div>\n </>\n )}\n\n <div className={styles.preview}>{preview}</div>\n </div>\n );\n};\n","import { useEffect, useRef, type ComponentType } from 'react';\nimport { motion } from 'framer-motion';\nimport {\n\tCheck,\n\tX,\n\tLoader2,\n\tAlertTriangle,\n\tTerminal,\n\tFileText,\n\tPencil,\n\tFilePlus,\n\tSearch,\n\tFolderSearch,\n\tBrain,\n\tPlay,\n\ttype LucideProps,\n} from 'lucide-react';\nimport styles from './StreamConsole.module.css';\n\nexport type StreamEventType = 'step' | 'success' | 'warning' | 'error';\n\nexport interface StreamEvent {\n\ttype: StreamEventType;\n\tmessage: string;\n\tdata?: Record<string, unknown>;\n\ttimestamp?: string;\n}\n\nexport type StreamStatus = 'running' | 'success' | 'error';\n\nexport interface StreamState {\n\tid: string;\n\tlabel: string;\n\tstatus: StreamStatus;\n\tevents: StreamEvent[];\n\tstartedAt: number;\n\tendedAt?: number;\n\terrorMessage?: string;\n\tresult?: Record<string, unknown>;\n}\n\nexport interface StreamConsoleProps {\n\tstream: StreamState;\n\tonCancel?: (id: string) => void;\n\tonDismiss?: (id: string) => void;\n\thideDismiss?: boolean;\n\trunningLabel?: string;\n\tsuccessLabel?: string;\n\terrorLabel?: string;\n}\n\ntype StepSubtype =\n\t| 'bash'\n\t| 'read'\n\t| 'edit'\n\t| 'write'\n\t| 'grep'\n\t| 'glob'\n\t| 'thinking'\n\t| 'lifecycle';\n\ninterface ParsedStep {\n\tsubtype: StepSubtype | null;\n\tlabel: string;\n\tbody: string;\n}\n\n// Known prefixes produced by stream-json summarizers (DAO-style):\n// \"bash: ls -la\", \"read: path/to/file\", \"edit: path/to/file\",\n// \"write: path\", \"grep: pattern\", \"glob: pattern\", \"thinking: ...\"\n// Plus scaffold-specific lifecycle markers like \"spawning claude ...\" and\n// \"resuming session ...\". Anything else keeps the default `·` dot.\nfunction parseStep(message: string): ParsedStep {\n\tconst prefixMatch = /^([a-z]+):\\s*(.*)$/i.exec(message);\n\tif (prefixMatch) {\n\t\tconst key = prefixMatch[1].toLowerCase();\n\t\tconst body = prefixMatch[2];\n\t\tconst known: Record<string, StepSubtype> = {\n\t\t\tbash: 'bash',\n\t\t\tread: 'read',\n\t\t\tedit: 'edit',\n\t\t\twrite: 'write',\n\t\t\tgrep: 'grep',\n\t\t\tglob: 'glob',\n\t\t\tthinking: 'thinking',\n\t\t};\n\t\tif (known[key]) return { subtype: known[key], label: key, body };\n\t}\n\tif (/^(spawning|resuming|starting|launching)\\b/i.test(message)) {\n\t\treturn { subtype: 'lifecycle', label: '', body: message };\n\t}\n\treturn { subtype: null, label: '', body: message };\n}\n\nconst STEP_ICON: Record<StepSubtype, ComponentType<LucideProps>> = {\n\tbash: Terminal,\n\tread: FileText,\n\tedit: Pencil,\n\twrite: FilePlus,\n\tgrep: Search,\n\tglob: FolderSearch,\n\tthinking: Brain,\n\tlifecycle: Play,\n};\n\nexport function StreamConsole({\n\tstream,\n\tonCancel,\n\tonDismiss,\n\thideDismiss = false,\n\trunningLabel = 'Running',\n\tsuccessLabel = 'Done',\n\terrorLabel = 'Failed',\n}: StreamConsoleProps) {\n\tconst listRef = useRef<HTMLDivElement>(null);\n\tconst userScrolledUp = useRef(false);\n\n\tuseEffect(() => {\n\t\tconst el = listRef.current;\n\t\tif (!el) return;\n\t\tconst onScroll = () => {\n\t\t\tconst atBottom = el.scrollHeight - el.scrollTop - el.clientHeight < 40;\n\t\t\tuserScrolledUp.current = !atBottom;\n\t\t};\n\t\tel.addEventListener('scroll', onScroll);\n\t\treturn () => el.removeEventListener('scroll', onScroll);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tconst el = listRef.current;\n\t\tif (!el || userScrolledUp.current) return;\n\t\tel.scrollTop = el.scrollHeight;\n\t}, [stream.events.length]);\n\n\tconst Icon =\n\t\tstream.status === 'running' ? Loader2 : stream.status === 'success' ? Check : AlertTriangle;\n\tconst statusLabel =\n\t\tstream.status === 'running'\n\t\t\t? runningLabel\n\t\t\t: stream.status === 'success'\n\t\t\t\t? successLabel\n\t\t\t\t: errorLabel;\n\n\tconst canShowDismiss =\n\t\t!hideDismiss && (stream.status === 'running' ? !!onCancel : !!onDismiss);\n\n\treturn (\n\t\t<motion.div\n\t\t\tclassName={styles.wrap}\n\t\t\tdata-status={stream.status}\n\t\t\tinitial={{ opacity: 0, y: -8 }}\n\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\texit={{ opacity: 0, y: -8 }}\n\t\t\ttransition={{ duration: 0.18 }}\n\t\t>\n\t\t\t<header className={styles.header}>\n\t\t\t\t<div className={styles.headerLeft}>\n\t\t\t\t\t<span className={styles.statusDot} data-status={stream.status}>\n\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\tsize={12}\n\t\t\t\t\t\t\tclassName={stream.status === 'running' ? styles.spin : ''}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span className={styles.label}>{stream.label}</span>\n\t\t\t\t\t<span className={styles.statusText}>{statusLabel}</span>\n\t\t\t\t</div>\n\t\t\t\t{canShowDismiss && (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName={styles.dismiss}\n\t\t\t\t\t\taria-label={stream.status === 'running' ? 'Cancel' : 'Dismiss'}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tif (stream.status === 'running') onCancel?.(stream.id);\n\t\t\t\t\t\t\telse onDismiss?.(stream.id);\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<X size={14} />\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\t\t\t</header>\n\t\t\t<div className={styles.body} ref={listRef}>\n\t\t\t\t{stream.events.length === 0 && stream.status === 'running' && (\n\t\t\t\t\t<p className={styles.hint}>Waiting for output…</p>\n\t\t\t\t)}\n\t\t\t\t{stream.events.map((event, i) => {\n\t\t\t\t\tconst step = event.type === 'step' ? parseStep(event.message) : null;\n\t\t\t\t\tconst StepIcon = step?.subtype ? STEP_ICON[step.subtype] : null;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<p\n\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\tclassName={styles.line}\n\t\t\t\t\t\t\tdata-type={event.type}\n\t\t\t\t\t\t\tdata-subtype={step?.subtype ?? undefined}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span className={styles.linePrefix}>\n\t\t\t\t\t\t\t\t{StepIcon ? (\n\t\t\t\t\t\t\t\t\t<StepIcon size={11} />\n\t\t\t\t\t\t\t\t) : event.type === 'error' ? (\n\t\t\t\t\t\t\t\t\t'!'\n\t\t\t\t\t\t\t\t) : event.type === 'warning' ? (\n\t\t\t\t\t\t\t\t\t'⚠'\n\t\t\t\t\t\t\t\t) : event.type === 'success' ? (\n\t\t\t\t\t\t\t\t\t'✓'\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t'·'\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t{step?.label ? (\n\t\t\t\t\t\t\t\t<span className={styles.lineLabel}>{step.label}</span>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t<span className={styles.lineText}>\n\t\t\t\t\t\t\t\t{step ? step.body : event.message}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t\t{stream.status === 'error' && stream.errorMessage && (\n\t\t\t\t\t<p className={styles.line} data-type=\"error\">\n\t\t\t\t\t\t<span className={styles.linePrefix}>!</span>\n\t\t\t\t\t\t<span className={styles.lineText}>{stream.errorMessage}</span>\n\t\t\t\t\t</p>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</motion.div>\n\t);\n}\n","import { useRef, useState, PointerEvent as ReactPointerEvent } from 'react';\nimport { motion, useMotionValue, useTransform, animate, PanInfo } from 'framer-motion';\nimport { Trash2, Check, Pencil, GripVertical } from 'lucide-react';\nimport type { CalendarEvent } from './Calendar';\nimport styles from './DayEventCard.module.css';\n\ninterface DayEventCardProps {\n event: CalendarEvent;\n color: string;\n textColor: string;\n onComplete?: (event: CalendarEvent) => void;\n onEdit?: (event: CalendarEvent) => void;\n onDelete?: (event: CalendarEvent) => void;\n onDragEnd?: (clientY: number, clientX: number) => void;\n draggable?: boolean;\n}\n\nconst SWIPE_DELETE_THRESHOLD = -80;\n\nexport const DayEventCard: React.FC<DayEventCardProps> = ({\n event,\n color,\n textColor,\n onComplete,\n onEdit,\n onDelete,\n onDragEnd,\n draggable = true,\n}) => {\n const x = useMotionValue(0);\n const y = useMotionValue(0);\n const deleteOpacity = useTransform(x, [-80, 0], [1, 0]);\n const [verticalDragging, setVerticalDragging] = useState(false);\n const didSwipe = useRef(false);\n const dragStart = useRef<{ x: number; y: number; pointerId: number } | null>(null);\n const completed = event.status === 'completed';\n\n const handleSwipeEnd = (_: MouseEvent | TouchEvent | PointerEvent, info: PanInfo) => {\n if (onDelete && info.offset.x < SWIPE_DELETE_THRESHOLD) {\n animate(x, -1000, { duration: 0.2, onComplete: () => onDelete(event) });\n } else {\n animate(x, 0, { type: 'spring', stiffness: 400, damping: 30 });\n }\n };\n\n const handleCardClick = () => {\n if (didSwipe.current) {\n didSwipe.current = false;\n return;\n }\n if (verticalDragging) return;\n onComplete?.(event);\n };\n\n const handleGripPointerDown = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (!draggable || !onDragEnd) return;\n e.stopPropagation();\n e.preventDefault();\n dragStart.current = { x: e.clientX, y: e.clientY, pointerId: e.pointerId };\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n setVerticalDragging(true);\n };\n\n const handleGripPointerMove = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (!dragStart.current) return;\n x.set(e.clientX - dragStart.current.x);\n y.set(e.clientY - dragStart.current.y);\n };\n\n const handleGripPointerUp = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (!dragStart.current) return;\n const clientY = e.clientY;\n const clientX = e.clientX;\n try {\n (e.currentTarget as HTMLElement).releasePointerCapture(dragStart.current.pointerId);\n } catch {\n // ignore\n }\n dragStart.current = null;\n setVerticalDragging(false);\n animate(y, 0, { type: 'spring', stiffness: 400, damping: 30 });\n animate(x, 0, { type: 'spring', stiffness: 400, damping: 30 });\n onDragEnd?.(clientY, clientX);\n };\n\n const canSwipe = !!onDelete;\n const showGrip = draggable && !!onDragEnd;\n\n return (\n <div className={styles.wrapper}>\n {canSwipe && (\n <motion.div className={styles.deleteUnderlay} style={{ opacity: deleteOpacity }}>\n <Trash2 size={16} />\n <span>Delete</span>\n </motion.div>\n )}\n <motion.div\n className={`${styles.card} ${completed ? styles.completed : ''} ${verticalDragging ? styles.dragging : ''}`}\n style={{ x, y, background: color, color: textColor, borderLeftColor: color }}\n drag={canSwipe && !verticalDragging ? 'x' : false}\n dragConstraints={canSwipe ? { left: -200, right: 0 } : undefined}\n dragElastic={0.15}\n dragDirectionLock\n onDragStart={() => {\n didSwipe.current = true;\n }}\n onDragEnd={handleSwipeEnd}\n whileTap={verticalDragging ? undefined : { scale: 0.98 }}\n animate={verticalDragging ? { scale: 1.03 } : { scale: 1 }}\n onClick={handleCardClick}\n >\n {showGrip && (\n <div\n className={styles.grip}\n onPointerDown={handleGripPointerDown}\n onPointerMove={handleGripPointerMove}\n onPointerUp={handleGripPointerUp}\n onPointerCancel={handleGripPointerUp}\n onClick={(e) => e.stopPropagation()}\n >\n <GripVertical size={14} />\n </div>\n )}\n {completed && <Check size={14} className={styles.checkIcon} strokeWidth={3} />}\n <span className={styles.text}>{event.title}</span>\n {event.time && <span className={styles.time}>{event.time}</span>}\n {onEdit && (\n <button\n className={styles.editButton}\n onClick={(e) => {\n e.stopPropagation();\n onEdit(event);\n }}\n aria-label=\"Edit event\"\n >\n <Pencil size={13} />\n </button>\n )}\n </motion.div>\n </div>\n );\n};\n","import type { CalendarEvent } from './Calendar';\n\nexport type ExportFormat = 'csv' | 'json' | 'toon';\n\nconst EXPORT_FIELDS: Array<keyof CalendarEvent> = [\n 'id', 'title', 'date', 'time', 'endTime', 'allDay',\n 'type', 'status', 'priority', 'category',\n];\n\nconst toIsoDate = (d: Date | string) => {\n const date = typeof d === 'string' ? new Date(d) : d;\n return date.toISOString();\n};\n\nconst normalize = (event: CalendarEvent): Record<string, unknown> => {\n const row: Record<string, unknown> = {};\n for (const f of EXPORT_FIELDS) {\n const v = event[f];\n if (v === undefined) continue;\n row[f] = f === 'date' ? toIsoDate(v as Date | string) : v;\n }\n return row;\n};\n\nconst escCsv = (value: unknown): string => {\n if (value === undefined || value === null) return '';\n const s = String(value);\n if (/[\",\\n\\r]/.test(s)) return `\"${s.replace(/\"/g, '\"\"')}\"`;\n return s;\n};\n\nexport const toCsv = (events: CalendarEvent[]): string => {\n const header = EXPORT_FIELDS.join(',');\n const rows = events.map(e => {\n const n = normalize(e);\n return EXPORT_FIELDS.map(f => escCsv(n[f])).join(',');\n });\n return [header, ...rows].join('\\n');\n};\n\nexport const toJson = (events: CalendarEvent[]): string => {\n return JSON.stringify(events.map(normalize), null, 2);\n};\n\n// TOON (Token-Oriented Object Notation): compact tabular text for uniform arrays.\n// Format: `events[N]{field1,field2,...}:` then indented rows of comma-separated values.\n// Strings containing comma/quote/newline are wrapped in double quotes with \"\" escaping.\nconst escToon = (value: unknown): string => {\n if (value === undefined || value === null) return '';\n const s = String(value);\n if (/[\",\\n\\r]/.test(s)) return `\"${s.replace(/\"/g, '\"\"')}\"`;\n return s;\n};\n\nexport const toToon = (events: CalendarEvent[]): string => {\n const header = `events[${events.length}]{${EXPORT_FIELDS.join(',')}}:`;\n const rows = events.map(e => {\n const n = normalize(e);\n return ' ' + EXPORT_FIELDS.map(f => escToon(n[f])).join(',');\n });\n return [header, ...rows].join('\\n');\n};\n\nconst MIME: Record<ExportFormat, string> = {\n csv: 'text/csv;charset=utf-8;',\n json: 'application/json;charset=utf-8;',\n toon: 'text/plain;charset=utf-8;',\n};\n\nconst EXT: Record<ExportFormat, string> = {\n csv: 'csv',\n json: 'json',\n toon: 'toon',\n};\n\nexport const serializeEvents = (events: CalendarEvent[], format: ExportFormat): string => {\n if (format === 'csv') return toCsv(events);\n if (format === 'json') return toJson(events);\n return toToon(events);\n};\n\nexport const downloadEvents = (\n events: CalendarEvent[],\n format: ExportFormat,\n filename?: string,\n) => {\n const content = serializeEvents(events, format);\n const blob = new Blob([content], { type: MIME[format] });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename ?? `events-${new Date().toISOString().slice(0, 10)}.${EXT[format]}`;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n};\n","import { useMemo, useState, useEffect, useRef, Fragment } from 'react';\nimport { motion } from 'framer-motion';\nimport styles from './Calendar.module.css';\nimport { DayEventCard } from './DayEventCard';\nimport { Download, Moon, Sun } from 'lucide-react';\nimport { downloadEvents, type ExportFormat } from './exportEvents';\n\n/**\n * Generic calendar event interface - flexible for any use case\n * @interface CalendarEvent\n */\nexport interface CalendarEvent {\n /** Unique identifier for the event */\n id: string;\n /** Event title/name */\n title: string;\n /** Event date */\n date: Date | string;\n /** Optional start time string (e.g., \"14:30\") */\n time?: string;\n /** Optional end time string (e.g., \"15:30\") — used for duration-based height in day view */\n endTime?: string;\n /** If true, event is rendered in the all-day strip above the timeline */\n allDay?: boolean;\n /** Event type/category for styling and icons */\n type?: string;\n /** Event status (affects opacity and styling) */\n status?: 'pending' | 'completed' | 'cancelled' | string;\n /** Priority level for color coding */\n priority?: 'high' | 'medium' | 'low' | string;\n /** Category id used by the built-in category filter (see CalendarConfig.categories) */\n category?: string;\n /** Background color override */\n color?: string;\n /** Text color override */\n textColor?: string;\n /** Additional metadata */\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Configuration for calendar appearance and behavior\n * @interface CalendarConfig\n */\nexport interface CalendarConfig {\n /** Custom color scheme for event types */\n eventColors?: Record<string, string>;\n /** Custom icon renderer for event types */\n iconRenderer?: (event: CalendarEvent) => React.ReactNode;\n /** Maximum events to show per day before \"more\" indicator */\n maxEventsPerDay?: number;\n /** Week starts on Monday (true) or Sunday (false) */\n mondayStart?: boolean;\n /** Show week numbers */\n showWeekNumbers?: boolean;\n /** Day view: first hour to show (default 0) */\n startHour?: number;\n /** Day view: last hour to show, exclusive (default 24) */\n endHour?: number;\n /** Day view: pixel height per hour slot (default 60) */\n hourHeight?: number;\n /** Day view: split hour slots into two clickable halves with 30-minute precision (default false) */\n halfHourSlots?: boolean;\n /** Custom date format */\n dateFormat?: Intl.DateTimeFormatOptions;\n /** Custom locale */\n locale?: string;\n /** Custom day labels */\n dayLabels?: string[];\n /** Custom month names */\n monthNames?: string[];\n /** Categories for the built-in segmented filter. When provided, Calendar renders a pill row\n * below the header with an \"All\" toggle plus one pill per category. Events with a matching\n * `category` are filtered by selection; events with no `category` are always shown. */\n categories?: Array<{ id: string; label: string; color: string }>;\n}\n\n/** A category for the built-in filter */\nexport interface CalendarCategory {\n id: string;\n label: string;\n color: string;\n}\n\n/**\n * Props for the Calendar component\n * @interface CalendarProps\n */\nexport interface CalendarProps {\n /** Array of events to display */\n events: CalendarEvent[];\n /** Callback when an event is clicked */\n onEventClick?: (event: CalendarEvent) => void;\n /** Callback when a date is clicked */\n onDateClick?: (date: Date) => void;\n /** View-specific event click handlers */\n onEventClickByView?: {\n month?: (event: CalendarEvent) => void;\n week?: (event: CalendarEvent) => void;\n day?: (event: CalendarEvent) => void;\n };\n /** View-specific date click handlers */\n onDateClickByView?: {\n month?: (date: Date) => void;\n week?: (date: Date) => void;\n day?: (date: Date) => void;\n };\n /** Callback when a time slot is clicked in day view */\n onTimeSlotClick?: (date: Date, hour: number, time: string) => void;\n /** Callback when an event is dropped (drag-rescheduled) in day view */\n onEventDrop?: (event: CalendarEvent, newDate: Date) => void;\n /** Day view: callback when an event body is tapped to toggle complete */\n onEventComplete?: (event: CalendarEvent) => void;\n /** Day view: callback when an event is swiped left to delete */\n onEventDelete?: (event: CalendarEvent) => void;\n /** Day view: callback when an event's edit button is clicked */\n onEventEdit?: (event: CalendarEvent) => void;\n /** Initial view mode */\n viewMode?: 'month' | 'week' | 'day';\n /** Initial date to display */\n initialDate?: Date;\n /** Configuration options */\n config?: CalendarConfig;\n /** Custom CSS class */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Loading state */\n loading?: boolean;\n /** Custom empty state component */\n emptyState?: React.ReactNode;\n /** Hide the calendar header (navigation, title, view controls) */\n hideHeader?: boolean;\n /** Compact mode - renders colored dots instead of event blocks in month view */\n compact?: boolean;\n /** Externally controlled selected date highlight (distinct from initialDate which controls navigation) */\n selectedDate?: Date;\n /** Controlled category filter selection. `null` means \"All\". Omit for uncontrolled. */\n selectedCategoryId?: string | null;\n /** Called when the user picks a pill in the category filter. `null` = \"All\". */\n onCategoryChange?: (categoryId: string | null) => void;\n /** Offer an \"Export\" dropdown in the header with the given formats. Exports the currently\n * filtered events (respects category filter). Omit or pass `[]` to hide the button. */\n exportFormats?: ExportFormat[];\n}\n\n/**\n * Calendar component - A flexible, reusable calendar for displaying events\n * \n * @component\n * @description\n * A highly customizable calendar component that can display events in month or week view.\n * Supports custom event types, colors, icons, and localization. Perfect for scheduling,\n * project management, habit tracking, or any date-based data visualization.\n * \n * @example\n * // Basic usage\n * <Calendar\n * events={myEvents}\n * onEventClick={handleEventClick}\n * viewMode=\"month\"\n * />\n * \n * @example\n * // With custom configuration\n * <Calendar\n * events={projectEvents}\n * config={{\n * eventColors: { task: '#4A90E2', meeting: '#7ED321' },\n * maxEventsPerDay: 5,\n * mondayStart: true\n * }}\n * onEventClick={handleEventClick}\n * />\n */\nexport function Calendar({\n events,\n onEventClick,\n onDateClick,\n onEventClickByView,\n onDateClickByView,\n onTimeSlotClick,\n onEventDrop,\n onEventComplete,\n onEventDelete,\n onEventEdit,\n viewMode = 'month',\n initialDate = new Date(),\n config = {},\n className = '',\n style = {},\n loading = false,\n emptyState,\n hideHeader = false,\n compact = false,\n selectedDate,\n selectedCategoryId,\n onCategoryChange,\n exportFormats\n}: CalendarProps) {\n const [currentDate, setCurrentDate] = useState(initialDate);\n const [currentViewMode, setCurrentViewMode] = useState(viewMode);\n const [hideNightHours, setHideNightHours] = useState(false);\n const [internalCategoryId, setInternalCategoryId] = useState<string | null>(null);\n const isCategoryControlled = selectedCategoryId !== undefined;\n const activeCategoryId = isCategoryControlled ? selectedCategoryId ?? null : internalCategoryId;\n const handleCategoryPick = (id: string | null) => {\n if (!isCategoryControlled) setInternalCategoryId(id);\n onCategoryChange?.(id);\n };\n const dayViewScrollRef = useRef<HTMLDivElement>(null);\n const weekViewScrollRef = useRef<HTMLDivElement>(null);\n const [exportOpen, setExportOpen] = useState(false);\n const exportRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!exportOpen) return;\n const handler = (e: MouseEvent) => {\n if (exportRef.current && !exportRef.current.contains(e.target as Node)) {\n setExportOpen(false);\n }\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [exportOpen]);\n\n const {\n eventColors = {},\n iconRenderer,\n maxEventsPerDay = 3,\n mondayStart = false,\n showWeekNumbers = false,\n dateFormat = { month: 'long', year: 'numeric' },\n locale = 'en-US',\n dayLabels,\n monthNames,\n startHour: configStartHour = 0,\n endHour = 24,\n hourHeight = 60,\n halfHourSlots = false,\n categories\n } = config;\n\n // Effective start hour — when the user toggles \"hide night hours\", collapse\n // the pre-8am range in day/week timelines.\n const startHour = hideNightHours ? Math.max(configStartHour, 8) : configStartHour;\n\n const filteredEvents = useMemo(() => {\n if (!categories || categories.length === 0 || activeCategoryId === null) return events;\n return events.filter(e => !e.category || e.category === activeCategoryId);\n }, [events, categories, activeCategoryId]);\n \n const defaultDayLabels = mondayStart \n ? ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']\n : ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n \n const finalDayLabels = dayLabels || defaultDayLabels;\n\n const timelineHourHeight = config?.hourHeight ?? 60;\n const timelineStartHour = startHour;\n\n const calendarData = useMemo(() => {\n const year = currentDate.getFullYear();\n const month = currentDate.getMonth();\n \n let startDate: Date;\n let endDate: Date;\n let displayTitle: string;\n \n if (currentViewMode === 'week') {\n startDate = new Date(currentDate);\n const day = startDate.getDay();\n const diff = mondayStart \n ? startDate.getDate() - day + (day === 0 ? -6 : 1)\n : startDate.getDate() - day;\n startDate = new Date(startDate.setDate(diff));\n startDate.setHours(0, 0, 0, 0);\n \n endDate = new Date(startDate);\n endDate.setDate(endDate.getDate() + 6);\n \n const weekStart = startDate.toLocaleDateString(locale, { day: 'numeric', month: 'short' });\n const weekEnd = endDate.toLocaleDateString(locale, { day: 'numeric', month: 'short' });\n displayTitle = `${weekStart} - ${weekEnd}`;\n } else if (currentViewMode === 'day') {\n startDate = new Date(currentDate);\n startDate.setHours(0, 0, 0, 0);\n \n endDate = new Date(currentDate);\n endDate.setHours(23, 59, 59, 999);\n \n displayTitle = currentDate.toLocaleDateString(locale, { \n weekday: 'long', \n year: 'numeric', \n month: 'long', \n day: 'numeric' \n });\n } else {\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n \n startDate = new Date(firstDay);\n const firstDayWeek = mondayStart \n ? (firstDay.getDay() + 6) % 7 \n : firstDay.getDay();\n startDate.setDate(startDate.getDate() - firstDayWeek);\n \n endDate = new Date(lastDay);\n const lastDayWeek = mondayStart \n ? (lastDay.getDay() + 6) % 7 \n : lastDay.getDay();\n endDate.setDate(endDate.getDate() + (6 - lastDayWeek));\n \n if (monthNames && monthNames[month]) {\n displayTitle = `${monthNames[month]} ${year}`;\n } else {\n displayTitle = currentDate.toLocaleDateString(locale, dateFormat);\n }\n }\n \n const days = [];\n const current = new Date(startDate);\n \n while (current <= endDate) {\n days.push(new Date(current));\n current.setDate(current.getDate() + 1);\n }\n \n return { days, displayTitle };\n }, [currentDate, currentViewMode, mondayStart, locale, dateFormat, monthNames]);\n\n // Auto-scroll to current time in day/week views. Only re-fires when the\n // user changes view mode or navigates to a different date — not on every\n // re-render (e.g. after dropping an event), which would snap the scroll.\n const lastScrollKeyRef = useRef<string>('');\n useEffect(() => {\n if (currentViewMode !== 'day' && currentViewMode !== 'week') return;\n const targetRef = currentViewMode === 'day' ? dayViewScrollRef : weekViewScrollRef;\n if (!targetRef.current) return;\n\n const now = new Date();\n const isTodayOnScreen = (() => {\n if (currentViewMode === 'day') {\n return currentDate.toDateString() === now.toDateString();\n }\n const weekStart = new Date(currentDate);\n const day = weekStart.getDay();\n const offset = mondayStart ? (day === 0 ? -6 : 1 - day) : -day;\n weekStart.setDate(weekStart.getDate() + offset);\n weekStart.setHours(0, 0, 0, 0);\n const weekEnd = new Date(weekStart);\n weekEnd.setDate(weekStart.getDate() + 7);\n return now >= weekStart && now < weekEnd;\n })();\n if (!isTodayOnScreen) return;\n\n const key = `${currentViewMode}-${currentDate.toDateString()}`;\n if (lastScrollKeyRef.current === key) return;\n lastScrollKeyRef.current = key;\n\n const minutesFromStart = (now.getHours() - timelineStartHour) * 60 + now.getMinutes();\n const scrollPosition = Math.max(0, (minutesFromStart / 60) * timelineHourHeight - 100);\n setTimeout(() => {\n if (targetRef.current) targetRef.current.scrollTop = scrollPosition;\n }, 0);\n }, [currentViewMode, currentDate, timelineStartHour, timelineHourHeight, mondayStart]);\n \n const getDayEvents = (day: Date) => {\n const dayEvents = filteredEvents.filter(event => {\n const eventDate = new Date(event.date);\n return eventDate.toDateString() === day.toDateString();\n });\n \n return dayEvents.sort((a, b) => {\n const timeA = a.time ? convertTimeToMinutes(a.time) : 999999;\n const timeB = b.time ? convertTimeToMinutes(b.time) : 999999;\n return timeA - timeB;\n });\n };\n \n const convertTimeToMinutes = (time: string): number => {\n const [hours, minutes] = time.split(':').map(Number);\n return hours * 60 + minutes;\n };\n\n // Compute side-by-side column layout for events that overlap in time.\n // Returns a map: eventId -> { col, totalCols } where totalCols is the width\n // of the group (so a 3-way overlap yields totalCols=3 and col in {0,1,2}).\n const layoutOverlappingEvents = (\n events: CalendarEvent[]\n ): Map<string, { col: number; totalCols: number }> => {\n const result = new Map<string, { col: number; totalCols: number }>();\n const timed = events.filter(e => e.time).map(e => {\n const start = convertTimeToMinutes(e.time!);\n const end = e.endTime ? convertTimeToMinutes(e.endTime) : start + 30;\n return { event: e, start, end: Math.max(end, start + 1) };\n });\n timed.sort((a, b) => a.start - b.start || a.end - b.end);\n\n let cluster: typeof timed = [];\n let clusterEnd = -1;\n const flushCluster = () => {\n if (cluster.length === 0) return;\n const cols: number[] = []; // cols[i] = end time of last event in col i\n const assigned: { id: string; col: number }[] = [];\n for (const item of cluster) {\n let placed = false;\n for (let i = 0; i < cols.length; i++) {\n if (cols[i] <= item.start) {\n cols[i] = item.end;\n assigned.push({ id: item.event.id, col: i });\n placed = true;\n break;\n }\n }\n if (!placed) {\n cols.push(item.end);\n assigned.push({ id: item.event.id, col: cols.length - 1 });\n }\n }\n const totalCols = cols.length;\n for (const a of assigned) result.set(a.id, { col: a.col, totalCols });\n cluster = [];\n clusterEnd = -1;\n };\n for (const item of timed) {\n if (cluster.length === 0 || item.start < clusterEnd) {\n cluster.push(item);\n clusterEnd = Math.max(clusterEnd, item.end);\n } else {\n flushCluster();\n cluster.push(item);\n clusterEnd = item.end;\n }\n }\n flushCluster();\n return result;\n };\n \n const handlePrevious = () => {\n const newDate = new Date(currentDate);\n if (currentViewMode === 'week') {\n newDate.setDate(newDate.getDate() - 7);\n } else if (currentViewMode === 'day') {\n newDate.setDate(newDate.getDate() - 1);\n } else {\n newDate.setMonth(newDate.getMonth() - 1);\n }\n setCurrentDate(newDate);\n };\n \n const handleNext = () => {\n const newDate = new Date(currentDate);\n if (currentViewMode === 'week') {\n newDate.setDate(newDate.getDate() + 7);\n } else if (currentViewMode === 'day') {\n newDate.setDate(newDate.getDate() + 1);\n } else {\n newDate.setMonth(newDate.getMonth() + 1);\n }\n setCurrentDate(newDate);\n };\n \n const handleToday = () => {\n setCurrentDate(new Date());\n };\n \n const getEventColor = (event: CalendarEvent) => {\n if (event.color) return event.color;\n if (event.type && eventColors[event.type]) return eventColors[event.type];\n \n // Default color scheme based on priority\n const defaultColors = {\n high: '#FF4444',\n medium: '#FFA500',\n low: '#4A90E2'\n };\n \n if (event.priority && defaultColors[event.priority as keyof typeof defaultColors]) {\n return defaultColors[event.priority as keyof typeof defaultColors];\n }\n \n return '#4A90E2'; // Default blue\n };\n \n const getContrastColor = (bgColor: string): string => {\n // Convert hex to RGB\n const hex = bgColor.replace('#', '');\n const r = parseInt(hex.substring(0, 2), 16);\n const g = parseInt(hex.substring(2, 4), 16);\n const b = parseInt(hex.substring(4, 6), 16);\n \n // Calculate luminance\n const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;\n \n // Return black or white based on luminance\n return luminance > 0.5 ? '#000000' : '#FFFFFF';\n };\n \n const getEventTextColor = (event: CalendarEvent): string => {\n if (event.textColor) return event.textColor;\n const bgColor = getEventColor(event);\n return getContrastColor(bgColor);\n };\n \n const handleEventClick = (event: CalendarEvent) => {\n // Check for view-specific handler first\n if (onEventClickByView && onEventClickByView[currentViewMode]) {\n onEventClickByView[currentViewMode](event);\n } else if (onEventClick) {\n // Fall back to general handler\n onEventClick(event);\n }\n };\n\n const handleDateClick = (date: Date) => {\n // Check for view-specific handler first\n if (onDateClickByView && onDateClickByView[currentViewMode]) {\n onDateClickByView[currentViewMode](date);\n } else if (onDateClick) {\n // Fall back to general handler\n onDateClick(date);\n }\n };\n\n const isToday = (date: Date) => {\n const today = new Date();\n return date.toDateString() === today.toDateString();\n };\n \n const isCurrentMonth = (date: Date) => {\n return date.getMonth() === currentDate.getMonth();\n };\n \n const getWeekNumber = (date: Date) => {\n const start = new Date(date.getFullYear(), 0, 1);\n const diff = date.getTime() - start.getTime();\n const oneWeek = 1000 * 60 * 60 * 24 * 7;\n return Math.floor(diff / oneWeek) + 1;\n };\n \n if (loading) {\n return (\n <div className={`${styles.calendar} ${styles.loading} ${className}`} style={style}>\n <div className={styles.loadingSpinner}>Loading...</div>\n </div>\n );\n }\n \n return (\n <div className={`${styles.calendar} ${compact ? styles.compact : ''} ${className}`} style={style}>\n {!hideHeader && (\n <div className={styles.header}>\n <div className={styles.navigation}>\n <button onClick={handlePrevious} className={styles.navButton} aria-label=\"Previous\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n <polyline points=\"15,18 9,12 15,6\" />\n </svg>\n </button>\n <h3 className={styles.title}>{calendarData.displayTitle}</h3>\n <button onClick={handleNext} className={styles.navButton} aria-label=\"Next\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n <polyline points=\"9,6 15,12 9,18\" />\n </svg>\n </button>\n </div>\n\n {categories && categories.length > 0 && (\n <div className={styles.filterBar} role=\"tablist\" aria-label=\"Filter by category\">\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={activeCategoryId === null}\n className={`${styles.filterPill} ${activeCategoryId === null ? styles.filterPillActive : ''}`}\n onClick={() => handleCategoryPick(null)}\n >\n All\n </button>\n {categories.map(cat => {\n const active = activeCategoryId === cat.id;\n return (\n <button\n key={cat.id}\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n className={`${styles.filterPill} ${active ? styles.filterPillActive : ''}`}\n style={active ? { background: cat.color, borderColor: cat.color, color: '#ffffff' } : undefined}\n onClick={() => handleCategoryPick(cat.id)}\n >\n {!active && (\n <span className={styles.filterDot} style={{ background: cat.color }} />\n )}\n {cat.label}\n </button>\n );\n })}\n </div>\n )}\n\n <div className={styles.controls}>\n {exportFormats && exportFormats.length > 0 && (\n <div className={styles.exportDropdown} ref={exportRef}>\n <button\n type=\"button\"\n className={styles.exportButton}\n onClick={() => setExportOpen(v => !v)}\n aria-haspopup=\"menu\"\n aria-expanded={exportOpen}\n aria-label=\"Export events\"\n title=\"Export events\"\n >\n <Download size={16} />\n </button>\n {exportOpen && (\n <div className={styles.exportMenu} role=\"menu\">\n {exportFormats.map(format => (\n <button\n key={format}\n type=\"button\"\n role=\"menuitem\"\n className={styles.exportMenuItem}\n onClick={() => {\n downloadEvents(filteredEvents, format);\n setExportOpen(false);\n }}\n >\n {format.toUpperCase()}\n </button>\n ))}\n </div>\n )}\n </div>\n )}\n {(currentViewMode === 'day' || currentViewMode === 'week') && (\n <button\n type=\"button\"\n className={styles.nightToggle}\n onClick={() => setHideNightHours(v => !v)}\n aria-pressed={hideNightHours}\n title={hideNightHours ? 'Show night hours' : 'Hide night hours (00:00–08:00)'}\n aria-label={hideNightHours ? 'Show night hours' : 'Hide night hours'}\n >\n {hideNightHours ? <Sun size={16} /> : <Moon size={16} />}\n </button>\n )}\n <button onClick={handleToday} className={styles.todayButton}>\n Today\n </button>\n <div className={styles.viewToggle}>\n <button\n className={`${styles.viewButton} ${currentViewMode === 'month' ? styles.active : ''}`}\n onClick={() => setCurrentViewMode('month')}\n >\n Month\n </button>\n <button\n className={`${styles.viewButton} ${currentViewMode === 'week' ? styles.active : ''}`}\n onClick={() => setCurrentViewMode('week')}\n >\n Week\n </button>\n <button\n className={`${styles.viewButton} ${currentViewMode === 'day' ? styles.active : ''}`}\n onClick={() => setCurrentViewMode('day')}\n >\n Day\n </button>\n </div>\n </div>\n </div>\n )}\n\n {currentViewMode === 'month' && (\n <div className={`${styles.weekDays} ${showWeekNumbers ? styles.withWeekNumbers : ''}`}>\n {showWeekNumbers && <div className={styles.weekNumberHeader}>Wk</div>}\n {finalDayLabels.map((day) => (\n <div key={day} className={styles.weekDay}>\n {day}\n </div>\n ))}\n </div>\n )}\n \n {currentViewMode === 'day' ? (\n // Day view layout — positioned events with duration, all-day strip, now-line\n (() => {\n const dayEvents = getDayEvents(currentDate);\n const scheduled = dayEvents.filter(e => !e.allDay && e.time);\n const allDayEvents = dayEvents.filter(e => e.allDay || !e.time);\n\n const hours = Array.from({ length: endHour - startHour }, (_, i) => startHour + i);\n const timelineHeight = hours.length * hourHeight;\n\n const now = new Date();\n const dayIsToday = currentDate.toDateString() === now.toDateString();\n const nowMinutesFromStart = (now.getHours() - startHour) * 60 + now.getMinutes();\n const nowOffset = (nowMinutesFromStart / 60) * hourHeight;\n const showNow = dayIsToday && nowOffset >= 0 && nowOffset <= timelineHeight;\n\n const eventMinutes = (time: string) => {\n const [h, m] = time.split(':').map(Number);\n return h * 60 + m;\n };\n const eventDuration = (event: CalendarEvent) => {\n if (!event.time || !event.endTime) return 30;\n const d = eventMinutes(event.endTime) - eventMinutes(event.time);\n return d > 0 ? d : 30;\n };\n\n const dayLayout = layoutOverlappingEvents(scheduled);\n\n const handleSlotClick = (hour: number, minute: number) => {\n if (onTimeSlotClick) {\n const slotDate = new Date(currentDate);\n slotDate.setHours(hour, minute, 0, 0);\n const timeString = `${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}`;\n onTimeSlotClick(slotDate, hour, timeString);\n }\n };\n\n const handleEventDragEnd = (event: CalendarEvent, clientY: number) => {\n if (!onEventDrop) return;\n const gridEl = dayViewScrollRef.current?.querySelector(`.${styles.dayTimelineGrid}`) as HTMLElement | null;\n if (!gridEl) return;\n const rect = gridEl.getBoundingClientRect();\n const relativeY = clientY - rect.top;\n const slotSize = halfHourSlots ? hourHeight / 2 : hourHeight;\n const slotIndex = Math.max(0, Math.floor(relativeY / slotSize));\n const totalSlots = halfHourSlots ? hours.length * 2 : hours.length;\n const clamped = Math.min(totalSlots - 1, slotIndex);\n const newHour = startHour + Math.floor(halfHourSlots ? clamped / 2 : clamped);\n const newMinute = halfHourSlots && clamped % 2 === 1 ? 30 : 0;\n const newDate = new Date(currentDate);\n newDate.setHours(newHour, newMinute, 0, 0);\n onEventDrop(event, newDate);\n };\n\n return (\n <div className={styles.dayView}>\n <div className={styles.dayViewHeader}>\n <div className={styles.timeColumnHeader}></div>\n <div className={styles.dayColumnHeader}>\n {currentDate.toLocaleDateString(locale, { weekday: 'short', day: 'numeric' })}\n </div>\n </div>\n\n {allDayEvents.length > 0 && (\n <div className={styles.allDayStrip}>\n <span className={styles.allDayLabel}>All day</span>\n <div className={styles.allDayList}>\n {allDayEvents.map(event => (\n <DayEventCard\n key={event.id}\n event={event}\n color={getEventColor(event)}\n textColor={getEventTextColor(event)}\n onComplete={onEventComplete ?? (onEventClick ? handleEventClick : undefined)}\n onEdit={onEventEdit}\n onDelete={onEventDelete}\n draggable={false}\n />\n ))}\n </div>\n </div>\n )}\n\n <div className={styles.dayViewScrollContainer} ref={dayViewScrollRef}>\n <div className={styles.dayTimelineGrid} style={{ height: timelineHeight }}>\n {hours.map(hour => (\n <div\n key={hour}\n className={styles.hourRow}\n style={{ height: hourHeight }}\n >\n <span className={styles.hourLabel}>\n {hour.toString().padStart(2, '0')}:00\n </span>\n <div className={styles.hourSlots}>\n {halfHourSlots ? (\n <>\n <div\n className={styles.halfHourSlot}\n onClick={() => handleSlotClick(hour, 0)}\n />\n <div\n className={`${styles.halfHourSlot} ${styles.halfHourSlotBottom}`}\n onClick={() => handleSlotClick(hour, 30)}\n />\n </>\n ) : (\n <div\n className={styles.halfHourSlot}\n onClick={() => handleSlotClick(hour, 0)}\n />\n )}\n </div>\n </div>\n ))}\n\n {scheduled.map((event) => {\n const [h, m] = event.time!.split(':').map(Number);\n const top = (h - startHour) * hourHeight + (m / 60) * hourHeight;\n const duration = eventDuration(event);\n const height = Math.max(24, (duration / 60) * hourHeight - 2);\n const lane = dayLayout.get(event.id);\n const totalCols = lane?.totalCols ?? 1;\n const col = lane?.col ?? 0;\n return (\n <div\n key={event.id}\n className={styles.dayEventAnchor}\n style={{\n top,\n height,\n '--lane-col': col,\n '--lane-total': totalCols,\n } as React.CSSProperties}\n onClick={(e) => e.stopPropagation()}\n >\n <DayEventCard\n event={event}\n color={getEventColor(event)}\n textColor={getEventTextColor(event)}\n onComplete={onEventComplete ?? (onEventClick ? handleEventClick : undefined)}\n onEdit={onEventEdit}\n onDelete={onEventDelete}\n onDragEnd={onEventDrop ? (clientY) => handleEventDragEnd(event, clientY) : undefined}\n />\n </div>\n );\n })}\n\n {showNow && (\n <div\n className={styles.currentTimeIndicator}\n style={{ top: `${nowOffset}px` }}\n />\n )}\n </div>\n </div>\n </div>\n );\n })()\n ) : currentViewMode === 'week' ? (\n // Week view layout — 7 side-by-side day timelines. Drag events across\n // columns to reschedule to a different day + hour in one gesture.\n (() => {\n const days = calendarData.days;\n const hours = Array.from({ length: endHour - startHour }, (_, i) => startHour + i);\n const timelineHeight = hours.length * hourHeight;\n\n const now = new Date();\n const todayIdx = days.findIndex(d => d.toDateString() === now.toDateString());\n const nowMinutesFromStart = (now.getHours() - startHour) * 60 + now.getMinutes();\n const nowOffset = (nowMinutesFromStart / 60) * hourHeight;\n const showNow = todayIdx >= 0 && nowOffset >= 0 && nowOffset <= timelineHeight;\n\n const eventMinutes = (time: string) => {\n const [h, m] = time.split(':').map(Number);\n return h * 60 + m;\n };\n const eventDuration = (event: CalendarEvent) => {\n if (!event.time || !event.endTime) return 30;\n const d = eventMinutes(event.endTime) - eventMinutes(event.time);\n return d > 0 ? d : 30;\n };\n\n const handleWeekSlotClick = (day: Date, hour: number, minute: number) => {\n if (!onTimeSlotClick) return;\n const slotDate = new Date(day);\n slotDate.setHours(hour, minute, 0, 0);\n const timeString = `${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}`;\n onTimeSlotClick(slotDate, hour, timeString);\n };\n\n const handleWeekDragEnd = (event: CalendarEvent, clientY: number, clientX: number) => {\n if (!onEventDrop) return;\n const gridEl = weekViewScrollRef.current?.querySelector(`.${styles.weekDayColumns}`) as HTMLElement | null;\n if (!gridEl) return;\n const rect = gridEl.getBoundingClientRect();\n const relativeX = clientX - rect.left;\n const relativeY = clientY - rect.top;\n const columnWidth = rect.width / 7;\n const columnIndex = Math.min(6, Math.max(0, Math.floor(relativeX / columnWidth)));\n const targetDay = days[columnIndex];\n const slotSize = halfHourSlots ? hourHeight / 2 : hourHeight;\n const totalSlots = halfHourSlots ? hours.length * 2 : hours.length;\n const slotIndex = Math.min(totalSlots - 1, Math.max(0, Math.floor(relativeY / slotSize)));\n const newHour = startHour + Math.floor(halfHourSlots ? slotIndex / 2 : slotIndex);\n const newMinute = halfHourSlots && slotIndex % 2 === 1 ? 30 : 0;\n const newDate = new Date(targetDay);\n newDate.setHours(newHour, newMinute, 0, 0);\n onEventDrop(event, newDate);\n };\n\n return (\n <div className={styles.weekTimeline}>\n <div className={styles.weekTimelineHeader}>\n <div className={styles.timeColumnHeader} />\n {days.map(day => {\n const dayIsToday = day.toDateString() === now.toDateString();\n const dayIsSelected = selectedDate && day.toDateString() === selectedDate.toDateString();\n return (\n <button\n key={day.toISOString()}\n type=\"button\"\n className={`${styles.weekDayColumnHeader} ${dayIsToday ? styles.today : ''} ${dayIsSelected ? styles.selected : ''}`}\n onClick={() => handleDateClick(day)}\n >\n <span className={styles.weekDayLabel}>\n {day.toLocaleDateString(locale, { weekday: 'short' })}\n </span>\n <span className={styles.weekDayNumber}>{day.getDate()}</span>\n </button>\n );\n })}\n </div>\n\n <div className={styles.weekTimelineScroll} ref={weekViewScrollRef}>\n <div className={styles.weekTimelineGrid} style={{ height: timelineHeight }}>\n <div className={styles.weekTimeColumn}>\n {hours.map(hour => (\n <div\n key={hour}\n className={styles.weekTimeSlot}\n style={{ height: hourHeight }}\n >\n <span className={styles.weekHourLabel}>\n {hour.toString().padStart(2, '0')}:00\n </span>\n </div>\n ))}\n </div>\n\n <div className={styles.weekDayColumns}>\n {days.map(day => {\n const dayEvents = getDayEvents(day).filter(e => !e.allDay && e.time);\n const dayIsToday = day.toDateString() === now.toDateString();\n const dayLayout = layoutOverlappingEvents(dayEvents);\n return (\n <div key={day.toISOString()} className={styles.weekDayColumn}>\n {hours.map(hour => (\n <div\n key={hour}\n className={styles.weekHourRow}\n style={{ height: hourHeight }}\n >\n {halfHourSlots ? (\n <>\n <div\n className={styles.halfHourSlot}\n onClick={() => handleWeekSlotClick(day, hour, 0)}\n />\n <div\n className={`${styles.halfHourSlot} ${styles.halfHourSlotBottom}`}\n onClick={() => handleWeekSlotClick(day, hour, 30)}\n />\n </>\n ) : (\n <div\n className={styles.halfHourSlot}\n onClick={() => handleWeekSlotClick(day, hour, 0)}\n />\n )}\n </div>\n ))}\n\n {dayEvents.map(event => {\n const [h, m] = event.time!.split(':').map(Number);\n const top = (h - startHour) * hourHeight + (m / 60) * hourHeight;\n const duration = eventDuration(event);\n const height = Math.max(24, (duration / 60) * hourHeight - 2);\n const lane = dayLayout.get(event.id);\n const totalCols = lane?.totalCols ?? 1;\n const col = lane?.col ?? 0;\n return (\n <div\n key={event.id}\n className={styles.weekEventAnchor}\n style={{\n top,\n height,\n '--lane-col': col,\n '--lane-total': totalCols,\n } as React.CSSProperties}\n onClick={(e) => e.stopPropagation()}\n >\n <DayEventCard\n event={event}\n color={getEventColor(event)}\n textColor={getEventTextColor(event)}\n onComplete={onEventComplete ?? (onEventClick ? handleEventClick : undefined)}\n onEdit={onEventEdit}\n onDelete={onEventDelete}\n onDragEnd={onEventDrop ? (cy, cx) => handleWeekDragEnd(event, cy, cx) : undefined}\n />\n </div>\n );\n })}\n\n {dayIsToday && showNow && (\n <div\n className={styles.currentTimeIndicator}\n style={{ top: `${nowOffset}px`, left: 0 }}\n />\n )}\n </div>\n );\n })}\n </div>\n </div>\n </div>\n </div>\n );\n })()\n ) : (\n (() => {\n // Fixed month-view cell height derived from maxEventsPerDay.\n // Day number + padding ≈ 40px, each event row ≈ 24px.\n // Week and compact views keep their own CSS-driven sizing.\n const monthCellHeight = !compact ? 40 + maxEventsPerDay * 24 : undefined;\n return (\n <div className={`${styles.daysGrid} ${showWeekNumbers ? styles.withWeekNumbers : ''}`}>\n {calendarData.days.map((day, index) => {\n const dayEvents = getDayEvents(day);\n const dayIsToday = isToday(day);\n const isInCurrentMonth = isCurrentMonth(day);\n const isWeekStart = showWeekNumbers && (index % 7 === 0);\n const dayIsSelected = selectedDate && day.toDateString() === selectedDate.toDateString();\n\n return (\n <Fragment key={`${day.getFullYear()}-${day.getMonth()}-${day.getDate()}`}>\n {isWeekStart && (\n <div\n className={styles.weekNumberCell}\n style={monthCellHeight !== undefined ? { height: monthCellHeight, minHeight: monthCellHeight } : undefined}\n >\n {getWeekNumber(day)}\n </div>\n )}\n <motion.div\n className={`${styles.dayCell} ${dayIsToday ? styles.today : ''} ${!isInCurrentMonth ? styles.otherMonth : ''} ${dayIsSelected ? styles.selected : ''}`}\n style={monthCellHeight !== undefined ? { height: monthCellHeight, minHeight: monthCellHeight } : undefined}\n initial={{ opacity: 0, y: 20 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{\n duration: 0.3,\n delay: index * 0.02,\n ease: \"easeOut\"\n }}\n onClick={() => handleDateClick(day)}\n >\n <div className={styles.dayNumber}>\n {day.getDate()}\n </div>\n {dayEvents.length > 0 && compact && currentViewMode === 'month' ? (\n <div className={styles.dots}>\n {dayEvents.slice(0, maxEventsPerDay).map((event) => (\n <span\n key={event.id}\n className={styles.dot}\n style={{\n backgroundColor:\n event.status === 'completed'\n ? '#047857'\n : getEventColor(event),\n }}\n />\n ))}\n {dayEvents.length > maxEventsPerDay && (\n <span className={styles.dotMore}>\n +{dayEvents.length - maxEventsPerDay}\n </span>\n )}\n </div>\n ) : dayEvents.length > 0 ? (\n <div className={styles.events}>\n {dayEvents.slice(0, maxEventsPerDay).map((event, eventIndex) => (\n <motion.div\n key={event.id}\n className={`${styles.event} ${event.status === 'completed' ? styles.completed : ''}`}\n style={{\n backgroundColor: getEventColor(event),\n color: getEventTextColor(event),\n opacity: event.status === 'completed' ? 0.7 : 1\n }}\n onClick={(e) => {\n e.stopPropagation();\n handleEventClick(event);\n }}\n initial={{ opacity: 0, x: -10 }}\n animate={{ opacity: 1, x: 0 }}\n transition={{\n duration: 0.2,\n delay: eventIndex * 0.05,\n ease: \"easeOut\"\n }}\n whileHover={{\n scale: 1.02,\n y: -1,\n transition: { duration: 0.1 }\n }}\n whileTap={{\n scale: 0.98,\n transition: { duration: 0.1 }\n }}\n >\n {iconRenderer && iconRenderer(event)}\n <span className={styles.eventTitle}>\n {event.time && (\n <span className={styles.eventTime}>\n {event.time}\n </span>\n )}\n {event.title}\n </span>\n {event.status === 'completed' && (\n <svg className={styles.completedIcon} width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n <polyline points=\"20,6 9,17 4,12\" />\n </svg>\n )}\n </motion.div>\n ))}\n {dayEvents.length > maxEventsPerDay && (\n <div className={styles.moreEvents}>\n +{dayEvents.length - maxEventsPerDay} more\n </div>\n )}\n </div>\n ) : emptyState ? (\n <div className={styles.emptyState}>\n {emptyState}\n </div>\n ) : null}\n </motion.div>\n </Fragment>\n );\n })}\n </div>\n );\n })()\n )}\n </div>\n );\n}","import React, { useState, useEffect, useMemo, useRef } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { Menu, X } from 'lucide-react';\nimport desktopStyles from './styles/Navbar.module.css';\nimport mobileStyles from './styles/Navbar.mobile.module.css';\nimport { useComponentSound, ComponentSoundConfig } from '../../../utils/useSound';\n\nexport interface NavItem {\n id: string;\n label: React.ReactNode;\n icon?: React.ComponentType<{ className?: string }>;\n href?: string;\n onClick?: () => void;\n isActive?: boolean;\n badge?: string | number;\n children?: NavItem[];\n}\n\nexport interface NavbarProps {\n items: NavItem[];\n logo?: {\n src?: string;\n alt?: string;\n text?: React.ReactNode;\n subtitle?: React.ReactNode;\n };\n onItemClick?: (item: NavItem) => void;\n variant?: 'sidebar' | 'top' | 'minimal';\n isMobile?: boolean;\n footer?: React.ReactNode;\n className?: string;\n soundConfig?: ComponentSoundConfig;\n colorfulIcons?: boolean;\n}\n\nexport const Navbar: React.FC<NavbarProps> = ({\n items,\n logo,\n onItemClick,\n variant = 'sidebar',\n isMobile = false,\n footer,\n className = '',\n soundConfig,\n colorfulIcons = false,\n}) => {\n const coloredIconsAttr = colorfulIcons ? 'true' : undefined;\n const styles = useMemo(() => (isMobile ? mobileStyles : desktopStyles), [isMobile]);\n const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);\n const [expandedItems, setExpandedItems] = useState<Set<string>>(new Set());\n const { handlers, playSound } = useComponentSound(soundConfig);\n\n // Close mobile menu when switching away from mobile\n useEffect(() => {\n if (!isMobile) {\n setIsMobileMenuOpen(false);\n }\n }, [isMobile]);\n\n // Swipe from left edge to open menu\n const touchStartRef = useRef<{ x: number; y: number } | null>(null);\n\n useEffect(() => {\n if (!isMobile) return;\n\n const handleTouchStart = (e: TouchEvent) => {\n const touch = e.touches[0];\n if (touch.clientX < 30) {\n touchStartRef.current = { x: touch.clientX, y: touch.clientY };\n }\n };\n\n const handleTouchEnd = (e: TouchEvent) => {\n if (!touchStartRef.current) return;\n const touch = e.changedTouches[0];\n const dx = touch.clientX - touchStartRef.current.x;\n const dy = Math.abs(touch.clientY - touchStartRef.current.y);\n touchStartRef.current = null;\n\n if (dx > 60 && dy < dx) {\n setIsMobileMenuOpen(true);\n playSound('toggle');\n }\n };\n\n document.addEventListener('touchstart', handleTouchStart, { passive: true });\n document.addEventListener('touchend', handleTouchEnd, { passive: true });\n\n return () => {\n document.removeEventListener('touchstart', handleTouchStart);\n document.removeEventListener('touchend', handleTouchEnd);\n };\n }, [isMobile, playSound]);\n\n // Lock body scroll when overlay is open (position: fixed is more reliable on mobile)\n useEffect(() => {\n if (isMobileMenuOpen) {\n const scrollY = window.scrollY;\n document.body.style.position = 'fixed';\n document.body.style.top = `-${scrollY}px`;\n document.body.style.left = '0';\n document.body.style.right = '0';\n document.body.style.overflow = 'hidden';\n } else {\n const scrollY = document.body.style.top;\n document.body.style.position = '';\n document.body.style.top = '';\n document.body.style.left = '';\n document.body.style.right = '';\n document.body.style.overflow = '';\n if (scrollY) {\n window.scrollTo(0, parseInt(scrollY, 10) * -1);\n }\n }\n return () => {\n document.body.style.position = '';\n document.body.style.top = '';\n document.body.style.left = '';\n document.body.style.right = '';\n document.body.style.overflow = '';\n };\n }, [isMobileMenuOpen]);\n\n const toggleMobileMenu = () => {\n playSound('toggle');\n setIsMobileMenuOpen(!isMobileMenuOpen);\n };\n\n const toggleExpanded = (itemId: string) => {\n setExpandedItems((prev) => {\n const newSet = new Set(prev);\n if (newSet.has(itemId)) {\n newSet.delete(itemId);\n } else {\n newSet.add(itemId);\n }\n return newSet;\n });\n };\n\n const handleItemClick = (item: NavItem) => {\n handlers.onClick?.();\n if (item.children && item.children.length > 0) {\n toggleExpanded(item.id);\n } else {\n if (item.onClick) {\n item.onClick();\n }\n if (onItemClick) {\n onItemClick(item);\n }\n if (isMobile || isMobileMenuOpen) {\n setIsMobileMenuOpen(false);\n }\n }\n };\n\n const renderNavItem = (item: NavItem, index: number, depth: number = 0) => {\n const Icon = item.icon;\n const isExpanded = expandedItems.has(item.id);\n const hasChildren = item.children && item.children.length > 0;\n\n return (\n <motion.li\n key={item.id}\n className={`${styles.navItem} ${depth > 0 ? styles.subNavItem : ''}`}\n initial={{ opacity: 0, x: -20 }}\n animate={{ opacity: 1, x: 0 }}\n transition={{ delay: index * 0.05 }}\n >\n <motion.button\n className={`${styles.navLink} ${item.isActive ? styles.active : ''}`}\n onClick={() => handleItemClick(item)}\n onMouseEnter={handlers.onMouseEnter}\n whileHover={{ x: 5 }}\n whileTap={{ scale: 0.98 }}\n >\n {item.isActive && (\n <motion.div\n className={styles.activeBackground}\n layoutId=\"activeNavBackground\"\n initial={false}\n transition={{\n type: 'spring',\n stiffness: 500,\n damping: 35,\n }}\n />\n )}\n\n {Icon && (\n <Icon\n className={`${styles.navIcon} ${item.isActive ? styles.activeIcon : ''}`}\n />\n )}\n\n <span className={`${styles.navText} ${item.isActive ? styles.activeText : ''}`}>\n {item.label}\n </span>\n\n {item.badge && <span className={styles.navBadge}>{item.badge}</span>}\n\n {hasChildren && (\n <motion.span\n className={styles.chevron}\n animate={{ rotate: isExpanded ? 180 : 0 }}\n transition={{ duration: 0.2 }}\n >\n ▼\n </motion.span>\n )}\n </motion.button>\n\n {hasChildren && (\n <AnimatePresence>\n {isExpanded && (\n <motion.ul\n className={styles.subNavList}\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n transition={{ duration: 0.2 }}\n >\n {item.children!.map((child, childIndex) =>\n renderNavItem(child, childIndex, depth + 1)\n )}\n </motion.ul>\n )}\n </AnimatePresence>\n )}\n </motion.li>\n );\n };\n\n const navContent = (\n <>\n {logo && (\n <motion.div\n className={styles.navLogo}\n initial={{ opacity: 0, y: -20 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: 0.1 }}\n >\n <div className={styles.logoContainer}>\n {logo.src ? (\n <motion.img\n src={logo.src}\n alt={logo.alt || 'Logo'}\n className={styles.logoImage}\n onMouseEnter={handlers.onMouseEnter}\n whileHover={{ scale: 1.05 }}\n transition={{ type: 'spring', stiffness: 400 }}\n />\n ) : (\n <div className={styles.logoPlaceholder}>\n {typeof logo.text === 'string'\n ? logo.text.charAt(0) || 'L'\n : 'L'}\n </div>\n )}\n\n {(logo.text || logo.subtitle) && (\n <div className={styles.logoContent}>\n {logo.text && <span className={styles.logoText}>{logo.text}</span>}\n {logo.subtitle && (\n <span className={styles.logoSubtitle}>{logo.subtitle}</span>\n )}\n </div>\n )}\n </div>\n </motion.div>\n )}\n\n <ul className={styles.navList}>\n {items.map((item, index) => renderNavItem(item, index))}\n </ul>\n\n {footer && (\n <motion.div\n className={styles.navFooter}\n initial={{ opacity: 0, y: 20 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: 0.3 }}\n >\n {footer}\n </motion.div>\n )}\n </>\n );\n\n if (variant === 'top') {\n return (\n <motion.nav\n className={`${styles.navbar} ${styles.navbarTop} ${className}`}\n data-colored-icons={coloredIconsAttr}\n initial={{ y: -100 }}\n animate={{ y: 0 }}\n transition={{ type: 'spring', stiffness: 300, damping: 30 }}\n >\n {navContent}\n </motion.nav>\n );\n }\n\n if (isMobile) {\n return (\n <>\n {/* Mobile top bar */}\n <nav className={`${styles.navbar} ${className}`} data-colored-icons={coloredIconsAttr}>\n {logo && (\n <div className={styles.navLogo}>\n <div className={styles.logoContainer}>\n {logo.src ? (\n <img\n src={logo.src}\n alt={logo.alt || 'Logo'}\n className={styles.logoImage}\n />\n ) : (\n <div className={styles.logoPlaceholder}>\n {typeof logo.text === 'string'\n ? logo.text.charAt(0) || 'L'\n : 'L'}\n </div>\n )}\n {logo.text && (\n <div className={styles.logoContent}>\n <span className={styles.logoText}>{logo.text}</span>\n </div>\n )}\n </div>\n </div>\n )}\n\n <div className={styles.navActions}>\n {footer && <div className={styles.navFooter}>{footer}</div>}\n\n <button\n className={`${styles.mobileMenuButton} ${isMobileMenuOpen ? styles.menuOpen : ''}`}\n onClick={toggleMobileMenu}\n aria-label=\"Toggle navigation menu\"\n >\n {isMobileMenuOpen ? <X /> : <Menu />}\n </button>\n </div>\n </nav>\n\n {/* Full-screen overlay */}\n <AnimatePresence>\n {isMobileMenuOpen && (\n <motion.div\n className={styles.mobileBackdrop}\n data-colored-icons={coloredIconsAttr}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.2 }}\n onClick={() => setIsMobileMenuOpen(false)}\n >\n <motion.div\n initial={{ y: -20, opacity: 0 }}\n animate={{ y: 0, opacity: 1 }}\n exit={{ y: -20, opacity: 0 }}\n transition={{ duration: 0.2 }}\n onClick={(e) => e.stopPropagation()}\n >\n <ul className={styles.navList}>\n {items.map((item, index) => renderNavItem(item, index))}\n </ul>\n </motion.div>\n </motion.div>\n )}\n </AnimatePresence>\n </>\n );\n }\n\n return (\n <>\n {/* Desktop Navbar */}\n <motion.nav\n className={`${styles.navbar} ${styles[`navbar${variant.charAt(0).toUpperCase() + variant.slice(1)}`]} ${className}`}\n data-colored-icons={coloredIconsAttr}\n initial={variant === 'sidebar' ? { x: -300 } : { opacity: 0 }}\n animate={variant === 'sidebar' ? { x: 0 } : { opacity: 1 }}\n transition={{ type: 'spring', stiffness: 300, damping: 30 }}\n >\n {navContent}\n </motion.nav>\n </>\n );\n};\n","import React, { useState, useEffect, useMemo, useRef, useId } from 'react'\nimport * as d3 from 'd3'\nimport styles from './MoodChart.module.css'\n\ninterface MoodNoteData {\n date: string\n rating: number\n tag?: string\n comment?: string\n}\n\ninterface ParsedMoodData extends Omit<MoodNoteData, 'tag'> {\n tags: string[]\n}\n\ninterface MoodChartProps {\n moodData: MoodNoteData[]\n width?: number\n height?: number\n}\n\ntype ProcessedMoodData = Omit<ParsedMoodData, 'date'> & { date: Date }\n\nexport const MoodChart: React.FC<MoodChartProps> = ({\n moodData,\n width = 800,\n height = 400\n}) => {\n const svgRef = useRef<SVGSVGElement>(null)\n const containerRef = useRef<HTMLDivElement>(null)\n const tooltipRef = useRef<HTMLDivElement>(null)\n const isHoveringTooltipRef = useRef(false)\n const rawId = useId()\n const gradientId = useMemo(() => `mood-area-${rawId.replace(/[^a-zA-Z0-9]/g, '_')}`, [rawId])\n const [selectedMood, setSelectedMood] = useState<ProcessedMoodData | null>(null)\n const [tooltipPosition, setTooltipPosition] = useState({ x: 0, y: 0 })\n const [isHoveringTooltip, setIsHoveringTooltip] = useState(false)\n\n useEffect(() => {\n isHoveringTooltipRef.current = isHoveringTooltip\n }, [isHoveringTooltip])\n\n const margin = useMemo(() => ({ top: 20, right: 20, bottom: 50, left: 40 }), [])\n const chartWidth = width - margin.left - margin.right\n const chartHeight = height - margin.top - margin.bottom\n\n const processedData = useMemo(() => {\n return moodData\n .map(mood => {\n const tags = mood.tag\n ? mood.tag.split(',').map(t => t.trim()).filter(t => t)\n : []\n\n return {\n date: new Date(mood.date),\n rating: mood.rating,\n tags,\n comment: mood.comment\n }\n })\n .filter(mood =>\n !isNaN(mood.date.getTime()) &&\n isFinite(mood.rating)\n )\n .sort((a, b) => a.date.getTime() - b.date.getTime()) as ProcessedMoodData[]\n }, [moodData])\n\n const colorScale = useMemo(() => {\n return d3.scaleLinear<string>()\n .domain([1, 5, 10])\n .range(['#FF6B6B', '#FFD93D', '#6BCB77'])\n .clamp(true)\n }, [])\n\n useEffect(() => {\n if (!svgRef.current || processedData.length === 0) return\n\n const svg = d3.select(svgRef.current)\n svg.selectAll('*').remove()\n\n const defs = svg.append('defs')\n const gradient = defs.append('linearGradient')\n .attr('id', gradientId)\n .attr('x1', '0%').attr('y1', '0%')\n .attr('x2', '0%').attr('y2', '100%')\n gradient.append('stop').attr('offset', '0%').attr('class', styles.areaStopTop)\n gradient.append('stop').attr('offset', '100%').attr('class', styles.areaStopBottom)\n\n const g = svg.append('g')\n .attr('transform', `translate(${margin.left},${margin.top})`)\n\n const extentDates = d3.extent(processedData, d => d.date) as [Date, Date]\n if (!extentDates[0] || !extentDates[1]) return\n\n const xScale = d3.scaleTime()\n .domain(extentDates)\n .range([0, chartWidth])\n\n const yScale = d3.scaleLinear()\n .domain([1, 10])\n .range([chartHeight, 0])\n\n const line = d3.line<ProcessedMoodData>()\n .x(d => xScale(d.date))\n .y(d => yScale(d.rating))\n .curve(d3.curveMonotoneX)\n\n const area = d3.area<ProcessedMoodData>()\n .x(d => xScale(d.date))\n .y0(chartHeight)\n .y1(d => yScale(d.rating))\n .curve(d3.curveMonotoneX)\n\n // Grid lines (fade in)\n g.selectAll('.grid-line-y')\n .data(yScale.ticks(5))\n .enter().append('line')\n .attr('class', styles.gridLine)\n .attr('x1', 0)\n .attr('y1', d => yScale(d))\n .attr('x2', chartWidth)\n .attr('y2', d => yScale(d))\n .style('opacity', 0)\n .transition()\n .duration(500)\n .ease(d3.easeCubicOut)\n .style('opacity', 1)\n\n // Axes (fade in)\n g.append('g')\n .attr('class', styles.xAxis)\n .attr('transform', `translate(0,${chartHeight})`)\n .style('opacity', 0)\n .call(d3.axisBottom(xScale)\n .tickFormat(d => d3.timeFormat('%m/%d')(d as Date)))\n .transition()\n .duration(600)\n .delay(100)\n .style('opacity', 1)\n\n g.append('g')\n .attr('class', styles.yAxis)\n .style('opacity', 0)\n .call(d3.axisLeft(yScale))\n .transition()\n .duration(600)\n .delay(100)\n .style('opacity', 1)\n\n // Area fill (fades in after line draws past it)\n const areaPath = g.append('path')\n .datum(processedData)\n .attr('class', styles.area)\n .attr('fill', `url(#${gradientId})`)\n .attr('d', area)\n .style('opacity', 0)\n\n // Line (draw-in animation via stroke-dasharray)\n const linePath = g.append('path')\n .datum(processedData)\n .attr('class', styles.line)\n .attr('d', line)\n\n const lineNode = linePath.node() as SVGPathElement | null\n const totalLength = lineNode && typeof lineNode.getTotalLength === 'function'\n ? lineNode.getTotalLength()\n : 0\n const lineDuration = 1200\n\n if (totalLength > 0) {\n linePath\n .attr('stroke-dasharray', `${totalLength} ${totalLength}`)\n .attr('stroke-dashoffset', totalLength)\n .transition()\n .duration(lineDuration)\n .ease(d3.easeCubicOut)\n .attr('stroke-dashoffset', 0)\n .on('end', () => {\n linePath.attr('stroke-dasharray', null)\n })\n }\n\n areaPath\n .transition()\n .delay(lineDuration * 0.4)\n .duration(800)\n .ease(d3.easeCubicOut)\n .style('opacity', 1)\n\n // Crosshair (vertical guide on hover)\n const crosshair = g.append('line')\n .attr('class', styles.crosshair)\n .attr('y1', 0)\n .attr('y2', chartHeight)\n .style('opacity', 0)\n .style('pointer-events', 'none')\n\n // Pulsing halo behind active point\n const halo = g.append('circle')\n .attr('class', styles.halo)\n .attr('r', 0)\n .style('opacity', 0)\n .style('pointer-events', 'none')\n\n // Data points (staggered entrance keyed to line draw)\n const minX = xScale(extentDates[0])\n const maxX = xScale(extentDates[1])\n const xRange = Math.max(1, maxX - minX)\n\n const pointSel = g.selectAll('.mood-circle')\n .data(processedData)\n .enter().append('circle')\n .attr('class', styles.dataPoint)\n .attr('cx', d => xScale(d.date))\n .attr('cy', d => yScale(d.rating))\n .attr('r', 0)\n .attr('fill', d => colorScale(d.rating))\n .style('opacity', 0)\n .style('pointer-events', 'none')\n\n pointSel.transition()\n .delay(d => 100 + lineDuration * ((xScale(d.date) - minX) / xRange))\n .duration(380)\n .ease(d3.easeBackOut.overshoot(2))\n .attr('r', 5)\n .style('opacity', 1)\n\n const pointNodes = pointSel.nodes()\n\n // Active state lives in mutable refs (closure over redraw)\n let activeIndex: number | null = null\n\n const startHaloPulse = (cx: number, cy: number, fill: string) => {\n halo\n .interrupt('halo-pulse')\n .interrupt('halo-out')\n .attr('cx', cx)\n .attr('cy', cy)\n .attr('fill', fill)\n\n const pulseOnce = () => {\n halo\n .attr('r', 5)\n .style('opacity', 0.55)\n .transition('halo-pulse')\n .duration(900)\n .ease(d3.easeCubicOut)\n .attr('r', 20)\n .style('opacity', 0)\n .on('end', pulseOnce)\n }\n pulseOnce()\n }\n\n const stopHaloPulse = () => {\n halo\n .interrupt('halo-pulse')\n .transition('halo-out')\n .duration(180)\n .style('opacity', 0)\n .attr('r', 0)\n }\n\n const setActive = (idx: number, clientX: number, clientY: number) => {\n const d = processedData[idx]\n if (!d) return\n\n const cx = xScale(d.date)\n const cy = yScale(d.rating)\n\n const rect = svgRef.current?.getBoundingClientRect()\n if (rect) {\n let x = clientX - rect.left + 12\n let y = clientY - rect.top - 12\n const estW = 280\n if (x + estW > chartWidth + margin.left - 20) {\n x = clientX - rect.left - estW - 12\n if (x < 0) x = 10\n }\n if (y < 0) y = 10\n setTooltipPosition({ x, y })\n }\n setSelectedMood(d)\n\n crosshair\n .attr('x1', cx).attr('x2', cx)\n .interrupt('crosshair-fade')\n .transition('crosshair-fade')\n .duration(120)\n .style('opacity', 1)\n\n if (activeIndex !== idx) {\n if (activeIndex !== null) {\n d3.select(pointNodes[activeIndex] as Element)\n .transition('point-scale')\n .duration(180)\n .ease(d3.easeCubicOut)\n .attr('r', 5)\n }\n d3.select(pointNodes[idx] as Element)\n .transition('point-scale')\n .duration(180)\n .ease(d3.easeBackOut.overshoot(2))\n .attr('r', 8)\n startHaloPulse(cx, cy, colorScale(d.rating))\n activeIndex = idx\n }\n }\n\n const clearActive = () => {\n crosshair\n .interrupt('crosshair-fade')\n .transition('crosshair-fade')\n .duration(180)\n .style('opacity', 0)\n if (activeIndex !== null) {\n d3.select(pointNodes[activeIndex] as Element)\n .transition('point-scale')\n .duration(180)\n .attr('r', 5)\n activeIndex = null\n }\n stopHaloPulse()\n setSelectedMood(null)\n }\n\n // Overlay captures mouse for nearest-point lookup (rendered last so it sits on top)\n const bisect = d3.bisector<ProcessedMoodData, Date>(d => d.date).center\n\n g.append('rect')\n .attr('class', styles.overlay)\n .attr('width', chartWidth)\n .attr('height', chartHeight)\n .on('mousemove', function (event: MouseEvent) {\n const [mx] = d3.pointer(event, this as SVGRectElement)\n const xDate = xScale.invert(mx)\n const idx = Math.max(0, Math.min(processedData.length - 1, bisect(processedData, xDate)))\n setActive(idx, event.clientX, event.clientY)\n })\n .on('mouseleave', () => {\n window.setTimeout(() => {\n if (!isHoveringTooltipRef.current) {\n clearActive()\n }\n }, 220)\n })\n\n }, [processedData, chartWidth, chartHeight, colorScale, margin, gradientId])\n\n // Clean up tooltip on unmount\n useEffect(() => {\n return () => {\n setSelectedMood(null)\n }\n }, [])\n\n\n return (\n <div className={styles.container} ref={containerRef}>\n <svg\n ref={svgRef}\n width={width}\n height={height}\n className={styles.chart}\n />\n {selectedMood && (\n <div\n ref={tooltipRef}\n className={styles.tooltip}\n style={{\n position: 'absolute',\n pointerEvents: 'auto',\n left: tooltipPosition.x,\n top: tooltipPosition.y,\n zIndex: 1000\n }}\n onMouseEnter={() => setIsHoveringTooltip(true)}\n onMouseLeave={() => {\n setIsHoveringTooltip(false)\n setSelectedMood(null)\n }}\n >\n <div className={styles.tooltipHeader}>\n <div className={styles.tooltipDate}>\n {selectedMood.date.toLocaleDateString()}\n </div>\n <div className={styles.tooltipRating}>\n <span className={styles.ratingValue}>{selectedMood.rating}</span>\n <span className={styles.ratingMax}>/10</span>\n </div>\n </div>\n {selectedMood.tags.length > 0 && (\n <div className={styles.tooltipTags}>\n {selectedMood.tags.map((tag, index) => (\n <span key={index} className={styles.tag}>\n {tag}\n </span>\n ))}\n </div>\n )}\n {selectedMood.comment && (\n <div className={styles.tooltipComment}>\n {selectedMood.comment}\n </div>\n )}\n </div>\n )}\n </div>\n )\n}\n","import React, { useState, useEffect, useRef, useMemo, useCallback } from 'react'\nimport * as d3 from 'd3'\nimport { BarChart3, Calendar, CalendarDays, CalendarRange, Divide, Sigma } from 'lucide-react'\nimport styles from './QuantifiableHabitsChart.module.css'\n\nexport type ViewType = 'daily' | 'weekly' | 'monthly' | 'quarterly'\n\ninterface AggregatedData {\n dates: string[]\n [habit: string]: number[] | string[]\n}\n\ninterface ChartData {\n dates: string[]\n [habit: string]: number[] | string[]\n}\n\ninterface TooltipData {\n habit: string\n date: string\n value: number\n x: number\n y: number\n}\n\ninterface QuantifiableHabitsChartProps {\n data: ChartData\n width?: number\n height?: number\n defaultViewType?: ViewType\n periodType?: 'week' | 'month' | 'quarter' | 'year' | 'allTime'\n habitColors?: { [key: string]: string }\n habitEmojis?: { [key: string]: string }\n onDataPointClick?: (habit: string, date: string, value: number) => void\n hideControls?: boolean\n compactLegend?: boolean\n}\n\nconst DEFAULT_HABIT_COLORS: { [key: string]: string } = {\n 'Exercise': '#6BCB77',\n 'Meditation': '#4D96FF',\n 'Reading': '#FFB319',\n 'Water': '#00D9FF',\n 'Steps': '#FF6B6B',\n 'Sleep': '#9B59B6',\n 'Calories': '#FF9F1C',\n 'Study': '#C774E8'\n}\n\ninterface LineDatum {\n habit: string\n color: string\n points: [Date, number][]\n}\n\n// Smoothly interpolate between two SVG path strings by resampling both\n// at evenly-spaced arc-length positions and tweening corresponding points.\nconst SVG_NS = 'http://www.w3.org/2000/svg'\nconst pathTween = (oldD: string, newD: string, samples = 80): ((t: number) => string) => {\n const safeOld = oldD && oldD.length > 0 ? oldD : 'M0,0'\n const safeNew = newD && newD.length > 0 ? newD : 'M0,0'\n const oldNode = document.createElementNS(SVG_NS, 'path') as SVGPathElement\n const newNode = document.createElementNS(SVG_NS, 'path') as SVGPathElement\n oldNode.setAttribute('d', safeOld)\n newNode.setAttribute('d', safeNew)\n const oldLen = typeof oldNode.getTotalLength === 'function' ? oldNode.getTotalLength() : 0\n const newLen = typeof newNode.getTotalLength === 'function' ? newNode.getTotalLength() : 0\n if (oldLen === 0 || newLen === 0) {\n return () => safeNew\n }\n const old: [number, number][] = []\n const next: [number, number][] = []\n for (let i = 0; i < samples; i++) {\n const u = samples === 1 ? 0 : i / (samples - 1)\n const op = oldNode.getPointAtLength(u * oldLen)\n const np = newNode.getPointAtLength(u * newLen)\n old.push([op.x, op.y])\n next.push([np.x, np.y])\n }\n return (t: number) => {\n let s = ''\n for (let i = 0; i < samples; i++) {\n const x = old[i][0] + (next[i][0] - old[i][0]) * t\n const y = old[i][1] + (next[i][1] - old[i][1]) * t\n s += (i === 0 ? 'M' : 'L') + x + ',' + y\n }\n return s\n }\n}\n\nexport const QuantifiableHabitsChart: React.FC<QuantifiableHabitsChartProps> = ({\n data,\n width = 800,\n height = 400,\n defaultViewType = 'daily',\n periodType = 'month',\n habitColors: customHabitColors = {},\n habitEmojis: customHabitEmojis = {},\n onDataPointClick,\n hideControls = false,\n compactLegend = false\n}) => {\n const svgRef = useRef<SVGSVGElement>(null)\n const tooltipRef = useRef<HTMLDivElement>(null)\n const onClickRef = useRef(onDataPointClick)\n const hasMountedRef = useRef(false)\n const [viewType, setViewType] = useState<ViewType>(defaultViewType)\n const [activeHabits, setActiveHabits] = useState<string[]>([])\n const [hoveredHabit, setHoveredHabit] = useState<string | null>(null)\n const [tooltipData, setTooltipData] = useState<TooltipData | null>(null)\n const [aggregationMode, setAggregationMode] = useState<'average' | 'sum'>('average')\n\n useEffect(() => {\n onClickRef.current = onDataPointClick\n }, [onDataPointClick])\n\n const margin = useMemo(() => ({ top: 20, right: 20, bottom: 50, left: 50 }), [])\n const chartWidth = width - margin.left - margin.right\n const chartHeight = height - margin.top - margin.bottom\n\n const habits = useMemo(() =>\n Object.keys(data).filter(key => key !== 'dates'),\n [data]\n )\n\n useEffect(() => {\n setActiveHabits(habits)\n }, [habits])\n\n useEffect(() => {\n const handleScroll = () => {\n setTooltipData(null)\n }\n window.addEventListener('scroll', handleScroll, true)\n return () => {\n window.removeEventListener('scroll', handleScroll, true)\n }\n }, [])\n\n const availableViewTypes = useMemo(() => {\n switch (periodType) {\n case 'week':\n return ['daily'] as ViewType[]\n case 'month':\n return ['daily', 'weekly'] as ViewType[]\n case 'quarter':\n return ['weekly', 'monthly'] as ViewType[]\n case 'year':\n return ['daily', 'weekly', 'monthly', 'quarterly'] as ViewType[]\n case 'allTime':\n return ['monthly', 'quarterly'] as ViewType[]\n default:\n return ['daily'] as ViewType[]\n }\n }, [periodType])\n\n const getColor = useCallback((habit: string): string => {\n return customHabitColors[habit] || DEFAULT_HABIT_COLORS[habit] || `hsl(${Math.abs(habit.split('').reduce((a, b) => a + b.charCodeAt(0), 0)) % 360}, 70%, 50%)`\n }, [customHabitColors])\n\n const aggregateData = useMemo((): AggregatedData => {\n if (viewType === 'daily' || !data.dates.length) {\n return data\n }\n\n const aggregated: AggregatedData = { dates: [] }\n const dateGroups: Map<string, number[]> = new Map()\n\n data.dates.forEach((dateStr, index) => {\n const date = new Date(dateStr)\n let groupKey: string\n\n switch (viewType) {\n case 'weekly': {\n const weekStart = new Date(date)\n const day = weekStart.getDay()\n const diff = weekStart.getDate() - day + (day === 0 ? -6 : 1)\n weekStart.setDate(diff)\n groupKey = weekStart.toISOString().split('T')[0]\n break\n }\n case 'monthly':\n groupKey = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-01`\n break\n case 'quarterly': {\n const quarter = Math.floor(date.getMonth() / 3) + 1\n const quarterStartMonth = (quarter - 1) * 3\n const quarterStart = new Date(date.getFullYear(), quarterStartMonth, 1)\n groupKey = quarterStart.toISOString().split('T')[0]\n break\n }\n default:\n groupKey = dateStr\n }\n\n if (!dateGroups.has(groupKey)) {\n dateGroups.set(groupKey, [])\n }\n dateGroups.get(groupKey)!.push(index)\n })\n\n aggregated.dates = Array.from(dateGroups.keys()).sort()\n\n habits.forEach(habit => {\n aggregated[habit] = aggregated.dates.map(groupKey => {\n const indices = dateGroups.get(groupKey)!\n const values = indices\n .map(i => data[habit][i] as number)\n .filter(v => typeof v === 'number' && !isNaN(v))\n\n if (values.length === 0) return 0\n\n if (aggregationMode === 'sum') {\n return Math.round(values.reduce((sum, v) => sum + v, 0))\n } else {\n return Math.round(values.reduce((sum, v) => sum + v, 0) / values.length)\n }\n })\n })\n\n return aggregated\n }, [data, viewType, habits, aggregationMode])\n\n const toggleHabit = (habit: string) => {\n setActiveHabits(prev =>\n prev.includes(habit)\n ? prev.filter(h => h !== habit)\n : [...prev, habit]\n )\n }\n\n useEffect(() => {\n if (!svgRef.current || aggregateData.dates.length === 0) return\n\n const svg = d3.select(svgRef.current)\n const isFirstRender = !hasMountedRef.current\n hasMountedRef.current = true\n\n // Acquire/create persistent root group + sub-groups\n let root = svg.select<SVGGElement>('g.qhc-root')\n if (root.empty()) {\n root = svg.append<SVGGElement>('g').attr('class', 'qhc-root')\n }\n root.attr('transform', `translate(${margin.left},${margin.top})`)\n\n const ensureGroup = (cls: string) => {\n let s = root.select<SVGGElement>(`g.${cls}`)\n if (s.empty()) s = root.append<SVGGElement>('g').attr('class', cls)\n return s\n }\n\n const gridGroup = ensureGroup('qhc-grid')\n const linesGroup = ensureGroup('qhc-lines')\n const pointsGroup = ensureGroup('qhc-points')\n const axesGroup = ensureGroup('qhc-axes')\n const uiGroup = ensureGroup('qhc-ui')\n\n const dates = aggregateData.dates.map(d => new Date(d))\n\n const xScale = d3.scaleTime()\n .domain(d3.extent(dates) as [Date, Date])\n .range([0, chartWidth])\n\n const maxValue = Math.max(\n 1,\n ...activeHabits.flatMap(habit =>\n (aggregateData[habit] as number[]).filter(v => typeof v === 'number')\n )\n )\n\n const yScale = d3.scaleLinear()\n .domain([0, maxValue * 1.1])\n .range([chartHeight, 0])\n\n const lineGen = d3.line<[Date, number]>()\n .x(d => xScale(d[0]))\n .y(d => yScale(d[1]))\n .curve(d3.curveMonotoneX)\n\n // -------- Grid --------\n const gridSel = gridGroup.selectAll<SVGLineElement, number>('line.qhc-grid-line')\n .data(yScale.ticks(5), d => String(d))\n gridSel.exit().remove()\n const gridEnter = gridSel.enter().append('line')\n .attr('class', `${styles.gridLine} qhc-grid-line`)\n .style('opacity', 0)\n gridEnter.merge(gridSel)\n .attr('x1', 0)\n .attr('x2', chartWidth)\n .attr('y1', d => yScale(d))\n .attr('y2', d => yScale(d))\n .transition()\n .duration(400)\n .style('opacity', 1)\n\n // -------- Axes --------\n const getISOWeek = (date: Date) => {\n const d = new Date(date)\n d.setHours(0, 0, 0, 0)\n d.setDate(d.getDate() + 3 - (d.getDay() + 6) % 7)\n const week1 = new Date(d.getFullYear(), 0, 4)\n return 1 + Math.round(((d.getTime() - week1.getTime()) / 86400000 - 3 + (week1.getDay() + 6) % 7) / 7)\n }\n\n const xAxisFormat = (() => {\n switch (viewType) {\n case 'daily':\n return d3.timeFormat('%m-%d')\n case 'weekly':\n return (d: Date) => `W${getISOWeek(d).toString().padStart(2, '0')}`\n case 'monthly':\n return d3.timeFormat('%b')\n case 'quarterly':\n return (d: Date) => `Q${Math.floor(d.getMonth() / 3) + 1}`\n default:\n return d3.timeFormat('%m-%d')\n }\n })()\n\n const tickCount = (() => {\n switch (viewType) {\n case 'daily':\n return Math.min(10, aggregateData.dates.length)\n case 'weekly':\n return Math.min(12, aggregateData.dates.length)\n case 'monthly':\n return Math.min(12, aggregateData.dates.length)\n case 'quarterly':\n return aggregateData.dates.length\n default:\n return undefined\n }\n })()\n\n const xAxisGenerator = d3.axisBottom(xScale)\n .tickFormat(d => xAxisFormat(d as Date))\n if (viewType === 'quarterly') {\n xAxisGenerator.tickValues(dates)\n } else if (tickCount) {\n xAxisGenerator.ticks(tickCount)\n }\n\n let xAxis = axesGroup.select<SVGGElement>('g.qhc-x-axis')\n if (xAxis.empty()) {\n xAxis = axesGroup.append<SVGGElement>('g').attr('class', `${styles.xAxis} qhc-x-axis`)\n }\n xAxis.attr('transform', `translate(0,${chartHeight})`).call(xAxisGenerator as never)\n xAxis.selectAll('text')\n .style('text-anchor', viewType === 'daily' || viewType === 'weekly' ? 'end' : 'middle')\n .attr('dx', viewType === 'daily' || viewType === 'weekly' ? '-.8em' : '0')\n .attr('dy', viewType === 'daily' || viewType === 'weekly' ? '.15em' : '.71em')\n .attr('transform', viewType === 'daily' || viewType === 'weekly' ? 'rotate(-45)' : null)\n\n let yAxis = axesGroup.select<SVGGElement>('g.qhc-y-axis')\n if (yAxis.empty()) {\n yAxis = axesGroup.append<SVGGElement>('g').attr('class', `${styles.yAxis} qhc-y-axis`)\n }\n yAxis.call(d3.axisLeft(yScale) as never)\n\n if (isFirstRender) {\n xAxis.style('opacity', 0).transition().duration(500).delay(80).style('opacity', 1)\n yAxis.style('opacity', 0).transition().duration(500).delay(80).style('opacity', 1)\n }\n\n // -------- Lines (data join, morph on update) --------\n const lineData: LineDatum[] = activeHabits.map(habit => {\n const points = dates\n .map((date, i) => [date, aggregateData[habit][i]] as [Date, number])\n .filter(d => typeof d[1] === 'number')\n return { habit, color: getColor(habit), points }\n })\n\n const lineSel = linesGroup.selectAll<SVGPathElement, LineDatum>('path.qhc-line')\n .data(lineData, (d: LineDatum) => d.habit)\n\n lineSel.exit()\n .transition('line-exit')\n .duration(300)\n .style('opacity', 0)\n .remove()\n\n const lineEnter = lineSel.enter().append('path')\n .attr('class', `${styles.line} qhc-line`)\n .attr('data-habit', d => d.habit)\n .attr('fill', 'none')\n .attr('stroke', d => d.color)\n .attr('opacity', 0)\n .attr('d', d => lineGen(d.points) || '')\n .each(function () {\n const node = this as SVGPathElement\n const len = typeof node.getTotalLength === 'function' ? node.getTotalLength() : 0\n if (len > 0) {\n d3.select(node)\n .attr('stroke-dasharray', `${len} ${len}`)\n .attr('stroke-dashoffset', len)\n }\n })\n\n lineEnter.transition('line-enter')\n .duration(900)\n .ease(d3.easeCubicOut)\n .attr('opacity', 1)\n .attr('stroke-dashoffset', 0)\n .on('end', function () {\n d3.select(this).attr('stroke-dasharray', null)\n })\n\n lineSel.transition('line-update')\n .duration(700)\n .ease(d3.easeCubicInOut)\n .attr('stroke', d => d.color)\n .attrTween('d', function (d) {\n const oldD = d3.select(this).attr('d') || ''\n const newD = lineGen(d.points) || ''\n return pathTween(oldD, newD, 90)\n })\n .on('end', function (d) {\n d3.select(this).attr('d', lineGen(d.points) || '')\n })\n\n // -------- Points --------\n // Clear and re-add (simpler than join when both habit set + count change).\n // Hide them during line morph, then spring up from baseline.\n pointsGroup.selectAll('*').remove()\n\n type PointDatum = { habit: string; color: string; date: Date; value: number }\n const allPoints: PointDatum[] = []\n activeHabits.forEach(habit => {\n const color = getColor(habit)\n dates.forEach((date, i) => {\n const v = aggregateData[habit][i] as number\n if (typeof v === 'number' && !isNaN(v)) {\n allPoints.push({ habit, color, date, value: v })\n }\n })\n })\n\n const minX = xScale(dates[0])\n const maxX = xScale(dates[dates.length - 1])\n const xRange = Math.max(1, maxX - minX)\n const pointAppearDelay = isFirstRender ? 100 : 350\n const pointAppearTotal = isFirstRender ? 1100 : 600\n\n pointsGroup.selectAll<SVGCircleElement, PointDatum>('circle.qhc-point')\n .data(allPoints)\n .enter().append('circle')\n .attr('class', `${styles.dataPoint} qhc-point`)\n .attr('data-habit', d => d.habit)\n .attr('cx', d => xScale(d.date))\n .attr('cy', chartHeight)\n .attr('r', 0)\n .attr('fill', d => d.color)\n .style('opacity', 0)\n .transition('point-enter')\n .delay(d => pointAppearDelay + pointAppearTotal * ((xScale(d.date) - minX) / xRange))\n .duration(420)\n .ease(d3.easeBackOut.overshoot(2))\n .attr('cy', d => yScale(d.value))\n .attr('r', 4)\n .style('opacity', 1)\n\n // -------- UI layer (crosshair, halo, overlay) --------\n uiGroup.selectAll('*').remove()\n\n const crosshair = uiGroup.append('line')\n .attr('class', styles.crosshair)\n .attr('y1', 0)\n .attr('y2', chartHeight)\n .style('opacity', 0)\n .style('pointer-events', 'none')\n\n const halo = uiGroup.append('circle')\n .attr('class', styles.halo)\n .attr('r', 0)\n .style('opacity', 0)\n .style('pointer-events', 'none')\n\n let activeKey: string | null = null\n\n const startHaloPulse = (cx: number, cy: number, fill: string) => {\n halo.interrupt('halo-pulse').interrupt('halo-out')\n .attr('cx', cx).attr('cy', cy).attr('fill', fill)\n const pulseOnce = () => {\n halo.attr('r', 4).style('opacity', 0.55)\n .transition('halo-pulse').duration(900).ease(d3.easeCubicOut)\n .attr('r', 18).style('opacity', 0)\n .on('end', pulseOnce)\n }\n pulseOnce()\n }\n const stopHaloPulse = () => {\n halo.interrupt('halo-pulse')\n .transition('halo-out').duration(180)\n .style('opacity', 0).attr('r', 0)\n }\n\n type ActivePt = { habit: string; date: Date; value: number; x: number; y: number }\n const activeAll: ActivePt[] = allPoints.map(p => ({\n habit: p.habit,\n date: p.date,\n value: p.value,\n x: xScale(p.date),\n y: yScale(p.value)\n }))\n\n const setActive = (pt: ActivePt, clientX: number, clientY: number) => {\n const key = `${pt.habit}|${pt.date.toISOString()}`\n const color = getColor(pt.habit)\n\n crosshair.attr('x1', pt.x).attr('x2', pt.x)\n .interrupt('crosshair-fade')\n .transition('crosshair-fade').duration(120).style('opacity', 1)\n\n if (activeKey !== key) {\n pointsGroup.selectAll<SVGCircleElement, unknown>('circle.qhc-point')\n .filter(function () { return d3.select(this).attr('data-active') === 'true' })\n .attr('data-active', null)\n .transition('point-scale').duration(150).attr('r', 4)\n\n pointsGroup.selectAll<SVGCircleElement, unknown>('circle.qhc-point')\n .filter(function () {\n const cx = +d3.select(this).attr('cx')\n const cy = +d3.select(this).attr('cy')\n const habit = d3.select(this).attr('data-habit')\n return habit === pt.habit && Math.abs(cx - pt.x) < 0.5 && Math.abs(cy - pt.y) < 0.5\n })\n .attr('data-active', 'true')\n .transition('point-scale').duration(180).ease(d3.easeBackOut.overshoot(2))\n .attr('r', 7)\n\n startHaloPulse(pt.x, pt.y, color)\n activeKey = key\n }\n\n setTooltipData({\n habit: pt.habit,\n date: pt.date.toISOString().split('T')[0],\n value: pt.value,\n x: clientX,\n y: clientY\n })\n }\n\n const clearActive = () => {\n crosshair.interrupt('crosshair-fade')\n .transition('crosshair-fade').duration(180).style('opacity', 0)\n pointsGroup.selectAll<SVGCircleElement, unknown>('circle.qhc-point')\n .filter(function () { return d3.select(this).attr('data-active') === 'true' })\n .attr('data-active', null)\n .transition('point-scale').duration(180).attr('r', 4)\n stopHaloPulse()\n activeKey = null\n setTooltipData(null)\n }\n\n uiGroup.append('rect')\n .attr('class', styles.overlay)\n .attr('width', chartWidth)\n .attr('height', chartHeight)\n .on('mousemove', function (event: MouseEvent) {\n if (activeAll.length === 0) return\n const [mx, my] = d3.pointer(event, this as SVGRectElement)\n let nearest = activeAll[0]\n let nearestDist = Infinity\n for (const p of activeAll) {\n const dx = p.x - mx\n const dy = p.y - my\n const dist = dx * dx + dy * dy\n if (dist < nearestDist) {\n nearestDist = dist\n nearest = p\n }\n }\n setActive(nearest, event.clientX, event.clientY)\n })\n .on('mouseleave', () => {\n clearActive()\n })\n .on('click', function (event: MouseEvent) {\n if (activeAll.length === 0 || !onClickRef.current) return\n const [mx, my] = d3.pointer(event, this as SVGRectElement)\n let nearest = activeAll[0]\n let nearestDist = Infinity\n for (const p of activeAll) {\n const dx = p.x - mx\n const dy = p.y - my\n const dist = dx * dx + dy * dy\n if (dist < nearestDist) {\n nearestDist = dist\n nearest = p\n }\n }\n onClickRef.current(nearest.habit, nearest.date.toISOString().split('T')[0], nearest.value)\n })\n\n uiGroup.raise()\n\n }, [aggregateData, activeHabits, chartWidth, chartHeight, margin, getColor, viewType, width, height])\n\n // Hover dimming: update opacity on existing elements without redrawing.\n useEffect(() => {\n if (!svgRef.current) return\n const svg = d3.select(svgRef.current)\n svg.selectAll<SVGPathElement, unknown>('path.qhc-line')\n .each(function () {\n const habit = (this as SVGPathElement).getAttribute('data-habit')\n const dim = hoveredHabit && hoveredHabit !== habit\n d3.select(this)\n .transition('hover-dim')\n .duration(180)\n .attr('opacity', dim ? 0.25 : 1)\n })\n svg.selectAll<SVGCircleElement, unknown>('circle.qhc-point')\n .each(function () {\n const habit = (this as SVGCircleElement).getAttribute('data-habit')\n const dim = hoveredHabit && hoveredHabit !== habit\n d3.select(this)\n .transition('hover-dim')\n .duration(180)\n .attr('opacity', dim ? 0.25 : 1)\n })\n }, [hoveredHabit])\n\n const formatTooltipDate = (dateStr: string, viewType: ViewType): string => {\n const date = new Date(dateStr)\n switch (viewType) {\n case 'daily':\n return date.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' })\n case 'weekly':\n return `Week of ${date.toLocaleDateString('en-US', { month: 'short', day: 'numeric' })}`\n case 'monthly':\n return date.toLocaleDateString('en-US', { month: 'long', year: 'numeric' })\n case 'quarterly': {\n const quarter = Math.floor(date.getMonth() / 3) + 1\n return `Q${quarter} ${date.getFullYear()}`\n }\n default:\n return dateStr\n }\n }\n\n const viewTypeConfig = {\n daily: { Icon: Calendar, label: 'Daily' },\n weekly: { Icon: CalendarDays, label: 'Weekly' },\n monthly: { Icon: CalendarRange, label: 'Monthly' },\n quarterly: { Icon: BarChart3, label: 'Quarterly' }\n }\n\n const shouldShowAggregationToggle = viewType !== 'daily'\n\n return (\n <div className={styles.container}>\n {!hideControls && (\n <div className={styles.controls}>\n <div className={styles.viewToggle}>\n {availableViewTypes.map(type => {\n const { Icon, label } = viewTypeConfig[type]\n return (\n <button\n key={type}\n className={`${styles.viewButton} ${viewType === type ? styles.active : ''}`}\n onClick={() => setViewType(type)}\n title={label}\n >\n <span className={styles.viewIcon}><Icon size={16} /></span>\n <span className={styles.viewLabel}>{label}</span>\n </button>\n )\n })}\n </div>\n {shouldShowAggregationToggle && (\n <div className={styles.aggregationToggle}>\n <button\n className={`${styles.aggregationButton} ${aggregationMode === 'average' ? styles.active : ''}`}\n onClick={() => setAggregationMode('average')}\n title=\"Show average values for each period\"\n >\n <span className={styles.aggregationIcon}><Divide size={16} /></span>\n <span className={styles.aggregationLabel}>Average</span>\n </button>\n <button\n className={`${styles.aggregationButton} ${aggregationMode === 'sum' ? styles.active : ''}`}\n onClick={() => setAggregationMode('sum')}\n title=\"Show total values for each period\"\n >\n <span className={styles.aggregationIcon}><Sigma size={16} /></span>\n <span className={styles.aggregationLabel}>Sum</span>\n </button>\n </div>\n )}\n </div>\n )}\n\n <div className={`${styles.legend}${compactLegend ? ` ${styles.compactLegend}` : ''}`}>\n {habits.map(habit => (\n <button\n key={habit}\n className={`${styles.legendItem} ${!activeHabits.includes(habit) ? styles.inactive : ''}`}\n onClick={() => toggleHabit(habit)}\n onMouseEnter={() => setHoveredHabit(habit)}\n onMouseLeave={() => setHoveredHabit(null)}\n >\n <span className={styles.legendEmoji}>\n {customHabitEmojis[habit] || '📊'}\n </span>\n <span\n className={styles.legendColor}\n style={{ backgroundColor: getColor(habit) }}\n />\n <span className={styles.legendLabel}>{habit}</span>\n </button>\n ))}\n </div>\n\n <svg\n ref={svgRef}\n viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"xMidYMid meet\"\n className={styles.chart}\n />\n\n {tooltipData && (\n <div\n ref={tooltipRef}\n className={`${styles.tooltip} ${tooltipData ? styles.visible : ''}`}\n style={{\n left: `${tooltipData.x}px`,\n top: `${tooltipData.y - 80}px`\n }}\n >\n <div className={styles.tooltipHeader}>\n <span className={styles.tooltipEmoji}>\n {customHabitEmojis[tooltipData.habit] || '📊'}\n </span>\n <span\n className={styles.tooltipDot}\n style={{ backgroundColor: getColor(tooltipData.habit) }}\n />\n <span>{tooltipData.habit}</span>\n </div>\n <div className={styles.tooltipInfo}>\n <div className={styles.tooltipDate}>\n {formatTooltipDate(tooltipData.date, viewType)}\n </div>\n <div className={styles.tooltipValue}>\n <strong>{Math.round(tooltipData.value * 10) / 10}</strong>\n <span style={{ fontSize: '12px', fontWeight: 'normal', opacity: 0.6 }}>units</span>\n </div>\n </div>\n </div>\n )}\n </div>\n )\n}\n","import React, { useState, useEffect, useMemo, useRef, useCallback } from 'react'\nimport * as d3 from 'd3'\nimport { ScatterChart, BarChart3 } from 'lucide-react'\nimport styles from './HabitTimeOfDayChart.module.css'\n\nexport interface HabitEvent {\n loggedAt: string\n habitKey: string\n}\n\nexport type HabitTimeOfDayView = 'scatter' | 'totals'\n\ninterface HabitTimeOfDayChartProps {\n events: HabitEvent[]\n width?: number\n height?: number\n startDate?: string\n endDate?: string\n habitColors?: { [key: string]: string }\n habitEmojis?: { [key: string]: string }\n defaultView?: HabitTimeOfDayView\n hideControls?: boolean\n compactLegend?: boolean\n}\n\ninterface TooltipData {\n x: number\n y: number\n habit?: string\n hour: number\n minute?: number\n date?: string\n count: number\n breakdown?: { habit: string; count: number }[]\n}\n\nconst DEFAULT_HABIT_COLORS: { [key: string]: string } = {\n Exercise: '#6BCB77',\n Meditation: '#4D96FF',\n Reading: '#FFB319',\n Water: '#00D9FF',\n Steps: '#FF6B6B',\n Sleep: '#9B59B6',\n Calories: '#FF9F1C',\n Study: '#C774E8',\n}\n\nconst getDateKey = (d: Date): string => {\n const y = d.getFullYear()\n const m = String(d.getMonth() + 1).padStart(2, '0')\n const day = String(d.getDate()).padStart(2, '0')\n return `${y}-${m}-${day}`\n}\n\nconst formatHour = (hour: number): string => {\n const h = ((hour % 24) + 24) % 24\n return `${String(h).padStart(2, '0')}:00`\n}\n\nconst formatTime = (hour: number, minute: number): string => {\n const h = ((hour % 24) + 24) % 24\n return `${String(h).padStart(2, '0')}:${String(minute).padStart(2, '0')}`\n}\n\nconst enumerateDates = (start: string, end: string): string[] => {\n const dates: string[] = []\n const [sy, sm, sd] = start.split('-').map(Number)\n const [ey, em, ed] = end.split('-').map(Number)\n const current = new Date(sy, sm - 1, sd)\n const last = new Date(ey, em - 1, ed)\n while (current <= last) {\n dates.push(getDateKey(current))\n current.setDate(current.getDate() + 1)\n }\n return dates\n}\n\ninterface ParsedEvent {\n habitKey: string\n date: string\n hour: number\n minute: number\n hourFraction: number\n}\n\ninterface DotCluster {\n habitKey: string\n date: string\n hour: number\n minute: number\n hourFraction: number\n count: number\n xOffsetPx: number\n}\n\nexport const HabitTimeOfDayChart: React.FC<HabitTimeOfDayChartProps> = ({\n events,\n width = 800,\n height = 400,\n startDate,\n endDate,\n habitColors: customHabitColors = {},\n habitEmojis: customHabitEmojis = {},\n defaultView = 'scatter',\n hideControls = false,\n compactLegend = false,\n}) => {\n const svgRef = useRef<SVGSVGElement>(null)\n const [view, setView] = useState<HabitTimeOfDayView>(defaultView)\n const [activeHabits, setActiveHabits] = useState<string[]>([])\n const [hoveredHabit, setHoveredHabit] = useState<string | null>(null)\n const [tooltipData, setTooltipData] = useState<TooltipData | null>(null)\n\n const margin = useMemo(() => ({ top: 20, right: 20, bottom: 50, left: 70 }), [])\n const chartWidth = width - margin.left - margin.right\n const chartHeight = height - margin.top - margin.bottom\n\n const getColor = useCallback(\n (habit: string): string => {\n return (\n customHabitColors[habit] ||\n DEFAULT_HABIT_COLORS[habit] ||\n `hsl(${Math.abs(habit.split('').reduce((a, b) => a + b.charCodeAt(0), 0)) % 360}, 70%, 50%)`\n )\n },\n [customHabitColors]\n )\n\n const parsed = useMemo<ParsedEvent[]>(() => {\n return events\n .map(e => {\n const d = new Date(e.loggedAt)\n if (Number.isNaN(d.getTime())) return null\n const hour = d.getHours()\n const minute = d.getMinutes()\n const second = d.getSeconds()\n return {\n habitKey: e.habitKey,\n date: getDateKey(d),\n hour,\n minute,\n hourFraction: hour + minute / 60 + second / 3600,\n }\n })\n .filter((e): e is ParsedEvent => e !== null)\n }, [events])\n\n const habits = useMemo(() => {\n const set = new Set<string>()\n parsed.forEach(e => set.add(e.habitKey))\n return Array.from(set).sort()\n }, [parsed])\n\n useEffect(() => {\n setActiveHabits(habits)\n }, [habits])\n\n useEffect(() => {\n const handleScroll = () => setTooltipData(null)\n window.addEventListener('scroll', handleScroll, true)\n return () => window.removeEventListener('scroll', handleScroll, true)\n }, [])\n\n const dateRange = useMemo(() => {\n if (startDate && endDate) return enumerateDates(startDate, endDate)\n if (parsed.length === 0) return []\n const sorted = [...parsed].map(p => p.date).sort()\n return enumerateDates(sorted[0], sorted[sorted.length - 1])\n }, [parsed, startDate, endDate])\n\n const filtered = useMemo(() => {\n const active = new Set(activeHabits)\n return parsed.filter(e => active.has(e.habitKey))\n }, [parsed, activeHabits])\n\n // Group events that land on the same minute (same habit) into a single\n // cluster so overlapping dots become one sized/counted dot. Then, for any\n // (date, minute) coord with multiple habits, fan them out horizontally so\n // different-colored dots stop masking each other.\n const clusters = useMemo<DotCluster[]>(() => {\n const byKey = new Map<string, DotCluster>()\n filtered.forEach(e => {\n const bucketFraction = Math.round(e.hourFraction * 60) / 60\n const bucketMinute = Math.round(bucketFraction * 60) % 60\n const bucketHour = Math.floor(bucketFraction)\n const key = `${e.date}|${e.habitKey}|${bucketFraction}`\n const existing = byKey.get(key)\n if (existing) {\n existing.count += 1\n } else {\n byKey.set(key, {\n habitKey: e.habitKey,\n date: e.date,\n hour: bucketHour,\n minute: bucketMinute,\n hourFraction: bucketFraction,\n count: 1,\n xOffsetPx: 0,\n })\n }\n })\n\n const coordGroups = new Map<string, DotCluster[]>()\n byKey.forEach(c => {\n const coordKey = `${c.date}|${c.hourFraction}`\n const arr = coordGroups.get(coordKey)\n if (arr) arr.push(c)\n else coordGroups.set(coordKey, [c])\n })\n\n const out: DotCluster[] = []\n const spacing = 10\n coordGroups.forEach(group => {\n group.sort((a, b) => a.habitKey.localeCompare(b.habitKey))\n const mid = (group.length - 1) / 2\n group.forEach((c, i) => {\n out.push({ ...c, xOffsetPx: (i - mid) * spacing })\n })\n })\n return out\n }, [filtered])\n\n const hourlyTotals = useMemo(() => {\n const totals = Array.from({ length: 24 }, (_, hour) => ({\n hour,\n total: 0,\n byHabit: new Map<string, number>(),\n }))\n filtered.forEach(e => {\n const bucket = totals[e.hour]\n bucket.total += 1\n bucket.byHabit.set(e.habitKey, (bucket.byHabit.get(e.habitKey) || 0) + 1)\n })\n return totals\n }, [filtered])\n\n const maxHourTotal = useMemo(\n () => hourlyTotals.reduce((m, b) => Math.max(m, b.total), 0),\n [hourlyTotals]\n )\n\n const toggleHabit = (habit: string) => {\n setActiveHabits(prev =>\n prev.includes(habit) ? prev.filter(h => h !== habit) : [...prev, habit]\n )\n }\n\n useEffect(() => {\n if (!svgRef.current) return\n const svg = d3.select(svgRef.current)\n svg.selectAll('*').remove()\n\n svg.append('rect')\n .attr('width', width)\n .attr('height', height)\n .attr('fill', 'transparent')\n .style('pointer-events', 'all')\n .on('mouseleave', () => setTooltipData(null))\n\n const g = svg\n .append('g')\n .attr('transform', `translate(${margin.left},${margin.top})`)\n\n if (view === 'scatter') {\n if (dateRange.length === 0) return\n\n const xScale = d3.scaleLinear()\n .domain([0, 24])\n .range([0, chartWidth])\n\n const yScale = d3.scaleBand<string>()\n .domain(dateRange)\n .range([0, chartHeight])\n .padding(0.1)\n\n // Vertical grid lines per 3 hours\n g.selectAll('line.xgrid')\n .data([0, 3, 6, 9, 12, 15, 18, 21, 24])\n .enter()\n .append('line')\n .attr('class', styles.gridLine)\n .attr('x1', d => xScale(d))\n .attr('x2', d => xScale(d))\n .attr('y1', 0)\n .attr('y2', chartHeight)\n\n // Dots\n const rowHeight = yScale.bandwidth()\n const baseRadius = Math.min(5, Math.max(2, rowHeight / 2))\n const maxRadius = baseRadius * 2.2\n const scatterDots = g.selectAll('circle.dot')\n .data(clusters)\n .enter()\n .append('circle')\n .attr('class', styles.dot)\n .attr('cx', d => xScale(d.hourFraction) + d.xOffsetPx)\n .attr('cy', d => (yScale(d.date) ?? 0) + rowHeight / 2)\n .attr('r', 0)\n .attr('fill', d => getColor(d.habitKey))\n .attr('opacity', 0)\n .style('cursor', 'pointer')\n\n scatterDots.transition()\n .delay(d => (xScale(d.hourFraction) / chartWidth) * 600)\n .duration(380)\n .ease(d3.easeBackOut.overshoot(1.8))\n .attr('r', d => Math.min(maxRadius, baseRadius * Math.sqrt(d.count)))\n .attr('opacity', d =>\n hoveredHabit && hoveredHabit !== d.habitKey ? 0.15 : 0.8\n )\n\n scatterDots\n .on('mouseenter', function (_event: MouseEvent, d) {\n const rect = svgRef.current?.getBoundingClientRect()\n if (!rect) return\n setTooltipData({\n x: xScale(d.hourFraction) + d.xOffsetPx + margin.left + rect.left,\n y: (yScale(d.date) ?? 0) + margin.top + rect.top,\n habit: d.habitKey,\n hour: d.hour,\n minute: d.minute,\n date: d.date,\n count: d.count,\n })\n })\n .on('mouseleave', () => setTooltipData(null))\n\n // X axis (hours)\n const xAxis = d3.axisBottom(xScale)\n .tickValues([0, 3, 6, 9, 12, 15, 18, 21])\n .tickFormat(d => formatHour(d as number))\n g.append('g')\n .attr('class', styles.xAxis)\n .attr('transform', `translate(0,${chartHeight})`)\n .call(xAxis)\n\n // Y axis (dates) — evenly spaced\n const yTickCount = Math.min(8, dateRange.length)\n const yStep = Math.max(1, Math.floor(dateRange.length / yTickCount))\n const yTickValues = dateRange.filter((_, i) => i % yStep === 0)\n const yAxis = d3.axisLeft(yScale)\n .tickValues(yTickValues)\n .tickFormat(d => {\n const [, m, day] = (d as string).split('-')\n return `${m}/${day}`\n })\n g.append('g').attr('class', styles.yAxis).call(yAxis)\n } else {\n // Totals view: stacked bar by hour\n const xScale = d3.scaleBand<number>()\n .domain(d3.range(24))\n .range([0, chartWidth])\n .padding(0.15)\n\n const yScale = d3.scaleLinear()\n .domain([0, Math.max(1, maxHourTotal)])\n .nice()\n .range([chartHeight, 0])\n\n g.selectAll('line.grid')\n .data(yScale.ticks(5))\n .enter()\n .append('line')\n .attr('class', styles.gridLine)\n .attr('x1', 0)\n .attr('x2', chartWidth)\n .attr('y1', d => yScale(d))\n .attr('y2', d => yScale(d))\n\n hourlyTotals.forEach(bucket => {\n let cumulative = 0\n const entries = Array.from(bucket.byHabit.entries()).sort(([a], [b]) =>\n a.localeCompare(b)\n )\n const barDelay = (bucket.hour / 24) * 700\n entries.forEach(([habit, count]) => {\n const y = yScale(cumulative + count)\n const barHeight = Math.max(0, yScale(cumulative) - yScale(cumulative + count))\n g.append('rect')\n .attr('class', styles.bar)\n .attr('x', xScale(bucket.hour) ?? 0)\n .attr('y', chartHeight)\n .attr('width', xScale.bandwidth())\n .attr('height', 0)\n .attr('fill', getColor(habit))\n .attr('opacity', hoveredHabit && hoveredHabit !== habit ? 0.3 : 1)\n .transition()\n .delay(barDelay)\n .duration(550)\n .ease(d3.easeCubicOut)\n .attr('y', y)\n .attr('height', barHeight)\n cumulative += count\n })\n\n if (bucket.total > 0) {\n g.append('rect')\n .attr('x', xScale(bucket.hour) ?? 0)\n .attr('y', 0)\n .attr('width', xScale.bandwidth())\n .attr('height', chartHeight)\n .attr('fill', 'transparent')\n .style('cursor', 'pointer')\n .on('mouseenter', function () {\n const rect = svgRef.current?.getBoundingClientRect()\n if (!rect) return\n setTooltipData({\n x: (xScale(bucket.hour) ?? 0) + xScale.bandwidth() / 2 + margin.left + rect.left,\n y: yScale(bucket.total) + margin.top + rect.top,\n hour: bucket.hour,\n count: bucket.total,\n breakdown: Array.from(bucket.byHabit.entries())\n .map(([habit, count]) => ({ habit, count }))\n .sort((a, b) => b.count - a.count),\n })\n })\n .on('mouseleave', () => setTooltipData(null))\n }\n })\n\n const xAxis = d3.axisBottom(xScale)\n .tickValues([0, 3, 6, 9, 12, 15, 18, 21])\n .tickFormat(d => formatHour(d as number))\n g.append('g')\n .attr('class', styles.xAxis)\n .attr('transform', `translate(0,${chartHeight})`)\n .call(xAxis)\n\n g.append('g').attr('class', styles.yAxis).call(d3.axisLeft(yScale).ticks(5))\n }\n }, [\n view,\n filtered,\n clusters,\n hourlyTotals,\n dateRange,\n maxHourTotal,\n chartWidth,\n chartHeight,\n margin,\n width,\n height,\n hoveredHabit,\n getColor,\n ])\n\n const viewConfig = {\n scatter: { icon: <ScatterChart size={16} />, label: 'Scatter' },\n totals: { icon: <BarChart3 size={16} />, label: 'Totals' },\n }\n\n const formatTooltipDate = (date: string): string => {\n const [y, m, d] = date.split('-').map(Number)\n return new Date(y, m - 1, d).toLocaleDateString('en-US', {\n weekday: 'short',\n month: 'short',\n day: 'numeric',\n })\n }\n\n return (\n <div className={styles.container}>\n {!hideControls && (\n <div className={styles.controls}>\n <div className={styles.viewToggle}>\n {(['scatter', 'totals'] as HabitTimeOfDayView[]).map(type => (\n <button\n key={type}\n className={`${styles.viewButton} ${view === type ? styles.active : ''}`}\n onClick={() => setView(type)}\n title={viewConfig[type].label}\n >\n <span className={styles.viewIcon}>{viewConfig[type].icon}</span>\n <span className={styles.viewLabel}>{viewConfig[type].label}</span>\n </button>\n ))}\n </div>\n </div>\n )}\n\n {habits.length > 0 && (\n <div className={`${styles.legend}${compactLegend ? ` ${styles.compactLegend}` : ''}`}>\n {habits.map(habit => (\n <button\n key={habit}\n className={`${styles.legendItem} ${!activeHabits.includes(habit) ? styles.inactive : ''}`}\n onClick={() => toggleHabit(habit)}\n onMouseEnter={() => setHoveredHabit(habit)}\n onMouseLeave={() => setHoveredHabit(null)}\n >\n <span className={styles.legendEmoji}>\n {customHabitEmojis[habit] || '📊'}\n </span>\n <span\n className={styles.legendColor}\n style={{ backgroundColor: getColor(habit) }}\n />\n <span className={styles.legendLabel}>{habit}</span>\n </button>\n ))}\n </div>\n )}\n\n <svg\n ref={svgRef}\n viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"xMidYMid meet\"\n className={styles.chart}\n />\n\n {tooltipData && (\n <div\n className={`${styles.tooltip} ${styles.visible}`}\n style={{ left: `${tooltipData.x}px`, top: `${tooltipData.y - 70}px` }}\n >\n {tooltipData.habit ? (\n <>\n <div className={styles.tooltipHeader}>\n <span\n className={styles.tooltipDot}\n style={{ backgroundColor: getColor(tooltipData.habit) }}\n />\n <span>\n {customHabitEmojis[tooltipData.habit] || ''} {tooltipData.habit}\n </span>\n </div>\n <div className={styles.tooltipInfo}>\n <div className={styles.tooltipDate}>\n {tooltipData.date ? formatTooltipDate(tooltipData.date) : ''}\n {tooltipData.minute !== undefined\n ? ` · ${formatTime(tooltipData.hour, tooltipData.minute)}`\n : ''}\n </div>\n {tooltipData.count > 1 && (\n <div className={styles.tooltipValue}>\n <strong>{tooltipData.count}</strong>\n <span className={styles.tooltipUnits}>events</span>\n </div>\n )}\n </div>\n </>\n ) : (\n <>\n <div className={styles.tooltipHeader}>\n <span>{formatHour(tooltipData.hour)}</span>\n </div>\n <div className={styles.tooltipInfo}>\n <div className={styles.tooltipValue}>\n <strong>{tooltipData.count}</strong>\n <span className={styles.tooltipUnits}>\n event{tooltipData.count === 1 ? '' : 's'}\n </span>\n </div>\n {tooltipData.breakdown && tooltipData.breakdown.length > 1 && (\n <div className={styles.tooltipBreakdown}>\n {tooltipData.breakdown.map(({ habit, count }) => (\n <div key={habit} className={styles.tooltipBreakdownRow}>\n <span\n className={styles.tooltipDot}\n style={{ backgroundColor: getColor(habit) }}\n />\n <span>\n {customHabitEmojis[habit] || ''} {habit}\n </span>\n <span className={styles.tooltipCount}>{count}</span>\n </div>\n ))}\n </div>\n )}\n </div>\n </>\n )}\n </div>\n )}\n </div>\n )\n}\n","import React, { useEffect, useRef, useMemo, useState } from 'react'\nimport * as d3 from 'd3'\nimport styles from './SleepChart.module.css'\n\ninterface SleepData {\n date: string\n sleep_time: string | null\n wake_hour: string | null\n}\n\ninterface TooltipData {\n date: string\n sleepTime: string | null\n wakeTime: string | null\n duration: number | null\n x: number\n y: number\n}\n\ninterface SleepChartProps {\n sleepData: SleepData[]\n width?: number\n height?: number\n onDateClick?: (date: string) => void\n}\n\nconst parseTimeToDecimal = (time: string): number => {\n const [hours, minutes] = time.split(':').map(Number)\n return hours + minutes / 60\n}\n\nconst formatTime = (hour: number): string => {\n const h24 = Math.floor(hour % 24)\n const minutes = Math.round((hour % 1) * 60)\n return `${h24.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`\n}\n\nconst formatDuration = (decimal: number): string => {\n const h = Math.floor(decimal)\n const m = Math.round((decimal % 1) * 60)\n return `${h}h ${m.toString().padStart(2, '0')}m`\n}\n\n// Build an SVG sine-wave path between two x-coordinates at a given baseline y.\n// Two quadratic curves per cycle keep the curve smooth without needing cubic control points.\nconst buildSquigglePath = (\n x1: number,\n x2: number,\n y: number,\n amplitude: number,\n wavelength: number\n): string => {\n const distance = Math.max(0, x2 - x1)\n if (distance === 0) return `M ${x1} ${y}`\n const cycles = Math.max(1, Math.round(distance / wavelength))\n const halfStep = distance / (cycles * 2)\n let path = `M ${x1} ${y}`\n for (let i = 0; i < cycles * 2; i++) {\n const cx = x1 + (i + 0.5) * halfStep\n const cy = y + (i % 2 === 0 ? -amplitude : amplitude)\n const ex = x1 + (i + 1) * halfStep\n path += ` Q ${cx} ${cy} ${ex} ${y}`\n }\n return path\n}\n\nexport const SleepChart: React.FC<SleepChartProps> = ({\n sleepData,\n width = 800,\n height = 400,\n onDateClick,\n}) => {\n const svgRef = useRef<SVGSVGElement>(null)\n const [tooltipData, setTooltipData] = useState<TooltipData | null>(null)\n\n const margin = useMemo(() => ({ top: 12, right: 16, bottom: 32, left: 64 }), [])\n const chartWidth = width - margin.left - margin.right\n const chartHeight = height - margin.top - margin.bottom\n\n useEffect(() => {\n const handleScroll = () => setTooltipData(null)\n window.addEventListener('scroll', handleScroll, true)\n return () => window.removeEventListener('scroll', handleScroll, true)\n }, [])\n\n useEffect(() => {\n if (!svgRef.current || sleepData.length === 0) return\n\n const svg = d3.select(svgRef.current)\n svg.selectAll('*').remove()\n\n svg.append('rect')\n .attr('width', width)\n .attr('height', height)\n .attr('fill', 'transparent')\n .style('pointer-events', 'all')\n .on('mouseleave', () => setTooltipData(null))\n\n const g = svg\n .append('g')\n .attr('transform', `translate(${margin.left},${margin.top})`)\n\n const xScale = d3.scaleLinear().domain([18, 42]).range([0, chartWidth])\n\n const yDomain = sleepData.map((d) => d.date)\n const yScale = d3\n .scaleBand()\n .domain(yDomain)\n .range([0, chartHeight])\n .paddingInner(0.35)\n .paddingOuter(0.1)\n\n // Dotted vertical gridlines; midnight/noon are slightly more present.\n g.selectAll('.grid-line-x')\n .data(d3.range(18, 43, 3))\n .enter()\n .append('line')\n .attr('class', styles.gridLine)\n .attr('x1', (d) => xScale(d))\n .attr('y1', 0)\n .attr('x2', (d) => xScale(d))\n .attr('y2', chartHeight)\n .classed(styles.gridLineAccent, (d) => {\n const hour = d % 24\n return hour === 0 || hour === 12\n })\n\n const rowStagger = Math.min(40, 600 / Math.max(1, sleepData.length))\n sleepData.forEach((dayData, rowIdx) => {\n const yValue = yScale(dayData.date)\n if (yValue === undefined) return\n const rowDelay = rowIdx * rowStagger\n\n const barHeight = yScale.bandwidth()\n const sleepGroup = g\n .append('g')\n .attr('class', styles.sleepBar)\n .style('cursor', onDateClick ? 'pointer' : 'default')\n .on('click', () => onDateClick?.(dayData.date))\n\n let sleepHour: number | null = null\n let wakeHour: number | null = null\n\n if (dayData.sleep_time) {\n sleepHour = parseTimeToDecimal(dayData.sleep_time)\n if (sleepHour < 18) sleepHour += 24\n }\n\n if (dayData.wake_hour) {\n wakeHour = parseTimeToDecimal(dayData.wake_hour)\n if (sleepHour !== null) {\n if (wakeHour < sleepHour || (sleepHour >= 18 && wakeHour < 18)) {\n wakeHour += 24\n }\n } else if (wakeHour < 12) {\n wakeHour += 24\n }\n }\n\n if (sleepHour !== null && wakeHour !== null) {\n const x1 = xScale(sleepHour)\n const x2 = xScale(wakeHour)\n const y = yValue + barHeight / 2\n const amplitude = Math.min(barHeight / 2.2, 7)\n const wavelength = 14\n\n const d = buildSquigglePath(x1, x2, y, amplitude, wavelength)\n\n const path = sleepGroup\n .append('path')\n .attr('class', styles.squiggle)\n .attr('d', d)\n .attr('fill', 'none')\n\n const node = path.node() as SVGPathElement\n const length =\n typeof node.getTotalLength === 'function'\n ? node.getTotalLength()\n : (x2 - x1) * 1.8\n path.attr('stroke-dasharray', length)\n .attr('stroke-dashoffset', length)\n .transition()\n .delay(rowDelay)\n .duration(540)\n .ease(d3.easeCubicOut)\n .attr('stroke-dashoffset', 0)\n }\n\n if (sleepHour !== null) {\n sleepGroup\n .append('circle')\n .attr('class', `${styles.endpoint} ${styles.endpointSleep}`)\n .attr('cx', xScale(sleepHour))\n .attr('cy', yValue + barHeight / 2)\n .attr('r', 0)\n .transition()\n .duration(280)\n .delay(rowDelay + 160)\n .ease(d3.easeCubicOut)\n .attr('r', 3.5)\n }\n\n if (wakeHour !== null) {\n sleepGroup\n .append('circle')\n .attr('class', `${styles.endpoint} ${styles.endpointWake}`)\n .attr('cx', xScale(wakeHour))\n .attr('cy', yValue + barHeight / 2)\n .attr('r', 0)\n .transition()\n .duration(280)\n .delay(rowDelay + 220)\n .ease(d3.easeCubicOut)\n .attr('r', 3.5)\n }\n\n sleepGroup\n .on('mouseenter', function (event) {\n d3.select(this).classed(styles.sleepBarHover, true)\n const duration =\n sleepHour !== null && wakeHour !== null ? wakeHour - sleepHour : null\n setTooltipData({\n date: dayData.date,\n sleepTime: sleepHour !== null ? formatTime(sleepHour) : null,\n wakeTime: wakeHour !== null ? formatTime(wakeHour) : null,\n duration:\n duration !== null ? Math.round(duration * 100) / 100 : null,\n x: event.pageX,\n y: event.pageY - 12,\n })\n })\n .on('mouseleave', function () {\n d3.select(this).classed(styles.sleepBarHover, false)\n setTooltipData(null)\n })\n .on('mousemove', function (event) {\n setTooltipData((prev) =>\n prev ? { ...prev, x: event.pageX, y: event.pageY - 12 } : null\n )\n })\n })\n\n const xAxisTicks = d3.range(18, 43, 3).map((hour) => ({\n value: hour,\n label: `${(hour % 24).toString().padStart(2, '0')}:00`,\n }))\n\n const xAxis = g\n .append('g')\n .attr('class', styles.xAxis)\n .attr('transform', `translate(0,${chartHeight})`)\n .call(\n d3\n .axisBottom(xScale)\n .tickValues(xAxisTicks.map((t) => t.value))\n .tickFormat((d) => {\n const tick = xAxisTicks.find((t) => t.value === d)\n return tick ? tick.label : ''\n })\n .tickSize(0)\n .tickPadding(10)\n )\n xAxis.select('.domain').remove()\n\n const tickEvery = Math.max(1, Math.ceil(yDomain.length / 8))\n const yAxisTicks = yDomain.filter((_, i) => i % tickEvery === 0)\n\n const yAxis = g\n .append('g')\n .attr('class', styles.yAxis)\n .call(\n d3\n .axisLeft(yScale)\n .tickValues(yAxisTicks)\n .tickFormat((d) => {\n const date = new Date(d)\n return `${(date.getMonth() + 1)\n .toString()\n .padStart(2, '0')}/${date.getDate().toString().padStart(2, '0')}`\n })\n .tickSize(0)\n .tickPadding(12)\n )\n yAxis.select('.domain').remove()\n }, [sleepData, chartWidth, chartHeight, margin, onDateClick, height, width])\n\n return (\n <div className={styles.container}>\n <header className={styles.header}>\n <span className={styles.eyebrow}>the night</span>\n <h3 className={styles.title}>\n <em>Sleep</em> pattern\n </h3>\n </header>\n\n <svg ref={svgRef} width={width} height={height} className={styles.chart} />\n\n {tooltipData && (\n <div\n className={`${styles.tooltip} ${styles.visible}`}\n style={{ left: `${tooltipData.x}px`, top: `${tooltipData.y}px` }}\n >\n <div className={styles.tooltipDate}>\n {new Date(tooltipData.date).toLocaleDateString('en-US', {\n weekday: 'short',\n month: 'short',\n day: 'numeric',\n })}\n </div>\n <div className={styles.tooltipBody}>\n {tooltipData.sleepTime && (\n <div className={styles.tooltipRow}>\n <em>sleep</em>\n <time>{tooltipData.sleepTime}</time>\n </div>\n )}\n {tooltipData.wakeTime && (\n <div className={styles.tooltipRow}>\n <em>wake</em>\n <time>{tooltipData.wakeTime}</time>\n </div>\n )}\n {tooltipData.duration !== null && (\n <div className={`${styles.tooltipRow} ${styles.tooltipTotal}`}>\n <em>total</em>\n <time>{formatDuration(tooltipData.duration)}</time>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n )\n}\n","import React, { useEffect, useRef, useMemo } from 'react'\nimport * as d3 from 'd3'\nimport styles from './BooleansHeatmap.module.css'\n\ninterface HeatmapChartProps {\n data: { [date: string]: boolean }\n habitName: string\n width?: number\n height?: number\n habitColor?: string\n habitEmoji?: string\n}\n\nconst DAYS_OF_WEEK = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']\nconst MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\n\nexport const BooleansHeatmap: React.FC<HeatmapChartProps> = ({\n data,\n habitName,\n width = 800,\n height = 200,\n habitColor = '#6BCB77',\n habitEmoji = '✓'\n}) => {\n const svgRef = useRef<SVGSVGElement>(null)\n\n const { startDate, endDate, weeksToShow } = useMemo(() => {\n const dates = Object.keys(data).sort()\n if (dates.length === 0) {\n const now = new Date()\n return { \n startDate: now, \n endDate: now, \n weeksToShow: 1 \n }\n }\n \n const start = new Date(dates[0])\n const end = new Date(dates[dates.length - 1])\n const daysDiff = Math.ceil((end.getTime() - start.getTime()) / (1000 * 60 * 60 * 24)) + 1\n const weeksDiff = Math.ceil(daysDiff / 7)\n \n return { \n startDate: start, \n endDate: end, \n weeksToShow: weeksDiff\n }\n }, [data])\n\n useEffect(() => {\n if (!svgRef.current) return\n\n const svg = d3.select(svgRef.current)\n svg.selectAll('*').remove()\n\n const margin = { top: 40, right: 20, bottom: 20, left: 40 }\n const chartWidth = width - margin.left - margin.right\n const chartHeight = height - margin.top - margin.bottom\n\n const cellSize = Math.min(\n Math.floor(chartHeight / 7) - 1,\n Math.floor(chartWidth / weeksToShow) - 1,\n 20\n )\n const cellGap = 2\n\n const g = svg.append('g')\n .attr('transform', `translate(${margin.left},${margin.top})`)\n\n const startDayOffset = (startDate.getDay() + 6) % 7\n\n const monthPositions = new Map<number, number>()\n let currentMonth = startDate.getMonth()\n monthPositions.set(currentMonth, 0)\n\n for (let weekIndex = 0; weekIndex < weeksToShow; weekIndex++) {\n const weekStart = new Date(startDate)\n weekStart.setDate(weekStart.getDate() + weekIndex * 7 - startDayOffset)\n \n if (weekStart.getMonth() !== currentMonth) {\n currentMonth = weekStart.getMonth()\n monthPositions.set(currentMonth, weekIndex)\n }\n }\n\n monthPositions.forEach((weekIndex, month) => {\n g.append('text')\n .attr('x', weekIndex * (cellSize + cellGap))\n .attr('y', -10)\n .attr('class', styles.monthLabel)\n .text(MONTHS[month])\n })\n\n DAYS_OF_WEEK.forEach((day, index) => {\n g.append('text')\n .attr('x', -10)\n .attr('y', index * (cellSize + cellGap) + cellSize / 2)\n .attr('class', styles.dayLabel)\n .attr('text-anchor', 'end')\n .attr('alignment-baseline', 'middle')\n .text(day)\n })\n\n const tooltip = d3.select('body').append('div')\n .attr('class', styles.tooltip)\n .style('opacity', 0)\n .style('position', 'absolute')\n\n const daysToShow = weeksToShow * 7\n \n for (let i = 0; i < daysToShow; i++) {\n const date = new Date(startDate)\n date.setDate(date.getDate() + i - startDayOffset)\n \n if (date < startDate || date > endDate) continue\n \n const dateString = date.toISOString().split('T')[0]\n const dayOfWeek = (date.getDay() + 6) % 7\n const weekIndex = Math.floor((i + startDayOffset) / 7)\n \n const isTrue = dateString in data && data[dateString]\n \n const cx = weekIndex * (cellSize + cellGap) + cellSize / 2\n const cy = dayOfWeek * (cellSize + cellGap) + cellSize / 2\n const rect = g.append('rect')\n .attr('x', cx)\n .attr('y', cy)\n .attr('width', 0)\n .attr('height', 0)\n .attr('rx', 3)\n .attr('class', styles.cell)\n .attr('data-date', dateString)\n .attr('data-value', isTrue ? 'true' : 'false')\n .style('fill', isTrue ? habitColor : '#4D4D4DFF')\n .style('opacity', 0)\n\n const cellDelay = (weekIndex + dayOfWeek) * 18\n rect.transition()\n .delay(cellDelay)\n .duration(320)\n .ease(d3.easeBackOut.overshoot(1.6))\n .attr('x', weekIndex * (cellSize + cellGap))\n .attr('y', dayOfWeek * (cellSize + cellGap))\n .attr('width', cellSize)\n .attr('height', cellSize)\n .style('opacity', 1)\n \n rect.on('mouseover', function(event) {\n tooltip.transition()\n .duration(200)\n .style('opacity', 1)\n \n const formatDate = d3.timeFormat('%b %d, %Y')\n const status = isTrue ? `${habitEmoji} Done` : '✗ Not done'\n \n tooltip.html(`\n <div><strong>${habitName}</strong></div>\n <div>${formatDate(date)}</div>\n <div>${status}</div>\n `)\n .style('left', (event.pageX + 10) + 'px')\n .style('top', (event.pageY - 28) + 'px')\n })\n .on('mouseout', function() {\n tooltip.transition()\n .duration(500)\n .style('opacity', 0)\n })\n }\n\n return () => {\n tooltip.remove()\n }\n }, [data, habitName, width, height, startDate, endDate, weeksToShow, habitColor, habitEmoji])\n\n return (\n <div className={styles.container}>\n <h3 className={styles.title}>\n <span className={styles.habitEmoji}>{habitEmoji}</span>\n {habitName}\n </h3>\n <svg\n ref={svgRef}\n width={width}\n height={height}\n className={styles.chart}\n />\n <div className={styles.legend}>\n <span className={styles.legendItem}>\n <span \n className={styles.legendColor} \n style={{ backgroundColor: habitColor }}\n ></span>\n Done\n </span>\n <span className={styles.legendItem}>\n <span \n className={styles.legendColor} \n style={{ backgroundColor: '#4D4D4DFF' }}\n ></span>\n Not done\n </span>\n </div>\n </div>\n )\n}","import React, { useRef, useEffect, useCallback } from 'react';\nimport * as d3 from 'd3';\nimport styles from './SunburstChart.module.css';\n\nexport interface SunBurstRecord {\n\tname: string;\n\tsize?: number;\n\tchildren?: SunBurstRecord[];\n}\n\ninterface SunburstChartProps {\n\tdata: SunBurstRecord;\n\twidth?: number;\n\theight?: number;\n\ttitle?: string;\n\ttagColors?: Record<string, string>;\n\tunit?: string;\n\tcenterLabel?: string;\n}\n\nconst COLOR_PALETTE = [\n\t'#6366f1',\n\t'#8b5cf6',\n\t'#06b6d4',\n\t'#10b981',\n\t'#f59e0b',\n\t'#ef4444',\n\t'#ec4899',\n\t'#84cc16',\n\t'#f97316',\n\t'#3b82f6',\n\t'#14b8a6',\n\t'#f59e0b',\n];\n\nexport const SunburstChart: React.FC<SunburstChartProps> = ({\n\tdata,\n\twidth = 500,\n\theight = 500,\n\ttitle = 'Sunburst Chart',\n\ttagColors = {},\n\tunit = 'items',\n\tcenterLabel,\n}) => {\n\tconst svgRef = useRef<SVGSVGElement>(null);\n\tconst colorMap = useRef(new Map<string, string>()).current;\n\tconst colorIndex = useRef(0);\n\tconst focusedNodeRef = useRef<d3.HierarchyRectangularNode<SunBurstRecord> | null>(null);\n\n\tconst radius = Math.min(width, height) / 2;\n\n\tconst getColor = useCallback(\n\t\t(name: string, depth: number): string => {\n\t\t\t// First check if we have a tag color for this name\n\t\t\tif (tagColors[name]) {\n\t\t\t\tconst color = d3.color(tagColors[name]);\n\t\t\t\tif (color) {\n\t\t\t\t\t// Darken for deeper levels\n\t\t\t\t\treturn depth > 1\n\t\t\t\t\t\t? color.darker((depth - 1) * 0.3).toString()\n\t\t\t\t\t\t: color.toString();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fallback to color palette\n\t\t\tif (!colorMap.has(name)) {\n\t\t\t\tcolorMap.set(name, COLOR_PALETTE[colorIndex.current % COLOR_PALETTE.length]);\n\t\t\t\tcolorIndex.current++;\n\t\t\t}\n\t\t\tconst baseColor = colorMap.get(name) || '#d4af37';\n\n\t\t\tconst color = d3.color(baseColor);\n\t\t\tif (color) {\n\t\t\t\treturn color.darker(depth * 0.3).toString();\n\t\t\t}\n\t\t\treturn baseColor;\n\t\t},\n\t\t[tagColors, colorMap]\n\t);\n\n\tuseEffect(() => {\n\t\tif (!svgRef.current || !data) return;\n\n\t\tconst svg = d3.select(svgRef.current);\n\t\tsvg.selectAll('*').remove();\n\n\t\tconst g = svg.append('g').attr('transform', `translate(${width / 2},${height / 2})`);\n\n\t\tconst root = d3\n\t\t\t.hierarchy(data)\n\t\t\t.sum((d) => d.size ?? 0)\n\t\t\t.sort((a, b) => (b.value ?? 0) - (a.value ?? 0));\n\n\t\tconst partition = d3.partition<SunBurstRecord>().size([2 * Math.PI, radius * radius]);\n\n\t\tconst nodes = partition(root).descendants();\n\n\t\t// Store original positions for reset\n\t\tinterface ExtendedNode extends d3.HierarchyRectangularNode<SunBurstRecord> {\n\t\t\tx0Original: number;\n\t\t\tx1Original: number;\n\t\t\ty0Original: number;\n\t\t\ty1Original: number;\n\t\t}\n\n\t\tnodes.forEach((d) => {\n\t\t\tconst node = d as ExtendedNode;\n\t\t\tnode.x0Original = d.x0;\n\t\t\tnode.x1Original = d.x1;\n\t\t\tnode.y0Original = d.y0;\n\t\t\tnode.y1Original = d.y1;\n\t\t});\n\n\t\t// arc generator (used for type only — entrance animation builds its own)\n\t\tvoid d3\n\t\t\t.arc<d3.HierarchyRectangularNode<SunBurstRecord>>()\n\t\t\t.startAngle((d) => d.x0)\n\t\t\t.endAngle((d) => d.x1)\n\t\t\t.innerRadius((d) => Math.sqrt(d.y0))\n\t\t\t.outerRadius((d) => Math.sqrt(d.y1))\n\t\t\t.cornerRadius(3);\n\n\t\tconst tooltip = d3\n\t\t\t.select('body')\n\t\t\t.append('div')\n\t\t\t.attr('class', styles.tooltip)\n\t\t\t.style('opacity', 0)\n\t\t\t.style('position', 'absolute');\n\n\t\t// Function to reset to original view\n\t\tconst resetView = () => {\n\t\t\tfocusedNodeRef.current = null;\n\n\t\t\tconst transition = d3.transition().duration(750).ease(d3.easeCubicInOut);\n\n\t\t\t// First show all elements\n\t\t\tpaths.style('opacity', 1);\n\n\t\t\tpaths\n\t\t\t\t.transition(\n\t\t\t\t\ttransition as d3.Transition<\n\t\t\t\t\t\tany,\n\t\t\t\t\t\td3.HierarchyRectangularNode<SunBurstRecord>,\n\t\t\t\t\t\tany,\n\t\t\t\t\t\tany\n\t\t\t\t\t>\n\t\t\t\t)\n\t\t\t\t.attrTween('d', (d) => {\n\t\t\t\t\tconst node = d as ExtendedNode;\n\n\t\t\t\t\treturn (t: number) => {\n\t\t\t\t\t\t// Calculate interpolated positions\n\t\t\t\t\t\tconst currX0 = d3.interpolate(node.x0, node.x0Original)(t);\n\t\t\t\t\t\tconst currX1 = d3.interpolate(node.x1, node.x1Original)(t);\n\t\t\t\t\t\tconst currY0 = d3.interpolate(node.y0, node.y0Original)(t);\n\t\t\t\t\t\tconst currY1 = d3.interpolate(node.y1, node.y1Original)(t);\n\n\t\t\t\t\t\t// Update node positions continuously\n\t\t\t\t\t\tnode.x0 = currX0;\n\t\t\t\t\t\tnode.x1 = currX1;\n\t\t\t\t\t\tnode.y0 = currY0;\n\t\t\t\t\t\tnode.y1 = currY1;\n\n\t\t\t\t\t\tconst interpolatedArc = d3\n\t\t\t\t\t\t\t.arc<any>()\n\t\t\t\t\t\t\t.startAngle(() => currX0)\n\t\t\t\t\t\t\t.endAngle(() => currX1)\n\t\t\t\t\t\t\t.innerRadius(() => Math.min(radius, Math.sqrt(Math.max(0, currY0))))\n\t\t\t\t\t\t\t.outerRadius(() => Math.min(radius, Math.sqrt(Math.max(0, currY1))))\n\t\t\t\t\t\t\t.cornerRadius(3);\n\n\t\t\t\t\t\treturn interpolatedArc(node) || '';\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t// Restore cursor style based on whether nodes have children\n\t\t\tpaths.style('cursor', (d) =>\n\t\t\t\t!d.children || d.children.length === 0 ? 'default' : 'pointer'\n\t\t\t);\n\n\t\t\t// Reset center button cursor\n\t\t\tcenterResetButton.style('cursor', 'default');\n\n\t\t\t// Update labels\n\t\t\tupdateLabels(transition, nodes, true);\n\t\t};\n\n\t\t// Function to handle click and expand\n\t\tconst handleClick = (\n\t\t\tevent: MouseEvent,\n\t\t\tclickedNode: d3.HierarchyRectangularNode<SunBurstRecord>\n\t\t) => {\n\t\t\tevent.stopPropagation();\n\n\t\t\t// If already focused on a node, don't allow clicking on other segments\n\t\t\t// Only allow reset through the center button\n\t\t\tif (focusedNodeRef.current) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Don't allow clicking on leaf nodes (nodes without children)\n\t\t\tif (!clickedNode.children || clickedNode.children.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfocusedNodeRef.current = clickedNode;\n\n\t\t\tconst transition = d3.transition().duration(750).ease(d3.easeCubicInOut);\n\n\t\t\t// Zoom to clicked node - scale to fill the entire circle\n\t\t\tconst clickedOriginal = clickedNode as ExtendedNode;\n\n\t\t\t// Ensure we use the original x values for proper scaling\n\t\t\t// The x-scale maps the clicked node's angular extent to the full circle\n\t\t\tconst xScale = d3\n\t\t\t\t.scaleLinear()\n\t\t\t\t.domain([clickedOriginal.x0Original, clickedOriginal.x1Original])\n\t\t\t\t.range([0, 2 * Math.PI])\n\t\t\t\t.clamp(true); // Ensure values stay within bounds\n\n\t\t\t// For the radial scale, always use the full radius available\n\t\t\t// Find the deepest descendant to ensure all children fit\n\t\t\tconst descendants = nodes.filter((d) => isParentOf(clickedNode, d));\n\t\t\tconst maxChildRadius = Math.max(\n\t\t\t\t...descendants.map((d) => (d as ExtendedNode).y1Original)\n\t\t\t);\n\n\t\t\t// Always scale to use the full radius, regardless of original size\n\t\t\tconst yScale = d3\n\t\t\t\t.scaleLinear()\n\t\t\t\t.domain([clickedOriginal.y0Original, maxChildRadius])\n\t\t\t\t.range([0, radius * radius])\n\t\t\t\t.clamp(true); // Ensure values stay within bounds\n\n\t\t\t// First, immediately hide elements that shouldn't be visible\n\t\t\tpaths.style('opacity', (d) => (isParentOf(clickedNode, d) ? 1 : 0));\n\n\t\t\tpaths\n\t\t\t\t.transition(\n\t\t\t\t\ttransition as d3.Transition<\n\t\t\t\t\t\tany,\n\t\t\t\t\t\td3.HierarchyRectangularNode<SunBurstRecord>,\n\t\t\t\t\t\tany,\n\t\t\t\t\t\tany\n\t\t\t\t\t>\n\t\t\t\t)\n\t\t\t\t.attrTween('d', (d) => {\n\t\t\t\t\tconst node = d as ExtendedNode;\n\t\t\t\t\t// Only transform nodes that are descendants of the clicked node\n\t\t\t\t\tif (!isParentOf(clickedNode, d)) {\n\t\t\t\t\t\t// Keep them hidden\n\t\t\t\t\t\treturn () => '';\n\t\t\t\t\t}\n\n\t\t\t\t\t// Calculate new positions based on the original positions\n\t\t\t\t\t// ALWAYS scale to fill the full circle, no minimum size preservation\n\t\t\t\t\tconst newX0 = xScale(node.x0Original);\n\t\t\t\t\tlet newX1 = xScale(node.x1Original);\n\n\t\t\t\t\t// Ensure proper scaling even for very small segments\n\t\t\t\t\t// The clicked node's extent should always map to full circle\n\t\t\t\t\tif (newX1 <= newX0) {\n\t\t\t\t\t\t// Force proper angular extent based on proportion\n\t\t\t\t\t\tconst proportion =\n\t\t\t\t\t\t\t(node.x1Original - node.x0Original) /\n\t\t\t\t\t\t\t(clickedOriginal.x1Original - clickedOriginal.x0Original);\n\t\t\t\t\t\tnewX1 = newX0 + 2 * Math.PI * proportion;\n\t\t\t\t\t}\n\n\t\t\t\t\t// For radial positions, scale appropriately\n\t\t\t\t\tlet newY0, newY1;\n\t\t\t\t\tif (node === clickedNode) {\n\t\t\t\t\t\t// The clicked node itself should fill from center\n\t\t\t\t\t\tnewY0 = 0;\n\t\t\t\t\t\t// If it has children, leave room for them; otherwise fill to edge\n\t\t\t\t\t\tif (node.children && node.children.length > 0) {\n\t\t\t\t\t\t\tconst childrenY0 = Math.min(\n\t\t\t\t\t\t\t\t...node.children.map((c) => (c as ExtendedNode).y0Original)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tnewY1 = yScale(childrenY0) * 0.98; // Very slight gap for visual separation\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnewY1 = radius * radius * 0.98; // Fill almost to edge\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Child nodes should be scaled to fill the remaining space proportionally\n\t\t\t\t\t\t// NO minimum size enforcement - pure proportional scaling\n\t\t\t\t\t\tnewY0 = yScale(node.y0Original);\n\t\t\t\t\t\tnewY1 = yScale(node.y1Original);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Use current positions as start (they should be at original if not previously zoomed)\n\t\t\t\t\tconst startX0 = node.x0;\n\t\t\t\t\tconst startX1 = node.x1;\n\t\t\t\t\tconst startY0 = node.y0;\n\t\t\t\t\tconst startY1 = node.y1;\n\n\t\t\t\t\treturn (t: number) => {\n\t\t\t\t\t\t// Calculate interpolated positions\n\t\t\t\t\t\tconst currX0 = d3.interpolate(startX0, newX0)(t);\n\t\t\t\t\t\tconst currX1 = d3.interpolate(startX1, newX1)(t);\n\t\t\t\t\t\tconst currY0 = d3.interpolate(startY0, newY0)(t);\n\t\t\t\t\t\tconst currY1 = d3.interpolate(startY1, newY1)(t);\n\n\t\t\t\t\t\t// Update node positions continuously\n\t\t\t\t\t\tnode.x0 = currX0;\n\t\t\t\t\t\tnode.x1 = currX1;\n\t\t\t\t\t\tnode.y0 = currY0;\n\t\t\t\t\t\tnode.y1 = currY1;\n\n\t\t\t\t\t\tconst interpolatedArc = d3\n\t\t\t\t\t\t\t.arc<any>()\n\t\t\t\t\t\t\t.startAngle(() => currX0)\n\t\t\t\t\t\t\t.endAngle(() => currX1)\n\t\t\t\t\t\t\t.innerRadius(() => Math.min(radius, Math.sqrt(Math.max(0, currY0))))\n\t\t\t\t\t\t\t.outerRadius(() => Math.min(radius, Math.sqrt(Math.max(0, currY1))))\n\t\t\t\t\t\t\t.cornerRadius(3);\n\n\t\t\t\t\t\treturn interpolatedArc(node) || '';\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t// Update labels for zoomed view\n\t\t\tupdateLabels(\n\t\t\t\ttransition,\n\t\t\t\tnodes.filter((d) => isParentOf(clickedNode, d)),\n\t\t\t\tfalse\n\t\t\t);\n\n\t\t\t// Update cursor style to indicate segments are not clickable\n\t\t\tpaths.style('cursor', 'default');\n\n\t\t\t// Update center button to be clickable\n\t\t\tcenterResetButton.style('cursor', 'pointer');\n\t\t};\n\n\t\t// Helper function to check if a node is parent of another\n\t\tconst isParentOf = (\n\t\t\tparent: d3.HierarchyNode<SunBurstRecord>,\n\t\t\tdescendant: d3.HierarchyNode<SunBurstRecord>\n\t\t): boolean => {\n\t\t\tif (parent === descendant) return true;\n\t\t\tlet current = descendant.parent;\n\t\t\twhile (current) {\n\t\t\t\tif (current === parent) return true;\n\t\t\t\tcurrent = current.parent;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tconst paths = g\n\t\t\t.selectAll('path')\n\t\t\t.data(nodes.filter((d) => d.depth > 0 && d.value && d.value > 0))\n\t\t\t.enter()\n\t\t\t.append('path')\n\t\t\t.attr('fill', (d) => {\n\t\t\t\tlet ancestor = d;\n\t\t\t\twhile (ancestor.depth > 1 && ancestor.parent) {\n\t\t\t\t\tancestor = ancestor.parent;\n\t\t\t\t}\n\t\t\t\treturn getColor(ancestor.data.name, d.depth);\n\t\t\t})\n\t\t\t.attr('stroke', () => {\n\t\t\t\t// Get computed border color from theme\n\t\t\t\tconst computedStyle = window.getComputedStyle(svgRef.current!);\n\t\t\t\treturn computedStyle.getPropertyValue('--color-border') || '#e2e8f0';\n\t\t\t})\n\t\t\t.attr('stroke-width', 2)\n\t\t\t.style('cursor', (d) =>\n\t\t\t\t!d.children || d.children.length === 0 ? 'default' : 'pointer'\n\t\t\t)\n\t\t\t.on('click', handleClick)\n\t\t\t.on('mouseover', function (event, d) {\n\t\t\t\t// Don't show hover effect if already focused\n\t\t\t\tif (focusedNodeRef.current) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst hoveredElement = event.currentTarget;\n\n\t\t\t\t// Show tooltip for all nodes\n\t\t\t\ttooltip.transition().duration(200).style('opacity', 1);\n\n\t\t\t\tconst value = d.value || 0;\n\t\t\t\tconst percentage = ((value / (root.value || 1)) * 100).toFixed(1);\n\n\t\t\t\ttooltip\n\t\t\t\t\t.html(\n\t\t\t\t\t\t`\n <div><strong>${d.data.name}</strong></div>\n <div>Value: ${value}</div>\n <div>${percentage}% of total</div>\n `\n\t\t\t\t\t)\n\t\t\t\t\t.style('left', (event as MouseEvent).pageX + 10 + 'px')\n\t\t\t\t\t.style('top', (event as MouseEvent).pageY - 28 + 'px');\n\n\t\t\t\t// Apply blur to all other segments\n\t\t\t\tpaths.each(function () {\n\t\t\t\t\tif (this !== hoveredElement) {\n\t\t\t\t\t\td3.select(this)\n\t\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t\t.duration(200)\n\t\t\t\t\t\t\t.style('opacity', 0.3)\n\t\t\t\t\t\t\t.style('filter', 'blur(1px)');\n\t\t\t\t\t} else {\n\t\t\t\t\t\td3.select(this)\n\t\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t\t.duration(200)\n\t\t\t\t\t\t\t.style('opacity', 1)\n\t\t\t\t\t\t\t.style('filter', 'none');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mouseout', function () {\n\t\t\t\t// Hide tooltip\n\t\t\t\ttooltip.transition().duration(500).style('opacity', 0);\n\n\t\t\t\t// Reset all segments\n\t\t\t\tpaths.transition().duration(200).style('opacity', 1).style('filter', 'none');\n\t\t\t})\n\t\t\t.on('mousemove', function (event) {\n\t\t\t\t// Update tooltip position on mouse move\n\t\t\t\ttooltip\n\t\t\t\t\t.style('left', (event as MouseEvent).pageX + 10 + 'px')\n\t\t\t\t\t.style('top', (event as MouseEvent).pageY - 28 + 'px');\n\t\t\t});\n\n\t\t// Entrance animation: grow segments outward from center, staggered by depth + angle.\n\t\tconst entranceDuration = 700\n\t\tpaths\n\t\t\t.attr('d', (d) => {\n\t\t\t\tconst collapsedArc = d3\n\t\t\t\t\t.arc<any>()\n\t\t\t\t\t.startAngle(() => d.x0)\n\t\t\t\t\t.endAngle(() => d.x1)\n\t\t\t\t\t.innerRadius(() => 0)\n\t\t\t\t\t.outerRadius(() => 0)\n\t\t\t\t\t.cornerRadius(3)\n\t\t\t\treturn collapsedArc(d) || ''\n\t\t\t})\n\t\t\t.style('opacity', 0)\n\t\t\t.transition()\n\t\t\t.delay((d) => (d.depth - 1) * 120 + ((d.x0 + d.x1) / 2 / (2 * Math.PI)) * 240)\n\t\t\t.duration(entranceDuration)\n\t\t\t.ease(d3.easeCubicOut)\n\t\t\t.style('opacity', 1)\n\t\t\t.attrTween('d', function (d) {\n\t\t\t\tconst node = d as ExtendedNode\n\t\t\t\tconst startY0 = 0\n\t\t\t\tconst startY1 = 0\n\t\t\t\tconst endY0 = node.y0Original\n\t\t\t\tconst endY1 = node.y1Original\n\t\t\t\treturn (t: number) => {\n\t\t\t\t\tconst currY0 = d3.interpolate(startY0, endY0)(t)\n\t\t\t\t\tconst currY1 = d3.interpolate(startY1, endY1)(t)\n\t\t\t\t\tnode.y0 = currY0\n\t\t\t\t\tnode.y1 = currY1\n\t\t\t\t\tconst interpolatedArc = d3\n\t\t\t\t\t\t.arc<any>()\n\t\t\t\t\t\t.startAngle(() => node.x0)\n\t\t\t\t\t\t.endAngle(() => node.x1)\n\t\t\t\t\t\t.innerRadius(() => Math.sqrt(Math.max(0, currY0)))\n\t\t\t\t\t\t.outerRadius(() => Math.sqrt(Math.max(0, currY1)))\n\t\t\t\t\t\t.cornerRadius(3)\n\t\t\t\t\treturn interpolatedArc(node) || ''\n\t\t\t\t}\n\t\t\t})\n\n\t\tconst shouldDisplayLabel = (d: d3.HierarchyRectangularNode<SunBurstRecord>) => {\n\t\t\tconst angle = d.x1 - d.x0;\n\t\t\t// When zoomed in, be more lenient with label display since segments are larger\n\t\t\tconst minAngle = focusedNodeRef.current ? 0.05 : 0.15;\n\t\t\treturn angle > minAngle && d.depth <= 2;\n\t\t};\n\n\t\t// Function to update labels after transitions\n\t\tconst updateLabels = (\n\t\t\ttransition: d3.Transition<d3.BaseType, unknown, d3.BaseType, unknown>,\n\t\t\tvisibleNodes: d3.HierarchyRectangularNode<SunBurstRecord>[],\n\t\t\t_isReset: boolean\n\t\t) => {\n\t\t\t// Remove old labels\n\t\t\tg.selectAll('text.segment-label').remove();\n\t\t\tg.selectAll('text.center-label').remove();\n\n\t\t\t// Wait for transition to complete before adding new labels\n\t\t\ttransition.on('end', () => {\n\t\t\t\t// Filter out the focused node itself when zoomed (it's shown in center)\n\t\t\t\tconst nodesToLabel = visibleNodes.filter((d) => {\n\t\t\t\t\tif (focusedNodeRef.current && d === focusedNodeRef.current) {\n\t\t\t\t\t\treturn false; // Don't show label for the zoomed parent node\n\t\t\t\t\t}\n\t\t\t\t\treturn d.depth > 0 && d.value && d.value > 0 && shouldDisplayLabel(d);\n\t\t\t\t});\n\n\t\t\t\tg.selectAll('text.segment-label')\n\t\t\t\t\t.data(nodesToLabel)\n\t\t\t\t\t.enter()\n\t\t\t\t\t.append('text')\n\t\t\t\t\t.attr('class', 'segment-label')\n\t\t\t\t\t.attr('transform', (d) => {\n\t\t\t\t\t\tconst angle = (d.x0 + d.x1) / 2;\n\t\t\t\t\t\tconst radiusVal = (Math.sqrt(d.y0) + Math.sqrt(d.y1)) / 2;\n\t\t\t\t\t\tconst x = Math.cos(angle - Math.PI / 2) * radiusVal;\n\t\t\t\t\t\tconst y = Math.sin(angle - Math.PI / 2) * radiusVal;\n\t\t\t\t\t\treturn `translate(${x},${y})`;\n\t\t\t\t\t})\n\t\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t\t.attr('alignment-baseline', 'middle')\n\t\t\t\t\t.attr('font-size', (d) => (d.depth === 1 ? '14px' : '12px'))\n\t\t\t\t\t.attr('fill', 'var(--color-text)')\n\t\t\t\t\t.attr('font-weight', '700')\n\t\t\t\t\t.style('pointer-events', 'none')\n\t\t\t\t\t.style('text-shadow', 'none')\n\t\t\t\t\t.text((d) => {\n\t\t\t\t\t\tconst maxLength = d.depth === 1 ? 12 : 8;\n\t\t\t\t\t\treturn d.data.name.substring(0, maxLength);\n\t\t\t\t\t})\n\t\t\t\t\t.style('opacity', 0)\n\t\t\t\t\t.transition()\n\t\t\t\t\t.duration(200)\n\t\t\t\t\t.style('opacity', 1);\n\n\t\t\t\t// Update center text\n\t\t\t\tconst currentNode = focusedNodeRef.current || root;\n\t\t\t\tconst computedStyle = window.getComputedStyle(svgRef.current!);\n\t\t\t\tconst centerTextColor =\n\t\t\t\t\tcomputedStyle.getPropertyValue('--text-primary') ||\n\t\t\t\t\t(computedStyle.getPropertyValue('--bg-primary') === '#000000' ||\n\t\t\t\t\tcomputedStyle.getPropertyValue('color-scheme') === 'dark'\n\t\t\t\t\t\t? '#ffffff'\n\t\t\t\t\t\t: '#000000');\n\n\t\t\t\tg.append('text')\n\t\t\t\t\t.attr('class', 'center-label')\n\t\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t\t.attr('alignment-baseline', 'middle')\n\t\t\t\t\t.attr('font-size', '18px')\n\t\t\t\t\t.attr('font-weight', 'bold')\n\t\t\t\t\t.attr('fill', centerTextColor)\n\t\t\t\t\t.style('pointer-events', 'none')\n\t\t\t\t\t.text(\n\t\t\t\t\t\tcurrentNode === root\n\t\t\t\t\t\t\t? centerLabel || data.name || 'Total'\n\t\t\t\t\t\t\t: currentNode.data.name\n\t\t\t\t\t)\n\t\t\t\t\t.style('opacity', 0)\n\t\t\t\t\t.transition()\n\t\t\t\t\t.duration(200)\n\t\t\t\t\t.style('opacity', 1);\n\n\t\t\t\tg.append('text')\n\t\t\t\t\t.attr('class', 'center-label')\n\t\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t\t.attr('alignment-baseline', 'middle')\n\t\t\t\t\t.attr('y', 20)\n\t\t\t\t\t.attr('font-size', '14px')\n\t\t\t\t\t.attr('font-weight', '500')\n\t\t\t\t\t.attr('fill', centerTextColor)\n\t\t\t\t\t.style('pointer-events', 'none')\n\t\t\t\t\t.text(`${(currentNode.value || 0).toLocaleString()} ${unit}`)\n\t\t\t\t\t.style('opacity', 0)\n\t\t\t\t\t.transition()\n\t\t\t\t\t.duration(200)\n\t\t\t\t\t.style('opacity', 1);\n\t\t\t});\n\t\t};\n\n\t\t// Add invisible center reset button (circle in the middle)\n\t\tconst centerRadius = Math.sqrt(nodes[0].y0) || radius * 0.3;\n\n\t\tconst centerResetButton = g\n\t\t\t.append('circle')\n\t\t\t.attr('class', 'center-reset-button')\n\t\t\t.attr('r', centerRadius)\n\t\t\t.attr('fill', 'transparent')\n\t\t\t.style('cursor', 'default')\n\t\t\t.on('click', () => {\n\t\t\t\tif (focusedNodeRef.current) {\n\t\t\t\t\tresetView();\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('mouseover', function () {\n\t\t\t\tif (focusedNodeRef.current) {\n\t\t\t\t\td3.select(this)\n\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t.duration(150)\n\t\t\t\t\t\t.attr('fill', 'rgba(100, 100, 100, 0.1)')\n\t\t\t\t\t\t.attr('stroke', 'rgba(100, 100, 100, 0.3)')\n\t\t\t\t\t\t.attr('stroke-width', 2);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('mouseout', function () {\n\t\t\t\tif (focusedNodeRef.current) {\n\t\t\t\t\td3.select(this)\n\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t.duration(150)\n\t\t\t\t\t\t.attr('fill', 'transparent')\n\t\t\t\t\t\t.attr('stroke', 'none');\n\t\t\t\t}\n\t\t\t});\n\n\t\t// Calculate center text color - get computed theme color\n\t\tconst computedStyle = window.getComputedStyle(svgRef.current!);\n\t\tconst centerTextColor =\n\t\t\tcomputedStyle.getPropertyValue('--text-primary') ||\n\t\t\t(computedStyle.getPropertyValue('--bg-primary') === '#000000' ||\n\t\t\tcomputedStyle.getPropertyValue('color-scheme') === 'dark'\n\t\t\t\t? '#ffffff'\n\t\t\t\t: '#000000');\n\n\t\t// Add center text\n\t\tg.append('text')\n\t\t\t.attr('class', 'center-label')\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.attr('alignment-baseline', 'middle')\n\t\t\t.attr('font-size', '18px')\n\t\t\t.attr('font-weight', 'bold')\n\t\t\t.attr('fill', centerTextColor)\n\t\t\t.style('pointer-events', 'none')\n\t\t\t.text(centerLabel || data.name || 'Total');\n\n\t\tg.append('text')\n\t\t\t.attr('class', 'center-label')\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.attr('alignment-baseline', 'middle')\n\t\t\t.attr('y', 20)\n\t\t\t.attr('font-size', '14px')\n\t\t\t.attr('font-weight', '500')\n\t\t\t.attr('fill', centerTextColor)\n\t\t\t.style('pointer-events', 'none')\n\t\t\t.text(`${(root.value || 0).toLocaleString()} ${unit}`);\n\n\t\tg.selectAll('text.segment-label')\n\t\t\t.data(\n\t\t\t\tnodes.filter((d) => d.depth > 0 && d.value && d.value > 0 && shouldDisplayLabel(d))\n\t\t\t)\n\t\t\t.enter()\n\t\t\t.append('text')\n\t\t\t.attr('class', 'segment-label')\n\t\t\t.attr('transform', (d) => {\n\t\t\t\tconst node = d as ExtendedNode;\n\t\t\t\tconst angle = (node.x0 + node.x1) / 2;\n\t\t\t\tconst radiusVal = (Math.sqrt(node.y0Original) + Math.sqrt(node.y1Original)) / 2;\n\t\t\t\tconst x = Math.cos(angle - Math.PI / 2) * radiusVal;\n\t\t\t\tconst y = Math.sin(angle - Math.PI / 2) * radiusVal;\n\t\t\t\treturn `translate(${x},${y})`;\n\t\t\t})\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.attr('alignment-baseline', 'middle')\n\t\t\t.attr('font-size', (d) => (d.depth === 1 ? '14px' : '12px'))\n\t\t\t.attr('fill', 'var(--color-text)')\n\t\t\t.attr('font-weight', '700')\n\t\t\t.style('pointer-events', 'none')\n\t\t\t.style('text-shadow', 'none')\n\t\t\t.text((d) => {\n\t\t\t\tconst maxLength = d.depth === 1 ? 12 : 8;\n\t\t\t\treturn d.data.name.substring(0, maxLength);\n\t\t\t})\n\t\t\t.style('opacity', 0)\n\t\t\t.transition()\n\t\t\t.delay((d) => (d.depth - 1) * 120 + ((d.x0 + d.x1) / 2 / (2 * Math.PI)) * 240 + 500)\n\t\t\t.duration(300)\n\t\t\t.style('opacity', 1);\n\n\t\treturn () => {\n\t\t\ttooltip.remove();\n\t\t};\n\t}, [data, width, height, colorMap, radius, tagColors, unit, centerLabel]);\n\n\treturn (\n\t\t<div className={styles.container}>\n\t\t\t<h3 className={styles.title}>{title}</h3>\n\t\t\t<svg ref={svgRef} viewBox={`0 0 ${width} ${height}`} className={styles.chart} />\n\t\t</div>\n\t);\n};\n","import React, { useRef, useEffect } from 'react'\nimport * as d3 from 'd3'\nimport styles from './PieChart.module.css'\n\ninterface PieDataPoint {\n name: string\n value: number\n color?: string\n}\n\ninterface PieChartProps {\n data: PieDataPoint[]\n width?: number\n height?: number\n title?: string\n showLegend?: boolean\n unit?: string\n centerLabel?: string\n}\n\nconst DEFAULT_COLORS = [\n '#6366f1', '#8b5cf6', '#06b6d4', '#10b981',\n '#f59e0b', '#ef4444', '#ec4899', '#84cc16',\n '#f97316', '#3b82f6', '#8b5cf6', '#14b8a6',\n '#f59e0b', '#ef4444', '#06b6d4', '#10b981'\n]\n\n// Calculate text color based on background luminance for optimal contrast\nconst getTextColor = (backgroundColor: string): string => {\n const color = d3.color(backgroundColor);\n if (!color) return '#ffffff';\n\n const rgb = color.rgb();\n // Calculate relative luminance using WCAG formula\n const luminance = (0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b) / 255;\n\n // Return white text for dark backgrounds, black for light backgrounds\n return luminance > 0.5 ? '#000000' : '#ffffff';\n}\n\nexport const PieChart: React.FC<PieChartProps> = ({\n data,\n width = 400,\n height = 400,\n title = 'Distribution',\n showLegend = true,\n unit = 'items',\n centerLabel\n}) => {\n const svgRef = useRef<SVGSVGElement>(null)\n const radius = Math.min(width, height) / 2 - 20\n\n useEffect(() => {\n if (!svgRef.current || !data.length) return\n\n const svg = d3.select(svgRef.current)\n svg.selectAll('*').remove()\n\n const g = svg.append('g')\n .attr('transform', `translate(${width / 2},${height / 2})`)\n\n const pie = d3.pie<PieDataPoint>()\n .value(d => d.value)\n .sort(null)\n\n const arc = d3.arc<d3.PieArcDatum<PieDataPoint>>()\n .innerRadius(radius * 0.4)\n .outerRadius(radius)\n .cornerRadius(4)\n\n const labelArc = d3.arc<d3.PieArcDatum<PieDataPoint>>()\n .innerRadius(radius * 0.7)\n .outerRadius(radius * 0.7)\n\n const tooltip = d3.select('body').append('div')\n .attr('class', styles.tooltip)\n .style('opacity', 0)\n .style('position', 'absolute')\n\n const pieData = pie(data)\n const total = d3.sum(data, d => d.value)\n\n const arcs = g.selectAll('.arc')\n .data(pieData)\n .enter().append('g')\n .attr('class', 'arc')\n\n const sweepDuration = 900\n const arcPaths = arcs.append('path')\n .attr('fill', (d, i) => d.data.color || DEFAULT_COLORS[i % DEFAULT_COLORS.length])\n .attr('stroke', 'var(--bg-primary)')\n .attr('stroke-width', 3)\n .style('cursor', 'pointer')\n .style('filter', 'drop-shadow(0 2px 8px rgba(0,0,0,0.15))')\n // Start collapsed at the slice's startAngle (zero-width slice)\n .attr('d', d => arc({ ...d, endAngle: d.startAngle }))\n\n arcPaths\n .transition()\n .delay(d => (d.startAngle / (2 * Math.PI)) * sweepDuration)\n .duration(d => ((d.endAngle - d.startAngle) / (2 * Math.PI)) * sweepDuration + 200)\n .ease(d3.easeCubicOut)\n .attrTween('d', function (d) {\n const i = d3.interpolate(d.startAngle, d.endAngle)\n return (t: number) => arc({ ...d, endAngle: i(t) }) || ''\n })\n\n arcPaths\n .on('mouseover', function(event, d) {\n const hoverArc = d3.arc<d3.PieArcDatum<PieDataPoint>>()\n .innerRadius(radius * 0.4)\n .outerRadius(radius * 1.05)\n .cornerRadius(4)\n\n d3.select(this)\n .transition()\n .duration(200)\n .attr('d', (d) => hoverArc(d as d3.PieArcDatum<PieDataPoint>))\n .style('filter', 'drop-shadow(0 4px 12px rgba(0,0,0,0.25))')\n\n tooltip.transition()\n .duration(200)\n .style('opacity', 1)\n\n const percentage = ((d.data.value / total) * 100).toFixed(1)\n\n tooltip.html(`\n <div><strong>${d.data.name}</strong></div>\n <div>Value: ${d.data.value.toLocaleString()}</div>\n <div>${percentage}% of total</div>\n `)\n .style('left', (event.pageX + 10) + 'px')\n .style('top', (event.pageY - 28) + 'px')\n })\n .on('mouseout', function(_event, _d) {\n d3.select(this)\n .transition()\n .duration(200)\n .attr('d', (d) => arc(d as d3.PieArcDatum<PieDataPoint>))\n .style('filter', 'drop-shadow(0 2px 8px rgba(0,0,0,0.15))')\n\n tooltip.transition()\n .duration(500)\n .style('opacity', 0)\n })\n\n // Calculate average background color for center text contrast\n const colors = data.map((d, i) => d.color || DEFAULT_COLORS[i % DEFAULT_COLORS.length])\n const avgColor = colors.length >= 2\n ? d3.interpolateRgb.gamma(2.2)(colors[0], colors[1])(0.5)\n : colors[0] || '#ffffff';\n const centerTextColor = getTextColor(avgColor);\n\n // Add center text for donut\n g.append('text')\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .attr('font-size', '20px')\n .attr('font-weight', 'bold')\n .attr('fill', centerTextColor)\n .style('text-shadow', centerTextColor === '#ffffff' ? '0 1px 3px rgba(0,0,0,0.5)' : '0 1px 3px rgba(255,255,255,0.5)')\n .text(centerLabel || 'Total')\n\n g.append('text')\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .attr('y', 22)\n .attr('font-size', '16px')\n .attr('font-weight', '600')\n .attr('fill', centerTextColor)\n .style('text-shadow', centerTextColor === '#ffffff' ? '0 1px 2px rgba(0,0,0,0.4)' : '0 1px 2px rgba(255,255,255,0.4)')\n .text(`${total.toLocaleString()} ${unit}`)\n\n arcs.filter(d => (d.endAngle - d.startAngle) > 0.2)\n .append('text')\n .attr('transform', d => `translate(${labelArc.centroid(d)})`)\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .attr('font-size', '13px')\n .attr('fill', (d, i) => {\n const segmentColor = d.data.color || DEFAULT_COLORS[i % DEFAULT_COLORS.length];\n return getTextColor(segmentColor);\n })\n .attr('font-weight', '600')\n .style('pointer-events', 'none')\n .style('text-shadow', (d, i) => {\n const segmentColor = d.data.color || DEFAULT_COLORS[i % DEFAULT_COLORS.length];\n const textColor = getTextColor(segmentColor);\n const shadowColor = textColor === '#ffffff' ? 'rgba(0,0,0,0.4)' : 'rgba(255,255,255,0.4)';\n return `0 1px 2px ${shadowColor}`;\n })\n .text(d => {\n const percentage = ((d.data.value / total) * 100)\n return percentage > 8 ? `${percentage.toFixed(0)}%` : ''\n })\n .style('opacity', 0)\n .transition()\n .delay(d => (((d.startAngle + d.endAngle) / 2) / (2 * Math.PI)) * sweepDuration + 250)\n .duration(300)\n .style('opacity', 1)\n\n return () => {\n tooltip.remove()\n }\n }, [data, width, height, radius, centerLabel, unit])\n\n return (\n <div className={styles.container}>\n <h3 className={styles.title}>{title}</h3>\n <div className={styles.chartContainer}>\n <svg\n ref={svgRef}\n width={width}\n height={height}\n className={styles.chart}\n />\n {showLegend && (\n <div className={styles.legend}>\n {data.map((item, index) => (\n <div key={item.name} className={styles.legendItem}>\n <span\n className={styles.legendColor}\n style={{\n backgroundColor: item.color || DEFAULT_COLORS[index % DEFAULT_COLORS.length]\n }}\n />\n <span className={styles.legendLabel}>\n {item.name}\n </span>\n <span className={styles.legendValue}>\n {item.value.toLocaleString()}\n </span>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n )\n}","import React, { useEffect, useRef, useCallback } from 'react'\nimport styles from './ProgressRings.module.css'\n\nexport interface ProgressRingItem {\n label: string\n value: number\n target: number\n color?: string\n emoji?: string\n}\n\ninterface ProgressRingsProps {\n rings: ProgressRingItem[]\n formatValue?: (value: number) => string\n ringSize?: number\n stroke?: number\n emptyMessage?: string\n overLabel?: (over: number, formatValue: (v: number) => string) => string\n underLabel?: (left: number, formatValue: (v: number) => string) => string\n}\n\nconst DEFAULT_FORMAT = (n: number) => n.toLocaleString()\nconst DEFAULT_OVER = (over: number, fmt: (v: number) => string) => `Over by ${fmt(over)}`\nconst DEFAULT_UNDER = (left: number, fmt: (v: number) => string) => `${fmt(left)} left`\n\nexport const ProgressRings: React.FC<ProgressRingsProps> = ({\n rings,\n formatValue = DEFAULT_FORMAT,\n ringSize = 120,\n stroke = 12,\n emptyMessage = 'No data to display',\n overLabel = DEFAULT_OVER,\n underLabel = DEFAULT_UNDER,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null)\n const tooltipRef = useRef<HTMLDivElement>(null)\n\n const showTip = useCallback((event: React.MouseEvent, html: string) => {\n const tip = tooltipRef.current\n const ctn = containerRef.current\n if (!tip || !ctn) return\n const rect = ctn.getBoundingClientRect()\n tip.style.left = `${event.clientX - rect.left + 12}px`\n tip.style.top = `${event.clientY - rect.top - 10}px`\n tip.innerHTML = html\n tip.classList.add(styles.visible)\n }, [])\n\n const hideTip = useCallback(() => {\n tooltipRef.current?.classList.remove(styles.visible)\n }, [])\n\n if (rings.length === 0) {\n return <div className={styles.empty}>{emptyMessage}</div>\n }\n\n const radius = (ringSize - stroke) / 2\n const circumference = 2 * Math.PI * radius\n\n return (\n <div className={styles.container} ref={containerRef}>\n <div className={styles.grid}>\n {rings.map((r, idx) => {\n const ratio = r.target > 0 ? r.value / r.target : 0\n const clamped = Math.min(1, ratio)\n const finalOffset = circumference * (1 - clamped)\n const pct = Math.round(ratio * 100)\n const over = ratio > 1\n const ringColor = over ? 'var(--color-error)' : (r.color || 'var(--color-primary)')\n return (\n <Ring\n key={r.label}\n label={r.label}\n emoji={r.emoji}\n ringSize={ringSize}\n stroke={stroke}\n radius={radius}\n circumference={circumference}\n finalOffset={finalOffset}\n ringColor={ringColor}\n value={r.value}\n target={r.target}\n pct={pct}\n over={over}\n formatValue={formatValue}\n overLabel={overLabel}\n underLabel={underLabel}\n delay={idx * 80}\n onTip={showTip}\n onTipLeave={hideTip}\n />\n )\n })}\n </div>\n <div ref={tooltipRef} className={styles.tooltip} />\n </div>\n )\n}\n\ninterface RingProps {\n label: string\n emoji?: string\n ringSize: number\n stroke: number\n radius: number\n circumference: number\n finalOffset: number\n ringColor: string\n value: number\n target: number\n pct: number\n over: boolean\n formatValue: (v: number) => string\n overLabel: (over: number, fmt: (v: number) => string) => string\n underLabel: (left: number, fmt: (v: number) => string) => string\n delay: number\n onTip: (event: React.MouseEvent, html: string) => void\n onTipLeave: () => void\n}\n\nconst Ring: React.FC<RingProps> = ({\n label, emoji, ringSize, stroke, radius, circumference, finalOffset,\n ringColor, value, target, pct, over, formatValue, overLabel, underLabel,\n delay, onTip, onTipLeave,\n}) => {\n const circleRef = useRef<SVGCircleElement>(null)\n\n useEffect(() => {\n const node = circleRef.current\n if (!node) return\n // Reset to empty then animate to final offset.\n node.style.transition = 'none'\n node.style.strokeDashoffset = `${circumference}`\n // Force reflow so the transition picks up the new starting state.\n void node.getBoundingClientRect()\n node.style.transition = `stroke-dashoffset 900ms cubic-bezier(0.22, 1, 0.36, 1) ${delay}ms`\n node.style.strokeDashoffset = `${finalOffset}`\n }, [circumference, finalOffset, delay])\n\n return (\n <div\n className={styles.ring}\n onMouseMove={(e) =>\n onTip(\n e,\n `<div class=\"${styles.tipLabel}\">${emoji ?? ''} ${label}</div>` +\n `<div class=\"${styles.tipRow}\">${formatValue(value)} of ${formatValue(target)}</div>` +\n `<div class=\"${styles.tipRow}\" style=\"color:${over ? 'var(--color-error)' : 'var(--color-success)'}\">${over ? overLabel(value - target, formatValue) : underLabel(target - value, formatValue)}</div>`\n )\n }\n onMouseLeave={onTipLeave}\n >\n <svg width={ringSize} height={ringSize} className={styles.svg}>\n <circle\n cx={ringSize / 2}\n cy={ringSize / 2}\n r={radius}\n fill=\"none\"\n stroke=\"var(--color-border)\"\n strokeWidth={stroke}\n strokeOpacity=\"0.35\"\n />\n <circle\n ref={circleRef}\n cx={ringSize / 2}\n cy={ringSize / 2}\n r={radius}\n fill=\"none\"\n stroke={ringColor}\n strokeWidth={stroke}\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={circumference}\n transform={`rotate(-90 ${ringSize / 2} ${ringSize / 2})`}\n />\n </svg>\n <div className={styles.center}>\n {emoji && <div className={styles.emoji}>{emoji}</div>}\n <div className={`${styles.pct} ${over ? styles.over : ''}`}>{pct}%</div>\n </div>\n <div className={styles.label}>{label}</div>\n <div className={styles.amounts}>\n <span className={over ? styles.over : ''}>{formatValue(value)}</span>\n <span className={styles.budget}> / {formatValue(target)}</span>\n </div>\n </div>\n )\n}\n","import React, { useRef, useEffect, useState, useCallback } from 'react'\nimport * as d3 from 'd3'\nimport styles from './RadialDayChart.module.css'\n\nexport interface RadialArc {\n startHour: number\n endHour: number\n color: string\n label?: string\n emoji?: string\n description?: string\n isActive?: boolean\n}\n\nexport interface RadialRing {\n dayLabel: string\n arcs: RadialArc[]\n /** Override default per-ring opacity (outer ring is fully opaque, inner rings fade) */\n opacity?: number\n}\n\ninterface RadialDayChartProps {\n /** Index 0 is the outermost ring (typically \"today\") */\n rings: RadialRing[]\n showNowHand?: boolean\n centerTopLabel?: string\n centerMainLabel?: string\n /** Override the size; otherwise the chart fills its container up to maxSize */\n size?: number\n minSize?: number\n maxSize?: number\n}\n\nconst formatHHMM = (h: number) => {\n const hh = Math.floor(h)\n const mm = Math.floor((h - hh) * 60)\n return `${String(hh).padStart(2, '0')}:${String(mm).padStart(2, '0')}`\n}\n\nconst formatDuration = (hours: number) => {\n const mins = Math.round(hours * 60)\n if (mins < 60) return `${mins}m`\n return `${Math.floor(mins / 60)}h ${mins % 60}m`\n}\n\nexport const RadialDayChart: React.FC<RadialDayChartProps> = ({\n rings,\n showNowHand = true,\n centerTopLabel,\n centerMainLabel,\n size: fixedSize,\n minSize = 280,\n maxSize = 560,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null)\n const svgRef = useRef<SVGSVGElement>(null)\n const tooltipRef = useRef<HTMLDivElement>(null)\n const [autoSize, setAutoSize] = useState(380)\n const size = fixedSize ?? autoSize\n\n useEffect(() => {\n if (fixedSize) return\n const container = containerRef.current\n if (!container) return\n const observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width } = entry.contentRect\n if (width > 0) setAutoSize(Math.max(minSize, Math.min(maxSize, width)))\n }\n })\n observer.observe(container)\n return () => observer.disconnect()\n }, [fixedSize, minSize, maxSize])\n\n const showTooltip = useCallback((event: MouseEvent, content: string) => {\n const tooltip = tooltipRef.current\n const container = containerRef.current\n if (!tooltip || !container) return\n const rect = container.getBoundingClientRect()\n tooltip.style.left = `${event.clientX - rect.left + 12}px`\n tooltip.style.top = `${event.clientY - rect.top - 10}px`\n tooltip.innerHTML = content\n tooltip.classList.add(styles.visible)\n }, [])\n\n const hideTooltip = useCallback(() => {\n tooltipRef.current?.classList.remove(styles.visible)\n }, [])\n\n useEffect(() => {\n if (!svgRef.current || rings.length === 0) return\n const svg = d3.select(svgRef.current)\n svg.selectAll('*').remove()\n\n const width = size\n const height = size\n const cx = width / 2\n const cy = height / 2\n const outerR = size / 2 - 28\n\n const g = svg\n .attr('width', width)\n .attr('height', height)\n .append('g')\n .attr('transform', `translate(${cx},${cy})`)\n\n const computedStyle = getComputedStyle(document.documentElement)\n const textColor = computedStyle.getPropertyValue('--color-text-secondary').trim() || '#888'\n const mutedText = computedStyle.getPropertyValue('--color-text-muted').trim() || '#aaa'\n const borderColor =\n computedStyle.getPropertyValue('--color-border').trim() || 'rgba(128,128,128,0.2)'\n\n const hourToAngle = (h: number) => (h / 24) * Math.PI * 2\n\n g.append('circle')\n .attr('r', outerR + 8)\n .attr('fill', 'none')\n .attr('stroke', borderColor)\n .attr('stroke-width', 1)\n\n const centerR = 46\n const ringGap = 2\n const ringCount = rings.length\n const ringWidth = (outerR - centerR - ringGap * (ringCount - 1)) / ringCount\n\n rings.forEach((ring, ringIdx) => {\n const ringOuter = outerR - ringIdx * (ringWidth + ringGap)\n const ringInner = ringOuter - ringWidth\n const opacity =\n ring.opacity !== undefined\n ? ring.opacity\n : ringIdx === 0\n ? 1\n : Math.max(0.1, 0.85 - (ringIdx / ringCount) * 0.85)\n\n const arcGen = d3\n .arc<RadialArc>()\n .innerRadius(ringInner)\n .outerRadius(ringOuter)\n .startAngle((d) => hourToAngle(d.startHour))\n .endAngle((d) => hourToAngle(d.endHour))\n .cornerRadius(2)\n\n const arcSel = g\n .selectAll(`.ring-${ringIdx}`)\n .data(ring.arcs)\n .join('path')\n .attr('class', `ring-${ringIdx}`)\n .attr('fill', (d) => d.color)\n .attr('opacity', 0)\n .attr('stroke', 'var(--color-background)')\n .attr('stroke-width', 0.6)\n .style('cursor', 'pointer')\n .on('mousemove', function (event, d) {\n const dur = formatDuration(d.endHour - d.startHour)\n const labelLine = `${d.emoji ?? ''} ${d.label ?? ''}${d.description ? ` — ${d.description}` : ''}`.trim()\n showTooltip(\n event,\n `<div class=\"${styles.tooltipLabel}\">${labelLine || '·'}</div>` +\n `<div class=\"${styles.tooltipRow}\">${ring.dayLabel} · ${formatHHMM(d.startHour)} → ${formatHHMM(d.endHour)}</div>` +\n `<div class=\"${styles.tooltipRow}\">${dur}${d.isActive ? ' · running' : ''}</div>`\n )\n })\n .on('mouseleave', hideTooltip)\n\n // Sweep-in: arcs grow from startAngle to their actual endAngle, staggered by start time.\n arcSel\n .attr('d', (d) => arcGen({ ...d, endHour: d.startHour }))\n .transition()\n .delay((d) => (d.startHour / 24) * 600 + ringIdx * 80)\n .duration(550)\n .ease(d3.easeCubicOut)\n .attr('opacity', opacity)\n .attrTween('d', function (d) {\n const i = d3.interpolate(d.startHour, d.endHour)\n return (t: number) => arcGen({ ...d, endHour: i(t) }) || ''\n })\n })\n\n for (let h = 0; h < 24; h++) {\n const angle = hourToAngle(h) - Math.PI / 2\n const isMajor = h % 3 === 0\n const inner = outerR + 2\n const outer = outerR + (isMajor ? 9 : 5)\n g.append('line')\n .attr('x1', Math.cos(angle) * inner)\n .attr('y1', Math.sin(angle) * inner)\n .attr('x2', Math.cos(angle) * outer)\n .attr('y2', Math.sin(angle) * outer)\n .attr('stroke', isMajor ? textColor : borderColor)\n .attr('stroke-width', isMajor ? 2 : 1)\n\n if (isMajor) {\n const labelR = outerR + 22\n g.append('text')\n .attr('x', Math.cos(angle) * labelR)\n .attr('y', Math.sin(angle) * labelR)\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .attr('fill', mutedText)\n .attr('font-size', '11px')\n .attr('font-weight', 600)\n .text(String(h).padStart(2, '0'))\n }\n }\n\n g.append('circle')\n .attr('r', centerR - 2)\n .attr('fill', 'var(--color-background-secondary)')\n .attr('stroke', borderColor)\n .attr('stroke-width', 1)\n\n if (centerTopLabel) {\n g.append('text')\n .attr('text-anchor', 'middle')\n .attr('y', centerMainLabel ? -6 : 4)\n .attr('fill', mutedText)\n .attr('font-size', '10px')\n .attr('letter-spacing', '1.5px')\n .text(centerTopLabel)\n }\n if (centerMainLabel) {\n g.append('text')\n .attr('text-anchor', 'middle')\n .attr('y', centerTopLabel ? 14 : 4)\n .attr('fill', 'var(--color-text)')\n .attr('font-size', '18px')\n .attr('font-weight', 700)\n .text(centerMainLabel)\n }\n\n if (showNowHand) {\n const now = new Date()\n const nowHour = now.getHours() + now.getMinutes() / 60\n const nowAngle = hourToAngle(nowHour) - Math.PI / 2\n const handTipR = outerR + 6\n\n g.append('line')\n .attr('x1', 0)\n .attr('y1', 0)\n .attr('x2', Math.cos(nowAngle) * handTipR)\n .attr('y2', Math.sin(nowAngle) * handTipR)\n .attr('stroke', 'var(--color-error)')\n .attr('stroke-width', 2.5)\n .attr('stroke-linecap', 'round')\n .style('opacity', 0)\n .transition()\n .delay(800)\n .duration(300)\n .style('opacity', 1)\n g.append('circle')\n .attr('cx', Math.cos(nowAngle) * handTipR)\n .attr('cy', Math.sin(nowAngle) * handTipR)\n .attr('r', 4)\n .attr('fill', 'var(--color-error)')\n .style('opacity', 0)\n .transition()\n .delay(800)\n .duration(300)\n .style('opacity', 1)\n g.append('circle')\n .attr('r', 5)\n .attr('fill', 'var(--color-error)')\n .attr('stroke', 'var(--color-background)')\n .attr('stroke-width', 1.5)\n .style('opacity', 0)\n .transition()\n .delay(800)\n .duration(300)\n .style('opacity', 1)\n }\n }, [size, rings, centerTopLabel, centerMainLabel, showNowHand, showTooltip, hideTooltip])\n\n return (\n <div className={styles.container} ref={containerRef}>\n <div className={styles.clockWrap}>\n <svg ref={svgRef} />\n </div>\n <div ref={tooltipRef} className={styles.tooltip} />\n </div>\n )\n}\n","import React, { useRef, useEffect, useState, useCallback } from 'react'\nimport * as d3 from 'd3'\nimport styles from './ChordDiagram.module.css'\n\ninterface ChordDiagramProps {\n /** Group labels (length N) */\n labels: string[]\n /** Square N×N matrix of weights between groups */\n matrix: number[][]\n /** Optional color per label index; falls back to a default palette */\n colors?: string[]\n /** Optional emoji per label index, rendered around the rim */\n emojis?: string[]\n /** Tooltip suffix for edge counts (e.g. \"transitions\") */\n edgeUnit?: string\n /** Override the size; otherwise the chart fills its container up to maxSize */\n size?: number\n minSize?: number\n maxSize?: number\n}\n\nconst DEFAULT_PALETTE = [\n '#6366f1', '#8b5cf6', '#06b6d4', '#10b981',\n '#f59e0b', '#ef4444', '#ec4899', '#84cc16',\n '#f97316', '#3b82f6', '#14b8a6', '#a855f7',\n]\n\nexport const ChordDiagram: React.FC<ChordDiagramProps> = ({\n labels,\n matrix,\n colors,\n emojis,\n edgeUnit = 'connections',\n size: fixedSize,\n minSize = 320,\n maxSize = 820,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null)\n const svgRef = useRef<SVGSVGElement>(null)\n const tooltipRef = useRef<HTMLDivElement>(null)\n const [autoSize, setAutoSize] = useState(480)\n const size = fixedSize ?? autoSize\n\n useEffect(() => {\n if (fixedSize) return\n const c = containerRef.current\n if (!c) return\n const obs = new ResizeObserver((entries) => {\n for (const e of entries) {\n const w = e.contentRect.width\n if (w > 0) setAutoSize(Math.max(minSize, Math.min(maxSize, w)))\n }\n })\n obs.observe(c)\n return () => obs.disconnect()\n }, [fixedSize, minSize, maxSize])\n\n const showTip = useCallback((event: MouseEvent, html: string) => {\n const tip = tooltipRef.current\n const ctn = containerRef.current\n if (!tip || !ctn) return\n const rect = ctn.getBoundingClientRect()\n tip.style.left = `${event.clientX - rect.left + 12}px`\n tip.style.top = `${event.clientY - rect.top - 10}px`\n tip.innerHTML = html\n tip.classList.add(styles.visible)\n }, [])\n\n const hideTip = useCallback(() => {\n tooltipRef.current?.classList.remove(styles.visible)\n }, [])\n\n useEffect(() => {\n if (!svgRef.current || labels.length === 0 || matrix.length === 0) return\n const svg = d3.select(svgRef.current)\n svg.selectAll('*').remove()\n\n const inner = size / 2 - 50\n const outer = inner + 16\n const g = svg\n .attr('width', size)\n .attr('height', size)\n .append('g')\n .attr('transform', `translate(${size / 2}, ${size / 2})`)\n\n const chord = d3.chord().padAngle(0.04).sortSubgroups(d3.descending)\n const chords = chord(matrix)\n const arc = d3.arc<d3.ChordGroup>().innerRadius(inner).outerRadius(outer)\n const ribbon = d3.ribbon<d3.Chord, d3.ChordSubgroup>().radius(inner)\n\n const colorOf = (i: number) => colors?.[i] || DEFAULT_PALETTE[i % DEFAULT_PALETTE.length]\n const emojiOf = (i: number) => emojis?.[i] ?? '•'\n\n const groupSel = g.append('g')\n .selectAll('path')\n .data(chords.groups)\n .join('path')\n .attr('d', arc)\n .attr('fill', (d) => colorOf(d.index))\n .attr('stroke', 'var(--color-background)')\n .attr('stroke-width', 1)\n .style('cursor', 'pointer')\n .style('opacity', 0)\n .on('mousemove', function (event, d) {\n const total = d.value\n showTip(\n event,\n `<div class=\"${styles.tipLabel}\">${emojiOf(d.index)} ${labels[d.index]}</div>` +\n `<div class=\"${styles.tipRow}\">${total} ${edgeUnit}</div>`\n )\n })\n .on('mouseleave', hideTip)\n\n groupSel.transition()\n .delay((_, i) => i * 40)\n .duration(420)\n .ease(d3.easeCubicOut)\n .style('opacity', 1)\n\n const ribbonSel = g.append('g')\n .selectAll('path')\n .data(chords)\n .join('path')\n .attr('d', ribbon)\n .attr('fill', (d) => colorOf(d.source.index))\n .attr('opacity', 0)\n .attr('stroke', 'var(--color-background)')\n .attr('stroke-width', 0.4)\n .style('cursor', 'pointer')\n .on('mousemove', function (event, d) {\n const aToB = matrix[d.source.index]?.[d.target.index] ?? 0\n const bToA = matrix[d.target.index]?.[d.source.index] ?? 0\n showTip(\n event,\n `<div class=\"${styles.tipLabel}\">${emojiOf(d.source.index)} ${labels[d.source.index]} ↔ ${emojiOf(d.target.index)} ${labels[d.target.index]}</div>` +\n `<div class=\"${styles.tipRow}\">${labels[d.source.index]} → ${labels[d.target.index]}: ${aToB}</div>` +\n `<div class=\"${styles.tipRow}\">${labels[d.target.index]} → ${labels[d.source.index]}: ${bToA}</div>`\n )\n })\n .on('mouseleave', hideTip)\n\n ribbonSel.transition()\n .delay(labels.length * 40 + 120)\n .duration(500)\n .ease(d3.easeCubicOut)\n .attr('opacity', 0.55)\n\n const labelSel = g.append('g')\n .selectAll('text')\n .data(chords.groups)\n .join('text')\n .attr('transform', (d) => {\n const angle = (d.startAngle + d.endAngle) / 2 - Math.PI / 2\n const r = outer + 18\n return `translate(${Math.cos(angle) * r}, ${Math.sin(angle) * r})`\n })\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .attr('font-size', '16px')\n .style('pointer-events', 'none')\n .style('opacity', 0)\n .text((d) => emojiOf(d.index))\n\n labelSel.transition()\n .delay((_, i) => i * 40 + 200)\n .duration(300)\n .style('opacity', 1)\n }, [matrix, labels, size, colors, emojis, edgeUnit, showTip, hideTip])\n\n return (\n <div className={styles.container} ref={containerRef}>\n <div className={styles.svgWrap}>\n <svg ref={svgRef} />\n </div>\n <div ref={tooltipRef} className={styles.tooltip} />\n </div>\n )\n}\n","import React, { useRef, useEffect, useState, useCallback } from 'react'\nimport * as d3 from 'd3'\nimport styles from './PolarHeatmap.module.css'\n\nexport interface PolarHeatmapCell {\n /** 0 = outermost ring (most recent day) */\n dayOffset: number\n /** 0..23 */\n hour: number\n /** Cell fill color, or 'transparent' for empty cells */\n color: string\n label?: string\n emoji?: string\n /** Optional pre-formatted label for the day shown in the tooltip */\n dayLabel?: string\n}\n\ninterface PolarHeatmapProps {\n /** Cells: one per (dayOffset, hour). Empty cells can be omitted or set to color='transparent' */\n cells: PolarHeatmapCell[]\n /** Number of concentric day rings. Cells with dayOffset >= days are ignored */\n days: number\n /** Accent color for ornamental dots/lines/labels around the rim */\n accentColor?: string\n centerTopLabel?: string\n centerMainLabel?: string\n /** Override the size; otherwise the chart fills its container up to maxSize */\n size?: number\n minSize?: number\n maxSize?: number\n}\n\nconst DEFAULT_ACCENT = '#c8a14a'\n\nexport const PolarHeatmap: React.FC<PolarHeatmapProps> = ({\n cells,\n days,\n accentColor = DEFAULT_ACCENT,\n centerTopLabel,\n centerMainLabel,\n size: fixedSize,\n minSize = 320,\n maxSize = 560,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null)\n const svgRef = useRef<SVGSVGElement>(null)\n const tooltipRef = useRef<HTMLDivElement>(null)\n const [autoSize, setAutoSize] = useState(560)\n const size = fixedSize ?? autoSize\n\n useEffect(() => {\n if (fixedSize) return\n const c = containerRef.current\n if (!c) return\n const obs = new ResizeObserver((entries) => {\n for (const e of entries) {\n const w = e.contentRect.width\n if (w > 0) setAutoSize(Math.max(minSize, Math.min(maxSize, w)))\n }\n })\n obs.observe(c)\n return () => obs.disconnect()\n }, [fixedSize, minSize, maxSize])\n\n const showTip = useCallback((event: MouseEvent, html: string) => {\n const tip = tooltipRef.current\n const ctn = containerRef.current\n if (!tip || !ctn) return\n const rect = ctn.getBoundingClientRect()\n tip.style.left = `${event.clientX - rect.left + 12}px`\n tip.style.top = `${event.clientY - rect.top - 10}px`\n tip.innerHTML = html\n tip.classList.add(styles.visible)\n }, [])\n\n const hideTip = useCallback(() => {\n tooltipRef.current?.classList.remove(styles.visible)\n }, [])\n\n useEffect(() => {\n if (!svgRef.current || cells.length === 0 || days <= 0) return\n const svg = d3.select(svgRef.current)\n svg.selectAll('*').remove()\n\n const outerR = size / 2 - 32\n const innerR = 64\n const ringGap = 4\n const ringWidth = (outerR - innerR - ringGap * (days - 1)) / days\n\n const defs = svg.append('defs')\n const gradId = `polar-heatmap-glow-${Math.random().toString(36).slice(2, 9)}`\n const glow = defs\n .append('radialGradient')\n .attr('id', gradId)\n .attr('cx', '50%')\n .attr('cy', '50%')\n .attr('r', '50%')\n glow.append('stop').attr('offset', '0%').attr('stop-color', accentColor).attr('stop-opacity', 0.18)\n glow.append('stop').attr('offset', '60%').attr('stop-color', accentColor).attr('stop-opacity', 0.05)\n glow.append('stop').attr('offset', '100%').attr('stop-color', accentColor).attr('stop-opacity', 0)\n\n const g = svg\n .attr('width', size)\n .attr('height', size)\n .append('g')\n .attr('transform', `translate(${size / 2}, ${size / 2})`)\n\n const hourAngle = (h: number) => (h / 24) * Math.PI * 2\n\n g.append('circle')\n .attr('r', outerR + 44)\n .attr('fill', `url(#${gradId})`)\n\n for (let h = 0; h < 24; h++) {\n const angle = hourAngle(h) - Math.PI / 2\n g.append('line')\n .attr('x1', Math.cos(angle) * innerR)\n .attr('y1', Math.sin(angle) * innerR)\n .attr('x2', Math.cos(angle) * (outerR + 6))\n .attr('y2', Math.sin(angle) * (outerR + 6))\n .attr('stroke', accentColor)\n .attr('stroke-width', h % 3 === 0 ? 0.7 : 0.35)\n .attr('opacity', h % 3 === 0 ? 0.55 : 0.25)\n }\n\n const arcGen = d3\n .arc<PolarHeatmapCell>()\n .innerRadius((d) => outerR - d.dayOffset * (ringWidth + ringGap) - ringWidth)\n .outerRadius((d) => outerR - d.dayOffset * (ringWidth + ringGap))\n .startAngle((d) => hourAngle(d.hour))\n .endAngle((d) => hourAngle(d.hour + 1))\n .padAngle(0.014)\n .cornerRadius(2.5)\n\n const visibleCells = cells.filter((c) => c.dayOffset >= 0 && c.dayOffset < days && c.hour >= 0 && c.hour < 24)\n\n const cellSel = g.selectAll('path.cell')\n .data(visibleCells)\n .join('path')\n .attr('class', 'cell')\n .attr('d', arcGen)\n .attr('fill', (d) => d.color)\n .attr('opacity', 0)\n .style('cursor', (d) => (d.label ? 'pointer' : 'default'))\n .on('mousemove', function (event, d) {\n if (!d.label) return\n const hr = `${String(d.hour).padStart(2, '0')}:00`\n const dayLabel = d.dayLabel ?? (d.dayOffset === 0 ? 'Today' : `${d.dayOffset} days ago`)\n showTip(\n event,\n `<div class=\"${styles.tipLabel}\">${d.emoji ?? ''} ${d.label}</div>` +\n `<div class=\"${styles.tipRow}\">${dayLabel} · ${hr}</div>`\n )\n })\n .on('mouseleave', hideTip)\n\n cellSel.transition()\n .delay((d) => (d.hour / 24) * 600 + d.dayOffset * 30)\n .duration(380)\n .ease(d3.easeCubicOut)\n .attr('opacity', (d) => (d.label ? 0.88 : 0))\n\n g.append('circle')\n .attr('r', outerR + 16)\n .attr('fill', 'none')\n .attr('stroke', accentColor)\n .attr('stroke-width', 0.4)\n .attr('opacity', 0.4)\n\n for (let i = 0; i < 48; i++) {\n const angle = (i / 48) * Math.PI * 2 - Math.PI / 2\n g.append('circle')\n .attr('cx', Math.cos(angle) * (outerR + 12))\n .attr('cy', Math.sin(angle) * (outerR + 12))\n .attr('r', i % 2 === 0 ? 1.4 : 0.6)\n .attr('fill', accentColor)\n .attr('opacity', i % 2 === 0 ? 0.75 : 0.4)\n }\n\n for (let h = 0; h < 24; h += 3) {\n const angle = hourAngle(h) - Math.PI / 2\n const labelR = outerR + 28\n g.append('text')\n .attr('x', Math.cos(angle) * labelR)\n .attr('y', Math.sin(angle) * labelR)\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .attr('fill', accentColor)\n .attr('font-size', '11px')\n .attr('font-weight', 600)\n .attr('letter-spacing', '1px')\n .attr('opacity', 0.85)\n .text(String(h).padStart(2, '0'))\n }\n\n g.append('circle')\n .attr('r', innerR - 4)\n .attr('fill', 'var(--color-background)')\n\n g.append('circle').attr('r', 3).attr('fill', accentColor).attr('opacity', 0.9)\n\n if (centerTopLabel) {\n g.append('text')\n .attr('text-anchor', 'middle')\n .attr('y', innerR - 33)\n .attr('fill', accentColor)\n .attr('font-size', '9px')\n .attr('letter-spacing', '3px')\n .attr('opacity', 0.85)\n .text(centerTopLabel)\n }\n if (centerMainLabel) {\n g.append('text')\n .attr('text-anchor', 'middle')\n .attr('y', innerR + 2)\n .attr('fill', accentColor)\n .attr('font-size', '14px')\n .attr('font-weight', 700)\n .attr('letter-spacing', '2px')\n .attr('opacity', 0.95)\n .text(centerMainLabel)\n }\n }, [cells, days, size, accentColor, centerTopLabel, centerMainLabel, showTip, hideTip])\n\n return (\n <div className={styles.container} ref={containerRef}>\n <div className={styles.svgWrap}>\n <svg ref={svgRef} />\n </div>\n <div ref={tooltipRef} className={styles.tooltip} />\n </div>\n )\n}\n","import React, { useState, useCallback, useEffect, useRef } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { ChevronLeft, ChevronRight, Play, Pause, Maximize, Download, Share2 } from 'lucide-react';\nimport styles from './ImageSlideshow.module.css';\n\nexport interface SlideshowImage {\n id: string;\n src: string;\n alt: string;\n caption?: string;\n title?: string;\n srcSet?: string;\n sizes?: string;\n downloadUrl?: string;\n metadata?: {\n width?: number;\n height?: number;\n photographer?: string;\n location?: string;\n camera?: string;\n [key: string]: unknown;\n };\n}\n\nexport interface ImageSlideshowProps {\n images: SlideshowImage[];\n autoPlay?: boolean;\n autoPlayInterval?: number;\n showThumbnails?: boolean;\n showControls?: boolean;\n showIndicators?: boolean;\n showCaptions?: boolean;\n loop?: boolean;\n fadeTransition?: boolean;\n enableFullscreen?: boolean;\n enableDownload?: boolean;\n enableShare?: boolean;\n enableDragReorder?: boolean;\n lazyLoading?: boolean;\n preloadAdjacent?: boolean;\n className?: string;\n onImageChange?: (index: number, image: SlideshowImage) => void;\n onDownload?: (image: SlideshowImage) => void;\n onShare?: (image: SlideshowImage) => void;\n onImageReorder?: (newOrder: SlideshowImage[]) => void;\n initialIndex?: number;\n}\n\nexport const ImageSlideshow: React.FC<ImageSlideshowProps> = ({\n images,\n autoPlay = false,\n autoPlayInterval = 3000,\n showThumbnails = true,\n showControls = true,\n showIndicators = true,\n showCaptions = true,\n loop = true,\n fadeTransition = false,\n enableFullscreen = true,\n enableDownload = false,\n enableShare = false,\n enableDragReorder = false,\n lazyLoading = true,\n preloadAdjacent = true,\n className = '',\n onImageChange,\n onDownload,\n onShare,\n onImageReorder,\n initialIndex = 0,\n}) => {\n const [currentIndex, setCurrentIndex] = useState(initialIndex);\n const [isPlaying, setIsPlaying] = useState(autoPlay);\n const [touchStart, setTouchStart] = useState<number | null>(null);\n const [touchEnd, setTouchEnd] = useState<number | null>(null);\n const [isFullscreen, setIsFullscreen] = useState(false);\n const [loadedImages, setLoadedImages] = useState<Set<string>>(new Set());\n const [imageOrder, setImageOrder] = useState(images);\n const [isDragging, setIsDragging] = useState(false);\n const [draggedIndex, setDraggedIndex] = useState<number | null>(null);\n \n const slideshowRef = useRef<HTMLDivElement>(null);\n const imageRef = useRef<HTMLImageElement>(null);\n const observerRef = useRef<IntersectionObserver | null>(null);\n\n const minSwipeDistance = 50;\n\n const goToSlide = useCallback((index: number) => {\n const newIndex = Math.max(0, Math.min(index, imageOrder.length - 1));\n setCurrentIndex(newIndex);\n if (onImageChange) {\n onImageChange(newIndex, imageOrder[newIndex]);\n }\n }, [imageOrder, onImageChange]);\n\n const goToNext = useCallback(() => {\n if (currentIndex < imageOrder.length - 1) {\n goToSlide(currentIndex + 1);\n } else if (loop) {\n goToSlide(0);\n }\n }, [currentIndex, imageOrder.length, loop, goToSlide]);\n\n const goToPrevious = useCallback(() => {\n if (currentIndex > 0) {\n goToSlide(currentIndex - 1);\n } else if (loop) {\n goToSlide(imageOrder.length - 1);\n }\n }, [currentIndex, imageOrder.length, loop, goToSlide]);\n\n const togglePlayPause = useCallback(() => {\n setIsPlaying(prev => !prev);\n }, []);\n\n\n\n\n const toggleFullscreen = () => {\n if (!document.fullscreenElement) {\n slideshowRef.current?.requestFullscreen();\n setIsFullscreen(true);\n } else {\n document.exitFullscreen();\n setIsFullscreen(false);\n }\n };\n\n const handleImageLoad = (imageId: string) => {\n setLoadedImages(prev => new Set([...prev, imageId]));\n };\n\n const handleDownload = () => {\n const currentImage = imageOrder[currentIndex];\n if (onDownload) {\n onDownload(currentImage);\n } else if (currentImage.downloadUrl || currentImage.src) {\n const link = document.createElement('a');\n link.href = currentImage.downloadUrl || currentImage.src;\n link.download = currentImage.title || currentImage.alt || 'image';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n };\n\n const handleShare = async () => {\n const currentImage = imageOrder[currentIndex];\n if (onShare) {\n onShare(currentImage);\n } else if (navigator.share) {\n try {\n await navigator.share({\n title: currentImage.title || currentImage.alt,\n text: currentImage.caption,\n url: currentImage.src\n });\n } catch (error) {\n console.log('Error sharing:', error);\n }\n } else {\n navigator.clipboard.writeText(currentImage.src);\n }\n };\n\n const handleDragStart = (e: React.DragEvent, index: number) => {\n if (!enableDragReorder) return;\n setIsDragging(true);\n setDraggedIndex(index);\n e.dataTransfer.effectAllowed = 'move';\n };\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n };\n\n const handleDrop = (e: React.DragEvent, dropIndex: number) => {\n e.preventDefault();\n if (draggedIndex === null || draggedIndex === dropIndex) return;\n \n const newOrder = [...imageOrder];\n const draggedItem = newOrder[draggedIndex];\n newOrder.splice(draggedIndex, 1);\n newOrder.splice(dropIndex, 0, draggedItem);\n \n setImageOrder(newOrder);\n setIsDragging(false);\n setDraggedIndex(null);\n \n if (onImageReorder) {\n onImageReorder(newOrder);\n }\n };\n\n const preloadImage = (src: string) => {\n const img = new Image();\n img.src = src;\n };\n\n const onTouchStart = (e: React.TouchEvent) => {\n setTouchEnd(null);\n setTouchStart(e.targetTouches[0].clientX);\n };\n\n const onTouchMove = (e: React.TouchEvent) => {\n setTouchEnd(e.targetTouches[0].clientX);\n };\n\n const onTouchEnd = () => {\n if (!touchStart || !touchEnd) return;\n const distance = touchStart - touchEnd;\n const isLeftSwipe = distance > minSwipeDistance;\n const isRightSwipe = distance < -minSwipeDistance;\n\n if (isLeftSwipe) {\n goToNext();\n } else if (isRightSwipe) {\n goToPrevious();\n }\n };\n\n useEffect(() => {\n if (!isPlaying || imageOrder.length <= 1) return;\n\n const interval = setInterval(() => {\n goToNext();\n }, autoPlayInterval);\n\n return () => clearInterval(interval);\n }, [isPlaying, autoPlayInterval, goToNext, imageOrder.length]);\n\n useEffect(() => {\n setImageOrder(images);\n }, [images]);\n\n useEffect(() => {\n if (preloadAdjacent) {\n const preloadIndices = [\n currentIndex - 1,\n currentIndex + 1,\n loop && currentIndex === 0 ? imageOrder.length - 1 : -1,\n loop && currentIndex === imageOrder.length - 1 ? 0 : -1\n ].filter(i => i >= 0 && i < imageOrder.length);\n \n preloadIndices.forEach(index => {\n if (imageOrder[index]) {\n preloadImage(imageOrder[index].src);\n }\n });\n }\n }, [currentIndex, imageOrder, images, loop, preloadAdjacent]);\n\n useEffect(() => {\n const handleFullscreenChange = () => {\n setIsFullscreen(!!document.fullscreenElement);\n };\n \n document.addEventListener('fullscreenchange', handleFullscreenChange);\n return () => document.removeEventListener('fullscreenchange', handleFullscreenChange);\n }, []);\n\n useEffect(() => {\n if (lazyLoading) {\n observerRef.current = new IntersectionObserver(\n (entries) => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n const img = entry.target as HTMLImageElement;\n const src = img.dataset.src;\n if (src) {\n img.src = src;\n img.removeAttribute('data-src');\n observerRef.current?.unobserve(img);\n }\n }\n });\n },\n { threshold: 0.1 }\n );\n }\n \n return () => {\n observerRef.current?.disconnect();\n };\n }, [lazyLoading]);\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowLeft':\n goToPrevious();\n break;\n case 'ArrowRight':\n goToNext();\n break;\n case ' ':\n e.preventDefault();\n togglePlayPause();\n break;\n case 'f':\n case 'F':\n if (enableFullscreen) {\n toggleFullscreen();\n }\n break;\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [goToPrevious, goToNext, enableFullscreen, togglePlayPause]);\n\n if (!imageOrder || imageOrder.length === 0) {\n return (\n <div className={`${styles.slideshow} ${styles.empty} ${className}`}>\n <div className={styles.emptyState}>\n <span>No images to display</span>\n </div>\n </div>\n );\n }\n\n const slideVariants = {\n enter: (direction: number) => ({\n x: direction > 0 ? 1000 : -1000,\n opacity: fadeTransition ? 0 : 1,\n }),\n center: {\n zIndex: 1,\n x: 0,\n opacity: 1,\n },\n exit: (direction: number) => ({\n zIndex: 0,\n x: direction < 0 ? 1000 : -1000,\n opacity: fadeTransition ? 0 : 1,\n }),\n };\n\n const currentImage = imageOrder[currentIndex];\n const isImageLoaded = loadedImages.has(currentImage.id);\n\n return (\n <div \n ref={slideshowRef}\n className={`${styles.slideshow} ${isFullscreen ? styles.fullscreen : ''} ${showThumbnails && imageOrder.length > 1 ? styles.hasThumbnails : ''} ${className}`}\n >\n <div \n className={styles.mainContainer}\n onTouchStart={onTouchStart}\n onTouchMove={onTouchMove}\n onTouchEnd={onTouchEnd}\n >\n <AnimatePresence mode=\"wait\" custom={1}>\n <motion.div\n key={currentIndex}\n custom={1}\n variants={slideVariants}\n initial=\"enter\"\n animate=\"center\"\n exit=\"exit\"\n transition={{\n x: { type: \"spring\", stiffness: 300, damping: 30 },\n opacity: { duration: 0.3 }\n }}\n className={styles.slide}\n >\n <img\n ref={imageRef}\n src={lazyLoading && !isImageLoaded ? undefined : currentImage.src}\n data-src={lazyLoading ? currentImage.src : undefined}\n srcSet={currentImage.srcSet}\n sizes={currentImage.sizes}\n alt={currentImage.alt}\n className={styles.image}\n draggable={false}\n onLoad={() => handleImageLoad(currentImage.id)}\n style={{\n opacity: lazyLoading && !isImageLoaded ? 0 : 1,\n transition: 'opacity 0.3s ease'\n }}\n />\n {lazyLoading && !isImageLoaded && (\n <div className={styles.imageLoader}>\n <div className={styles.spinner} />\n </div>\n )}\n </motion.div>\n </AnimatePresence>\n\n {showControls && imageOrder.length > 1 && (\n <>\n <button\n className={`${styles.control} ${styles.controlPrev}`}\n onClick={goToPrevious}\n disabled={!loop && currentIndex === 0}\n aria-label=\"Previous image\"\n >\n <ChevronLeft />\n </button>\n\n <button\n className={`${styles.control} ${styles.controlNext}`}\n onClick={goToNext}\n disabled={!loop && currentIndex === imageOrder.length - 1}\n aria-label=\"Next image\"\n >\n <ChevronRight />\n </button>\n </>\n )}\n\n <div className={styles.topControls}>\n {enableFullscreen && (\n <button\n className={`${styles.control} ${styles.controlAction}`}\n onClick={toggleFullscreen}\n aria-label={isFullscreen ? 'Exit fullscreen' : 'Enter fullscreen'}\n title={isFullscreen ? 'Exit fullscreen (F)' : 'Enter fullscreen (F)'}\n >\n <span style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', width: '100%', height: '100%' }}>\n <Maximize />\n </span>\n </button>\n )}\n \n {enableDownload && (\n <button\n className={`${styles.control} ${styles.controlAction}`}\n onClick={handleDownload}\n aria-label=\"Download image\"\n title=\"Download image\"\n >\n <span style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', width: '100%', height: '100%' }}>\n <Download />\n </span>\n </button>\n )}\n \n {enableShare && (\n <button\n className={`${styles.control} ${styles.controlAction}`}\n onClick={handleShare}\n aria-label=\"Share image\"\n title=\"Share image\"\n >\n <span style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', width: '100%', height: '100%' }}>\n <Share2 />\n </span>\n </button>\n )}\n </div>\n\n {autoPlay && imageOrder.length > 1 && (\n <button\n className={`${styles.control} ${styles.controlPlay}`}\n onClick={togglePlayPause}\n aria-label={isPlaying ? 'Pause slideshow' : 'Play slideshow'}\n title={isPlaying ? 'Pause slideshow (Space)' : 'Play slideshow (Space)'}\n >\n {isPlaying ? <Pause /> : <Play />}\n </button>\n )}\n\n {showCaptions && (currentImage.caption || currentImage.title) && (\n <motion.div\n className={styles.caption}\n initial={{ opacity: 0, y: 20 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: 0.3 }}\n >\n {currentImage.title && (\n <h3 className={styles.captionTitle}>{currentImage.title}</h3>\n )}\n {currentImage.caption && (\n <p className={styles.captionText}>{currentImage.caption}</p>\n )}\n {currentImage.metadata && (\n <div className={styles.imageMetadata}>\n {currentImage.metadata.photographer && (\n <span className={styles.metadataItem}>\n 📷 {currentImage.metadata.photographer}\n </span>\n )}\n {currentImage.metadata.location && (\n <span className={styles.metadataItem}>\n 📍 {currentImage.metadata.location}\n </span>\n )}\n {currentImage.metadata.camera && (\n <span className={styles.metadataItem}>\n 📹 {currentImage.metadata.camera}\n </span>\n )}\n </div>\n )}\n </motion.div>\n )}\n </div>\n\n {showIndicators && imageOrder.length > 1 && (\n <div className={styles.indicators}>\n {imageOrder.map((_, index) => (\n <motion.button\n key={index}\n className={`${styles.indicator} ${index === currentIndex ? styles.indicatorActive : ''}`}\n onClick={() => goToSlide(index)}\n whileHover={{ scale: 1.2 }}\n whileTap={{ scale: 0.8 }}\n aria-label={`Go to slide ${index + 1}`}\n />\n ))}\n </div>\n )}\n\n {showThumbnails && imageOrder.length > 1 && (\n <div className={`${styles.thumbnails} ${isDragging ? styles.thumbnailsDragging : ''}`}>\n {imageOrder.map((image, index) => (\n <motion.button\n key={image.id}\n className={`${styles.thumbnail} ${index === currentIndex ? styles.thumbnailActive : ''} ${draggedIndex === index ? styles.thumbnailDragged : ''}`}\n onClick={() => goToSlide(index)}\n whileHover={{ scale: 1.05 }}\n whileTap={{ scale: 0.95 }}\n aria-label={`Go to ${image.alt}`}\n draggable={enableDragReorder}\n onDragStart={(e) => handleDragStart(e as unknown as React.DragEvent<HTMLButtonElement>, index)}\n onDragOver={handleDragOver}\n onDrop={(e) => handleDrop(e as unknown as React.DragEvent<HTMLButtonElement>, index)}\n title={image.title || image.alt}\n >\n <img\n src={image.src}\n alt={image.alt}\n className={styles.thumbnailImage}\n draggable={false}\n />\n </motion.button>\n ))}\n </div>\n )}\n </div>\n );\n};","import { useState, useMemo, useCallback, ReactNode, memo } from 'react'\nimport { motion, AnimatePresence, LayoutGroup } from 'framer-motion'\nimport styles from './Table.module.css'\n\n/**\n * Column configuration for the Table component\n * @template T - The type of data objects in the table\n */\nexport interface Column<T = object> {\n /** The key to access the data field in each row object */\n key: string\n /** The display text for the column header */\n header: string\n /** Whether this column can be sorted */\n sortable?: boolean\n /** Whether this column can be filtered */\n filterable?: boolean\n /** CSS width value for the column */\n width?: string\n /** Text alignment for the column content */\n align?: 'left' | 'center' | 'right'\n /** Custom renderer function for cell content */\n render?: (value: unknown, item: T, index: number) => ReactNode\n /** Additional CSS class for the column */\n className?: string\n}\n\n/**\n * Styling configuration for action buttons\n */\nexport interface ActionButtonStyles {\n /** Button size in pixels */\n size?: number\n /** Border radius (CSS value or number for px) */\n borderRadius?: string | number\n /** Button padding (CSS value) */\n padding?: string\n /** Font size (CSS value or number for px) */\n fontSize?: string | number\n /** Icon size (CSS value or number for px) */\n iconSize?: string | number\n /** Additional CSS class name */\n className?: string\n /** Inline styles object */\n style?: React.CSSProperties\n}\n\n/**\n * Configuration for row action buttons\n * @template T - The type of data objects in the table\n */\nexport interface RowAction<T = object> {\n /** Icon to display in the action button */\n icon: ReactNode\n /** Accessible label for the action button */\n label: string\n /** Function called when the action is clicked */\n onClick: (item: T, index: number) => void\n /** Visual variant of the action button */\n variant?: 'primary' | 'secondary' | 'danger' | 'warning' | 'success' | 'custom'\n /** Function to determine if action should be disabled for specific row */\n disabled?: (item: T) => boolean\n /** Custom CSS class for this specific action button */\n className?: string\n /** Custom inline styles for this specific action button */\n style?: React.CSSProperties\n /** Override button styling for this specific action */\n buttonStyles?: ActionButtonStyles\n}\n\n/**\n * Configuration for bulk action buttons that appear when rows are selected\n * @template T - The type of data objects in the table\n */\nexport interface BulkAction<T = object> {\n /** Icon to display in the bulk action button */\n icon: ReactNode\n /** Label for the bulk action button */\n label: string\n /** Function called when bulk action is clicked with selected items */\n onClick: (selectedItems: T[]) => void | Promise<void>\n /** Visual variant of the bulk action button */\n variant?: 'primary' | 'secondary' | 'danger' | 'warning' | 'success' | 'custom'\n /** Function to determine if bulk action should be disabled based on selected items */\n disabled?: (selectedItems: T[]) => boolean\n /** Minimum number of selected items required to enable this action */\n minSelection?: number\n /** Maximum number of selected items allowed for this action */\n maxSelection?: number\n /** Custom CSS class for this bulk action button */\n className?: string\n /** Custom inline styles for this bulk action button */\n style?: React.CSSProperties\n /** Confirm message before executing action (optional) */\n confirmMessage?: string | ((selectedItems: T[]) => string)\n}\n\n/**\n * Props for the Table component\n * @template T - The type of data objects in the table\n */\nexport interface TableProps<T = object> {\n /** Array of data objects to display in the table */\n data: T[]\n /** Column configuration defining how to display data fields */\n columns: Column<T>[]\n /** Field name to use as unique identifier for rows (defaults to 'id') */\n keyField?: string\n /** Optional title displayed above the table */\n title?: string\n /** Enable global search functionality */\n searchable?: boolean\n /** Enable row selection with checkboxes */\n selectable?: boolean\n /** Enable pagination (boolean for default settings or object for custom configuration) */\n pagination?: boolean | { pageSize?: number; pageSizeOptions?: number[] }\n /** Function called when a table row is clicked */\n onRowClick?: (item: T, index: number) => void\n /** Function called when row selection changes (only when selectable=true) */\n onSelectionChange?: (selectedItems: T[]) => void\n /** Array of bulk actions available when rows are selected */\n bulkActions?: BulkAction<T>[]\n /** @deprecated Use bulkActions instead. Function that returns action buttons for selected rows */\n actions?: (selectedItems: T[]) => ReactNode\n /** Configuration for action buttons displayed in each row */\n rowActions?: RowAction<T>[]\n /** Global styling configuration for all action buttons */\n actionButtonStyles?: ActionButtonStyles\n /** Message displayed when table is empty */\n emptyMessage?: string\n /** Show loading state */\n loading?: boolean\n /** Apply alternating row background colors */\n striped?: boolean\n /** Enable hover effects on table rows */\n hoverable?: boolean\n /** Use compact row spacing */\n compact?: boolean\n /** Make table header sticky when scrolling */\n stickyHeader?: boolean\n /** Enable Framer Motion animations (disable for better performance with large datasets) */\n animated?: boolean\n /** Enable horizontal scrolling for tables with many columns */\n horizontalScroll?: boolean\n /** Additional CSS class for the table container */\n className?: string\n}\n\ntype SortConfig = {\n key: string | null\n direction: 'asc' | 'desc'\n}\n\n/**\n * A comprehensive table component with sorting, filtering, pagination, selection, and row actions.\n *\n * Features:\n * - Sorting by clicking column headers\n * - Global search and per-column filtering\n * - Row selection with bulk actions\n * - Pagination with customizable page sizes\n * - Row-level action buttons\n * - Responsive design with sticky headers\n * - Framer Motion animations (can be disabled for performance)\n * - Full theme integration via CSS custom properties\n *\n * @template T - The type of data objects in the table\n * @param props - Table configuration and data\n * @returns React component\n *\n * @example\n * ```tsx\n * const users = [{ id: 1, name: 'John', email: 'john@example.com' }]\n * const columns = [\n * { key: 'name', header: 'Name', sortable: true },\n * { key: 'email', header: 'Email', filterable: true }\n * ]\n *\n * <Table\n * data={users}\n * columns={columns}\n * searchable\n * pagination\n * rowActions={[\n * {\n * icon: <EditIcon />,\n * label: 'Edit user',\n * onClick: (user) => editUser(user),\n * variant: 'primary'\n * }\n * ]}\n * />\n * ```\n */\nconst TableComponent = function Table<T extends object>({\n data,\n columns,\n keyField = 'id',\n title,\n searchable = false,\n selectable = false,\n pagination = false,\n onRowClick,\n onSelectionChange,\n actions,\n bulkActions,\n rowActions,\n actionButtonStyles,\n emptyMessage = 'No data available',\n loading = false,\n striped = false,\n hoverable = true,\n compact = false,\n stickyHeader = false,\n animated = true,\n horizontalScroll = false,\n className = ''\n}: TableProps<T>) {\n // State\n const [selectedRows, setSelectedRows] = useState<Set<unknown>>(new Set())\n const [searchQuery, setSearchQuery] = useState('')\n const [columnFilters, setColumnFilters] = useState<Record<string, string>>({})\n const [sortConfig, setSortConfig] = useState<SortConfig>({ key: null, direction: 'asc' })\n const [currentPage, setCurrentPage] = useState(1)\n const [pageSize, setPageSize] = useState(\n typeof pagination === 'object' && pagination.pageSize ? pagination.pageSize : 10\n )\n\n // Pagination options\n const pageSizeOptions = useMemo(() => {\n if (typeof pagination === 'object' && pagination.pageSizeOptions) {\n return pagination.pageSizeOptions\n }\n return [10, 25, 50, 100]\n }, [pagination])\n\n // Memoize search columns for performance\n const searchableColumns = useMemo(() =>\n columns.map(col => col.key),\n [columns]\n )\n\n // Filter data\n const filteredData = useMemo(() => {\n if (!searchQuery && Object.keys(columnFilters).length === 0) {\n return data\n }\n\n let filtered = data\n\n // Global search\n if (searchable && searchQuery) {\n const query = searchQuery.toLowerCase()\n filtered = filtered.filter(item => {\n return searchableColumns.some(key => {\n const value = item[key as keyof T]\n return value != null && String(value).toLowerCase().includes(query)\n })\n })\n }\n\n // Column filters\n for (const [key, filterValue] of Object.entries(columnFilters)) {\n if (filterValue) {\n const lowerFilterValue = filterValue.toLowerCase()\n filtered = filtered.filter(item => {\n const value = item[key as keyof T]\n return value != null && String(value).toLowerCase().includes(lowerFilterValue)\n })\n }\n }\n\n return filtered\n }, [data, searchableColumns, searchQuery, columnFilters, searchable])\n\n // Sort data\n const sortedData = useMemo(() => {\n if (!sortConfig.key) return filteredData\n\n return [...filteredData].sort((a, b) => {\n const aValue = a[sortConfig.key! as keyof T]\n const bValue = b[sortConfig.key! as keyof T]\n\n if (aValue === null || aValue === undefined) return 1\n if (bValue === null || bValue === undefined) return -1\n\n let comparison = 0\n if (typeof aValue === 'number' && typeof bValue === 'number') {\n comparison = aValue - bValue\n } else if (aValue instanceof Date && bValue instanceof Date) {\n comparison = aValue.getTime() - bValue.getTime()\n } else {\n comparison = String(aValue).localeCompare(String(bValue))\n }\n\n return sortConfig.direction === 'asc' ? comparison : -comparison\n })\n }, [filteredData, sortConfig])\n\n // Paginate data\n const paginatedData = useMemo(() => {\n if (!pagination) return sortedData\n\n const startIndex = (currentPage - 1) * pageSize\n const endIndex = startIndex + pageSize\n return sortedData.slice(startIndex, endIndex)\n }, [sortedData, pagination, currentPage, pageSize])\n\n const totalPages = useMemo(() => {\n if (!pagination) return 1\n return Math.ceil(sortedData.length / pageSize)\n }, [sortedData, pageSize, pagination])\n\n // Handlers\n const handleSort = useCallback((key: string) => {\n setSortConfig(prev => {\n if (prev.key !== key) {\n return { key, direction: 'asc' }\n }\n if (prev.direction === 'asc') {\n return { key, direction: 'desc' }\n }\n return { key: null, direction: 'asc' }\n })\n }, [])\n\n const handleSelectAll = useCallback(() => {\n const currentPageIds = paginatedData.map(item => item[keyField as keyof T])\n const allSelected = currentPageIds.every(id => selectedRows.has(id))\n\n const newSelected = new Set(selectedRows)\n if (allSelected) {\n currentPageIds.forEach(id => newSelected.delete(id))\n } else {\n currentPageIds.forEach(id => newSelected.add(id))\n }\n\n setSelectedRows(newSelected)\n if (onSelectionChange) {\n const selectedItems = data.filter(item => newSelected.has(item[keyField as keyof T]))\n onSelectionChange(selectedItems)\n }\n }, [paginatedData, selectedRows, keyField, data, onSelectionChange])\n\n const handleSelectRow = useCallback((itemId: unknown) => {\n const newSelected = new Set(selectedRows)\n if (newSelected.has(itemId)) {\n newSelected.delete(itemId)\n } else {\n newSelected.add(itemId)\n }\n\n setSelectedRows(newSelected)\n if (onSelectionChange) {\n const selectedItems = data.filter(item => newSelected.has(item[keyField as keyof T]))\n onSelectionChange(selectedItems)\n }\n }, [selectedRows, data, keyField, onSelectionChange])\n\n const handleColumnFilter = useCallback((key: string, value: string) => {\n setColumnFilters(prev => ({ ...prev, [key]: value }))\n setCurrentPage(1)\n }, [])\n\n const clearFilters = useCallback(() => {\n setSearchQuery('')\n setColumnFilters({})\n setSortConfig({ key: null, direction: 'asc' })\n setCurrentPage(1)\n }, [])\n\n // Computed values\n const hasActiveFilters = searchQuery || Object.values(columnFilters).some(v => v)\n const currentPageIds = paginatedData.map(item => item[keyField as keyof T])\n const allCurrentPageSelected = selectable && currentPageIds.length > 0 &&\n currentPageIds.every(id => selectedRows.has(id))\n const someCurrentPageSelected = selectable &&\n currentPageIds.some(id => selectedRows.has(id))\n\n const selectedItems = useMemo(() => {\n return data.filter(item => selectedRows.has(item[keyField as keyof T]))\n }, [data, selectedRows, keyField])\n\n // Helper function to merge button styles\n const getButtonStyles = useCallback((action: RowAction<T>) => {\n const defaultSize = actionButtonStyles?.size || 36\n const actionSize = action.buttonStyles?.size || defaultSize\n\n const baseStyles: React.CSSProperties & Record<string, unknown> = {\n width: actionSize,\n height: actionSize,\n borderRadius: action.buttonStyles?.borderRadius || actionButtonStyles?.borderRadius || '50%',\n fontSize: action.buttonStyles?.fontSize || actionButtonStyles?.fontSize,\n padding: action.buttonStyles?.padding || actionButtonStyles?.padding,\n ...actionButtonStyles?.style,\n ...action.style,\n ...action.buttonStyles?.style\n }\n\n // Handle icon size - set CSS custom property\n if (action.buttonStyles?.iconSize || actionButtonStyles?.iconSize) {\n baseStyles['--icon-size'] = typeof (action.buttonStyles?.iconSize || actionButtonStyles?.iconSize) === 'number'\n ? `${action.buttonStyles?.iconSize || actionButtonStyles?.iconSize}px`\n : action.buttonStyles?.iconSize || actionButtonStyles?.iconSize\n }\n\n return baseStyles as React.CSSProperties\n }, [actionButtonStyles])\n\n const getButtonClassName = useCallback((action: RowAction<T>) => {\n const baseClass = styles.actionButton\n const variantClass = action.variant === 'primary' ? styles.actionButtonPrimary :\n action.variant === 'danger' ? styles.actionButtonDanger :\n action.variant === 'warning' ? styles.actionButtonWarning :\n action.variant === 'success' ? styles.actionButtonSuccess :\n action.variant === 'custom' ? '' :\n styles.actionButtonSecondary\n\n const globalCustomClass = actionButtonStyles?.className || ''\n const actionCustomClass = action.className || ''\n const buttonCustomClass = action.buttonStyles?.className || ''\n\n return `${baseClass} ${variantClass} ${globalCustomClass} ${actionCustomClass} ${buttonCustomClass}`.trim()\n }, [actionButtonStyles])\n\n // Loading state\n if (loading) {\n return (\n <div className={`${styles.container} ${className}`}>\n <div className={styles.loading}>\n <div className={styles.spinner} />\n <span>Loading...</span>\n </div>\n </div>\n )\n }\n\n // Empty state\n if (data.length === 0) {\n return (\n <div className={`${styles.container} ${className}`}>\n {title && <h2 className={styles.title}>{title}</h2>}\n <div className={styles.empty}>\n <span className={styles.emptyIcon}>📊</span>\n <p>{emptyMessage}</p>\n </div>\n </div>\n )\n }\n\n return (\n <div className={`${styles.container} ${className}`}>\n {/* Header */}\n {(title || actions || bulkActions) && (\n <div className={styles.header}>\n {title && <h2 className={styles.title}>{title}</h2>}\n {(actions || bulkActions) && (\n <div className={styles.bulkActions}>\n {/* Legacy actions support */}\n {actions && selectedItems.length > 0 && (\n <div className={styles.actions}>\n {actions(selectedItems)}\n </div>\n )}\n {/* New bulk actions */}\n {bulkActions && bulkActions.length > 0 && selectedItems.length > 0 && (\n <div className={styles.bulkActionButtons}>\n {bulkActions.map((bulkAction, index) => {\n const isDisabled =\n (bulkAction.disabled && bulkAction.disabled(selectedItems)) ||\n (bulkAction.minSelection && selectedItems.length < bulkAction.minSelection) ||\n (bulkAction.maxSelection && selectedItems.length > bulkAction.maxSelection)\n\n return (\n <button\n key={index}\n className={`${styles.bulkActionButton} ${\n bulkAction.variant === 'primary' ? styles.bulkPrimary :\n bulkAction.variant === 'secondary' ? styles.bulkSecondary :\n bulkAction.variant === 'danger' ? styles.bulkDanger :\n bulkAction.variant === 'warning' ? styles.bulkWarning :\n bulkAction.variant === 'success' ? styles.bulkSuccess :\n bulkAction.variant === 'custom' ? styles.bulkCustom :\n styles.bulkPrimary\n } ${bulkAction.className || ''}`}\n style={bulkAction.style}\n disabled={!!isDisabled}\n onClick={async () => {\n if (bulkAction.confirmMessage) {\n const message = typeof bulkAction.confirmMessage === 'function'\n ? bulkAction.confirmMessage(selectedItems)\n : bulkAction.confirmMessage\n if (!confirm(message)) return\n }\n await bulkAction.onClick(selectedItems)\n }}\n title={bulkAction.label}\n aria-label={bulkAction.label}\n >\n {bulkAction.icon}\n <span>{bulkAction.label}</span>\n <span className={styles.selectionCount}>({selectedItems.length})</span>\n </button>\n )\n })}\n </div>\n )}\n </div>\n )}\n </div>\n )}\n\n {/* Controls */}\n {(searchable || hasActiveFilters) && (\n <div className={styles.controls}>\n {searchable && (\n <div className={styles.searchBox}>\n <span className={styles.searchIcon}>🔍</span>\n <input\n type=\"text\"\n placeholder=\"Search...\"\n value={searchQuery}\n onChange={e => {\n setSearchQuery(e.target.value)\n setCurrentPage(1)\n }}\n className={styles.searchInput}\n />\n {searchQuery && (\n <button\n className={styles.clearButton}\n onClick={() => setSearchQuery('')}\n >\n ✕\n </button>\n )}\n </div>\n )}\n {hasActiveFilters && (\n <button\n className={styles.clearFiltersButton}\n onClick={clearFilters}\n >\n Clear All Filters\n </button>\n )}\n <div className={styles.resultCount}>\n {filteredData.length} {filteredData.length === 1 ? 'result' : 'results'}\n </div>\n </div>\n )}\n\n {/* Table */}\n <div className={`${styles.tableWrapper} ${stickyHeader ? styles.stickyHeader : ''} ${horizontalScroll ? styles.horizontalScroll : ''}`}>\n <table\n className={`\n ${styles.table}\n ${striped ? styles.striped : ''}\n ${hoverable ? styles.hoverable : ''}\n ${compact ? styles.compact : ''}\n `}\n role=\"table\"\n aria-label={title || 'Data table'}\n aria-rowcount={sortedData.length}\n aria-describedby={title ? `${title.replace(/\\s+/g, '-').toLowerCase()}-summary` : undefined}\n >\n <thead>\n <tr>\n {selectable && (\n <th className={styles.checkboxColumn} scope=\"col\">\n <input\n type=\"checkbox\"\n checked={allCurrentPageSelected}\n ref={input => {\n if (input) {\n input.indeterminate = !allCurrentPageSelected && someCurrentPageSelected\n }\n }}\n onChange={handleSelectAll}\n className={styles.checkbox}\n aria-label=\"Select all rows\"\n />\n </th>\n )}\n {columns.map(column => (\n <th\n key={column.key}\n className={`${styles.th} ${column.className || ''}`}\n style={{\n width: column.width,\n textAlign: column.align || 'left'\n }}\n scope=\"col\"\n role=\"columnheader\"\n aria-sort={\n sortConfig.key === column.key\n ? sortConfig.direction === 'asc' ? 'ascending' : 'descending'\n : column.sortable ? 'none' : undefined\n }\n >\n <div className={styles.headerCell}>\n {column.sortable ? (\n <button\n className={styles.sortButton}\n onClick={() => handleSort(column.key)}\n aria-label={`Sort by ${column.header} ${\n sortConfig.key === column.key\n ? sortConfig.direction === 'asc' ? '(descending)' : '(ascending)'\n : '(ascending)'\n }`}\n >\n <span>{column.header}</span>\n <span className={styles.sortIcon} aria-hidden=\"true\">\n {sortConfig.key === column.key ? (\n sortConfig.direction === 'asc' ? '↑' : '↓'\n ) : '↕'}\n </span>\n </button>\n ) : (\n <span className={styles.headerText}>{column.header}</span>\n )}\n {column.filterable && (\n <input\n type=\"text\"\n placeholder=\"Filter...\"\n value={columnFilters[column.key] || ''}\n onChange={e => handleColumnFilter(column.key, e.target.value)}\n onClick={e => e.stopPropagation()}\n className={styles.columnFilter}\n aria-label={`Filter ${column.header}`}\n />\n )}\n </div>\n </th>\n ))}\n {rowActions && rowActions.length > 0 && (\n <th className={styles.actionsColumn} scope=\"col\">\n <span className={styles.headerText}>Actions</span>\n </th>\n )}\n </tr>\n </thead>\n <tbody>\n {animated ? (\n <LayoutGroup>\n <AnimatePresence mode=\"popLayout\">\n {paginatedData.map((item, index) => (\n <motion.tr\n key={`${String(item[keyField as keyof T])}-${currentPage}`}\n layout=\"position\"\n initial={{ opacity: 0, scale: 0.98 }}\n animate={{\n opacity: 1,\n scale: 1,\n transition: {\n duration: 0.12,\n delay: Math.min(index * 0.005, 0.08),\n ease: [0.25, 0.46, 0.45, 0.94]\n }\n }}\n exit={{\n opacity: 0,\n scale: 0.98,\n transition: { duration: 0.08 }\n }}\n className={`\n ${styles.tr}\n ${selectedRows.has(item[keyField as keyof T]) ? styles.selected : ''}\n ${onRowClick ? styles.clickable : ''}\n `}\n onClick={() => onRowClick?.(item, index)}\n >\n {selectable && (\n <td className={styles.checkboxColumn}>\n <input\n type=\"checkbox\"\n checked={selectedRows.has(item[keyField as keyof T])}\n onChange={() => handleSelectRow(item[keyField as keyof T])}\n onClick={e => e.stopPropagation()}\n className={styles.checkbox}\n />\n </td>\n )}\n {columns.map(column => (\n <td\n key={column.key}\n className={`${styles.td} ${column.className || ''}`}\n style={{ textAlign: column.align || 'left' }}\n >\n {column.render\n ? column.render(item[column.key as keyof T], item, index)\n : formatValue(item[column.key as keyof T])\n }\n </td>\n ))}\n {rowActions && rowActions.length > 0 && (\n <td\n className={styles.actionsColumn}\n onClick={e => e.stopPropagation()}\n >\n <div className={styles.actionButtons}>\n {rowActions.map((action, actionIndex) => (\n <button\n key={actionIndex}\n className={getButtonClassName(action)}\n style={getButtonStyles(action)}\n onClick={() => action.onClick(item, index)}\n disabled={action.disabled ? action.disabled(item) : false}\n title={action.label}\n aria-label={action.label}\n >\n {action.icon}\n </button>\n ))}\n </div>\n </td>\n )}\n </motion.tr>\n ))}\n </AnimatePresence>\n </LayoutGroup>\n ) : (\n paginatedData.map((item, index) => (\n <tr\n key={String(item[keyField as keyof T])}\n className={`\n ${styles.tr}\n ${selectedRows.has(item[keyField as keyof T]) ? styles.selected : ''}\n ${onRowClick ? styles.clickable : ''}\n `}\n onClick={() => onRowClick?.(item, index)}\n >\n {selectable && (\n <td className={styles.checkboxColumn}>\n <input\n type=\"checkbox\"\n checked={selectedRows.has(item[keyField as keyof T])}\n onChange={() => handleSelectRow(item[keyField as keyof T])}\n onClick={e => e.stopPropagation()}\n className={styles.checkbox}\n />\n </td>\n )}\n {columns.map(column => (\n <td\n key={column.key}\n className={`${styles.td} ${column.className || ''}`}\n style={{ textAlign: column.align || 'left' }}\n >\n {column.render\n ? column.render(item[column.key as keyof T], item, index)\n : formatValue(item[column.key as keyof T])\n }\n </td>\n ))}\n {rowActions && rowActions.length > 0 && (\n <td\n className={styles.actionsColumn}\n onClick={e => e.stopPropagation()}\n >\n <div className={styles.actionButtons}>\n {rowActions.map((action, actionIndex) => (\n <button\n key={actionIndex}\n className={getButtonClassName(action)}\n style={getButtonStyles(action)}\n onClick={() => action.onClick(item, index)}\n disabled={action.disabled ? action.disabled(item) : false}\n title={action.label}\n aria-label={action.label}\n >\n {action.icon}\n </button>\n ))}\n </div>\n </td>\n )}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n\n {/* Pagination */}\n {pagination && totalPages > 1 && (\n <div className={styles.pagination}>\n <div className={styles.pageInfo}>\n Showing {((currentPage - 1) * pageSize) + 1}-\n {Math.min(currentPage * pageSize, sortedData.length)} of {sortedData.length}\n </div>\n\n <div className={styles.pageControls}>\n <button\n className={styles.pageButton}\n onClick={() => setCurrentPage(1)}\n disabled={currentPage === 1}\n >\n ⟨⟨\n </button>\n <button\n className={styles.pageButton}\n onClick={() => setCurrentPage(prev => Math.max(1, prev - 1))}\n disabled={currentPage === 1}\n >\n ⟨\n </button>\n\n <span className={styles.pageNumber}>\n Page {currentPage} of {totalPages}\n </span>\n\n <button\n className={styles.pageButton}\n onClick={() => setCurrentPage(prev => Math.min(totalPages, prev + 1))}\n disabled={currentPage === totalPages}\n >\n ⟩\n </button>\n <button\n className={styles.pageButton}\n onClick={() => setCurrentPage(totalPages)}\n disabled={currentPage === totalPages}\n >\n ⟩⟩\n </button>\n </div>\n\n {typeof pagination === 'object' && (\n <select\n className={styles.pageSizeSelect}\n value={pageSize}\n onChange={e => {\n setPageSize(Number(e.target.value))\n setCurrentPage(1)\n }}\n >\n {pageSizeOptions.map(size => (\n <option key={size} value={size}>\n {size} per page\n </option>\n ))}\n </select>\n )}\n </div>\n )}\n </div>\n )\n}\n\n// Helper function to format values\nfunction formatValue(value: unknown): ReactNode {\n if (value === null || value === undefined) {\n return <span className={styles.nullValue}>—</span>\n }\n\n if (typeof value === 'boolean') {\n return (\n <span className={`${styles.badge} ${value ? styles.badgeSuccess : styles.badgeDanger}`}>\n {value ? '✓' : '✗'}\n </span>\n )\n }\n\n if (value instanceof Date) {\n return value.toLocaleDateString()\n }\n\n if (typeof value === 'object') {\n return <code className={styles.code}>{JSON.stringify(value, null, 2)}</code>\n }\n\n return String(value)\n}\n\n// Memoized Table component to prevent unnecessary re-renders\nexport const Table = memo(TableComponent) as <T extends object>(\n props: TableProps<T>\n) => JSX.Element\n","import React from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { Button } from '../../atoms/Button/Button';\nimport styles from './ConfirmationModal.module.css';\n\nexport interface ConfirmationModalProps {\n isOpen: boolean;\n onClose: () => void;\n onConfirm: () => void;\n title: string;\n message: string;\n confirmText?: string;\n cancelText?: string;\n isLoading?: boolean;\n variant?: 'danger' | 'warning' | 'info';\n}\n\n/**\n * ConfirmationModal Component\n *\n * A specialized modal for confirm/cancel flows with variant styling.\n *\n * @example\n * <ConfirmationModal\n * isOpen={showDelete}\n * onClose={() => setShowDelete(false)}\n * onConfirm={handleDelete}\n * title=\"Delete item?\"\n * message=\"This action cannot be undone.\"\n * variant=\"danger\"\n * confirmText=\"Delete\"\n * />\n */\nexport const ConfirmationModal: React.FC<ConfirmationModalProps> = ({\n isOpen,\n onClose,\n onConfirm,\n title,\n message,\n confirmText = 'Confirm',\n cancelText = 'Cancel',\n isLoading = false,\n variant = 'info',\n}) => {\n const handleConfirm = (e: React.MouseEvent) => {\n if (!isLoading) {\n e.preventDefault();\n e.stopPropagation();\n onConfirm();\n }\n };\n\n return (\n <AnimatePresence>\n {isOpen && (\n <>\n <motion.div\n className={styles.overlay}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n onClick={!isLoading ? onClose : undefined}\n />\n <div className={styles.positioner}>\n <motion.div\n className={styles.modal}\n initial={{ opacity: 0, scale: 0.9, y: 20 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.9, y: 20 }}\n transition={{ type: 'spring', stiffness: 300, damping: 30 }}\n >\n <div className={`${styles.header} ${styles[variant]}`}>\n <h2 className={styles.title}>{title}</h2>\n {!isLoading && (\n <button\n className={styles.closeButton}\n onClick={onClose}\n type=\"button\"\n aria-label=\"Close\"\n >\n &#x2715;\n </button>\n )}\n </div>\n\n <div className={styles.content}>\n <p className={styles.message}>{message}</p>\n </div>\n\n <div className={styles.footer}>\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={onClose}\n disabled={isLoading}\n >\n {cancelText}\n </Button>\n <Button\n type=\"button\"\n variant={variant === 'danger' ? 'danger' : 'primary'}\n onClick={handleConfirm}\n disabled={isLoading}\n loading={isLoading}\n >\n {confirmText}\n </Button>\n </div>\n </motion.div>\n </div>\n </>\n )}\n </AnimatePresence>\n );\n};\n"],"names":["useRef","useEffect","useCallback","styles","_jsxs","motion","_jsx","useState","AnimatePresence","useDragControls","createPortal","X","CalendarIcon","ChevronDown","Search","Check","Edit","Folder","Users","Book","MessageSquare","UserPlus","createTheme","useMemo","ThemeProvider","LocalizationProvider","AdapterDayjs","MobileTimePicker","createContext","useContext","Sun","Moon","Info","Github","SquareKanban","ChevronRight","Plus","_Fragment","RRule","MONTHS","Terminal","FileText","Pencil","FilePlus","FolderSearch","Brain","Play","Loader2","AlertTriangle","useMotionValue","useTransform","animate","Trash2","GripVertical","Download","Fragment","Menu","useId","d3","DEFAULT_HABIT_COLORS","Calendar","CalendarDays","CalendarRange","BarChart3","Divide","Sigma","formatTime","ScatterChart","formatDuration","ChevronLeft","Maximize","Share2","Pause","LayoutGroup","memo"],"mappings":"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"}