@stfrigerio/sito-template 0.1.37 → 0.1.39
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.
- package/dist/components/organisms/Navbar/Navbar.d.ts.map +1 -1
- package/dist/index.esm.js +76 -18
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +76 -18
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/styles.css.map +1 -1
- package/package.json +2 -2
- package/storybook-static/assets/3d/bar.glb +0 -0
- package/storybook-static/assets/3d/cube.glb +0 -0
- package/storybook-static/assets/3d/lens.glb +0 -0
- package/storybook-static/assets/ASCIIText.stories-C2xDENP3.js +82 -0
- package/storybook-static/assets/AllAtoms.stories-B6sDWol9.js +109 -0
- package/storybook-static/assets/AnimatedContent.stories-BsmULV3s.js +18 -0
- package/storybook-static/assets/AnimatedList-B3_lNwJZ.css +1 -0
- package/storybook-static/assets/AnimatedList.stories-CpaOS5Tg.js +26 -0
- package/storybook-static/assets/Antigravity.stories-Bt6bMzsu.js +19 -0
- package/storybook-static/assets/ArrayInput.stories-DWAGBtBK.js +232 -0
- package/storybook-static/assets/Aurora-JSo3CGBi.css +1 -0
- package/storybook-static/assets/Aurora.stories-D2saYiRk.js +97 -0
- package/storybook-static/assets/Beams-BaZopjLr.css +1 -0
- package/storybook-static/assets/Beams.stories-BnM_wPsm.js +122 -0
- package/storybook-static/assets/BlobCursor-sr9FxN5W.css +1 -0
- package/storybook-static/assets/BlobCursor.stories-DDxFJs49.js +24 -0
- package/storybook-static/assets/BlurText.stories-Bpt2Pxty.js +11 -0
- package/storybook-static/assets/{BooleansHeatmap.stories-2u4SThph.js → BooleansHeatmap.stories-3npXygec.js} +8 -8
- package/storybook-static/assets/BorderGlow-BkXv9hP6.css +1 -0
- package/storybook-static/assets/BorderGlow.stories-Ctdci-vM.js +15 -0
- package/storybook-static/assets/BubbleMenu-C856-Amm.css +1 -0
- package/storybook-static/assets/BubbleMenu.stories-D0BfU9Sn.js +57 -0
- package/storybook-static/assets/{Button-VfdDKp2T.js → Button-Bkr9S309.js} +2 -2
- package/storybook-static/assets/Button.stories-9jnfGkHf.js +93 -0
- package/storybook-static/assets/Calendar-BSjjdOp3.css +1 -0
- package/storybook-static/assets/Calendar.stories-Bv76X2vb.js +470 -0
- package/storybook-static/assets/Camera-BM3HOhP6.js +1 -0
- package/storybook-static/assets/Card-BLzDBn78.js +49 -0
- package/storybook-static/assets/Card-BxyVZ-1r.css +1 -0
- package/storybook-static/assets/Card.stories-BbHJW4z7.js +127 -0
- package/storybook-static/assets/CardNav-DJBuAE3a.css +1 -0
- package/storybook-static/assets/CardNav.stories-0AGDiezF.js +55 -0
- package/storybook-static/assets/Carousel-DQYq51gd.css +1 -0
- package/storybook-static/assets/Carousel.stories-TJ2kpedN.js +58 -0
- package/storybook-static/assets/{Checkbox-BHwlDfRP.js → Checkbox-CpADrZij.js} +2 -2
- package/storybook-static/assets/{Checkbox.stories-DxTQrFgm.js → Checkbox.stories-RTwjfwnG.js} +2 -2
- package/storybook-static/assets/ChromaGrid-DuVAYWII.css +1 -0
- package/storybook-static/assets/ChromaGrid.stories-BQ3E28Hi.js +59 -0
- package/storybook-static/assets/CircularGallery-Dw0kM5fT.css +1 -0
- package/storybook-static/assets/CircularGallery.stories-DJqMMKX-.js +95 -0
- package/storybook-static/assets/CircularText-DofQkQcn.css +1 -0
- package/storybook-static/assets/CircularText.stories-BFdO2vvu.js +7 -0
- package/storybook-static/assets/ClickSpark.stories-C9eRAhrL.js +12 -0
- package/storybook-static/assets/Color-AVL7NMMY-_tP8XmFH.js +1 -0
- package/storybook-static/assets/Color-YRkaOI4u.js +1 -0
- package/storybook-static/assets/ColorBends-BkbPScKk.css +1 -0
- package/storybook-static/assets/ColorBends.stories-BzjHvboa.js +103 -0
- package/storybook-static/assets/CountUp.stories-C4KGivWd.js +11 -0
- package/storybook-static/assets/Counter-NM41Ofe9.css +1 -0
- package/storybook-static/assets/Counter.stories-D0YBBEvJ.js +15 -0
- package/storybook-static/assets/Crosshair.stories-DM0VkVrQ.js +6 -0
- package/storybook-static/assets/Cubes-BbZLRUsz.css +1 -0
- package/storybook-static/assets/Cubes.stories-CDK6pjAy.js +1 -0
- package/storybook-static/assets/CurvedLoop-DyoDI-mm.css +1 -0
- package/storybook-static/assets/CurvedLoop.stories-gsnw1c_E.js +9 -0
- package/storybook-static/assets/DarkVeil-CeIthsg1.css +1 -0
- package/storybook-static/assets/DarkVeil.stories-C5L7QoIF.js +79 -0
- package/storybook-static/assets/DateInput-DDPZqyBR.js +38 -0
- package/storybook-static/assets/{DateInput.stories-BGB5zJBm.js → DateInput.stories-B2N9buuW.js} +2 -2
- package/storybook-static/assets/DecayCard-2Nc9J_8G.css +1 -0
- package/storybook-static/assets/DecayCard.stories-YGHrmyBt.js +8 -0
- package/storybook-static/assets/DecryptedText.stories-B5x1eEwu.js +15 -0
- package/storybook-static/assets/Dither-CDTFjgCl.css +1 -0
- package/storybook-static/assets/Dither.stories-1NJxvHAv.js +134 -0
- package/storybook-static/assets/Dock-DwLYexgF.css +1 -0
- package/storybook-static/assets/Dock.stories-BkL_Ddtn.js +40 -0
- package/storybook-static/assets/{DocsRenderer-PQXLIZUC-q9kcQxfH.js → DocsRenderer-PQXLIZUC-e7izZ1Ax.js} +8 -8
- package/storybook-static/assets/{EditFAB.stories-CmfJxWns.js → EditFAB.stories-CHva2s7W.js} +12 -42
- package/storybook-static/assets/EvilEye-QIF3Ik1Y.css +1 -0
- package/storybook-static/assets/EvilEye.stories-QosS4nGr.js +103 -0
- package/storybook-static/assets/FadeContent.stories-CQDQC3hl.js +14 -0
- package/storybook-static/assets/FaultyTerminal-D6zQXJ-g.css +1 -0
- package/storybook-static/assets/FaultyTerminal.stories-CPrObG0w.js +224 -0
- package/storybook-static/assets/Fbo-CjO1EXQj.js +1 -0
- package/storybook-static/assets/FloatingLines-BPpNRsJk.css +1 -0
- package/storybook-static/assets/FloatingLines.stories-D3I_iw-g.js +187 -0
- package/storybook-static/assets/FlowingMenu-Cff-letA.css +1 -0
- package/storybook-static/assets/FlowingMenu.stories-BmR27_hE.js +27 -0
- package/storybook-static/assets/FluidGlass.stories-CrjfBTV6.js +490 -0
- package/storybook-static/assets/Folder-BFuU52Ao.css +1 -0
- package/storybook-static/assets/Folder.stories-DQJN6c0j.js +13 -0
- package/storybook-static/assets/FuzzyText.stories-zdwwY1Eh.js +22 -0
- package/storybook-static/assets/Galaxy-Cj2Xx-fN.css +1 -0
- package/storybook-static/assets/Galaxy.stories-B3moXy9j.js +184 -0
- package/storybook-static/assets/GhostCursor-CLKgvqwd.css +1 -0
- package/storybook-static/assets/GhostCursor.stories-l58_4Z7e.js +276 -0
- package/storybook-static/assets/GlareHover-D8gfoeb7.css +1 -0
- package/storybook-static/assets/GlareHover.stories-BRGDypMB.js +1 -0
- package/storybook-static/assets/GlassSurface-D51dj98P.css +1 -0
- package/storybook-static/assets/GlassSurface.stories-BghO_KVP.js +43 -0
- package/storybook-static/assets/GlitchText-CsL0nL6_.css +1 -0
- package/storybook-static/assets/GlitchText.stories-rGZAjXwr.js +8 -0
- package/storybook-static/assets/GooeyNav-8BBsSYWJ.css +1 -0
- package/storybook-static/assets/GooeyNav.stories-Ca-d0UXQ.js +24 -0
- package/storybook-static/assets/GradientBlinds-CBpfmlwu.css +1 -0
- package/storybook-static/assets/GradientBlinds.stories-BQDyziZr.js +136 -0
- package/storybook-static/assets/GradientText-Bsx4jZeS.css +1 -0
- package/storybook-static/assets/GradientText.stories-DgmckSCu.js +11 -0
- package/storybook-static/assets/Grainient.stories-8y3SuU8n.js +113 -0
- package/storybook-static/assets/GridMotion-GSkrJvrd.css +1 -0
- package/storybook-static/assets/GridMotion.stories-DbXQdTvS.js +6 -0
- package/storybook-static/assets/ImageSlideshow-CrquLxbj.css +1 -0
- package/storybook-static/assets/ImageSlideshow.stories-BXFPrrNl.js +385 -0
- package/storybook-static/assets/Iridescence-DkXB1G15.css +1 -0
- package/storybook-static/assets/Iridescence.stories-DuPTQ9Fo.js +47 -0
- package/storybook-static/assets/LaserFlow-YpDTX0s9.css +1 -0
- package/storybook-static/assets/LaserFlow.stories-DkwNBv4p.js +253 -0
- package/storybook-static/assets/LetterGlitch.stories-BqwpeJRY.js +1 -0
- package/storybook-static/assets/LightPillar-B1pSzH3x.css +1 -0
- package/storybook-static/assets/LightPillar.stories-BR4beWO5.js +103 -0
- package/storybook-static/assets/LightRays.stories-B3LIIkr4.js +114 -0
- package/storybook-static/assets/Lightning-Duov5diw.css +1 -0
- package/storybook-static/assets/Lightning.stories-DMfFw1rE.js +92 -0
- package/storybook-static/assets/LineWaves-CGZ5Tp0W.css +1 -0
- package/storybook-static/assets/LineWaves.stories-1wQVWsio.js +132 -0
- package/storybook-static/assets/LiquidChrome-C8jkHJD4.css +1 -0
- package/storybook-static/assets/LiquidChrome.stories-DjaXtUK6.js +60 -0
- package/storybook-static/assets/LiquidEther-BTKKmNQk.css +1 -0
- package/storybook-static/assets/LiquidEther.stories-CBrhorPT.js +161 -0
- package/storybook-static/assets/LoadingSpinner-1jvNgxlI.css +1 -0
- package/storybook-static/assets/LoadingSpinner-Cz1P0luX.js +49 -0
- package/storybook-static/assets/LoadingSpinner.stories-Es0dDszY.js +169 -0
- package/storybook-static/assets/MagicRings-B15iCWeD.css +1 -0
- package/storybook-static/assets/MagicRings.stories-BeLXvBv9.js +81 -0
- package/storybook-static/assets/Magnet.stories-CICXGf2j.js +12 -0
- package/storybook-static/assets/MagnetLines-BMVF8tvL.css +1 -0
- package/storybook-static/assets/MagnetLines.stories-D6mS1H0S.js +1 -0
- package/storybook-static/assets/Masonry-JijTuZ6o.css +1 -0
- package/storybook-static/assets/Masonry.stories-DeNkhLqR.js +53 -0
- package/storybook-static/assets/Mesh-CwXV3WjE.js +7 -0
- package/storybook-static/assets/MetaBalls-Do7Vo_Ig.css +1 -0
- package/storybook-static/assets/MetaBalls.stories-CJw3g9l_.js +63 -0
- package/storybook-static/assets/MetallicPaint-rQ3s8Y0v.css +1 -0
- package/storybook-static/assets/MetallicPaint.stories-DXrEd8Sz.js +159 -0
- package/storybook-static/assets/MoodChart.stories-DYRAoHr7.js +40 -0
- package/storybook-static/assets/MotionConfigContext-C_Ro_xsO.js +1 -0
- package/storybook-static/assets/Navbar-BPWxCB-U.css +1 -0
- package/storybook-static/assets/Navbar.stories-B0_sa2Hr.js +325 -0
- package/storybook-static/assets/Noise-wMLTuki1.css +1 -0
- package/storybook-static/assets/Noise.stories-CFYN81ep.js +9 -0
- package/storybook-static/assets/NumberStepper-CWsYbCdm.js +110 -0
- package/storybook-static/assets/NumberStepper-C_00aeJp.css +1 -0
- package/storybook-static/assets/NumberStepper.stories-DtsWeT0-.js +436 -0
- package/storybook-static/assets/Orb-CS8T832d.css +1 -0
- package/storybook-static/assets/Orb.stories-CDw4x9GM.js +177 -0
- package/storybook-static/assets/OrbitImages-DqsOGdeH.css +1 -0
- package/storybook-static/assets/OrbitImages.stories-DLeS6BKi.js +26 -0
- package/storybook-static/assets/PieChart.stories-ByeJD3jM.js +199 -0
- package/storybook-static/assets/PixelBlast-xjKshbH4.css +1 -0
- package/storybook-static/assets/PixelBlast.stories-DZHlNBbC.js +211 -0
- package/storybook-static/assets/PixelCard-dyv8Jzsb.css +1 -0
- package/storybook-static/assets/PixelCard.stories-DD3uedTX.js +6 -0
- package/storybook-static/assets/PixelSnow-Mq8jFd6s.css +1 -0
- package/storybook-static/assets/PixelSnow.stories-GOOKq9Jo.js +155 -0
- package/storybook-static/assets/PixelTransition-4YlpcBIO.css +1 -0
- package/storybook-static/assets/PixelTransition.stories-7l0r4CEg.js +27 -0
- package/storybook-static/assets/Plasma-hc6I4S4K.css +1 -0
- package/storybook-static/assets/Plasma.stories-BNQMi2qs.js +78 -0
- package/storybook-static/assets/Prism-1A7MRUuH.css +1 -0
- package/storybook-static/assets/Prism.stories-DD-1CeHx.js +121 -0
- package/storybook-static/assets/PrismaticBurst-CJEX1JKp.css +1 -0
- package/storybook-static/assets/PrismaticBurst.stories-Bgr0PBrA.js +170 -0
- package/storybook-static/assets/ProfileCard-CO0Gk0e9.css +1 -0
- package/storybook-static/assets/ProfileCard.stories-DAHKcZT1.js +15 -0
- package/storybook-static/assets/QuantifiableHabitsChart-Bam6n9X_.css +1 -0
- package/storybook-static/assets/QuantifiableHabitsChart.stories-6RkqSLP7.js +105 -0
- package/storybook-static/assets/Radar-xwRKh0lP.css +1 -0
- package/storybook-static/assets/Radar.stories-BFyFeDmo.js +88 -0
- package/storybook-static/assets/Ribbons-CjSeVzzZ.css +1 -0
- package/storybook-static/assets/Ribbons.stories-D20uKPGq.js +132 -0
- package/storybook-static/assets/RippleGrid-NvomE-YP.css +1 -0
- package/storybook-static/assets/RippleGrid.stories-BKV-9TCI.js +113 -0
- package/storybook-static/assets/RotatingText-BGK56OzZ.css +1 -0
- package/storybook-static/assets/RotatingText.stories-BnBClUQv.js +12 -0
- package/storybook-static/assets/ScrollFloat-CuaI6iDB.css +1 -0
- package/storybook-static/assets/ScrollFloat.stories-tzqiOgHH.js +12 -0
- package/storybook-static/assets/ScrollReveal-7GSimuFY.css +1 -0
- package/storybook-static/assets/ScrollReveal.stories-4a1gyKmu.js +13 -0
- package/storybook-static/assets/ScrollTrigger-D1XJUMov.js +15 -0
- package/storybook-static/assets/ScrollVelocity-BQllEnJm.css +1 -0
- package/storybook-static/assets/ScrollVelocity.stories-1YFBGtbZ.js +9 -0
- package/storybook-static/assets/{SearchBar.stories-DmHIaDZB.js → SearchBar.stories-T1tR-GmV.js} +30 -15
- package/storybook-static/assets/SearchableDropdown-DhEHRY6d.js +38 -0
- package/storybook-static/assets/{SearchableDropdown.stories-ByZj6lJu.js → SearchableDropdown.stories-E1pMIVn_.js} +8 -8
- package/storybook-static/assets/SelectInput-BrdH7gJ5.js +31 -0
- package/storybook-static/assets/SelectInput.stories-BJ8-v1VC.js +129 -0
- package/storybook-static/assets/ShapeBlur.stories-BD9LHX3y.js +131 -0
- package/storybook-static/assets/ShapeGrid-D5w-KuEm.css +1 -0
- package/storybook-static/assets/ShapeGrid.stories-MtqpqIIh.js +11 -0
- package/storybook-static/assets/ShinyText-D0_UmCBv.css +1 -0
- package/storybook-static/assets/ShinyText.stories-qP5FdChR.js +14 -0
- package/storybook-static/assets/Silk.stories-BHYeNKYP.js +62 -0
- package/storybook-static/assets/SleepChart-DBRb08s_.css +1 -0
- package/storybook-static/assets/SleepChart.stories-BcwHExRn.js +58 -0
- package/storybook-static/assets/Slider-A51SjNTF.js +32 -0
- package/storybook-static/assets/Slider-Bq7zObwV.css +1 -0
- package/storybook-static/assets/Slider.stories-lOqz9gMz.js +99 -0
- package/storybook-static/assets/SoftAurora-2A7ssVQp.css +1 -0
- package/storybook-static/assets/SoftAurora.stories-sSXHgJo6.js +147 -0
- package/storybook-static/assets/SoundDemo.stories-tUFyk4lU.js +3 -0
- package/storybook-static/assets/SplashCursor.stories-DerGqkHm.js +244 -0
- package/storybook-static/assets/SpotlightCard-Bi63T6N0.css +1 -0
- package/storybook-static/assets/SpotlightCard.stories-DBsgFOws.js +6 -0
- package/storybook-static/assets/Stack-CBKeDK5i.css +1 -0
- package/storybook-static/assets/Stack.stories-DAcB1tOU.js +32 -0
- package/storybook-static/assets/StaggeredMenu-DjV6Ra1C.css +1 -0
- package/storybook-static/assets/StaggeredMenu.stories-goFBD6nv.js +45 -0
- package/storybook-static/assets/StarBorder-isNlSycS.css +1 -0
- package/storybook-static/assets/StarBorder.stories-DBM6IkZW.js +9 -0
- package/storybook-static/assets/SunburstChart.stories-cY39K-7Q.js +285 -0
- package/storybook-static/assets/Table-DnhtoClE.css +1 -0
- package/storybook-static/assets/Table.stories-rAe1I70z.js +227 -0
- package/storybook-static/assets/Tabs.stories-D3bsFZfU.js +64 -0
- package/storybook-static/assets/TargetCursor-CWS-TuGF.css +1 -0
- package/storybook-static/assets/TargetCursor.stories-uvcMTfQh.js +9 -0
- package/storybook-static/assets/TextArea-CbqMjFCN.js +28 -0
- package/storybook-static/assets/{TextArea.stories-CCqRRpwq.js → TextArea.stories-CuMypTf4.js} +18 -8
- package/storybook-static/assets/TextCursor-DDqF-3pV.css +1 -0
- package/storybook-static/assets/TextCursor.stories-Bu6iMunU.js +11 -0
- package/storybook-static/assets/TextInput-BpsPIO3D.js +28 -0
- package/storybook-static/assets/{TextInput.stories-CtvOb60q.js → TextInput.stories-C0oXgEQ2.js} +7 -7
- package/storybook-static/assets/TextPressure.stories-DNGUmrTD.js +47 -0
- package/storybook-static/assets/TextType-BYHLKnc2.css +1 -0
- package/storybook-static/assets/TextType.stories-BKNycUNL.js +19 -0
- package/storybook-static/assets/Texture-BkQWYNP2.js +1 -0
- package/storybook-static/assets/ThemeSwitcher.stories-D5lsOFPy.js +62 -0
- package/storybook-static/assets/Threads-C5ItmUMV.css +1 -0
- package/storybook-static/assets/Threads.stories-VyvPNiLc.js +121 -0
- package/storybook-static/assets/TimeInput.stories-BC5vDv_Y.js +55 -0
- package/storybook-static/assets/Toggle-BZxwy2el.js +41 -0
- package/storybook-static/assets/Toggle.stories-VQMzqzt7.js +199 -0
- package/storybook-static/assets/ToggleButton-CijvK4iQ.js +32 -0
- package/storybook-static/assets/ToggleButton-DJU3CV_i.css +1 -0
- package/storybook-static/assets/ToggleButton.stories-DY0c1Gny.js +163 -0
- package/storybook-static/assets/Triangle-64ffRKNB.js +1 -0
- package/storybook-static/assets/TrueFocus-C4c7GDsQ.css +1 -0
- package/storybook-static/assets/TrueFocus.stories-DEScRjfz.js +12 -0
- package/storybook-static/assets/VariableProximity-E64p6UBv.css +1 -0
- package/storybook-static/assets/VariableProximity.stories-DbTKbjW_.js +14 -0
- package/storybook-static/assets/Vec2-Cf1C3GIc.js +1 -0
- package/storybook-static/assets/Waves-C7txy_IO.css +1 -0
- package/storybook-static/assets/Waves.stories-tLQsX0Mg.js +1 -0
- package/storybook-static/assets/axis-D3QohQNI.js +1 -0
- package/storybook-static/assets/check-CAskjz10.js +6 -0
- package/storybook-static/assets/chevron-down-BI8IU4ZZ.js +6 -0
- package/storybook-static/assets/chevron-right-DUHx58vO.js +6 -0
- package/storybook-static/assets/client-DFRPWCQR.js +1 -0
- package/storybook-static/assets/createLucideIcon-C7zEcVM7.js +21 -0
- package/storybook-static/assets/demo/cs1.webp +0 -0
- package/storybook-static/assets/demo/cs2.webp +0 -0
- package/storybook-static/assets/demo/cs3.webp +0 -0
- package/storybook-static/assets/folder-CR6tETf-.js +6 -0
- package/storybook-static/assets/iconBase-AISesxwq.js +1 -0
- package/storybook-static/assets/{iframe-BUaP2gIF.js → iframe-Cz1R6gKZ.js} +192 -192
- package/storybook-static/assets/iframe-Df7_64QT.css +1 -0
- package/storybook-static/assets/{index-CBmvvqzc.js → index-C2Ys00st.js} +1 -1
- package/storybook-static/assets/index-C8pce-KX.js +15 -0
- package/storybook-static/assets/index-CIvCfZMj.js +9 -0
- package/storybook-static/assets/index-DcRHiSf7.js +128 -0
- package/storybook-static/assets/index-jFY_uKTI.js +24 -0
- package/storybook-static/assets/layout-grid-CE52it1h.js +6 -0
- package/storybook-static/assets/linear-dkJHgUri.js +1 -0
- package/storybook-static/assets/{monotone-BYG7Mesf.js → monotone-DHdPkfDP.js} +1 -1
- package/storybook-static/assets/proxy-CAwOFzsk.js +1 -0
- package/storybook-static/assets/react-18-DoKaDswt.js +1 -0
- package/storybook-static/assets/react-three-fiber.esm-t8sCLCER.js +43 -0
- package/storybook-static/assets/search-DcwY6Xta.js +6 -0
- package/storybook-static/assets/sun-DeCJTUMz.js +11 -0
- package/storybook-static/assets/three.module--_vTUKhS.js +4057 -0
- package/storybook-static/assets/{transform-NloTqvdv.js → transform-BKmuZieF.js} +1 -1
- package/storybook-static/assets/use-animation-frame-DhanRv3Z.js +1 -0
- package/storybook-static/assets/use-in-view-D50EZJ4s.js +1 -0
- package/storybook-static/assets/use-motion-value-BgGWOnBX.js +1 -0
- package/storybook-static/assets/use-spring-CKPLi_a5.js +1 -0
- package/storybook-static/assets/use-transform-CJxjUEuh.js +1 -0
- package/storybook-static/assets/useSound-DOpt9DfD.js +1 -0
- package/storybook-static/assets/users-C7jpE6gP.js +6 -0
- package/storybook-static/assets/x-CP8OMUcV.js +6 -0
- package/storybook-static/iframe.html +7 -40
- package/storybook-static/index.json +1 -1
- package/storybook-static/project.json +1 -1
- package/storybook-static/sb-addons/chromatic-com-storybook-4/manager-bundle.js +1 -1
- package/storybook-static/sb-addons/docs-2/manager-bundle.js +2 -2
- package/storybook-static/sb-addons/links-3/manager-bundle.js +1 -1
- package/storybook-static/sb-addons/storybook-5/manager-bundle.js +1 -1
- package/storybook-static/sb-addons/storybook-core-server-presets-0/common-manager-bundle.js +3 -3
- package/storybook-static/assets/AllAtoms.stories-DBoQZmq-.js +0 -109
- package/storybook-static/assets/AnimationPlayer-UXJjBKtF.css +0 -1
- package/storybook-static/assets/AnimationPlayer.stories-yXQ8fqUT.js +0 -379
- package/storybook-static/assets/ArrayInput.stories-CRqKExgm.js +0 -221
- package/storybook-static/assets/Button.stories-BeeBKHoX.js +0 -117
- package/storybook-static/assets/Calendar-BTQfDDfP.css +0 -1
- package/storybook-static/assets/Calendar.stories-CKOG4XAn.js +0 -545
- package/storybook-static/assets/Card-Bc7TyfBx.css +0 -1
- package/storybook-static/assets/Card-D-kcaQHV.js +0 -49
- package/storybook-static/assets/Card.stories-CpcboxKs.js +0 -130
- package/storybook-static/assets/Color-AVL7NMMY-BzNNgCT5.js +0 -1
- package/storybook-static/assets/DateInput-Cu3PZYc0.js +0 -33
- package/storybook-static/assets/MoodChart.stories-V-wKOSu-.js +0 -40
- package/storybook-static/assets/Navbar-B8vEvGnB.css +0 -1
- package/storybook-static/assets/Navbar.stories-Dkf77idX.js +0 -235
- package/storybook-static/assets/NumberStepper-BVHPJutJ.css +0 -1
- package/storybook-static/assets/NumberStepper-BZGlrWCN.js +0 -30
- package/storybook-static/assets/NumberStepper.stories-NZw7r4Oh.js +0 -127
- package/storybook-static/assets/PieChart.stories-BkfNODjW.js +0 -199
- package/storybook-static/assets/QuantifiableHabitsChart-BEfzqND4.css +0 -1
- package/storybook-static/assets/QuantifiableHabitsChart.stories-Df6rcrdD.js +0 -105
- package/storybook-static/assets/SearchableDropdown-ByAXm1md.js +0 -38
- package/storybook-static/assets/SelectInput-D-AwfWVz.js +0 -31
- package/storybook-static/assets/SelectInput.stories-MyE-GqOw.js +0 -112
- package/storybook-static/assets/SleepChart-yGsG5RlQ.css +0 -1
- package/storybook-static/assets/SleepChart.stories-Dsz1U6F9.js +0 -58
- package/storybook-static/assets/SunburstChart.stories-CphfyDsR.js +0 -285
- package/storybook-static/assets/Tabs.stories-c24Ffu3K.js +0 -49
- package/storybook-static/assets/TextArea-B_sATPlw.js +0 -28
- package/storybook-static/assets/TextInput-ZGg8LTL_.js +0 -28
- package/storybook-static/assets/ThemeSwitcher.stories-BvkX1SDm.js +0 -62
- package/storybook-static/assets/TimeInput.stories-BchhRfKo.js +0 -50
- package/storybook-static/assets/Toggle-BQ2KHBDr.js +0 -39
- package/storybook-static/assets/Toggle.stories-BUSZc6m3.js +0 -194
- package/storybook-static/assets/ToggleButton-Dl6hvkJv.js +0 -32
- package/storybook-static/assets/ToggleButton-gfPoPxTQ.css +0 -1
- package/storybook-static/assets/ToggleButton.stories-BKN4zU3N.js +0 -143
- package/storybook-static/assets/iframe-BOc1hSA-.css +0 -1
- package/storybook-static/assets/index-5bdJXrkD.js +0 -1
- package/storybook-static/assets/index-CZs7_DA6.js +0 -9
- package/storybook-static/assets/linear-4t_RuQok.js +0 -1
- package/storybook-static/assets/proxy-9Y4F2rF8.js +0 -1
- package/storybook-static/assets/react-18-D4c-_GAk.js +0 -24
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.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/TimePickerModal.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/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/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';\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\t\n\tconst buttonClasses = [\n\t\tstyles.button,\n\t\tstyles[variant],\n\t\tstyles[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={{ scale: disabled || loading ? 1 : 1.02 }}\n\t\t\twhileTap={{ scale: disabled || loading ? 1 : 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 } from 'react';\nimport { createPortal } from 'react-dom';\nimport { motion, AnimatePresence } 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}\n\n/**\n * Modal Component\n *\n * @component\n * @description\n * An accessible overlay dialog with a backdrop, title header, optional\n * header actions, and a flexible body. Renders into a React portal on\n * `document.body`, animates in/out with Framer Motion, closes on Escape\n * key or backdrop click, and clicks inside the dialog don't propagate\n * to the backdrop.\n *\n * @example\n * // Basic usage\n * <Modal open={isOpen} title=\"Confirm\" onClose={() => setIsOpen(false)}>\n * <p>Are you sure?</p>\n * </Modal>\n *\n * @example\n * // With header actions and wide size\n * <Modal\n * open={isOpen}\n * title=\"Edit profile\"\n * size=\"wide\"\n * actions={<button onClick={save}>Save</button>}\n * onClose={handleClose}\n * >\n * <ProfileForm />\n * </Modal>\n *\n * @example\n * // Flush body (no padding) for editors and full-bleed content\n * <Modal open={isOpen} title=\"Document\" padding={false} onClose={handleClose}>\n * <DocEditor content={content} onSave={save} />\n * </Modal>\n *\n * @param {ModalProps} props - The props for the Modal component\n * @returns {React.ReactPortal | null} A portal rendering the modal, or null on the server\n */\nexport const Modal: React.FC<ModalProps> = ({\n\topen,\n\ttitle,\n\tonClose,\n\tchildren,\n\tsize = 'default',\n\tactions,\n\tpadding = true,\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 dialogClass = [\n\t\tstyles.dialog,\n\t\tsize === 'compact' && styles.dialogCompact,\n\t\tsize === 'wide' && styles.dialogWide,\n\t]\n\t\t.filter(Boolean)\n\t\t.join(' ');\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={styles.backdrop}\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\tinitial={{ opacity: 0, scale: 0.96, y: 8 }}\n\t\t\t\t\t\tanimate={{ opacity: 1, scale: 1, y: 0 }}\n\t\t\t\t\t\texit={{ opacity: 0, scale: 0.96, y: 8 }}\n\t\t\t\t\t\ttransition={{ duration: 0.15, ease: 'easeOut' }}\n\t\t\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className={styles.header}>\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, { useRef } 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\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 * \n * @example\n * // With focus handlers\n * <DateInput\n * label=\"Event Date\"\n * value={eventDate}\n * onChange={setEventDate}\n * onFocus={() => console.log('Focused')}\n * onBlur={() => validateDate(eventDate)}\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 hiddenDateInputRef = useRef<HTMLInputElement>(null);\n const { handlers, playSound } = useComponentSound(soundConfig);\n\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 handleCalendarClick = () => {\n playSound('click');\n // Set the hidden input to current value for calendar\n if (hiddenDateInputRef.current) {\n // If value is already ISO format, use it directly\n // If it's European format, convert it\n const isoDate = value.includes('-') ? value : parseEuropeanDate(value);\n if (isoDate) {\n hiddenDateInputRef.current.value = isoDate;\n }\n // Try showPicker first (modern browsers), fallback to click\n if (hiddenDateInputRef.current.showPicker) {\n hiddenDateInputRef.current.showPicker();\n } else {\n hiddenDateInputRef.current.click();\n }\n }\n };\n\n const handleCalendarChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const isoDate = e.target.value;\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 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 <button\n type=\"button\"\n onClick={handleCalendarClick}\n className={styles.calendarButton}\n title=\"Select date from calendar\"\n disabled={disabled || loading}\n >\n <CalendarIcon />\n </button>\n <input\n ref={hiddenDateInputRef}\n type=\"date\"\n onChange={handleCalendarChange}\n className={styles.hiddenDateInput}\n tabIndex={-1}\n disabled={disabled || loading}\n />\n </div>\n </div>\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';\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}) => {\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 // 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};","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, useRef } 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 /** Custom animations */\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 value display */\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 /** Tooltip configuration */\n showTooltip?: boolean;\n /** Custom tooltip content */\n tooltipContent?: (value: number) => string;\n /** Sound configuration for interactions */\n soundConfig?: ComponentSoundConfig;\n}\n\n/**\n * Slider component - A beautiful, animated range input\n * \n * @component\n * @description\n * A highly customizable slider component with smooth Framer Motion animations,\n * dynamic coloring, custom labels, tooltips, and theme support. Perfect for\n * ratings, volume controls, progress indicators, or any numeric input.\n * \n * @example\n * // Basic usage\n * <Slider\n * value={rating}\n * onChange={setRating}\n * min={1}\n * max={10}\n * showValue\n * />\n * \n * @example\n * // Rating slider with emojis\n * <Slider\n * value={mood}\n * onChange={setMood}\n * min={1}\n * max={5}\n * labels={[\n * { label: '😢', position: 'start' },\n * { label: '😐', position: 50 },\n * { label: '😊', position: 'end' }\n * ]}\n * colorFunction={(val) => `hsl(${val * 24}, 70%, 50%)`}\n * />\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}: SliderProps) {\n const { handlers, playSound } = useComponentSound(soundConfig);\n const [isDragging, setIsDragging] = useState(false);\n const [showTooltipState, setShowTooltipState] = useState(false);\n const sliderRef = useRef<HTMLDivElement>(null);\n \n const {\n colors = {},\n size = 'md',\n animations = {}\n } = config;\n \n const {\n duration = 0.2\n } = animations;\n \n // Calculate percentage\n const percentage = ((value - min) / (max - min)) * 100;\n \n // Get dynamic color\n const getDynamicColor = () => {\n if (colorFunction) return colorFunction(value);\n if (colors.fill) return colors.fill;\n return `hsl(${percentage * 1.2}, 70%, 50%)`;\n };\n \n // Format value display\n const formatValue = (val: number) => {\n if (valueFormatter) return valueFormatter(val);\n return `${val}${max <= 10 ? `/${max}` : ''}`;\n };\n \n // Handle slider change\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 // Handle mouse events for enhanced interactions\n const handleMouseDown = () => {\n setIsDragging(true);\n if (showTooltip) setShowTooltipState(true);\n };\n \n const handleMouseUp = () => {\n setIsDragging(false);\n if (showTooltip) {\n setTimeout(() => setShowTooltipState(false), 500);\n }\n };\n \n const handleMouseEnter = () => {\n if (showTooltip && !disabled) setShowTooltipState(true);\n };\n \n const handleMouseLeave = () => {\n if (showTooltip && !isDragging) setShowTooltipState(false);\n };\n \n const dynamicColor = getDynamicColor();\n const sizeClass = styles[`size-${size}`];\n const stateClass = disabled ? styles.disabled : loading ? styles.loading : '';\n \n if (loading) {\n return (\n <div className={`${styles.slider} ${sizeClass} ${styles.loading} ${className}`} style={style}>\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={{ \n repeat: Infinity, \n duration: 1.5,\n ease: \"easeInOut\"\n }}\n />\n </div>\n </div>\n );\n }\n \n return (\n <div className={`${styles.slider} ${sizeClass} ${stateClass} ${className}`} style={style}>\n {label && (\n <motion.label \n className={styles.label}\n initial={{ opacity: 0, y: -10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.3 }}\n >\n {label}\n </motion.label>\n )}\n \n <motion.div \n className={styles.sliderContainer}\n ref={sliderRef}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n whileHover={{ scale: 1.02 }}\n transition={{ duration: 0.1 }}\n >\n <motion.div \n className={styles.track}\n whileHover={{ height: 8, marginTop: -1 }}\n transition={{ duration: 0.1 }}\n >\n <motion.div \n className={styles.fill}\n style={{ \n width: `${percentage}%`,\n backgroundColor: dynamicColor\n }}\n initial={{ width: 0 }}\n animate={{ width: `${percentage}%` }}\n transition={{ \n duration,\n type: \"spring\",\n stiffness: 300,\n damping: 30\n }}\n whileHover={{ \n boxShadow: `inset 0 0 0 1px rgba(255,255,255,0.2)`\n }}\n />\n </motion.div>\n \n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={value}\n onChange={handleChange}\n onMouseDown={handleMouseDown}\n onMouseUp={handleMouseUp}\n {...handlers}\n className={styles.input}\n disabled={disabled}\n aria-label={label}\n />\n \n <motion.div \n className={styles.thumb}\n style={{\n left: `${percentage}%`,\n backgroundColor: dynamicColor,\n borderColor: colors.thumb || dynamicColor\n }}\n animate={{\n scale: isDragging ? 1.3 : 1,\n boxShadow: isDragging \n ? `0 0 20px ${dynamicColor}40`\n : `0 2px 8px ${dynamicColor}30`\n }}\n transition={{ \n duration: 0.1,\n type: \"spring\",\n stiffness: 400,\n damping: 25\n }}\n whileHover={{ \n scale: 1.1,\n transition: { duration: 0.1 }\n }}\n >\n {isDragging && (\n <motion.div\n className={styles.ripple}\n initial={{ scale: 0, opacity: 0.6 }}\n animate={{ scale: 2, opacity: 0 }}\n transition={{ duration: 0.5 }}\n />\n )}\n </motion.div>\n \n {/* Tooltip */}\n <AnimatePresence>\n {showTooltipState && (\n <motion.div\n className={styles.tooltip}\n style={{ \n left: `${percentage}%`,\n backgroundColor: dynamicColor\n }}\n initial={{ opacity: 0, y: 10, scale: 0.8 }}\n animate={{ opacity: 1, y: 0, scale: 1 }}\n exit={{ opacity: 0, y: 10, scale: 0.8 }}\n transition={{ duration: 0.2 }}\n >\n {tooltipContent ? tooltipContent(value) : formatValue(value)}\n <div className={styles.tooltipArrow} style={{ borderTopColor: dynamicColor }} />\n </motion.div>\n )}\n </AnimatePresence>\n </motion.div>\n \n {/* Value Display */}\n {showValue && (\n <motion.div \n className={styles.valueDisplay}\n style={{ color: dynamicColor }}\n key={value}\n initial={{ scale: 0.8 }}\n animate={{ scale: 1 }}\n transition={{ \n duration: 0.2,\n type: \"spring\",\n stiffness: 300\n }}\n >\n {formatValue(value)}\n </motion.div>\n )}\n \n {/* Labels */}\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') position = labelConfig.position;\n \n return (\n <motion.div\n key={index}\n className={styles.labelItem}\n style={{ \n left: `${position}%`,\n color: labelConfig.color\n }}\n initial={{ opacity: 0, y: 5 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ \n duration: 0.3, \n delay: index * 0.1\n }}\n whileHover={{ \n scale: 1.2,\n transition: { duration: 0.1 }\n }}\n >\n {labelConfig.label}\n </motion.div>\n );\n })}\n </div>\n )}\n </div>\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 { useState, useEffect } from \"react\";\nimport { X } from \"lucide-react\";\nimport styles from \"./TimePickerModal.module.css\";\n\ninterface TimePickerModalProps {\n isOpen: boolean;\n onClose: () => void;\n value: string;\n onChange: (time: string) => void;\n}\n\nexport function TimePickerModal({ isOpen, onClose, value, onChange }: TimePickerModalProps) {\n const [hours, minutes] = value ? value.split(':').map(Number) : [12, 0];\n const [selectedHour, setSelectedHour] = useState(hours);\n const [selectedMinute, setSelectedMinute] = useState(minutes);\n \n useEffect(() => {\n if (value) {\n const [h, m] = value.split(':').map(Number);\n setSelectedHour(h);\n setSelectedMinute(m);\n }\n }, [value]);\n \n const handleConfirm = () => {\n const formattedHour = selectedHour.toString().padStart(2, '0');\n const formattedMinute = selectedMinute.toString().padStart(2, '0');\n onChange(`${formattedHour}:${formattedMinute}`);\n onClose();\n };\n \n if (!isOpen) return null;\n \n return (\n <div className={styles.modalOverlay} onClick={onClose}>\n <div className={styles.modalContent} onClick={(e) => e.stopPropagation()}>\n <div className={styles.modalHeader}>\n <h3>Select Time</h3>\n <button \n className={styles.closeButton} \n onClick={onClose}\n aria-label=\"Close\"\n >\n <X />\n </button>\n </div>\n \n <div className={styles.timeDisplay}>\n {selectedHour.toString().padStart(2, '0')}:{selectedMinute.toString().padStart(2, '0')}\n </div>\n \n <div className={styles.pickerContainer}>\n <div className={styles.pickerColumn}>\n <div className={styles.pickerLabel}>Hours</div>\n <div className={styles.pickerScroll}>\n {Array.from({ length: 24 }, (_, i) => (\n <button\n key={i}\n className={`${styles.pickerItem} ${selectedHour === i ? styles.selected : ''}`}\n onClick={() => setSelectedHour(i)}\n >\n {i.toString().padStart(2, '0')}\n </button>\n ))}\n </div>\n </div>\n \n <div className={styles.pickerDivider}>:</div>\n \n <div className={styles.pickerColumn}>\n <div className={styles.pickerLabel}>Minutes</div>\n <div className={styles.pickerScroll}>\n {Array.from({ length: 60 }, (_, i) => (\n <button\n key={i}\n className={`${styles.pickerItem} ${selectedMinute === i ? styles.selected : ''}`}\n onClick={() => setSelectedMinute(i)}\n >\n {i.toString().padStart(2, '0')}\n </button>\n ))}\n </div>\n </div>\n </div>\n \n <div className={styles.modalActions}>\n <button \n className={styles.cancelButton}\n onClick={onClose}\n >\n Cancel\n </button>\n <button \n className={styles.confirmButton}\n onClick={handleConfirm}\n >\n Confirm\n </button>\n </div>\n </div>\n </div>\n );\n}","import { useState } from \"react\";\nimport { Clock } from \"lucide-react\";\nimport { TimePickerModal } from \"./TimePickerModal\";\nimport styles from \"./TimeInput.module.css\";\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 placeholder = \"14:30\",\n onFocus, \n onBlur,\n error = false,\n success = false,\n loading = false,\n disabled = false,\n required = false,\n className = \"\"\n}: Readonly<TimeInputProps>) {\n const [showPicker, setShowPicker] = useState(false);\n\n const formatTime24 = (time: string) => {\n if (!time) return '';\n \n let cleanTime = time.replace(/[^\\d:]/g, '');\n \n const colonCount = (cleanTime.match(/:/g) || []).length;\n if (colonCount > 1) {\n cleanTime = cleanTime.replace(/:/g, '');\n if (cleanTime.length >= 3) {\n cleanTime = cleanTime.substring(0, 2) + ':' + cleanTime.substring(2);\n }\n }\n \n if (cleanTime.length === 3 && !cleanTime.includes(':')) {\n cleanTime = cleanTime.substring(0, 2) + ':' + cleanTime.substring(2);\n } else if (cleanTime.length === 4 && !cleanTime.includes(':')) {\n cleanTime = cleanTime.substring(0, 2) + ':' + cleanTime.substring(2);\n }\n \n if (cleanTime.includes(':')) {\n const parts = cleanTime.split(':');\n let hours = parts[0];\n let minutes = parts[1] || '';\n \n hours = hours.substring(0, 2);\n \n if (hours.length === 2) {\n const hourNum = parseInt(hours);\n if (hourNum > 23) {\n hours = '23';\n }\n }\n \n minutes = minutes.substring(0, 2);\n \n if (minutes.length === 2) {\n const minNum = parseInt(minutes);\n if (minNum > 59) {\n minutes = '59';\n }\n }\n \n cleanTime = hours + (minutes.length > 0 ? ':' + minutes : ':');\n }\n \n return cleanTime.substring(0, 5);\n };\n\n const handleTextChange = (inputValue: string) => {\n const formattedTime = formatTime24(inputValue);\n onChange(formattedTime);\n };\n\n const handleClockClick = () => {\n if (!disabled && !loading) {\n setShowPicker(true);\n }\n };\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 <>\n <div className={getContainerClassName()}>\n <label className={styles.label}>\n {label}\n {required && <span className={styles.required}>*</span>}\n </label>\n <div className={styles.inputWrapper}>\n <input\n type=\"text\"\n value={value}\n onChange={(e) => handleTextChange(e.target.value)}\n onFocus={onFocus}\n onBlur={onBlur}\n placeholder={placeholder}\n className={styles.textInput}\n maxLength={5}\n disabled={disabled || loading}\n aria-invalid={error}\n aria-required={required}\n inputMode=\"numeric\"\n pattern=\"[0-9:]*\"\n />\n <button\n type=\"button\"\n onClick={handleClockClick}\n className={styles.clockButton}\n title=\"Open time picker\"\n disabled={disabled || loading}\n aria-label=\"Open time picker\"\n >\n <Clock size={20} />\n </button>\n </div>\n </div>\n \n <TimePickerModal\n isOpen={showPicker}\n onClose={() => setShowPicker(false)}\n value={value}\n onChange={onChange}\n />\n </>\n );\n}","import React, { createContext, useContext, useState, useEffect } from 'react';\n\nexport type Theme = 'light' | 'dark' | 'lossito' | 'lossito-dark' | 'dmood' | 'dmood-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', 'dmood', 'dmood-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', 'dmood', 'dmood-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';\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: 'dmood', label: 'Dmood Light', icon: '💙' },\n { value: 'dmood-dark', label: 'Dmood 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 === '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}\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}) => {\n const tabs = customTabs ?? defaultTabs;\n\n return (\n <div className={`${styles.tabs} ${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 { useMemo, useState, useEffect, useRef } from 'react';\nimport { motion } from 'framer-motion';\nimport styles from './Calendar.module.css';\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 time string (e.g., \"14:30\") */\n time?: string;\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 /** 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 /** 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}\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 /** 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}\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 viewMode = 'month',\n initialDate = new Date(),\n config = {},\n className = '',\n style = {},\n loading = false,\n emptyState,\n hideHeader = false\n}: CalendarProps) {\n const [currentDate, setCurrentDate] = useState(initialDate);\n const [currentViewMode, setCurrentViewMode] = useState(viewMode);\n const dayViewScrollRef = useRef<HTMLDivElement>(null);\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 } = config;\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 // Auto-scroll to current time in day view\n useEffect(() => {\n if (currentViewMode === 'day' && dayViewScrollRef.current) {\n // Check if viewing today\n const now = new Date();\n const isToday = currentDate.toDateString() === now.toDateString();\n\n if (isToday) {\n // Calculate scroll position based on current time\n const currentHour = now.getHours();\n const currentMinute = now.getMinutes();\n const minutesSinceMidnight = currentHour * 60 + currentMinute;\n\n // Each hour is 60px, so calculate pixel position\n // Scroll to put current time in the upper third of the view\n const scrollPosition = (minutesSinceMidnight / 60) * 60 - 100; // Subtract 100 to show some context above\n\n // Use setTimeout to ensure DOM is ready\n setTimeout(() => {\n if (dayViewScrollRef.current) {\n dayViewScrollRef.current.scrollTop = Math.max(0, scrollPosition);\n }\n }, 0);\n }\n }\n }, [currentViewMode, currentDate]);\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 const getDayEvents = (day: Date) => {\n const dayEvents = events.filter(event => {\n const eventDate = new Date(event.date);\n return eventDate.toDateString() === day.toDateString();\n });\n \n // Sort events by time in week view\n if (currentViewMode === 'week') {\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 return dayEvents;\n };\n \n const convertTimeToMinutes = (time: string): number => {\n const [hours, minutes] = time.split(':').map(Number);\n return hours * 60 + minutes;\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 handleTimeSlotClick = (hour: number) => {\n if (onTimeSlotClick) {\n // Create a date object with the current date and the clicked hour\n const slotDate = new Date(currentDate);\n slotDate.setHours(hour, 0, 0, 0);\n\n // Format time as HH:00\n const timeString = `${hour.toString().padStart(2, '0')}:00`;\n\n onTimeSlotClick(slotDate, hour, timeString);\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} ${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 <div className={styles.controls}>\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 !== 'day' && (\n <div className={styles.weekDays}>\n {showWeekNumbers && <div className={styles.weekNumberHeader}>Week</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\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 <div className={styles.dayViewScrollContainer} ref={dayViewScrollRef}>\n <div className={styles.dayViewContent}>\n {/* Current time indicator */}\n {(() => {\n const now = new Date();\n const currentHour = now.getHours();\n const currentMinute = now.getMinutes();\n const minutesSinceMidnight = currentHour * 60 + currentMinute;\n const topPosition = (minutesSinceMidnight / 1440) * (24 * 60); // 24 hours * 60px per hour\n \n // Only show if viewing today\n const isToday = currentDate.toDateString() === now.toDateString();\n \n return isToday ? (\n <div \n className={styles.currentTimeIndicator}\n style={{ top: `${topPosition}px` }}\n />\n ) : null;\n })()}\n <div className={styles.timeColumn}>\n {Array.from({ length: 24 }, (_, hour) => (\n <div key={hour} className={styles.timeSlot}>\n <span className={styles.timeLabel}>\n {hour.toString().padStart(2, '0')}:00\n </span>\n </div>\n ))}\n </div>\n <div className={styles.dayColumn}>\n {Array.from({ length: 24 }, (_, hour) => {\n const hourEvents = getDayEvents(currentDate).filter(event => {\n if (!event.time) return false;\n const eventHour = parseInt(event.time.split(':')[0]);\n return eventHour === hour;\n });\n \n return (\n <div\n key={hour}\n className={styles.hourSlot}\n onClick={(e) => {\n // Only trigger if clicking on the slot itself, not on an event\n if (e.target === e.currentTarget ||\n (e.target as HTMLElement).classList.contains(styles.hourLine)) {\n handleTimeSlotClick(hour);\n }\n }}\n style={{ cursor: 'pointer' }}\n >\n <div className={styles.hourLine}></div>\n {hourEvents.map((event, eventIndex) => (\n <motion.div\n key={event.id}\n className={`${styles.dayEvent} ${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.dayEventTitle}>\n <span className={styles.dayEventTime}>\n {event.time}\n </span>\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 </div>\n );\n })}\n </div>\n </div>\n </div>\n </div>\n ) : (\n <div className={`${styles.daysGrid} ${currentViewMode === 'week' ? styles.weekView : ''}`}>\n {calendarData.days.map((day, index) => {\n const dayEvents = getDayEvents(day);\n const dayIsToday = isToday(day);\n const isInCurrentMonth = currentViewMode === 'week' || isCurrentMonth(day);\n const isWeekStart = showWeekNumbers && (index % 7 === 0);\n \n return (\n <motion.div\n key={`${day.getFullYear()}-${day.getMonth()}-${day.getDate()}`}\n className={`${styles.dayCell} ${dayIsToday ? styles.today : ''} ${!isInCurrentMonth ? styles.otherMonth : ''}`}\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 {isWeekStart && (\n <div className={styles.weekNumber}>\n {getWeekNumber(day)}\n </div>\n )}\n <div className={styles.dayNumber}>\n {day.getDate()}\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 )}\n {dayEvents.length === 0 && emptyState && (\n <div className={styles.emptyState}>\n {emptyState}\n </div>\n )}\n </motion.div>\n );\n })}\n </div>\n )}\n </div>\n );\n}","import React, { useState, useEffect, useMemo } 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: string;\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?: string;\n subtitle?: string;\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}\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}) => {\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 screen size changes\n useEffect(() => {\n const handleResize = () => {\n if (window.innerWidth > 768) {\n setIsMobileMenuOpen(false);\n }\n };\n \n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\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 className={`${styles.navIcon} ${item.isActive ? styles.activeIcon : ''}`} />\n )}\n \n <span className={`${styles.navText} ${item.isActive ? styles.activeText : ''}`}>\n {item.label}\n </span>\n \n {item.badge && (\n <span className={styles.navBadge}>{item.badge}</span>\n )}\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 {logo.text?.charAt(0) || 'L'}\n </div>\n )}\n \n {(logo.text || logo.subtitle) && (\n <div className={styles.logoContent}>\n {logo.text && (\n <span className={styles.logoText}>{logo.text}</span>\n )}\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 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 return (\n <>\n {/* Mobile menu button */}\n {(isMobile || window.innerWidth <= 768) && (\n <motion.button\n className={styles.mobileMenuButton}\n onClick={toggleMobileMenu}\n aria-label=\"Toggle navigation menu\"\n whileTap={{ scale: 0.9 }}\n >\n <AnimatePresence mode=\"wait\">\n {isMobileMenuOpen ? (\n <motion.div\n key=\"close\"\n initial={{ rotate: -90, opacity: 0 }}\n animate={{ rotate: 0, opacity: 1 }}\n exit={{ rotate: 90, opacity: 0 }}\n >\n <X />\n </motion.div>\n ) : (\n <motion.div\n key=\"menu\"\n initial={{ rotate: 90, opacity: 0 }}\n animate={{ rotate: 0, opacity: 1 }}\n exit={{ rotate: -90, opacity: 0 }}\n >\n <Menu />\n </motion.div>\n )}\n </AnimatePresence>\n </motion.button>\n )}\n\n {/* Mobile backdrop */}\n <AnimatePresence>\n {isMobileMenuOpen && (\n <motion.div\n className={styles.mobileBackdrop}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n onClick={() => setIsMobileMenuOpen(false)}\n />\n )}\n </AnimatePresence>\n\n {/* Navbar */}\n <motion.nav\n className={`${styles.navbar} ${styles[`navbar${variant.charAt(0).toUpperCase() + variant.slice(1)}`]} ${isMobileMenuOpen ? styles.mobileMenuOpen : ''} ${className}`}\n initial={variant === 'sidebar' ? { x: -300 } : { opacity: 0 }}\n animate={variant === 'sidebar' ? { x: isMobileMenuOpen || !isMobile ? 0 : -300 } : { opacity: 1 }}\n transition={{ type: \"spring\", stiffness: 300, damping: 30 }}\n >\n {navContent}\n </motion.nav>\n </>\n );\n};","import React, { useState, useEffect, useMemo, useRef } 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 [selectedMood, setSelectedMood] = useState<ProcessedMoodData | null>(null)\n const [tooltipPosition, setTooltipPosition] = useState({ x: 0, y: 0 })\n const [isHoveringTooltip, setIsHoveringTooltip] = useState(false)\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 // Parse comma-separated tags\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 ) 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 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 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\n g.append('path')\n .datum(processedData)\n .attr('class', styles.line)\n .attr('d', line)\n\n g.append('g')\n .attr('class', styles.xAxis)\n .attr('transform', `translate(0,${chartHeight})`)\n .call(d3.axisBottom(xScale)\n .tickFormat(d => d3.timeFormat('%m/%d')(d as Date)))\n\n g.append('g')\n .attr('class', styles.yAxis)\n .call(d3.axisLeft(yScale))\n\n 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', 5)\n .attr('fill', d => colorScale(d.rating))\n .style('cursor', 'pointer')\n .on('mouseenter', (event, d) => {\n const rect = svgRef.current?.getBoundingClientRect()\n const containerRect = containerRef.current?.getBoundingClientRect()\n if (rect && containerRect) {\n let x = event.clientX - rect.left + 10\n let y = event.clientY - rect.top - 10\n\n // Check if tooltip would overflow on the right\n const estimatedTooltipWidth = 250 // Approximate tooltip width\n const rightEdgeBuffer = 20 // Buffer from the right edge\n\n if (x + estimatedTooltipWidth > chartWidth + margin.left - rightEdgeBuffer) {\n // Position tooltip to the left of the cursor, but keep it close\n x = event.clientX - rect.left - estimatedTooltipWidth - 10\n // Ensure it doesn't go off the left edge\n if (x < 0) {\n x = 10\n }\n }\n\n // Ensure tooltip doesn't go above the container\n if (y < 0) {\n y = 10\n }\n\n setTooltipPosition({ x, y })\n }\n setSelectedMood(d)\n \n d3.select(event.currentTarget)\n .transition()\n .duration(200)\n .attr('r', 8)\n })\n .on('mouseleave', (event) => {\n // Add delay to allow mouse to move to tooltip\n setTimeout(() => {\n if (!isHoveringTooltip) {\n setSelectedMood(null)\n }\n }, 250)\n\n d3.select(event.currentTarget)\n .transition()\n .duration(200)\n .attr('r', 5)\n })\n\n }, [processedData, chartWidth, chartHeight, colorScale, margin, isHoveringTooltip])\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}","import React, { useState, useEffect, useRef, useMemo, useCallback } from 'react'\nimport * as d3 from 'd3'\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\n// Default colors as fallback\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\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 [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 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 // Hide tooltip on scroll\n useEffect(() => {\n const handleScroll = () => {\n setTooltipData(null)\n }\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 // First check custom colors, then defaults, then generate deterministic color\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 // Aggregate data based on view type\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 // Group dates by period\n data.dates.forEach((dateStr, index) => {\n const date = new Date(dateStr)\n let groupKey: string\n \n switch (viewType) {\n case 'weekly': {\n // Get ISO week start (Monday)\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 // Use the Monday date as the group key to ensure proper sorting\n groupKey = weekStart.toISOString().split('T')[0]\n break\n }\n case 'monthly':\n // Use first day of month for consistent sorting\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 // Use first day of quarter for consistent sorting and grouping\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 // Calculate aggregated values - sort dates for proper chronological order\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 // Calculate aggregation based on mode\n if (aggregationMode === 'sum') {\n return Math.round(values.reduce((sum, v) => sum + v, 0))\n } else { // average\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 svg.selectAll('*').remove()\n\n // Add invisible rect to detect mouse leave events\n svg.append('rect')\n .attr('width', width)\n .attr('height', height)\n .attr('fill', 'transparent')\n .style('pointer-events', 'all')\n .on('mouseleave', () => {\n setTooltipData(null)\n })\n\n const g = svg.append('g')\n .attr('transform', `translate(${margin.left},${margin.top})`)\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 ...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 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\n const line = d3.line<[Date, number]>()\n .x(d => xScale(d[0]))\n .y(d => yScale(d[1]))\n .curve(d3.curveMonotoneX)\n\n activeHabits.forEach(habit => {\n const habitData = dates.map((date, i) => \n [date, aggregateData[habit][i]] as [Date, number]\n ).filter(d => typeof d[1] === 'number')\n\n g.append('path')\n .datum(habitData)\n .attr('class', styles.line)\n .attr('d', line)\n .attr('stroke', getColor(habit))\n .attr('opacity', hoveredHabit && hoveredHabit !== habit ? 0.3 : 1)\n\n // Add invisible larger circles for better hover detection\n g.selectAll(`.hover-circle-${habit}`)\n .data(habitData)\n .enter().append('circle')\n .attr('cx', d => xScale(d[0]))\n .attr('cy', d => yScale(d[1]))\n .attr('r', 10) // Larger invisible area\n .attr('fill', 'transparent')\n .style('cursor', 'pointer')\n .on('mouseenter', function(_event, d) {\n const [date, value] = d\n const rect = svgRef.current?.getBoundingClientRect()\n if (rect) {\n setTooltipData({\n habit,\n date: date.toISOString().split('T')[0],\n value,\n x: xScale(date) + margin.left + rect.left,\n y: yScale(value) + margin.top + rect.top\n })\n }\n // Find and enlarge the visible circle\n d3.select(g.node())\n .selectAll(`.circle-${habit}-${dates.indexOf(date)}`)\n .attr('r', 6)\n })\n .on('mouseleave', function(_event, _d) {\n setTooltipData(null)\n // Reset all circles for this habit\n d3.select(g.node())\n .selectAll('[class*=\"circle-' + habit + '\"]')\n .attr('r', 4)\n })\n .on('click', function(_event, d) {\n const [date, value] = d\n if (onDataPointClick) {\n onDataPointClick(habit, date.toISOString().split('T')[0], value)\n }\n })\n\n // Add visible circles\n g.selectAll(`.circle-${habit}`)\n .data(habitData)\n .enter().append('circle')\n .attr('class', (_d, i) => `${styles.dataPoint} circle-${habit}-${i}`)\n .attr('cx', d => xScale(d[0]))\n .attr('cy', d => yScale(d[1]))\n .attr('r', 4)\n .attr('fill', getColor(habit))\n .attr('opacity', hoveredHabit && hoveredHabit !== habit ? 0.3 : 1)\n .style('pointer-events', 'none') // Let the invisible circle handle events\n })\n\n // Helper function to get ISO week number\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 // Format x-axis based on view type\n const xAxisFormat = (() => {\n switch (viewType) {\n case 'daily':\n return d3.timeFormat('%Y-%m-%d')\n case 'weekly':\n return (d: Date) => {\n const weekNum = getISOWeek(d)\n return `${d.getFullYear()}-W${weekNum.toString().padStart(2, '0')}`\n }\n case 'monthly':\n return d3.timeFormat('%Y-%m')\n case 'quarterly':\n return (d: Date) => {\n const quarter = Math.floor(d.getMonth() / 3) + 1\n return `${d.getFullYear()}-Q${quarter}`\n }\n default:\n return d3.timeFormat('%Y-%m-%d')\n }\n })()\n\n // Determine number of ticks based on view type and data\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 // Show all quarters\n default:\n return undefined\n }\n })()\n\n const xAxisGenerator = d3.axisBottom(xScale)\n .tickFormat(d => xAxisFormat(d as Date))\n \n // Set tick values for quarterly to avoid duplicates\n if (viewType === 'quarterly') {\n xAxisGenerator.tickValues(dates)\n } else if (tickCount) {\n xAxisGenerator.ticks(tickCount)\n }\n \n const xAxis = g.append('g')\n .attr('class', styles.xAxis)\n .attr('transform', `translate(0,${chartHeight})`)\n .call(xAxisGenerator)\n \n // Rotate labels for better readability if needed\n if (viewType === 'daily' || viewType === 'weekly') {\n xAxis.selectAll('text')\n .style('text-anchor', 'end')\n .attr('dx', '-.8em')\n .attr('dy', '.15em')\n .attr('transform', 'rotate(-45)')\n }\n\n g.append('g')\n .attr('class', styles.yAxis)\n .call(d3.axisLeft(yScale))\n\n }, [aggregateData, activeHabits, chartWidth, chartHeight, margin, hoveredHabit, onDataPointClick, getColor, height, viewType, width])\n\n // Format date for tooltip display\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 const weekEnd = new Date(date)\n weekEnd.setDate(date.getDate() + 6)\n return `Week of ${date.toLocaleDateString('en-US', { month: 'short', day: 'numeric' })}`\n }\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 // View type icons and labels\n const viewTypeConfig = {\n daily: { icon: '📅', label: 'Daily' },\n weekly: { icon: '📆', label: 'Weekly' },\n monthly: { icon: '🗓️', label: 'Monthly' },\n quarterly: { icon: '📊', 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 <button\n key={type}\n className={`${styles.viewButton} ${viewType === type ? styles.active : ''}`}\n onClick={() => setViewType(type)}\n title={viewTypeConfig[type].label}\n >\n <span className={styles.viewIcon}>{viewTypeConfig[type].icon}</span>\n <span className={styles.viewLabel}>{viewTypeConfig[type].label}</span>\n </button>\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}>📊</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}>➕</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 width={width}\n height={height}\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}","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 h12 = h24 === 0 ? 12 : h24 > 12 ? h24 - 12 : h24\n const ampm = h24 >= 12 ? 'PM' : 'AM'\n const minutes = Math.round((hour % 1) * 60)\n return `${Math.floor(h12)}:${minutes.toString().padStart(2, '0')} ${ampm}`\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: 30, right: 30, bottom: 50, left: 80 }), [])\n const chartWidth = width - margin.left - margin.right\n const chartHeight = height - margin.top - margin.bottom\n\n // Hide tooltip on scroll\n useEffect(() => {\n const handleScroll = () => {\n setTooltipData(null)\n }\n\n window.addEventListener('scroll', handleScroll, true)\n return () => {\n window.removeEventListener('scroll', handleScroll, true)\n }\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 // Add invisible rect to detect mouse leave events\n svg.append('rect')\n .attr('width', width)\n .attr('height', height)\n .attr('fill', 'transparent')\n .style('pointer-events', 'all')\n .on('mouseleave', () => {\n setTooltipData(null)\n })\n\n const g = svg.append('g')\n .attr('transform', `translate(${margin.left},${margin.top})`)\n\n const xScale = d3.scaleLinear()\n .domain([18, 42])\n .range([0, chartWidth])\n\n const yDomain = sleepData.map(d => d.date)\n const yScale = d3.scaleBand()\n .domain(yDomain)\n .range([0, chartHeight])\n .paddingInner(0.2)\n .paddingOuter(0.1)\n\n // Add vertical grid lines with midnight/noon highlights\n g.selectAll('.grid-line-x')\n .data(d3.range(18, 43, 1))\n .enter().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 .style('stroke', d => {\n const hour = d % 24\n if (hour === 0) return 'var(--color-border)' // Midnight\n if (hour === 12) return 'var(--color-border)' // Noon\n return 'var(--color-border)'\n })\n .style('stroke-opacity', d => {\n const hour = d % 24\n if (hour === 0 || hour === 12) return 0.3\n if (hour % 3 === 0) return 0.15\n return 0.05\n })\n .style('stroke-width', d => {\n const hour = d % 24\n if (hour === 0 || hour === 12) return 2\n return 1\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.append('g')\n .attr('class', styles.sleepBar)\n .style('cursor', 'pointer')\n .on('click', () => onDateClick?.(dayData.date))\n\n // Handle sleep time and wake hour separately\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 // Convert evening hours to 24+ scale (e.g., 22:00 stays 22, but early morning like 02:00 becomes 26)\n if (sleepHour < 18) {\n sleepHour += 24\n }\n }\n \n if (dayData.wake_hour) {\n wakeHour = parseTimeToDecimal(dayData.wake_hour)\n // If we have sleep time, wake time should be after sleep time\n if (sleepHour !== null) {\n // If wake hour is before sleep hour or very early, it's next day\n if (wakeHour < sleepHour || (sleepHour >= 18 && wakeHour < 18)) {\n wakeHour += 24\n }\n } else {\n // No sleep time - if wake time is early morning, assume next day\n if (wakeHour < 12) {\n wakeHour += 24\n }\n }\n }\n\n // Draw the bar only if both values exist\n if (sleepHour !== null && wakeHour !== null) {\n const rect = sleepGroup.append('rect')\n .attr('x', xScale(sleepHour))\n .attr('y', yValue)\n .attr('width', 0) // Start with 0 width for animation\n .attr('height', barHeight)\n .attr('rx', barHeight / 2)\n .attr('fill', 'url(#sleepGradient)')\n .attr('opacity', 0) // Start invisible\n .attr('stroke', 'rgba(255,255,255,0.3)')\n .attr('stroke-width', 1)\n .style('filter', 'drop-shadow(0 2px 8px rgba(155, 89, 182, 0.3))')\n \n // Animate the bar\n rect.transition()\n .duration(800)\n .delay(Math.random() * 200) // Stagger the animations\n .ease(d3.easeCubicOut)\n .attr('width', Math.max(0, xScale(wakeHour) - xScale(sleepHour)))\n .attr('opacity', 0.85)\n }\n\n // Draw sleep dot if sleep time exists\n if (sleepHour !== null) {\n const sleepDot = sleepGroup.append('circle')\n .attr('cx', xScale(sleepHour))\n .attr('cy', yValue + barHeight / 2)\n .attr('r', 0) // Start with 0 radius\n .attr('fill', '#9B59B6')\n .attr('stroke', '#ffffff')\n .attr('stroke-width', 2)\n .style('filter', 'drop-shadow(0 3px 6px rgba(155, 89, 182, 0.4))')\n .style('transition', 'all 0.3s ease')\n \n // Animate the dot\n sleepDot.transition()\n .duration(400)\n .delay(300 + Math.random() * 100)\n .ease(d3.easeBackOut)\n .attr('r', 6)\n }\n\n // Draw wake dot if wake hour exists\n if (wakeHour !== null) {\n const wakeDot = sleepGroup.append('circle')\n .attr('cx', xScale(wakeHour))\n .attr('cy', yValue + barHeight / 2)\n .attr('r', 0) // Start with 0 radius\n .attr('fill', '#3498DB')\n .attr('stroke', '#ffffff')\n .attr('stroke-width', 2)\n .style('filter', 'drop-shadow(0 3px 6px rgba(52, 152, 219, 0.4))')\n .style('transition', 'all 0.3s ease')\n \n // Animate the dot\n wakeDot.transition()\n .duration(400)\n .delay(500 + Math.random() * 100)\n .ease(d3.easeBackOut)\n .attr('r', 6)\n }\n\n // Add hover interactions with tooltip\n sleepGroup\n .on('mouseenter', function(event) {\n // Highlight the bar\n d3.select(this).select('rect')\n .transition()\n .duration(200)\n .attr('opacity', 1)\n .style('filter', 'drop-shadow(0 4px 12px rgba(155, 89, 182, 0.5)) brightness(1.1)')\n \n // Scale up the dots\n d3.select(this).selectAll('circle')\n .transition()\n .duration(200)\n .attr('r', 8)\n \n // Calculate tooltip data\n const rect = svgRef.current?.getBoundingClientRect()\n if (rect) {\n const duration = (sleepHour !== null && wakeHour !== null) \n ? wakeHour - sleepHour \n : null\n \n setTooltipData({\n date: dayData.date,\n sleepTime: sleepHour !== null ? formatTime(sleepHour) : null,\n wakeTime: wakeHour !== null ? formatTime(wakeHour) : null,\n duration: duration !== null ? Math.round(duration * 100) / 100 : null,\n x: event.pageX,\n y: event.pageY - 80\n })\n }\n })\n .on('mouseleave', function() {\n // Reset bar appearance\n d3.select(this).select('rect')\n .transition()\n .duration(200)\n .attr('opacity', 0.85)\n .style('filter', 'drop-shadow(0 2px 8px rgba(155, 89, 182, 0.3))')\n \n // Reset dots\n d3.select(this).selectAll('circle')\n .transition()\n .duration(200)\n .attr('r', 6)\n \n // Hide tooltip\n setTooltipData(null)\n })\n .on('mousemove', function(event) {\n // Update tooltip position\n setTooltipData(prev => prev ? {\n ...prev,\n x: event.pageX,\n y: event.pageY - 80\n } : null)\n })\n })\n\n // Create gradient definition\n const defs = svg.append('defs')\n const gradient = defs.append('linearGradient')\n .attr('id', 'sleepGradient')\n .attr('x1', '0%')\n .attr('x2', '100%')\n\n gradient.append('stop')\n .attr('offset', '0%')\n .attr('stop-color', '#9B59B6')\n .attr('stop-opacity', 1)\n\n gradient.append('stop')\n .attr('offset', '50%')\n .attr('stop-color', '#7B68A6')\n .attr('stop-opacity', 1)\n\n gradient.append('stop')\n .attr('offset', '100%')\n .attr('stop-color', '#3498DB')\n .attr('stop-opacity', 1)\n\n const xAxisTicks = d3.range(18, 43, 3).map(hour => ({\n value: hour,\n label: hour === 24 ? '12 AM' : hour === 36 ? '12 PM' : \n (hour % 24) === 0 ? '12 AM' : \n (hour % 24) < 12 ? `${hour % 24} AM` : \n (hour % 24) === 12 ? '12 PM' : `${(hour % 24) - 12} PM`\n }))\n\n const xAxis = g.append('g')\n .attr('class', styles.xAxis)\n .attr('transform', `translate(0,${chartHeight})`)\n .call(d3.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 .tickSizeOuter(0))\n \n // Style axis ticks\n xAxis.selectAll('text')\n .style('font-weight', d => {\n const hour = (d as number) % 24\n return hour === 0 || hour === 12 ? '600' : '400'\n })\n\n const yAxisTicks = yDomain.filter((_, i) => i % Math.ceil(yDomain.length / 10) === 0)\n \n g.append('g')\n .attr('class', styles.yAxis)\n .call(d3.axisLeft(yScale)\n .tickValues(yAxisTicks)\n .tickFormat(d => {\n const date = new Date(d)\n return `${(date.getMonth() + 1).toString().padStart(2, '0')}/${date.getDate().toString().padStart(2, '0')}`\n }))\n\n }, [sleepData, chartWidth, chartHeight, margin, onDateClick, height, width])\n\n return (\n <div className={styles.container}>\n <div className={styles.header}>\n <h3 className={styles.title}>Sleep Pattern</h3>\n <div className={styles.legend}>\n <div className={styles.legendItem}>\n <span className={styles.sleepDot}></span>\n <span>Sleep Time</span>\n </div>\n <div className={styles.legendItem}>\n <span className={styles.wakeDot}></span>\n <span>Wake Time</span>\n </div>\n </div>\n </div>\n <svg\n ref={svgRef}\n width={width}\n height={height}\n className={styles.chart}\n />\n \n {tooltipData && (\n <div\n className={`${styles.tooltip} ${tooltipData ? styles.visible : ''}`}\n style={{\n left: `${tooltipData.x}px`,\n top: `${tooltipData.y}px`\n }}\n >\n <div className={styles.tooltipHeader}>\n <span className={styles.tooltipEmoji}>😴</span>\n <span>{new Date(tooltipData.date).toLocaleDateString('en-US', { \n weekday: 'short', \n month: 'short', \n day: 'numeric' \n })}</span>\n </div>\n <div className={styles.tooltipInfo}>\n {tooltipData.sleepTime && (\n <div className={styles.tooltipRow}>\n <span className={styles.tooltipLabel}>\n <span>🌙</span>\n <span>Sleep:</span>\n </span>\n <span className={styles.tooltipValue}>{tooltipData.sleepTime}</span>\n </div>\n )}\n {tooltipData.wakeTime && (\n <div className={styles.tooltipRow}>\n <span className={styles.tooltipLabel}>\n <span>☀️</span>\n <span>Wake:</span>\n </span>\n <span className={styles.tooltipValue}>{tooltipData.wakeTime}</span>\n </div>\n )}\n {tooltipData.duration !== null && (\n <div className={styles.tooltipDuration}>\n <span>⏱️</span>\n <span>\n {Math.floor(tooltipData.duration)}h {Math.round((tooltipData.duration % 1) * 60)}m\n </span>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\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 name: string\n size?: number\n children?: SunBurstRecord[]\n}\n\ninterface SunburstChartProps {\n data: SunBurstRecord\n width?: number\n height?: number\n title?: string\n tagColors?: Record<string, string>\n unit?: string\n centerLabel?: string\n}\n\ninterface ExtendedNode extends d3.HierarchyRectangularNode<SunBurstRecord> {\n x0Original: number\n x1Original: number\n y0Original: number\n y1Original: number\n}\n\ntype SunburstTransition = d3.Transition<d3.BaseType, d3.HierarchyRectangularNode<SunBurstRecord>, d3.BaseType, unknown>\n\nconst COLOR_PALETTE = [\n '#6366f1', '#8b5cf6', '#06b6d4', '#10b981',\n '#f59e0b', '#ef4444', '#ec4899', '#84cc16',\n '#f97316', '#3b82f6', '#14b8a6', '#f59e0b'\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 'var(--text-primary)';\n\n const rgb = color.rgb();\n // Calculate relative luminance using WCAG formula\n // Normalize RGB values to 0-1 range for proper calculation\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n\n // Apply gamma correction\n const rLinear = r <= 0.03928 ? r / 12.92 : Math.pow((r + 0.055) / 1.055, 2.4);\n const gLinear = g <= 0.03928 ? g / 12.92 : Math.pow((g + 0.055) / 1.055, 2.4);\n const bLinear = b <= 0.03928 ? b / 12.92 : Math.pow((b + 0.055) / 1.055, 2.4);\n\n // Calculate relative luminance\n const luminance = 0.2126 * rLinear + 0.7152 * gLinear + 0.0722 * bLinear;\n\n // Use a threshold of 0.5 for better contrast\n return luminance > 0.5 ? '#000000' : '#ffffff';\n}\n\n// Helper to create an interpolated arc generator for transitions\nconst createInterpolatedArc = (\n currX0: number,\n currX1: number,\n currY0: number,\n currY1: number,\n radius: number\n) => {\n return d3.arc<d3.HierarchyRectangularNode<SunBurstRecord>>()\n .startAngle(() => currX0)\n .endAngle(() => currX1)\n .innerRadius(() => Math.min(radius, Math.sqrt(Math.max(0, currY0))))\n .outerRadius(() => Math.min(radius, Math.sqrt(Math.max(0, currY1))))\n .cornerRadius(3)\n}\n\nexport const SunburstChart: React.FC<SunburstChartProps> = ({\n data,\n width = 500,\n height = 500,\n title = 'Sunburst Chart',\n tagColors = {},\n unit = 'items',\n centerLabel\n}) => {\n const svgRef = useRef<SVGSVGElement>(null)\n const colorMap = useRef(new Map<string, string>()).current\n const colorIndex = useRef(0)\n const focusedNodeRef = useRef<d3.HierarchyRectangularNode<SunBurstRecord> | null>(null)\n\n const radius = Math.min(width, height) / 2\n\n const getColor = useCallback((name: string, depth: number): string => {\n // First check if we have a tag color for this name\n if (tagColors[name]) {\n const color = d3.color(tagColors[name])\n if (color) {\n // Darken for deeper levels\n return depth > 1 ? color.darker((depth - 1) * 0.3).toString() : color.toString()\n }\n }\n\n // Fallback to color palette\n if (!colorMap.has(name)) {\n colorMap.set(name, COLOR_PALETTE[colorIndex.current % COLOR_PALETTE.length])\n colorIndex.current++\n }\n const baseColor = colorMap.get(name) || '#d4af37'\n\n const color = d3.color(baseColor)\n if (color) {\n return color.darker(depth * 0.3).toString()\n }\n return baseColor\n }, [tagColors, colorMap])\n\n useEffect(() => {\n if (!svgRef.current || !data) 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 root = d3.hierarchy(data)\n .sum(d => d.size ?? 0)\n .sort((a, b) => (b.value ?? 0) - (a.value ?? 0))\n\n const partition = d3.partition<SunBurstRecord>()\n .size([2 * Math.PI, radius * radius])\n\n const nodes = partition(root).descendants()\n\n // Store original positions for reset\n nodes.forEach((d) => {\n const node = d as ExtendedNode\n node.x0Original = d.x0\n node.x1Original = d.x1\n node.y0Original = d.y0\n node.y1Original = d.y1\n })\n\n const arc = d3.arc<d3.HierarchyRectangularNode<SunBurstRecord>>()\n .startAngle(d => d.x0)\n .endAngle(d => d.x1)\n .innerRadius(d => Math.sqrt(d.y0))\n .outerRadius(d => Math.sqrt(d.y1))\n .cornerRadius(3)\n\n const tooltip = d3.select('body').append('div')\n .attr('class', styles.tooltip)\n .style('opacity', 0)\n .style('position', 'absolute')\n\n // Function to reset to original view\n const resetView = () => {\n focusedNodeRef.current = null\n\n const transition = d3.transition()\n .duration(750)\n .ease(d3.easeCubicInOut)\n\n // First show all elements\n paths.style('opacity', 1)\n\n paths.transition(transition as unknown as SunburstTransition)\n .attrTween('d', (d) => {\n const node = d as ExtendedNode\n\n return (t: number) => {\n // Calculate interpolated positions\n const currX0 = d3.interpolate(node.x0, node.x0Original)(t)\n const currX1 = d3.interpolate(node.x1, node.x1Original)(t)\n const currY0 = d3.interpolate(node.y0, node.y0Original)(t)\n const currY1 = d3.interpolate(node.y1, node.y1Original)(t)\n\n // Update node positions continuously\n node.x0 = currX0\n node.x1 = currX1\n node.y0 = currY0\n node.y1 = currY1\n\n const interpolatedArc = createInterpolatedArc(currX0, currX1, currY0, currY1, radius)\n\n return interpolatedArc(node) || ''\n }\n })\n\n // Restore cursor style based on whether nodes have children\n paths.style('cursor', d => (!d.children || d.children.length === 0) ? 'default' : 'pointer')\n\n // Reset center button cursor\n centerResetButton.style('cursor', 'default')\n\n // Update labels\n updateLabels(transition, nodes, true)\n }\n\n // Function to handle click and expand\n const handleClick = (event: MouseEvent, clickedNode: d3.HierarchyRectangularNode<SunBurstRecord>) => {\n event.stopPropagation()\n\n // If already focused on a node, don't allow clicking on other segments\n // Only allow reset through the center button\n if (focusedNodeRef.current) {\n return\n }\n\n // Don't allow clicking on leaf nodes (nodes without children)\n if (!clickedNode.children || clickedNode.children.length === 0) {\n return\n }\n\n focusedNodeRef.current = clickedNode\n\n const transition = d3.transition()\n .duration(750)\n .ease(d3.easeCubicInOut)\n\n // Zoom to clicked node - scale to fill the entire circle\n const clickedOriginal = clickedNode as ExtendedNode\n\n // Ensure we use the original x values for proper scaling\n // The x-scale maps the clicked node's angular extent to the full circle\n const xScale = d3.scaleLinear()\n .domain([clickedOriginal.x0Original, clickedOriginal.x1Original])\n .range([0, 2 * Math.PI])\n .clamp(true) // Ensure values stay within bounds\n\n // For the radial scale, always use the full radius available\n // Find the deepest descendant to ensure all children fit\n const descendants = nodes.filter(d => isParentOf(clickedNode, d))\n const maxChildRadius = Math.max(...descendants.map(d => (d as ExtendedNode).y1Original))\n\n // Always scale to use the full radius, regardless of original size\n const yScale = d3.scaleLinear()\n .domain([clickedOriginal.y0Original, maxChildRadius])\n .range([0, radius * radius])\n .clamp(true) // Ensure values stay within bounds\n\n // First, immediately hide elements that shouldn't be visible\n paths.style('opacity', (d) => isParentOf(clickedNode, d) ? 1 : 0)\n\n paths.transition(transition as unknown as SunburstTransition)\n .attrTween('d', (d) => {\n const node = d as ExtendedNode\n // Only transform nodes that are descendants of the clicked node\n if (!isParentOf(clickedNode, d)) {\n // Keep them hidden\n return () => ''\n }\n\n // Calculate new positions based on the original positions\n // ALWAYS scale to fill the full circle, no minimum size preservation\n const newX0 = xScale(node.x0Original)\n let newX1 = xScale(node.x1Original)\n\n // Ensure proper scaling even for very small segments\n // The clicked node's extent should always map to full circle\n if (newX1 <= newX0) {\n // Force proper angular extent based on proportion\n const proportion = (node.x1Original - node.x0Original) / (clickedOriginal.x1Original - clickedOriginal.x0Original)\n newX1 = newX0 + (2 * Math.PI * proportion)\n }\n\n // For radial positions, scale appropriately\n let newY0, newY1\n if (node === clickedNode) {\n // The clicked node itself should fill from center\n newY0 = 0\n // If it has children, leave room for them; otherwise fill to edge\n if (node.children && node.children.length > 0) {\n const childrenY0 = Math.min(...node.children.map(c => (c as ExtendedNode).y0Original))\n newY1 = yScale(childrenY0) * 0.98 // Very slight gap for visual separation\n } else {\n newY1 = radius * radius * 0.98 // Fill almost to edge\n }\n } else {\n // Child nodes should be scaled to fill the remaining space proportionally\n // NO minimum size enforcement - pure proportional scaling\n newY0 = yScale(node.y0Original)\n newY1 = yScale(node.y1Original)\n }\n\n // Use current positions as start (they should be at original if not previously zoomed)\n const startX0 = node.x0\n const startX1 = node.x1\n const startY0 = node.y0\n const startY1 = node.y1\n\n return (t: number) => {\n // Calculate interpolated positions\n const currX0 = d3.interpolate(startX0, newX0)(t)\n const currX1 = d3.interpolate(startX1, newX1)(t)\n const currY0 = d3.interpolate(startY0, newY0)(t)\n const currY1 = d3.interpolate(startY1, newY1)(t)\n\n // Update node positions continuously\n node.x0 = currX0\n node.x1 = currX1\n node.y0 = currY0\n node.y1 = currY1\n\n const interpolatedArc = createInterpolatedArc(currX0, currX1, currY0, currY1, radius)\n\n return interpolatedArc(node) || ''\n }\n })\n\n // Update labels for zoomed view\n updateLabels(transition, nodes.filter(d => isParentOf(clickedNode, d)), false)\n\n // Update cursor style to indicate segments are not clickable\n paths.style('cursor', 'default')\n\n // Update center button to be clickable\n centerResetButton.style('cursor', 'pointer')\n }\n\n // Helper function to check if a node is parent of another\n const isParentOf = (parent: d3.HierarchyNode<SunBurstRecord>, descendant: d3.HierarchyNode<SunBurstRecord>): boolean => {\n if (parent === descendant) return true\n let current = descendant.parent\n while (current) {\n if (current === parent) return true\n current = current.parent\n }\n return false\n }\n\n const paths = g.selectAll('path')\n .data(nodes.filter(d => d.depth > 0 && d.value && d.value > 0))\n .enter().append('path')\n .attr('d', d => arc(d) || '')\n .attr('fill', d => {\n let ancestor = d\n while (ancestor.depth > 1 && ancestor.parent) {\n ancestor = ancestor.parent\n }\n return getColor(ancestor.data.name, d.depth)\n })\n .attr('stroke', () => {\n // Get computed border color from theme\n const computedStyle = window.getComputedStyle(svgRef.current!)\n return computedStyle.getPropertyValue('--color-border') || '#e2e8f0'\n })\n .attr('stroke-width', 2)\n .style('cursor', d => (!d.children || d.children.length === 0) ? 'default' : 'pointer')\n .on('click', handleClick)\n .on('mouseover', function(event, d) {\n // Don't show hover effect if already focused\n if (focusedNodeRef.current) {\n return\n }\n\n const hoveredElement = event.currentTarget as Element\n\n // Show tooltip for all nodes\n tooltip.transition()\n .duration(200)\n .style('opacity', 1)\n\n const value = d.value || 0\n const percentage = ((value / (root.value || 1)) * 100).toFixed(1)\n\n tooltip.html(`\n <div><strong>${d.data.name}</strong></div>\n <div>Value: ${value}</div>\n <div>${percentage}% of total</div>\n `)\n .style('left', ((event as MouseEvent).pageX + 10) + 'px')\n .style('top', ((event as MouseEvent).pageY - 28) + 'px')\n\n // Apply blur to all other segments\n paths.each(function() {\n if (this !== hoveredElement) {\n d3.select(this)\n .transition()\n .duration(200)\n .style('opacity', 0.3)\n .style('filter', 'blur(1px)')\n } else {\n d3.select(this)\n .transition()\n .duration(200)\n .style('opacity', 1)\n .style('filter', 'none')\n }\n })\n })\n .on('mouseout', function() {\n // Hide tooltip\n tooltip.transition()\n .duration(500)\n .style('opacity', 0)\n\n // Reset all segments\n paths\n .transition()\n .duration(200)\n .style('opacity', 1)\n .style('filter', 'none')\n })\n .on('mousemove', function(event) {\n // Update tooltip position on mouse move\n tooltip\n .style('left', ((event as MouseEvent).pageX + 10) + 'px')\n .style('top', ((event as MouseEvent).pageY - 28) + 'px')\n })\n\n const shouldDisplayLabel = (d: d3.HierarchyRectangularNode<SunBurstRecord>) => {\n const angle = d.x1 - d.x0\n // When zoomed in, be more lenient with label display since segments are larger\n const minAngle = focusedNodeRef.current ? 0.05 : 0.15\n return angle > minAngle && d.depth <= 2\n }\n\n // Function to update labels after transitions\n const updateLabels = (transition: d3.Transition<d3.BaseType, unknown, d3.BaseType, unknown>, visibleNodes: d3.HierarchyRectangularNode<SunBurstRecord>[], _isReset: boolean) => {\n // Remove old labels\n g.selectAll('text.segment-label').remove()\n g.selectAll('text.center-label').remove()\n\n // Wait for transition to complete before adding new labels\n transition.on('end', () => {\n // Filter out the focused node itself when zoomed (it's shown in center)\n const nodesToLabel = visibleNodes.filter(d => {\n if (focusedNodeRef.current && d === focusedNodeRef.current) {\n return false // Don't show label for the zoomed parent node\n }\n return d.depth > 0 && d.value && d.value > 0 && shouldDisplayLabel(d)\n })\n\n g.selectAll('text.segment-label')\n .data(nodesToLabel)\n .enter().append('text')\n .attr('class', 'segment-label')\n .attr('transform', d => {\n const angle = (d.x0 + d.x1) / 2\n const radiusVal = (Math.sqrt(d.y0) + Math.sqrt(d.y1)) / 2\n const x = Math.cos(angle - Math.PI / 2) * radiusVal\n const y = Math.sin(angle - Math.PI / 2) * radiusVal\n return `translate(${x},${y})`\n })\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .attr('font-size', d => d.depth === 1 ? '13px' : '11px')\n .attr('fill', d => {\n let ancestor = d\n while (ancestor.depth > 1 && ancestor.parent) {\n ancestor = ancestor.parent\n }\n const segmentColor = getColor(ancestor.data.name, d.depth)\n return getTextColor(segmentColor)\n })\n .attr('font-weight', '600')\n .style('pointer-events', 'none')\n .style('text-shadow', d => {\n let ancestor = d\n while (ancestor.depth > 1 && ancestor.parent) {\n ancestor = ancestor.parent\n }\n const segmentColor = getColor(ancestor.data.name, d.depth)\n const textColor = getTextColor(segmentColor)\n // Add subtle shadow for better readability\n const shadowColor = textColor === '#ffffff' ? 'rgba(0,0,0,0.3)' : 'rgba(255,255,255,0.3)'\n return `0 1px 1px ${shadowColor}`\n })\n .text(d => {\n const maxLength = d.depth === 1 ? 12 : 8\n return d.data.name.substring(0, maxLength)\n })\n .style('opacity', 0)\n .transition()\n .duration(200)\n .style('opacity', 1)\n\n // Update center text\n const currentNode = focusedNodeRef.current || root\n const computedStyle = window.getComputedStyle(svgRef.current!)\n const centerTextColor = computedStyle.getPropertyValue('--text-primary') ||\n (computedStyle.getPropertyValue('--bg-primary') === '#000000' ||\n computedStyle.getPropertyValue('color-scheme') === 'dark' ? '#ffffff' : '#000000')\n\n g.append('text')\n .attr('class', 'center-label')\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .attr('font-size', '18px')\n .attr('font-weight', 'bold')\n .attr('fill', centerTextColor)\n .style('pointer-events', 'none')\n .text(currentNode === root ? (centerLabel || data.name || 'Total') : currentNode.data.name)\n .style('opacity', 0)\n .transition()\n .duration(200)\n .style('opacity', 1)\n\n g.append('text')\n .attr('class', 'center-label')\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .attr('y', 20)\n .attr('font-size', '14px')\n .attr('font-weight', '500')\n .attr('fill', centerTextColor)\n .style('pointer-events', 'none')\n .text(`${(currentNode.value || 0).toLocaleString()} ${unit}`)\n .style('opacity', 0)\n .transition()\n .duration(200)\n .style('opacity', 1)\n })\n }\n\n // Add invisible center reset button (circle in the middle)\n const centerRadius = Math.sqrt(nodes[0].y0) || radius * 0.3\n\n const centerResetButton = g.append('circle')\n .attr('class', 'center-reset-button')\n .attr('r', centerRadius)\n .attr('fill', 'transparent')\n .style('cursor', 'default')\n .on('click', () => {\n if (focusedNodeRef.current) {\n resetView()\n }\n })\n .on('mouseover', function() {\n if (focusedNodeRef.current) {\n d3.select(this)\n .transition()\n .duration(150)\n .attr('fill', 'rgba(100, 100, 100, 0.1)')\n .attr('stroke', 'rgba(100, 100, 100, 0.3)')\n .attr('stroke-width', 2)\n }\n })\n .on('mouseout', function() {\n if (focusedNodeRef.current) {\n d3.select(this)\n .transition()\n .duration(150)\n .attr('fill', 'transparent')\n .attr('stroke', 'none')\n }\n })\n\n // Calculate center text color - get computed theme color\n const computedStyle = window.getComputedStyle(svgRef.current!)\n const centerTextColor = computedStyle.getPropertyValue('--text-primary') ||\n (computedStyle.getPropertyValue('--bg-primary') === '#000000' ||\n computedStyle.getPropertyValue('color-scheme') === 'dark' ? '#ffffff' : '#000000')\n\n // Add center text\n g.append('text')\n .attr('class', 'center-label')\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .attr('font-size', '18px')\n .attr('font-weight', 'bold')\n .attr('fill', centerTextColor)\n .style('pointer-events', 'none')\n .text(centerLabel || data.name || 'Total')\n\n g.append('text')\n .attr('class', 'center-label')\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .attr('y', 20)\n .attr('font-size', '14px')\n .attr('font-weight', '500')\n .attr('fill', centerTextColor)\n .style('pointer-events', 'none')\n .text(`${(root.value || 0).toLocaleString()} ${unit}`)\n\n g.selectAll('text.segment-label')\n .data(nodes.filter(d => d.depth > 0 && d.value && d.value > 0 && shouldDisplayLabel(d)))\n .enter().append('text')\n .attr('class', 'segment-label')\n .attr('transform', d => {\n const angle = (d.x0 + d.x1) / 2\n const radiusVal = (Math.sqrt(d.y0) + Math.sqrt(d.y1)) / 2\n const x = Math.cos(angle - Math.PI / 2) * radiusVal\n const y = Math.sin(angle - Math.PI / 2) * radiusVal\n return `translate(${x},${y})`\n })\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .attr('font-size', d => d.depth === 1 ? '13px' : '11px')\n .attr('fill', d => {\n let ancestor = d\n while (ancestor.depth > 1 && ancestor.parent) {\n ancestor = ancestor.parent\n }\n const segmentColor = getColor(ancestor.data.name, d.depth)\n return getTextColor(segmentColor)\n })\n .attr('font-weight', '600')\n .style('pointer-events', 'none')\n .style('text-shadow', d => {\n let ancestor = d\n while (ancestor.depth > 1 && ancestor.parent) {\n ancestor = ancestor.parent\n }\n const segmentColor = getColor(ancestor.data.name, d.depth)\n const textColor = getTextColor(segmentColor)\n // Add subtle shadow for better readability\n const shadowColor = textColor === '#ffffff' ? 'rgba(0,0,0,0.3)' : 'rgba(255,255,255,0.3)'\n return `0 1px 1px ${shadowColor}`\n })\n .text(d => {\n const maxLength = d.depth === 1 ? 12 : 8\n return d.data.name.substring(0, maxLength)\n })\n\n return () => {\n tooltip.remove()\n }\n }, [data, width, height, colorMap, radius, tagColors, unit, centerLabel, getColor])\n\n return (\n <div className={styles.container}>\n <h3 className={styles.title}>{title}</h3>\n <svg\n ref={svgRef}\n width={width}\n height={height}\n className={styles.chart}\n />\n </div>\n )\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 ✕\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":["styles","_jsxs","_jsx","CalendarIcon","_Fragment","getTextColor"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.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/TimePickerModal.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/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/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';\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\t\n\tconst buttonClasses = [\n\t\tstyles.button,\n\t\tstyles[variant],\n\t\tstyles[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={{ scale: disabled || loading ? 1 : 1.02 }}\n\t\t\twhileTap={{ scale: disabled || loading ? 1 : 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 } from 'react';\nimport { createPortal } from 'react-dom';\nimport { motion, AnimatePresence } 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}\n\n/**\n * Modal Component\n *\n * @component\n * @description\n * An accessible overlay dialog with a backdrop, title header, optional\n * header actions, and a flexible body. Renders into a React portal on\n * `document.body`, animates in/out with Framer Motion, closes on Escape\n * key or backdrop click, and clicks inside the dialog don't propagate\n * to the backdrop.\n *\n * @example\n * // Basic usage\n * <Modal open={isOpen} title=\"Confirm\" onClose={() => setIsOpen(false)}>\n * <p>Are you sure?</p>\n * </Modal>\n *\n * @example\n * // With header actions and wide size\n * <Modal\n * open={isOpen}\n * title=\"Edit profile\"\n * size=\"wide\"\n * actions={<button onClick={save}>Save</button>}\n * onClose={handleClose}\n * >\n * <ProfileForm />\n * </Modal>\n *\n * @example\n * // Flush body (no padding) for editors and full-bleed content\n * <Modal open={isOpen} title=\"Document\" padding={false} onClose={handleClose}>\n * <DocEditor content={content} onSave={save} />\n * </Modal>\n *\n * @param {ModalProps} props - The props for the Modal component\n * @returns {React.ReactPortal | null} A portal rendering the modal, or null on the server\n */\nexport const Modal: React.FC<ModalProps> = ({\n\topen,\n\ttitle,\n\tonClose,\n\tchildren,\n\tsize = 'default',\n\tactions,\n\tpadding = true,\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 dialogClass = [\n\t\tstyles.dialog,\n\t\tsize === 'compact' && styles.dialogCompact,\n\t\tsize === 'wide' && styles.dialogWide,\n\t]\n\t\t.filter(Boolean)\n\t\t.join(' ');\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={styles.backdrop}\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\tinitial={{ opacity: 0, scale: 0.96, y: 8 }}\n\t\t\t\t\t\tanimate={{ opacity: 1, scale: 1, y: 0 }}\n\t\t\t\t\t\texit={{ opacity: 0, scale: 0.96, y: 8 }}\n\t\t\t\t\t\ttransition={{ duration: 0.15, ease: 'easeOut' }}\n\t\t\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className={styles.header}>\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, { useRef } 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\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 * \n * @example\n * // With focus handlers\n * <DateInput\n * label=\"Event Date\"\n * value={eventDate}\n * onChange={setEventDate}\n * onFocus={() => console.log('Focused')}\n * onBlur={() => validateDate(eventDate)}\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 hiddenDateInputRef = useRef<HTMLInputElement>(null);\n const { handlers, playSound } = useComponentSound(soundConfig);\n\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 handleCalendarClick = () => {\n playSound('click');\n // Set the hidden input to current value for calendar\n if (hiddenDateInputRef.current) {\n // If value is already ISO format, use it directly\n // If it's European format, convert it\n const isoDate = value.includes('-') ? value : parseEuropeanDate(value);\n if (isoDate) {\n hiddenDateInputRef.current.value = isoDate;\n }\n // Try showPicker first (modern browsers), fallback to click\n if (hiddenDateInputRef.current.showPicker) {\n hiddenDateInputRef.current.showPicker();\n } else {\n hiddenDateInputRef.current.click();\n }\n }\n };\n\n const handleCalendarChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const isoDate = e.target.value;\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 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 <button\n type=\"button\"\n onClick={handleCalendarClick}\n className={styles.calendarButton}\n title=\"Select date from calendar\"\n disabled={disabled || loading}\n >\n <CalendarIcon />\n </button>\n <input\n ref={hiddenDateInputRef}\n type=\"date\"\n onChange={handleCalendarChange}\n className={styles.hiddenDateInput}\n tabIndex={-1}\n disabled={disabled || loading}\n />\n </div>\n </div>\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';\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}) => {\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 // 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};","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, useRef } 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 /** Custom animations */\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 value display */\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 /** Tooltip configuration */\n showTooltip?: boolean;\n /** Custom tooltip content */\n tooltipContent?: (value: number) => string;\n /** Sound configuration for interactions */\n soundConfig?: ComponentSoundConfig;\n}\n\n/**\n * Slider component - A beautiful, animated range input\n * \n * @component\n * @description\n * A highly customizable slider component with smooth Framer Motion animations,\n * dynamic coloring, custom labels, tooltips, and theme support. Perfect for\n * ratings, volume controls, progress indicators, or any numeric input.\n * \n * @example\n * // Basic usage\n * <Slider\n * value={rating}\n * onChange={setRating}\n * min={1}\n * max={10}\n * showValue\n * />\n * \n * @example\n * // Rating slider with emojis\n * <Slider\n * value={mood}\n * onChange={setMood}\n * min={1}\n * max={5}\n * labels={[\n * { label: '😢', position: 'start' },\n * { label: '😐', position: 50 },\n * { label: '😊', position: 'end' }\n * ]}\n * colorFunction={(val) => `hsl(${val * 24}, 70%, 50%)`}\n * />\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}: SliderProps) {\n const { handlers, playSound } = useComponentSound(soundConfig);\n const [isDragging, setIsDragging] = useState(false);\n const [showTooltipState, setShowTooltipState] = useState(false);\n const sliderRef = useRef<HTMLDivElement>(null);\n \n const {\n colors = {},\n size = 'md',\n animations = {}\n } = config;\n \n const {\n duration = 0.2\n } = animations;\n \n // Calculate percentage\n const percentage = ((value - min) / (max - min)) * 100;\n \n // Get dynamic color\n const getDynamicColor = () => {\n if (colorFunction) return colorFunction(value);\n if (colors.fill) return colors.fill;\n return `hsl(${percentage * 1.2}, 70%, 50%)`;\n };\n \n // Format value display\n const formatValue = (val: number) => {\n if (valueFormatter) return valueFormatter(val);\n return `${val}${max <= 10 ? `/${max}` : ''}`;\n };\n \n // Handle slider change\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 // Handle mouse events for enhanced interactions\n const handleMouseDown = () => {\n setIsDragging(true);\n if (showTooltip) setShowTooltipState(true);\n };\n \n const handleMouseUp = () => {\n setIsDragging(false);\n if (showTooltip) {\n setTimeout(() => setShowTooltipState(false), 500);\n }\n };\n \n const handleMouseEnter = () => {\n if (showTooltip && !disabled) setShowTooltipState(true);\n };\n \n const handleMouseLeave = () => {\n if (showTooltip && !isDragging) setShowTooltipState(false);\n };\n \n const dynamicColor = getDynamicColor();\n const sizeClass = styles[`size-${size}`];\n const stateClass = disabled ? styles.disabled : loading ? styles.loading : '';\n \n if (loading) {\n return (\n <div className={`${styles.slider} ${sizeClass} ${styles.loading} ${className}`} style={style}>\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={{ \n repeat: Infinity, \n duration: 1.5,\n ease: \"easeInOut\"\n }}\n />\n </div>\n </div>\n );\n }\n \n return (\n <div className={`${styles.slider} ${sizeClass} ${stateClass} ${className}`} style={style}>\n {label && (\n <motion.label \n className={styles.label}\n initial={{ opacity: 0, y: -10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.3 }}\n >\n {label}\n </motion.label>\n )}\n \n <motion.div \n className={styles.sliderContainer}\n ref={sliderRef}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n whileHover={{ scale: 1.02 }}\n transition={{ duration: 0.1 }}\n >\n <motion.div \n className={styles.track}\n whileHover={{ height: 8, marginTop: -1 }}\n transition={{ duration: 0.1 }}\n >\n <motion.div \n className={styles.fill}\n style={{ \n width: `${percentage}%`,\n backgroundColor: dynamicColor\n }}\n initial={{ width: 0 }}\n animate={{ width: `${percentage}%` }}\n transition={{ \n duration,\n type: \"spring\",\n stiffness: 300,\n damping: 30\n }}\n whileHover={{ \n boxShadow: `inset 0 0 0 1px rgba(255,255,255,0.2)`\n }}\n />\n </motion.div>\n \n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={value}\n onChange={handleChange}\n onMouseDown={handleMouseDown}\n onMouseUp={handleMouseUp}\n {...handlers}\n className={styles.input}\n disabled={disabled}\n aria-label={label}\n />\n \n <motion.div \n className={styles.thumb}\n style={{\n left: `${percentage}%`,\n backgroundColor: dynamicColor,\n borderColor: colors.thumb || dynamicColor\n }}\n animate={{\n scale: isDragging ? 1.3 : 1,\n boxShadow: isDragging \n ? `0 0 20px ${dynamicColor}40`\n : `0 2px 8px ${dynamicColor}30`\n }}\n transition={{ \n duration: 0.1,\n type: \"spring\",\n stiffness: 400,\n damping: 25\n }}\n whileHover={{ \n scale: 1.1,\n transition: { duration: 0.1 }\n }}\n >\n {isDragging && (\n <motion.div\n className={styles.ripple}\n initial={{ scale: 0, opacity: 0.6 }}\n animate={{ scale: 2, opacity: 0 }}\n transition={{ duration: 0.5 }}\n />\n )}\n </motion.div>\n \n {/* Tooltip */}\n <AnimatePresence>\n {showTooltipState && (\n <motion.div\n className={styles.tooltip}\n style={{ \n left: `${percentage}%`,\n backgroundColor: dynamicColor\n }}\n initial={{ opacity: 0, y: 10, scale: 0.8 }}\n animate={{ opacity: 1, y: 0, scale: 1 }}\n exit={{ opacity: 0, y: 10, scale: 0.8 }}\n transition={{ duration: 0.2 }}\n >\n {tooltipContent ? tooltipContent(value) : formatValue(value)}\n <div className={styles.tooltipArrow} style={{ borderTopColor: dynamicColor }} />\n </motion.div>\n )}\n </AnimatePresence>\n </motion.div>\n \n {/* Value Display */}\n {showValue && (\n <motion.div \n className={styles.valueDisplay}\n style={{ color: dynamicColor }}\n key={value}\n initial={{ scale: 0.8 }}\n animate={{ scale: 1 }}\n transition={{ \n duration: 0.2,\n type: \"spring\",\n stiffness: 300\n }}\n >\n {formatValue(value)}\n </motion.div>\n )}\n \n {/* Labels */}\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') position = labelConfig.position;\n \n return (\n <motion.div\n key={index}\n className={styles.labelItem}\n style={{ \n left: `${position}%`,\n color: labelConfig.color\n }}\n initial={{ opacity: 0, y: 5 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ \n duration: 0.3, \n delay: index * 0.1\n }}\n whileHover={{ \n scale: 1.2,\n transition: { duration: 0.1 }\n }}\n >\n {labelConfig.label}\n </motion.div>\n );\n })}\n </div>\n )}\n </div>\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 { useState, useEffect } from \"react\";\nimport { X } from \"lucide-react\";\nimport styles from \"./TimePickerModal.module.css\";\n\ninterface TimePickerModalProps {\n isOpen: boolean;\n onClose: () => void;\n value: string;\n onChange: (time: string) => void;\n}\n\nexport function TimePickerModal({ isOpen, onClose, value, onChange }: TimePickerModalProps) {\n const [hours, minutes] = value ? value.split(':').map(Number) : [12, 0];\n const [selectedHour, setSelectedHour] = useState(hours);\n const [selectedMinute, setSelectedMinute] = useState(minutes);\n \n useEffect(() => {\n if (value) {\n const [h, m] = value.split(':').map(Number);\n setSelectedHour(h);\n setSelectedMinute(m);\n }\n }, [value]);\n \n const handleConfirm = () => {\n const formattedHour = selectedHour.toString().padStart(2, '0');\n const formattedMinute = selectedMinute.toString().padStart(2, '0');\n onChange(`${formattedHour}:${formattedMinute}`);\n onClose();\n };\n \n if (!isOpen) return null;\n \n return (\n <div className={styles.modalOverlay} onClick={onClose}>\n <div className={styles.modalContent} onClick={(e) => e.stopPropagation()}>\n <div className={styles.modalHeader}>\n <h3>Select Time</h3>\n <button \n className={styles.closeButton} \n onClick={onClose}\n aria-label=\"Close\"\n >\n <X />\n </button>\n </div>\n \n <div className={styles.timeDisplay}>\n {selectedHour.toString().padStart(2, '0')}:{selectedMinute.toString().padStart(2, '0')}\n </div>\n \n <div className={styles.pickerContainer}>\n <div className={styles.pickerColumn}>\n <div className={styles.pickerLabel}>Hours</div>\n <div className={styles.pickerScroll}>\n {Array.from({ length: 24 }, (_, i) => (\n <button\n key={i}\n className={`${styles.pickerItem} ${selectedHour === i ? styles.selected : ''}`}\n onClick={() => setSelectedHour(i)}\n >\n {i.toString().padStart(2, '0')}\n </button>\n ))}\n </div>\n </div>\n \n <div className={styles.pickerDivider}>:</div>\n \n <div className={styles.pickerColumn}>\n <div className={styles.pickerLabel}>Minutes</div>\n <div className={styles.pickerScroll}>\n {Array.from({ length: 60 }, (_, i) => (\n <button\n key={i}\n className={`${styles.pickerItem} ${selectedMinute === i ? styles.selected : ''}`}\n onClick={() => setSelectedMinute(i)}\n >\n {i.toString().padStart(2, '0')}\n </button>\n ))}\n </div>\n </div>\n </div>\n \n <div className={styles.modalActions}>\n <button \n className={styles.cancelButton}\n onClick={onClose}\n >\n Cancel\n </button>\n <button \n className={styles.confirmButton}\n onClick={handleConfirm}\n >\n Confirm\n </button>\n </div>\n </div>\n </div>\n );\n}","import { useState } from \"react\";\nimport { Clock } from \"lucide-react\";\nimport { TimePickerModal } from \"./TimePickerModal\";\nimport styles from \"./TimeInput.module.css\";\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 placeholder = \"14:30\",\n onFocus, \n onBlur,\n error = false,\n success = false,\n loading = false,\n disabled = false,\n required = false,\n className = \"\"\n}: Readonly<TimeInputProps>) {\n const [showPicker, setShowPicker] = useState(false);\n\n const formatTime24 = (time: string) => {\n if (!time) return '';\n \n let cleanTime = time.replace(/[^\\d:]/g, '');\n \n const colonCount = (cleanTime.match(/:/g) || []).length;\n if (colonCount > 1) {\n cleanTime = cleanTime.replace(/:/g, '');\n if (cleanTime.length >= 3) {\n cleanTime = cleanTime.substring(0, 2) + ':' + cleanTime.substring(2);\n }\n }\n \n if (cleanTime.length === 3 && !cleanTime.includes(':')) {\n cleanTime = cleanTime.substring(0, 2) + ':' + cleanTime.substring(2);\n } else if (cleanTime.length === 4 && !cleanTime.includes(':')) {\n cleanTime = cleanTime.substring(0, 2) + ':' + cleanTime.substring(2);\n }\n \n if (cleanTime.includes(':')) {\n const parts = cleanTime.split(':');\n let hours = parts[0];\n let minutes = parts[1] || '';\n \n hours = hours.substring(0, 2);\n \n if (hours.length === 2) {\n const hourNum = parseInt(hours);\n if (hourNum > 23) {\n hours = '23';\n }\n }\n \n minutes = minutes.substring(0, 2);\n \n if (minutes.length === 2) {\n const minNum = parseInt(minutes);\n if (minNum > 59) {\n minutes = '59';\n }\n }\n \n cleanTime = hours + (minutes.length > 0 ? ':' + minutes : ':');\n }\n \n return cleanTime.substring(0, 5);\n };\n\n const handleTextChange = (inputValue: string) => {\n const formattedTime = formatTime24(inputValue);\n onChange(formattedTime);\n };\n\n const handleClockClick = () => {\n if (!disabled && !loading) {\n setShowPicker(true);\n }\n };\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 <>\n <div className={getContainerClassName()}>\n <label className={styles.label}>\n {label}\n {required && <span className={styles.required}>*</span>}\n </label>\n <div className={styles.inputWrapper}>\n <input\n type=\"text\"\n value={value}\n onChange={(e) => handleTextChange(e.target.value)}\n onFocus={onFocus}\n onBlur={onBlur}\n placeholder={placeholder}\n className={styles.textInput}\n maxLength={5}\n disabled={disabled || loading}\n aria-invalid={error}\n aria-required={required}\n inputMode=\"numeric\"\n pattern=\"[0-9:]*\"\n />\n <button\n type=\"button\"\n onClick={handleClockClick}\n className={styles.clockButton}\n title=\"Open time picker\"\n disabled={disabled || loading}\n aria-label=\"Open time picker\"\n >\n <Clock size={20} />\n </button>\n </div>\n </div>\n \n <TimePickerModal\n isOpen={showPicker}\n onClose={() => setShowPicker(false)}\n value={value}\n onChange={onChange}\n />\n </>\n );\n}","import React, { createContext, useContext, useState, useEffect } from 'react';\n\nexport type Theme = 'light' | 'dark' | 'lossito' | 'lossito-dark' | 'dmood' | 'dmood-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', 'dmood', 'dmood-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', 'dmood', 'dmood-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';\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: 'dmood', label: 'Dmood Light', icon: '💙' },\n { value: 'dmood-dark', label: 'Dmood 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 === '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}\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}) => {\n const tabs = customTabs ?? defaultTabs;\n\n return (\n <div className={`${styles.tabs} ${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 { useMemo, useState, useEffect, useRef } from 'react';\nimport { motion } from 'framer-motion';\nimport styles from './Calendar.module.css';\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 time string (e.g., \"14:30\") */\n time?: string;\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 /** 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 /** 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}\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 /** 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}\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 viewMode = 'month',\n initialDate = new Date(),\n config = {},\n className = '',\n style = {},\n loading = false,\n emptyState,\n hideHeader = false\n}: CalendarProps) {\n const [currentDate, setCurrentDate] = useState(initialDate);\n const [currentViewMode, setCurrentViewMode] = useState(viewMode);\n const dayViewScrollRef = useRef<HTMLDivElement>(null);\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 } = config;\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 // Auto-scroll to current time in day view\n useEffect(() => {\n if (currentViewMode === 'day' && dayViewScrollRef.current) {\n // Check if viewing today\n const now = new Date();\n const isToday = currentDate.toDateString() === now.toDateString();\n\n if (isToday) {\n // Calculate scroll position based on current time\n const currentHour = now.getHours();\n const currentMinute = now.getMinutes();\n const minutesSinceMidnight = currentHour * 60 + currentMinute;\n\n // Each hour is 60px, so calculate pixel position\n // Scroll to put current time in the upper third of the view\n const scrollPosition = (minutesSinceMidnight / 60) * 60 - 100; // Subtract 100 to show some context above\n\n // Use setTimeout to ensure DOM is ready\n setTimeout(() => {\n if (dayViewScrollRef.current) {\n dayViewScrollRef.current.scrollTop = Math.max(0, scrollPosition);\n }\n }, 0);\n }\n }\n }, [currentViewMode, currentDate]);\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 const getDayEvents = (day: Date) => {\n const dayEvents = events.filter(event => {\n const eventDate = new Date(event.date);\n return eventDate.toDateString() === day.toDateString();\n });\n \n // Sort events by time in week view\n if (currentViewMode === 'week') {\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 return dayEvents;\n };\n \n const convertTimeToMinutes = (time: string): number => {\n const [hours, minutes] = time.split(':').map(Number);\n return hours * 60 + minutes;\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 handleTimeSlotClick = (hour: number) => {\n if (onTimeSlotClick) {\n // Create a date object with the current date and the clicked hour\n const slotDate = new Date(currentDate);\n slotDate.setHours(hour, 0, 0, 0);\n\n // Format time as HH:00\n const timeString = `${hour.toString().padStart(2, '0')}:00`;\n\n onTimeSlotClick(slotDate, hour, timeString);\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} ${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 <div className={styles.controls}>\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 !== 'day' && (\n <div className={styles.weekDays}>\n {showWeekNumbers && <div className={styles.weekNumberHeader}>Week</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\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 <div className={styles.dayViewScrollContainer} ref={dayViewScrollRef}>\n <div className={styles.dayViewContent}>\n {/* Current time indicator */}\n {(() => {\n const now = new Date();\n const currentHour = now.getHours();\n const currentMinute = now.getMinutes();\n const minutesSinceMidnight = currentHour * 60 + currentMinute;\n const topPosition = (minutesSinceMidnight / 1440) * (24 * 60); // 24 hours * 60px per hour\n \n // Only show if viewing today\n const isToday = currentDate.toDateString() === now.toDateString();\n \n return isToday ? (\n <div \n className={styles.currentTimeIndicator}\n style={{ top: `${topPosition}px` }}\n />\n ) : null;\n })()}\n <div className={styles.timeColumn}>\n {Array.from({ length: 24 }, (_, hour) => (\n <div key={hour} className={styles.timeSlot}>\n <span className={styles.timeLabel}>\n {hour.toString().padStart(2, '0')}:00\n </span>\n </div>\n ))}\n </div>\n <div className={styles.dayColumn}>\n {Array.from({ length: 24 }, (_, hour) => {\n const hourEvents = getDayEvents(currentDate).filter(event => {\n if (!event.time) return false;\n const eventHour = parseInt(event.time.split(':')[0]);\n return eventHour === hour;\n });\n \n return (\n <div\n key={hour}\n className={styles.hourSlot}\n onClick={(e) => {\n // Only trigger if clicking on the slot itself, not on an event\n if (e.target === e.currentTarget ||\n (e.target as HTMLElement).classList.contains(styles.hourLine)) {\n handleTimeSlotClick(hour);\n }\n }}\n style={{ cursor: 'pointer' }}\n >\n <div className={styles.hourLine}></div>\n {hourEvents.map((event, eventIndex) => (\n <motion.div\n key={event.id}\n className={`${styles.dayEvent} ${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.dayEventTitle}>\n <span className={styles.dayEventTime}>\n {event.time}\n </span>\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 </div>\n );\n })}\n </div>\n </div>\n </div>\n </div>\n ) : (\n <div className={`${styles.daysGrid} ${currentViewMode === 'week' ? styles.weekView : ''}`}>\n {calendarData.days.map((day, index) => {\n const dayEvents = getDayEvents(day);\n const dayIsToday = isToday(day);\n const isInCurrentMonth = currentViewMode === 'week' || isCurrentMonth(day);\n const isWeekStart = showWeekNumbers && (index % 7 === 0);\n \n return (\n <motion.div\n key={`${day.getFullYear()}-${day.getMonth()}-${day.getDate()}`}\n className={`${styles.dayCell} ${dayIsToday ? styles.today : ''} ${!isInCurrentMonth ? styles.otherMonth : ''}`}\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 {isWeekStart && (\n <div className={styles.weekNumber}>\n {getWeekNumber(day)}\n </div>\n )}\n <div className={styles.dayNumber}>\n {day.getDate()}\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 )}\n {dayEvents.length === 0 && emptyState && (\n <div className={styles.emptyState}>\n {emptyState}\n </div>\n )}\n </motion.div>\n );\n })}\n </div>\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: string;\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?: string;\n subtitle?: string;\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}\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}) => {\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 {logo.text?.charAt(0) || '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 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}`}>\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 {logo.text?.charAt(0) || '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 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 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 } 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 [selectedMood, setSelectedMood] = useState<ProcessedMoodData | null>(null)\n const [tooltipPosition, setTooltipPosition] = useState({ x: 0, y: 0 })\n const [isHoveringTooltip, setIsHoveringTooltip] = useState(false)\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 // Parse comma-separated tags\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 ) 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 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 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\n g.append('path')\n .datum(processedData)\n .attr('class', styles.line)\n .attr('d', line)\n\n g.append('g')\n .attr('class', styles.xAxis)\n .attr('transform', `translate(0,${chartHeight})`)\n .call(d3.axisBottom(xScale)\n .tickFormat(d => d3.timeFormat('%m/%d')(d as Date)))\n\n g.append('g')\n .attr('class', styles.yAxis)\n .call(d3.axisLeft(yScale))\n\n 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', 5)\n .attr('fill', d => colorScale(d.rating))\n .style('cursor', 'pointer')\n .on('mouseenter', (event, d) => {\n const rect = svgRef.current?.getBoundingClientRect()\n const containerRect = containerRef.current?.getBoundingClientRect()\n if (rect && containerRect) {\n let x = event.clientX - rect.left + 10\n let y = event.clientY - rect.top - 10\n\n // Check if tooltip would overflow on the right\n const estimatedTooltipWidth = 250 // Approximate tooltip width\n const rightEdgeBuffer = 20 // Buffer from the right edge\n\n if (x + estimatedTooltipWidth > chartWidth + margin.left - rightEdgeBuffer) {\n // Position tooltip to the left of the cursor, but keep it close\n x = event.clientX - rect.left - estimatedTooltipWidth - 10\n // Ensure it doesn't go off the left edge\n if (x < 0) {\n x = 10\n }\n }\n\n // Ensure tooltip doesn't go above the container\n if (y < 0) {\n y = 10\n }\n\n setTooltipPosition({ x, y })\n }\n setSelectedMood(d)\n \n d3.select(event.currentTarget)\n .transition()\n .duration(200)\n .attr('r', 8)\n })\n .on('mouseleave', (event) => {\n // Add delay to allow mouse to move to tooltip\n setTimeout(() => {\n if (!isHoveringTooltip) {\n setSelectedMood(null)\n }\n }, 250)\n\n d3.select(event.currentTarget)\n .transition()\n .duration(200)\n .attr('r', 5)\n })\n\n }, [processedData, chartWidth, chartHeight, colorScale, margin, isHoveringTooltip])\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}","import React, { useState, useEffect, useRef, useMemo, useCallback } from 'react'\nimport * as d3 from 'd3'\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\n// Default colors as fallback\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\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 [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 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 // Hide tooltip on scroll\n useEffect(() => {\n const handleScroll = () => {\n setTooltipData(null)\n }\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 // First check custom colors, then defaults, then generate deterministic color\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 // Aggregate data based on view type\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 // Group dates by period\n data.dates.forEach((dateStr, index) => {\n const date = new Date(dateStr)\n let groupKey: string\n \n switch (viewType) {\n case 'weekly': {\n // Get ISO week start (Monday)\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 // Use the Monday date as the group key to ensure proper sorting\n groupKey = weekStart.toISOString().split('T')[0]\n break\n }\n case 'monthly':\n // Use first day of month for consistent sorting\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 // Use first day of quarter for consistent sorting and grouping\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 // Calculate aggregated values - sort dates for proper chronological order\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 // Calculate aggregation based on mode\n if (aggregationMode === 'sum') {\n return Math.round(values.reduce((sum, v) => sum + v, 0))\n } else { // average\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 svg.selectAll('*').remove()\n\n // Add invisible rect to detect mouse leave events\n svg.append('rect')\n .attr('width', width)\n .attr('height', height)\n .attr('fill', 'transparent')\n .style('pointer-events', 'all')\n .on('mouseleave', () => {\n setTooltipData(null)\n })\n\n const g = svg.append('g')\n .attr('transform', `translate(${margin.left},${margin.top})`)\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 ...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 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\n const line = d3.line<[Date, number]>()\n .x(d => xScale(d[0]))\n .y(d => yScale(d[1]))\n .curve(d3.curveMonotoneX)\n\n activeHabits.forEach(habit => {\n const habitData = dates.map((date, i) => \n [date, aggregateData[habit][i]] as [Date, number]\n ).filter(d => typeof d[1] === 'number')\n\n g.append('path')\n .datum(habitData)\n .attr('class', styles.line)\n .attr('d', line)\n .attr('stroke', getColor(habit))\n .attr('opacity', hoveredHabit && hoveredHabit !== habit ? 0.3 : 1)\n\n // Add invisible larger circles for better hover detection\n g.selectAll(`.hover-circle-${habit}`)\n .data(habitData)\n .enter().append('circle')\n .attr('cx', d => xScale(d[0]))\n .attr('cy', d => yScale(d[1]))\n .attr('r', 10) // Larger invisible area\n .attr('fill', 'transparent')\n .style('cursor', 'pointer')\n .on('mouseenter', function(_event, d) {\n const [date, value] = d\n const rect = svgRef.current?.getBoundingClientRect()\n if (rect) {\n setTooltipData({\n habit,\n date: date.toISOString().split('T')[0],\n value,\n x: xScale(date) + margin.left + rect.left,\n y: yScale(value) + margin.top + rect.top\n })\n }\n // Find and enlarge the visible circle\n d3.select(g.node())\n .selectAll(`.circle-${habit}-${dates.indexOf(date)}`)\n .attr('r', 6)\n })\n .on('mouseleave', function(_event, _d) {\n setTooltipData(null)\n // Reset all circles for this habit\n d3.select(g.node())\n .selectAll('[class*=\"circle-' + habit + '\"]')\n .attr('r', 4)\n })\n .on('click', function(_event, d) {\n const [date, value] = d\n if (onDataPointClick) {\n onDataPointClick(habit, date.toISOString().split('T')[0], value)\n }\n })\n\n // Add visible circles\n g.selectAll(`.circle-${habit}`)\n .data(habitData)\n .enter().append('circle')\n .attr('class', (_d, i) => `${styles.dataPoint} circle-${habit}-${i}`)\n .attr('cx', d => xScale(d[0]))\n .attr('cy', d => yScale(d[1]))\n .attr('r', 4)\n .attr('fill', getColor(habit))\n .attr('opacity', hoveredHabit && hoveredHabit !== habit ? 0.3 : 1)\n .style('pointer-events', 'none') // Let the invisible circle handle events\n })\n\n // Helper function to get ISO week number\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 // Format x-axis based on view type\n const xAxisFormat = (() => {\n switch (viewType) {\n case 'daily':\n return d3.timeFormat('%Y-%m-%d')\n case 'weekly':\n return (d: Date) => {\n const weekNum = getISOWeek(d)\n return `${d.getFullYear()}-W${weekNum.toString().padStart(2, '0')}`\n }\n case 'monthly':\n return d3.timeFormat('%Y-%m')\n case 'quarterly':\n return (d: Date) => {\n const quarter = Math.floor(d.getMonth() / 3) + 1\n return `${d.getFullYear()}-Q${quarter}`\n }\n default:\n return d3.timeFormat('%Y-%m-%d')\n }\n })()\n\n // Determine number of ticks based on view type and data\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 // Show all quarters\n default:\n return undefined\n }\n })()\n\n const xAxisGenerator = d3.axisBottom(xScale)\n .tickFormat(d => xAxisFormat(d as Date))\n \n // Set tick values for quarterly to avoid duplicates\n if (viewType === 'quarterly') {\n xAxisGenerator.tickValues(dates)\n } else if (tickCount) {\n xAxisGenerator.ticks(tickCount)\n }\n \n const xAxis = g.append('g')\n .attr('class', styles.xAxis)\n .attr('transform', `translate(0,${chartHeight})`)\n .call(xAxisGenerator)\n \n // Rotate labels for better readability if needed\n if (viewType === 'daily' || viewType === 'weekly') {\n xAxis.selectAll('text')\n .style('text-anchor', 'end')\n .attr('dx', '-.8em')\n .attr('dy', '.15em')\n .attr('transform', 'rotate(-45)')\n }\n\n g.append('g')\n .attr('class', styles.yAxis)\n .call(d3.axisLeft(yScale))\n\n }, [aggregateData, activeHabits, chartWidth, chartHeight, margin, hoveredHabit, onDataPointClick, getColor, height, viewType, width])\n\n // Format date for tooltip display\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 const weekEnd = new Date(date)\n weekEnd.setDate(date.getDate() + 6)\n return `Week of ${date.toLocaleDateString('en-US', { month: 'short', day: 'numeric' })}`\n }\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 // View type icons and labels\n const viewTypeConfig = {\n daily: { icon: '📅', label: 'Daily' },\n weekly: { icon: '📆', label: 'Weekly' },\n monthly: { icon: '🗓️', label: 'Monthly' },\n quarterly: { icon: '📊', 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 <button\n key={type}\n className={`${styles.viewButton} ${viewType === type ? styles.active : ''}`}\n onClick={() => setViewType(type)}\n title={viewTypeConfig[type].label}\n >\n <span className={styles.viewIcon}>{viewTypeConfig[type].icon}</span>\n <span className={styles.viewLabel}>{viewTypeConfig[type].label}</span>\n </button>\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}>📊</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}>➕</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 width={width}\n height={height}\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}","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 h12 = h24 === 0 ? 12 : h24 > 12 ? h24 - 12 : h24\n const ampm = h24 >= 12 ? 'PM' : 'AM'\n const minutes = Math.round((hour % 1) * 60)\n return `${Math.floor(h12)}:${minutes.toString().padStart(2, '0')} ${ampm}`\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: 30, right: 30, bottom: 50, left: 80 }), [])\n const chartWidth = width - margin.left - margin.right\n const chartHeight = height - margin.top - margin.bottom\n\n // Hide tooltip on scroll\n useEffect(() => {\n const handleScroll = () => {\n setTooltipData(null)\n }\n\n window.addEventListener('scroll', handleScroll, true)\n return () => {\n window.removeEventListener('scroll', handleScroll, true)\n }\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 // Add invisible rect to detect mouse leave events\n svg.append('rect')\n .attr('width', width)\n .attr('height', height)\n .attr('fill', 'transparent')\n .style('pointer-events', 'all')\n .on('mouseleave', () => {\n setTooltipData(null)\n })\n\n const g = svg.append('g')\n .attr('transform', `translate(${margin.left},${margin.top})`)\n\n const xScale = d3.scaleLinear()\n .domain([18, 42])\n .range([0, chartWidth])\n\n const yDomain = sleepData.map(d => d.date)\n const yScale = d3.scaleBand()\n .domain(yDomain)\n .range([0, chartHeight])\n .paddingInner(0.2)\n .paddingOuter(0.1)\n\n // Add vertical grid lines with midnight/noon highlights\n g.selectAll('.grid-line-x')\n .data(d3.range(18, 43, 1))\n .enter().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 .style('stroke', d => {\n const hour = d % 24\n if (hour === 0) return 'var(--color-border)' // Midnight\n if (hour === 12) return 'var(--color-border)' // Noon\n return 'var(--color-border)'\n })\n .style('stroke-opacity', d => {\n const hour = d % 24\n if (hour === 0 || hour === 12) return 0.3\n if (hour % 3 === 0) return 0.15\n return 0.05\n })\n .style('stroke-width', d => {\n const hour = d % 24\n if (hour === 0 || hour === 12) return 2\n return 1\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.append('g')\n .attr('class', styles.sleepBar)\n .style('cursor', 'pointer')\n .on('click', () => onDateClick?.(dayData.date))\n\n // Handle sleep time and wake hour separately\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 // Convert evening hours to 24+ scale (e.g., 22:00 stays 22, but early morning like 02:00 becomes 26)\n if (sleepHour < 18) {\n sleepHour += 24\n }\n }\n \n if (dayData.wake_hour) {\n wakeHour = parseTimeToDecimal(dayData.wake_hour)\n // If we have sleep time, wake time should be after sleep time\n if (sleepHour !== null) {\n // If wake hour is before sleep hour or very early, it's next day\n if (wakeHour < sleepHour || (sleepHour >= 18 && wakeHour < 18)) {\n wakeHour += 24\n }\n } else {\n // No sleep time - if wake time is early morning, assume next day\n if (wakeHour < 12) {\n wakeHour += 24\n }\n }\n }\n\n // Draw the bar only if both values exist\n if (sleepHour !== null && wakeHour !== null) {\n const rect = sleepGroup.append('rect')\n .attr('x', xScale(sleepHour))\n .attr('y', yValue)\n .attr('width', 0) // Start with 0 width for animation\n .attr('height', barHeight)\n .attr('rx', barHeight / 2)\n .attr('fill', 'url(#sleepGradient)')\n .attr('opacity', 0) // Start invisible\n .attr('stroke', 'rgba(255,255,255,0.3)')\n .attr('stroke-width', 1)\n .style('filter', 'drop-shadow(0 2px 8px rgba(155, 89, 182, 0.3))')\n \n // Animate the bar\n rect.transition()\n .duration(800)\n .delay(Math.random() * 200) // Stagger the animations\n .ease(d3.easeCubicOut)\n .attr('width', Math.max(0, xScale(wakeHour) - xScale(sleepHour)))\n .attr('opacity', 0.85)\n }\n\n // Draw sleep dot if sleep time exists\n if (sleepHour !== null) {\n const sleepDot = sleepGroup.append('circle')\n .attr('cx', xScale(sleepHour))\n .attr('cy', yValue + barHeight / 2)\n .attr('r', 0) // Start with 0 radius\n .attr('fill', '#9B59B6')\n .attr('stroke', '#ffffff')\n .attr('stroke-width', 2)\n .style('filter', 'drop-shadow(0 3px 6px rgba(155, 89, 182, 0.4))')\n .style('transition', 'all 0.3s ease')\n \n // Animate the dot\n sleepDot.transition()\n .duration(400)\n .delay(300 + Math.random() * 100)\n .ease(d3.easeBackOut)\n .attr('r', 6)\n }\n\n // Draw wake dot if wake hour exists\n if (wakeHour !== null) {\n const wakeDot = sleepGroup.append('circle')\n .attr('cx', xScale(wakeHour))\n .attr('cy', yValue + barHeight / 2)\n .attr('r', 0) // Start with 0 radius\n .attr('fill', '#3498DB')\n .attr('stroke', '#ffffff')\n .attr('stroke-width', 2)\n .style('filter', 'drop-shadow(0 3px 6px rgba(52, 152, 219, 0.4))')\n .style('transition', 'all 0.3s ease')\n \n // Animate the dot\n wakeDot.transition()\n .duration(400)\n .delay(500 + Math.random() * 100)\n .ease(d3.easeBackOut)\n .attr('r', 6)\n }\n\n // Add hover interactions with tooltip\n sleepGroup\n .on('mouseenter', function(event) {\n // Highlight the bar\n d3.select(this).select('rect')\n .transition()\n .duration(200)\n .attr('opacity', 1)\n .style('filter', 'drop-shadow(0 4px 12px rgba(155, 89, 182, 0.5)) brightness(1.1)')\n \n // Scale up the dots\n d3.select(this).selectAll('circle')\n .transition()\n .duration(200)\n .attr('r', 8)\n \n // Calculate tooltip data\n const rect = svgRef.current?.getBoundingClientRect()\n if (rect) {\n const duration = (sleepHour !== null && wakeHour !== null) \n ? wakeHour - sleepHour \n : null\n \n setTooltipData({\n date: dayData.date,\n sleepTime: sleepHour !== null ? formatTime(sleepHour) : null,\n wakeTime: wakeHour !== null ? formatTime(wakeHour) : null,\n duration: duration !== null ? Math.round(duration * 100) / 100 : null,\n x: event.pageX,\n y: event.pageY - 80\n })\n }\n })\n .on('mouseleave', function() {\n // Reset bar appearance\n d3.select(this).select('rect')\n .transition()\n .duration(200)\n .attr('opacity', 0.85)\n .style('filter', 'drop-shadow(0 2px 8px rgba(155, 89, 182, 0.3))')\n \n // Reset dots\n d3.select(this).selectAll('circle')\n .transition()\n .duration(200)\n .attr('r', 6)\n \n // Hide tooltip\n setTooltipData(null)\n })\n .on('mousemove', function(event) {\n // Update tooltip position\n setTooltipData(prev => prev ? {\n ...prev,\n x: event.pageX,\n y: event.pageY - 80\n } : null)\n })\n })\n\n // Create gradient definition\n const defs = svg.append('defs')\n const gradient = defs.append('linearGradient')\n .attr('id', 'sleepGradient')\n .attr('x1', '0%')\n .attr('x2', '100%')\n\n gradient.append('stop')\n .attr('offset', '0%')\n .attr('stop-color', '#9B59B6')\n .attr('stop-opacity', 1)\n\n gradient.append('stop')\n .attr('offset', '50%')\n .attr('stop-color', '#7B68A6')\n .attr('stop-opacity', 1)\n\n gradient.append('stop')\n .attr('offset', '100%')\n .attr('stop-color', '#3498DB')\n .attr('stop-opacity', 1)\n\n const xAxisTicks = d3.range(18, 43, 3).map(hour => ({\n value: hour,\n label: hour === 24 ? '12 AM' : hour === 36 ? '12 PM' : \n (hour % 24) === 0 ? '12 AM' : \n (hour % 24) < 12 ? `${hour % 24} AM` : \n (hour % 24) === 12 ? '12 PM' : `${(hour % 24) - 12} PM`\n }))\n\n const xAxis = g.append('g')\n .attr('class', styles.xAxis)\n .attr('transform', `translate(0,${chartHeight})`)\n .call(d3.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 .tickSizeOuter(0))\n \n // Style axis ticks\n xAxis.selectAll('text')\n .style('font-weight', d => {\n const hour = (d as number) % 24\n return hour === 0 || hour === 12 ? '600' : '400'\n })\n\n const yAxisTicks = yDomain.filter((_, i) => i % Math.ceil(yDomain.length / 10) === 0)\n \n g.append('g')\n .attr('class', styles.yAxis)\n .call(d3.axisLeft(yScale)\n .tickValues(yAxisTicks)\n .tickFormat(d => {\n const date = new Date(d)\n return `${(date.getMonth() + 1).toString().padStart(2, '0')}/${date.getDate().toString().padStart(2, '0')}`\n }))\n\n }, [sleepData, chartWidth, chartHeight, margin, onDateClick, height, width])\n\n return (\n <div className={styles.container}>\n <div className={styles.header}>\n <h3 className={styles.title}>Sleep Pattern</h3>\n <div className={styles.legend}>\n <div className={styles.legendItem}>\n <span className={styles.sleepDot}></span>\n <span>Sleep Time</span>\n </div>\n <div className={styles.legendItem}>\n <span className={styles.wakeDot}></span>\n <span>Wake Time</span>\n </div>\n </div>\n </div>\n <svg\n ref={svgRef}\n width={width}\n height={height}\n className={styles.chart}\n />\n \n {tooltipData && (\n <div\n className={`${styles.tooltip} ${tooltipData ? styles.visible : ''}`}\n style={{\n left: `${tooltipData.x}px`,\n top: `${tooltipData.y}px`\n }}\n >\n <div className={styles.tooltipHeader}>\n <span className={styles.tooltipEmoji}>😴</span>\n <span>{new Date(tooltipData.date).toLocaleDateString('en-US', { \n weekday: 'short', \n month: 'short', \n day: 'numeric' \n })}</span>\n </div>\n <div className={styles.tooltipInfo}>\n {tooltipData.sleepTime && (\n <div className={styles.tooltipRow}>\n <span className={styles.tooltipLabel}>\n <span>🌙</span>\n <span>Sleep:</span>\n </span>\n <span className={styles.tooltipValue}>{tooltipData.sleepTime}</span>\n </div>\n )}\n {tooltipData.wakeTime && (\n <div className={styles.tooltipRow}>\n <span className={styles.tooltipLabel}>\n <span>☀️</span>\n <span>Wake:</span>\n </span>\n <span className={styles.tooltipValue}>{tooltipData.wakeTime}</span>\n </div>\n )}\n {tooltipData.duration !== null && (\n <div className={styles.tooltipDuration}>\n <span>⏱️</span>\n <span>\n {Math.floor(tooltipData.duration)}h {Math.round((tooltipData.duration % 1) * 60)}m\n </span>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\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 name: string\n size?: number\n children?: SunBurstRecord[]\n}\n\ninterface SunburstChartProps {\n data: SunBurstRecord\n width?: number\n height?: number\n title?: string\n tagColors?: Record<string, string>\n unit?: string\n centerLabel?: string\n}\n\ninterface ExtendedNode extends d3.HierarchyRectangularNode<SunBurstRecord> {\n x0Original: number\n x1Original: number\n y0Original: number\n y1Original: number\n}\n\ntype SunburstTransition = d3.Transition<d3.BaseType, d3.HierarchyRectangularNode<SunBurstRecord>, d3.BaseType, unknown>\n\nconst COLOR_PALETTE = [\n '#6366f1', '#8b5cf6', '#06b6d4', '#10b981',\n '#f59e0b', '#ef4444', '#ec4899', '#84cc16',\n '#f97316', '#3b82f6', '#14b8a6', '#f59e0b'\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 'var(--text-primary)';\n\n const rgb = color.rgb();\n // Calculate relative luminance using WCAG formula\n // Normalize RGB values to 0-1 range for proper calculation\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n\n // Apply gamma correction\n const rLinear = r <= 0.03928 ? r / 12.92 : Math.pow((r + 0.055) / 1.055, 2.4);\n const gLinear = g <= 0.03928 ? g / 12.92 : Math.pow((g + 0.055) / 1.055, 2.4);\n const bLinear = b <= 0.03928 ? b / 12.92 : Math.pow((b + 0.055) / 1.055, 2.4);\n\n // Calculate relative luminance\n const luminance = 0.2126 * rLinear + 0.7152 * gLinear + 0.0722 * bLinear;\n\n // Use a threshold of 0.5 for better contrast\n return luminance > 0.5 ? '#000000' : '#ffffff';\n}\n\n// Helper to create an interpolated arc generator for transitions\nconst createInterpolatedArc = (\n currX0: number,\n currX1: number,\n currY0: number,\n currY1: number,\n radius: number\n) => {\n return d3.arc<d3.HierarchyRectangularNode<SunBurstRecord>>()\n .startAngle(() => currX0)\n .endAngle(() => currX1)\n .innerRadius(() => Math.min(radius, Math.sqrt(Math.max(0, currY0))))\n .outerRadius(() => Math.min(radius, Math.sqrt(Math.max(0, currY1))))\n .cornerRadius(3)\n}\n\nexport const SunburstChart: React.FC<SunburstChartProps> = ({\n data,\n width = 500,\n height = 500,\n title = 'Sunburst Chart',\n tagColors = {},\n unit = 'items',\n centerLabel\n}) => {\n const svgRef = useRef<SVGSVGElement>(null)\n const colorMap = useRef(new Map<string, string>()).current\n const colorIndex = useRef(0)\n const focusedNodeRef = useRef<d3.HierarchyRectangularNode<SunBurstRecord> | null>(null)\n\n const radius = Math.min(width, height) / 2\n\n const getColor = useCallback((name: string, depth: number): string => {\n // First check if we have a tag color for this name\n if (tagColors[name]) {\n const color = d3.color(tagColors[name])\n if (color) {\n // Darken for deeper levels\n return depth > 1 ? color.darker((depth - 1) * 0.3).toString() : color.toString()\n }\n }\n\n // Fallback to color palette\n if (!colorMap.has(name)) {\n colorMap.set(name, COLOR_PALETTE[colorIndex.current % COLOR_PALETTE.length])\n colorIndex.current++\n }\n const baseColor = colorMap.get(name) || '#d4af37'\n\n const color = d3.color(baseColor)\n if (color) {\n return color.darker(depth * 0.3).toString()\n }\n return baseColor\n }, [tagColors, colorMap])\n\n useEffect(() => {\n if (!svgRef.current || !data) 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 root = d3.hierarchy(data)\n .sum(d => d.size ?? 0)\n .sort((a, b) => (b.value ?? 0) - (a.value ?? 0))\n\n const partition = d3.partition<SunBurstRecord>()\n .size([2 * Math.PI, radius * radius])\n\n const nodes = partition(root).descendants()\n\n // Store original positions for reset\n nodes.forEach((d) => {\n const node = d as ExtendedNode\n node.x0Original = d.x0\n node.x1Original = d.x1\n node.y0Original = d.y0\n node.y1Original = d.y1\n })\n\n const arc = d3.arc<d3.HierarchyRectangularNode<SunBurstRecord>>()\n .startAngle(d => d.x0)\n .endAngle(d => d.x1)\n .innerRadius(d => Math.sqrt(d.y0))\n .outerRadius(d => Math.sqrt(d.y1))\n .cornerRadius(3)\n\n const tooltip = d3.select('body').append('div')\n .attr('class', styles.tooltip)\n .style('opacity', 0)\n .style('position', 'absolute')\n\n // Function to reset to original view\n const resetView = () => {\n focusedNodeRef.current = null\n\n const transition = d3.transition()\n .duration(750)\n .ease(d3.easeCubicInOut)\n\n // First show all elements\n paths.style('opacity', 1)\n\n paths.transition(transition as unknown as SunburstTransition)\n .attrTween('d', (d) => {\n const node = d as ExtendedNode\n\n return (t: number) => {\n // Calculate interpolated positions\n const currX0 = d3.interpolate(node.x0, node.x0Original)(t)\n const currX1 = d3.interpolate(node.x1, node.x1Original)(t)\n const currY0 = d3.interpolate(node.y0, node.y0Original)(t)\n const currY1 = d3.interpolate(node.y1, node.y1Original)(t)\n\n // Update node positions continuously\n node.x0 = currX0\n node.x1 = currX1\n node.y0 = currY0\n node.y1 = currY1\n\n const interpolatedArc = createInterpolatedArc(currX0, currX1, currY0, currY1, radius)\n\n return interpolatedArc(node) || ''\n }\n })\n\n // Restore cursor style based on whether nodes have children\n paths.style('cursor', d => (!d.children || d.children.length === 0) ? 'default' : 'pointer')\n\n // Reset center button cursor\n centerResetButton.style('cursor', 'default')\n\n // Update labels\n updateLabels(transition, nodes, true)\n }\n\n // Function to handle click and expand\n const handleClick = (event: MouseEvent, clickedNode: d3.HierarchyRectangularNode<SunBurstRecord>) => {\n event.stopPropagation()\n\n // If already focused on a node, don't allow clicking on other segments\n // Only allow reset through the center button\n if (focusedNodeRef.current) {\n return\n }\n\n // Don't allow clicking on leaf nodes (nodes without children)\n if (!clickedNode.children || clickedNode.children.length === 0) {\n return\n }\n\n focusedNodeRef.current = clickedNode\n\n const transition = d3.transition()\n .duration(750)\n .ease(d3.easeCubicInOut)\n\n // Zoom to clicked node - scale to fill the entire circle\n const clickedOriginal = clickedNode as ExtendedNode\n\n // Ensure we use the original x values for proper scaling\n // The x-scale maps the clicked node's angular extent to the full circle\n const xScale = d3.scaleLinear()\n .domain([clickedOriginal.x0Original, clickedOriginal.x1Original])\n .range([0, 2 * Math.PI])\n .clamp(true) // Ensure values stay within bounds\n\n // For the radial scale, always use the full radius available\n // Find the deepest descendant to ensure all children fit\n const descendants = nodes.filter(d => isParentOf(clickedNode, d))\n const maxChildRadius = Math.max(...descendants.map(d => (d as ExtendedNode).y1Original))\n\n // Always scale to use the full radius, regardless of original size\n const yScale = d3.scaleLinear()\n .domain([clickedOriginal.y0Original, maxChildRadius])\n .range([0, radius * radius])\n .clamp(true) // Ensure values stay within bounds\n\n // First, immediately hide elements that shouldn't be visible\n paths.style('opacity', (d) => isParentOf(clickedNode, d) ? 1 : 0)\n\n paths.transition(transition as unknown as SunburstTransition)\n .attrTween('d', (d) => {\n const node = d as ExtendedNode\n // Only transform nodes that are descendants of the clicked node\n if (!isParentOf(clickedNode, d)) {\n // Keep them hidden\n return () => ''\n }\n\n // Calculate new positions based on the original positions\n // ALWAYS scale to fill the full circle, no minimum size preservation\n const newX0 = xScale(node.x0Original)\n let newX1 = xScale(node.x1Original)\n\n // Ensure proper scaling even for very small segments\n // The clicked node's extent should always map to full circle\n if (newX1 <= newX0) {\n // Force proper angular extent based on proportion\n const proportion = (node.x1Original - node.x0Original) / (clickedOriginal.x1Original - clickedOriginal.x0Original)\n newX1 = newX0 + (2 * Math.PI * proportion)\n }\n\n // For radial positions, scale appropriately\n let newY0, newY1\n if (node === clickedNode) {\n // The clicked node itself should fill from center\n newY0 = 0\n // If it has children, leave room for them; otherwise fill to edge\n if (node.children && node.children.length > 0) {\n const childrenY0 = Math.min(...node.children.map(c => (c as ExtendedNode).y0Original))\n newY1 = yScale(childrenY0) * 0.98 // Very slight gap for visual separation\n } else {\n newY1 = radius * radius * 0.98 // Fill almost to edge\n }\n } else {\n // Child nodes should be scaled to fill the remaining space proportionally\n // NO minimum size enforcement - pure proportional scaling\n newY0 = yScale(node.y0Original)\n newY1 = yScale(node.y1Original)\n }\n\n // Use current positions as start (they should be at original if not previously zoomed)\n const startX0 = node.x0\n const startX1 = node.x1\n const startY0 = node.y0\n const startY1 = node.y1\n\n return (t: number) => {\n // Calculate interpolated positions\n const currX0 = d3.interpolate(startX0, newX0)(t)\n const currX1 = d3.interpolate(startX1, newX1)(t)\n const currY0 = d3.interpolate(startY0, newY0)(t)\n const currY1 = d3.interpolate(startY1, newY1)(t)\n\n // Update node positions continuously\n node.x0 = currX0\n node.x1 = currX1\n node.y0 = currY0\n node.y1 = currY1\n\n const interpolatedArc = createInterpolatedArc(currX0, currX1, currY0, currY1, radius)\n\n return interpolatedArc(node) || ''\n }\n })\n\n // Update labels for zoomed view\n updateLabels(transition, nodes.filter(d => isParentOf(clickedNode, d)), false)\n\n // Update cursor style to indicate segments are not clickable\n paths.style('cursor', 'default')\n\n // Update center button to be clickable\n centerResetButton.style('cursor', 'pointer')\n }\n\n // Helper function to check if a node is parent of another\n const isParentOf = (parent: d3.HierarchyNode<SunBurstRecord>, descendant: d3.HierarchyNode<SunBurstRecord>): boolean => {\n if (parent === descendant) return true\n let current = descendant.parent\n while (current) {\n if (current === parent) return true\n current = current.parent\n }\n return false\n }\n\n const paths = g.selectAll('path')\n .data(nodes.filter(d => d.depth > 0 && d.value && d.value > 0))\n .enter().append('path')\n .attr('d', d => arc(d) || '')\n .attr('fill', d => {\n let ancestor = d\n while (ancestor.depth > 1 && ancestor.parent) {\n ancestor = ancestor.parent\n }\n return getColor(ancestor.data.name, d.depth)\n })\n .attr('stroke', () => {\n // Get computed border color from theme\n const computedStyle = window.getComputedStyle(svgRef.current!)\n return computedStyle.getPropertyValue('--color-border') || '#e2e8f0'\n })\n .attr('stroke-width', 2)\n .style('cursor', d => (!d.children || d.children.length === 0) ? 'default' : 'pointer')\n .on('click', handleClick)\n .on('mouseover', function(event, d) {\n // Don't show hover effect if already focused\n if (focusedNodeRef.current) {\n return\n }\n\n const hoveredElement = event.currentTarget as Element\n\n // Show tooltip for all nodes\n tooltip.transition()\n .duration(200)\n .style('opacity', 1)\n\n const value = d.value || 0\n const percentage = ((value / (root.value || 1)) * 100).toFixed(1)\n\n tooltip.html(`\n <div><strong>${d.data.name}</strong></div>\n <div>Value: ${value}</div>\n <div>${percentage}% of total</div>\n `)\n .style('left', ((event as MouseEvent).pageX + 10) + 'px')\n .style('top', ((event as MouseEvent).pageY - 28) + 'px')\n\n // Apply blur to all other segments\n paths.each(function() {\n if (this !== hoveredElement) {\n d3.select(this)\n .transition()\n .duration(200)\n .style('opacity', 0.3)\n .style('filter', 'blur(1px)')\n } else {\n d3.select(this)\n .transition()\n .duration(200)\n .style('opacity', 1)\n .style('filter', 'none')\n }\n })\n })\n .on('mouseout', function() {\n // Hide tooltip\n tooltip.transition()\n .duration(500)\n .style('opacity', 0)\n\n // Reset all segments\n paths\n .transition()\n .duration(200)\n .style('opacity', 1)\n .style('filter', 'none')\n })\n .on('mousemove', function(event) {\n // Update tooltip position on mouse move\n tooltip\n .style('left', ((event as MouseEvent).pageX + 10) + 'px')\n .style('top', ((event as MouseEvent).pageY - 28) + 'px')\n })\n\n const shouldDisplayLabel = (d: d3.HierarchyRectangularNode<SunBurstRecord>) => {\n const angle = d.x1 - d.x0\n // When zoomed in, be more lenient with label display since segments are larger\n const minAngle = focusedNodeRef.current ? 0.05 : 0.15\n return angle > minAngle && d.depth <= 2\n }\n\n // Function to update labels after transitions\n const updateLabels = (transition: d3.Transition<d3.BaseType, unknown, d3.BaseType, unknown>, visibleNodes: d3.HierarchyRectangularNode<SunBurstRecord>[], _isReset: boolean) => {\n // Remove old labels\n g.selectAll('text.segment-label').remove()\n g.selectAll('text.center-label').remove()\n\n // Wait for transition to complete before adding new labels\n transition.on('end', () => {\n // Filter out the focused node itself when zoomed (it's shown in center)\n const nodesToLabel = visibleNodes.filter(d => {\n if (focusedNodeRef.current && d === focusedNodeRef.current) {\n return false // Don't show label for the zoomed parent node\n }\n return d.depth > 0 && d.value && d.value > 0 && shouldDisplayLabel(d)\n })\n\n g.selectAll('text.segment-label')\n .data(nodesToLabel)\n .enter().append('text')\n .attr('class', 'segment-label')\n .attr('transform', d => {\n const angle = (d.x0 + d.x1) / 2\n const radiusVal = (Math.sqrt(d.y0) + Math.sqrt(d.y1)) / 2\n const x = Math.cos(angle - Math.PI / 2) * radiusVal\n const y = Math.sin(angle - Math.PI / 2) * radiusVal\n return `translate(${x},${y})`\n })\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .attr('font-size', d => d.depth === 1 ? '13px' : '11px')\n .attr('fill', d => {\n let ancestor = d\n while (ancestor.depth > 1 && ancestor.parent) {\n ancestor = ancestor.parent\n }\n const segmentColor = getColor(ancestor.data.name, d.depth)\n return getTextColor(segmentColor)\n })\n .attr('font-weight', '600')\n .style('pointer-events', 'none')\n .style('text-shadow', d => {\n let ancestor = d\n while (ancestor.depth > 1 && ancestor.parent) {\n ancestor = ancestor.parent\n }\n const segmentColor = getColor(ancestor.data.name, d.depth)\n const textColor = getTextColor(segmentColor)\n // Add subtle shadow for better readability\n const shadowColor = textColor === '#ffffff' ? 'rgba(0,0,0,0.3)' : 'rgba(255,255,255,0.3)'\n return `0 1px 1px ${shadowColor}`\n })\n .text(d => {\n const maxLength = d.depth === 1 ? 12 : 8\n return d.data.name.substring(0, maxLength)\n })\n .style('opacity', 0)\n .transition()\n .duration(200)\n .style('opacity', 1)\n\n // Update center text\n const currentNode = focusedNodeRef.current || root\n const computedStyle = window.getComputedStyle(svgRef.current!)\n const centerTextColor = computedStyle.getPropertyValue('--text-primary') ||\n (computedStyle.getPropertyValue('--bg-primary') === '#000000' ||\n computedStyle.getPropertyValue('color-scheme') === 'dark' ? '#ffffff' : '#000000')\n\n g.append('text')\n .attr('class', 'center-label')\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .attr('font-size', '18px')\n .attr('font-weight', 'bold')\n .attr('fill', centerTextColor)\n .style('pointer-events', 'none')\n .text(currentNode === root ? (centerLabel || data.name || 'Total') : currentNode.data.name)\n .style('opacity', 0)\n .transition()\n .duration(200)\n .style('opacity', 1)\n\n g.append('text')\n .attr('class', 'center-label')\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .attr('y', 20)\n .attr('font-size', '14px')\n .attr('font-weight', '500')\n .attr('fill', centerTextColor)\n .style('pointer-events', 'none')\n .text(`${(currentNode.value || 0).toLocaleString()} ${unit}`)\n .style('opacity', 0)\n .transition()\n .duration(200)\n .style('opacity', 1)\n })\n }\n\n // Add invisible center reset button (circle in the middle)\n const centerRadius = Math.sqrt(nodes[0].y0) || radius * 0.3\n\n const centerResetButton = g.append('circle')\n .attr('class', 'center-reset-button')\n .attr('r', centerRadius)\n .attr('fill', 'transparent')\n .style('cursor', 'default')\n .on('click', () => {\n if (focusedNodeRef.current) {\n resetView()\n }\n })\n .on('mouseover', function() {\n if (focusedNodeRef.current) {\n d3.select(this)\n .transition()\n .duration(150)\n .attr('fill', 'rgba(100, 100, 100, 0.1)')\n .attr('stroke', 'rgba(100, 100, 100, 0.3)')\n .attr('stroke-width', 2)\n }\n })\n .on('mouseout', function() {\n if (focusedNodeRef.current) {\n d3.select(this)\n .transition()\n .duration(150)\n .attr('fill', 'transparent')\n .attr('stroke', 'none')\n }\n })\n\n // Calculate center text color - get computed theme color\n const computedStyle = window.getComputedStyle(svgRef.current!)\n const centerTextColor = computedStyle.getPropertyValue('--text-primary') ||\n (computedStyle.getPropertyValue('--bg-primary') === '#000000' ||\n computedStyle.getPropertyValue('color-scheme') === 'dark' ? '#ffffff' : '#000000')\n\n // Add center text\n g.append('text')\n .attr('class', 'center-label')\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .attr('font-size', '18px')\n .attr('font-weight', 'bold')\n .attr('fill', centerTextColor)\n .style('pointer-events', 'none')\n .text(centerLabel || data.name || 'Total')\n\n g.append('text')\n .attr('class', 'center-label')\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .attr('y', 20)\n .attr('font-size', '14px')\n .attr('font-weight', '500')\n .attr('fill', centerTextColor)\n .style('pointer-events', 'none')\n .text(`${(root.value || 0).toLocaleString()} ${unit}`)\n\n g.selectAll('text.segment-label')\n .data(nodes.filter(d => d.depth > 0 && d.value && d.value > 0 && shouldDisplayLabel(d)))\n .enter().append('text')\n .attr('class', 'segment-label')\n .attr('transform', d => {\n const angle = (d.x0 + d.x1) / 2\n const radiusVal = (Math.sqrt(d.y0) + Math.sqrt(d.y1)) / 2\n const x = Math.cos(angle - Math.PI / 2) * radiusVal\n const y = Math.sin(angle - Math.PI / 2) * radiusVal\n return `translate(${x},${y})`\n })\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .attr('font-size', d => d.depth === 1 ? '13px' : '11px')\n .attr('fill', d => {\n let ancestor = d\n while (ancestor.depth > 1 && ancestor.parent) {\n ancestor = ancestor.parent\n }\n const segmentColor = getColor(ancestor.data.name, d.depth)\n return getTextColor(segmentColor)\n })\n .attr('font-weight', '600')\n .style('pointer-events', 'none')\n .style('text-shadow', d => {\n let ancestor = d\n while (ancestor.depth > 1 && ancestor.parent) {\n ancestor = ancestor.parent\n }\n const segmentColor = getColor(ancestor.data.name, d.depth)\n const textColor = getTextColor(segmentColor)\n // Add subtle shadow for better readability\n const shadowColor = textColor === '#ffffff' ? 'rgba(0,0,0,0.3)' : 'rgba(255,255,255,0.3)'\n return `0 1px 1px ${shadowColor}`\n })\n .text(d => {\n const maxLength = d.depth === 1 ? 12 : 8\n return d.data.name.substring(0, maxLength)\n })\n\n return () => {\n tooltip.remove()\n }\n }, [data, width, height, colorMap, radius, tagColors, unit, centerLabel, getColor])\n\n return (\n <div className={styles.container}>\n <h3 className={styles.title}>{title}</h3>\n <svg\n ref={svgRef}\n width={width}\n height={height}\n className={styles.chart}\n />\n </div>\n )\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 ✕\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":["styles","_jsxs","_jsx","CalendarIcon","_Fragment","getTextColor"],"mappings":"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"}
|