@stfrigerio/sito-template 0.1.74 → 0.1.76
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/Calendar/Calendar.d.ts.map +1 -1
- package/dist/index.esm.js +5 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/styles.css.map +1 -1
- package/package.json +1 -1
- package/storybook-static/assets/{ASCIIText.stories-j8xsB1TG.js → ASCIIText.stories-jyeGS_ve.js} +1 -1
- package/storybook-static/assets/{AllAtoms.stories--6Uw2Fcr.js → AllAtoms.stories-CemMq1qd.js} +1 -1
- package/storybook-static/assets/{AnimatedContent.stories-etc-9Hta.js → AnimatedContent.stories-DffuqOCI.js} +1 -1
- package/storybook-static/assets/{AnimatedList.stories-DqVxA_Ky.js → AnimatedList.stories-DuwFQFkj.js} +1 -1
- package/storybook-static/assets/{Antigravity.stories-DeqwaQLY.js → Antigravity.stories-DcbmxH5R.js} +1 -1
- package/storybook-static/assets/{ArrayInput.stories-97t9Gs5T.js → ArrayInput.stories-DvZKodHx.js} +1 -1
- package/storybook-static/assets/{Aurora.stories-DW_vRleP.js → Aurora.stories-BQOm4LDu.js} +1 -1
- package/storybook-static/assets/{Beams.stories-DA9Y3vcg.js → Beams.stories-CzdaOr3E.js} +1 -1
- package/storybook-static/assets/{BlobCursor.stories-tKi0zBTb.js → BlobCursor.stories-DKhEEylD.js} +1 -1
- package/storybook-static/assets/{BlurText.stories-CKH4Rjq3.js → BlurText.stories-BXn21RBW.js} +1 -1
- package/storybook-static/assets/{BooleansHeatmap.stories-Bly1P6__.js → BooleansHeatmap.stories-wo9Pvb36.js} +1 -1
- package/storybook-static/assets/{BorderGlow.stories-Czy1UhDj.js → BorderGlow.stories-BVoYeD5v.js} +1 -1
- package/storybook-static/assets/{BubbleMenu.stories-Bf8N9TBs.js → BubbleMenu.stories-dqsJINuc.js} +1 -1
- package/storybook-static/assets/{Button-CfCaQiHk.js → Button-C8DVgvIi.js} +1 -1
- package/storybook-static/assets/Button-Cx1LZrA2.css +1 -0
- package/storybook-static/assets/{Button.stories-BDUQ6PmY.js → Button.stories-X7b76nlX.js} +1 -1
- package/storybook-static/assets/{Calendar.stories-Ds0V4NID.js → Calendar.stories-D0Uw8SPv.js} +2 -2
- package/storybook-static/assets/{Card-DizJF4F1.js → Card-C1CU1aJ4.js} +1 -1
- package/storybook-static/assets/{Card.stories-EwdVtjkF.js → Card.stories-pOZ_I_3_.js} +1 -1
- package/storybook-static/assets/{CardNav.stories-DLmxJsQG.js → CardNav.stories-OkPJO-Ni.js} +1 -1
- package/storybook-static/assets/{Carousel.stories-BPsb3J9A.js → Carousel.stories-D3jZVWZF.js} +1 -1
- package/storybook-static/assets/{Checkbox-DGpAt-8J.js → Checkbox-CjfwEqdP.js} +1 -1
- package/storybook-static/assets/{Checkbox.stories-CJTpePMc.js → Checkbox.stories-BklK9_jk.js} +1 -1
- package/storybook-static/assets/{ChromaGrid.stories-DaGNUwWg.js → ChromaGrid.stories-Byrw6uQA.js} +1 -1
- package/storybook-static/assets/{CircularGallery.stories-Dsu6Gscs.js → CircularGallery.stories-fLTqpbyo.js} +1 -1
- package/storybook-static/assets/{CircularText.stories-CyptnEcC.js → CircularText.stories-BA-dJIzs.js} +1 -1
- package/storybook-static/assets/{ClickSpark.stories-ZJp1SZBJ.js → ClickSpark.stories-DoEJmAGn.js} +1 -1
- package/storybook-static/assets/{ColorBends.stories-DuwrILJ4.js → ColorBends.stories-DlI5eNgp.js} +1 -1
- package/storybook-static/assets/{CountUp.stories-D7YnDOqK.js → CountUp.stories-DC06me0h.js} +1 -1
- package/storybook-static/assets/{Counter.stories-Dj17FOO4.js → Counter.stories-B0_x7SnO.js} +1 -1
- package/storybook-static/assets/{Crosshair.stories-C1CdFmHt.js → Crosshair.stories-MQfVFGQ7.js} +1 -1
- package/storybook-static/assets/{Cubes.stories-B44CMSHQ.js → Cubes.stories-CB5LyVAa.js} +1 -1
- package/storybook-static/assets/{CurvedLoop.stories-DPaXkUxA.js → CurvedLoop.stories-pad6C9il.js} +1 -1
- package/storybook-static/assets/{DarkVeil.stories-lvKTxlx4.js → DarkVeil.stories-CjoNpRrA.js} +1 -1
- package/storybook-static/assets/{DateInput-egINzuHs.js → DateInput-BOP5MJAA.js} +1 -1
- package/storybook-static/assets/{DateInput.stories-DAh1TDWl.js → DateInput.stories-DpytWXTi.js} +1 -1
- package/storybook-static/assets/{DecayCard.stories-xDW2Su7z.js → DecayCard.stories-Ci8mCDU2.js} +1 -1
- package/storybook-static/assets/{DecryptedText.stories-D_g3NeXi.js → DecryptedText.stories-_OcmqlGZ.js} +1 -1
- package/storybook-static/assets/{Dither.stories-hREUT18G.js → Dither.stories-CoakUTGz.js} +1 -1
- package/storybook-static/assets/{Dock.stories-KnYyIfju.js → Dock.stories-RZsDkvOK.js} +1 -1
- package/storybook-static/assets/{EditFAB.stories-BgPV7Q3I.js → EditFAB.stories-BYgIa7Ft.js} +1 -1
- package/storybook-static/assets/{EvilEye.stories-D_TG93UD.js → EvilEye.stories-C9-B_l7O.js} +1 -1
- package/storybook-static/assets/{FadeContent.stories-DRS18vpt.js → FadeContent.stories-BSUfS-Pa.js} +1 -1
- package/storybook-static/assets/{FaultyTerminal.stories-l31sYY5m.js → FaultyTerminal.stories-BaztxBZy.js} +1 -1
- package/storybook-static/assets/{Fbo-_jKxR3DO.js → Fbo-BckR5Q0w.js} +1 -1
- package/storybook-static/assets/{FloatingLines.stories-DpciNTwH.js → FloatingLines.stories-B48w4g-P.js} +1 -1
- package/storybook-static/assets/{FlowingMenu.stories-CPapwilW.js → FlowingMenu.stories-CGiY3eRk.js} +1 -1
- package/storybook-static/assets/{FluidGlass.stories-DgqAN5En.js → FluidGlass.stories-CHa9ViPX.js} +1 -1
- package/storybook-static/assets/{Folder.stories-BVBYFrB4.js → Folder.stories-BolWKAzo.js} +1 -1
- package/storybook-static/assets/{FuzzyText.stories-DlH6urgZ.js → FuzzyText.stories-CSRaTOLX.js} +1 -1
- package/storybook-static/assets/{Galaxy.stories-CT09PFwB.js → Galaxy.stories-CIg8QFfb.js} +1 -1
- package/storybook-static/assets/{GhostCursor.stories-BmBNNHCd.js → GhostCursor.stories-BQpjOfNR.js} +1 -1
- package/storybook-static/assets/{GlareHover.stories-BXuPH4-V.js → GlareHover.stories-Di_VEr2R.js} +1 -1
- package/storybook-static/assets/{GlassSurface.stories-BcjW_8sa.js → GlassSurface.stories-DAkIcgOf.js} +1 -1
- package/storybook-static/assets/{GlitchText.stories-BhylvyRh.js → GlitchText.stories-BxcuVmW5.js} +1 -1
- package/storybook-static/assets/{GooeyNav.stories-DuVJaLD4.js → GooeyNav.stories-CTW-U7xs.js} +1 -1
- package/storybook-static/assets/{GradientBlinds.stories-ds-mLLn_.js → GradientBlinds.stories-fBqlT4g6.js} +1 -1
- package/storybook-static/assets/{GradientText.stories-DFZKaqGK.js → GradientText.stories-BZerGqdF.js} +1 -1
- package/storybook-static/assets/{Grainient.stories-4Asti0DW.js → Grainient.stories-CzqvhFb3.js} +1 -1
- package/storybook-static/assets/{GridMotion.stories-B4vha52N.js → GridMotion.stories-CfjnoneJ.js} +1 -1
- package/storybook-static/assets/{ImageSlideshow.stories-DtlLSZpX.js → ImageSlideshow.stories-DQvn07Dy.js} +1 -1
- package/storybook-static/assets/{Iridescence.stories-CRk1LpYm.js → Iridescence.stories-DZ0dT4zy.js} +1 -1
- package/storybook-static/assets/{LaserFlow.stories-CmyA90TG.js → LaserFlow.stories-CZg0PMHs.js} +1 -1
- package/storybook-static/assets/{LetterGlitch.stories-DxHgF2Yy.js → LetterGlitch.stories-BNqR58lP.js} +1 -1
- package/storybook-static/assets/{LightPillar.stories-BuIgrXqL.js → LightPillar.stories-DkmTFDSR.js} +1 -1
- package/storybook-static/assets/{LightRays.stories-Sz1QNjAs.js → LightRays.stories-CYtKgl66.js} +1 -1
- package/storybook-static/assets/{Lightning.stories-lU8Z2_gI.js → Lightning.stories-CI_IBNog.js} +1 -1
- package/storybook-static/assets/{LineWaves.stories-BlJobTVg.js → LineWaves.stories-19E6lLvu.js} +1 -1
- package/storybook-static/assets/{LiquidChrome.stories--dbq1lwH.js → LiquidChrome.stories-Ik5wMITA.js} +1 -1
- package/storybook-static/assets/{LiquidEther.stories-GBPFMKr8.js → LiquidEther.stories-cRVhMCnV.js} +1 -1
- package/storybook-static/assets/{LoadingSpinner-DwJc055H.js → LoadingSpinner-B3jiWJ5i.js} +1 -1
- package/storybook-static/assets/{LoadingSpinner.stories-w9jb7-f3.js → LoadingSpinner.stories-7o51GOVb.js} +1 -1
- package/storybook-static/assets/{MagicRings.stories-ByQngRmz.js → MagicRings.stories-BdhXUzZR.js} +1 -1
- package/storybook-static/assets/{Magnet.stories-VfSBs056.js → Magnet.stories-BP_O9O9B.js} +1 -1
- package/storybook-static/assets/{MagnetLines.stories-naWI3y1X.js → MagnetLines.stories-DO5Vf2eN.js} +1 -1
- package/storybook-static/assets/{Masonry.stories-D65YoCut.js → Masonry.stories-CbvsjL9N.js} +1 -1
- package/storybook-static/assets/{MetaBalls.stories-Debj5Ssn.js → MetaBalls.stories-mzBfHDeT.js} +1 -1
- package/storybook-static/assets/{MetallicPaint.stories-Cw_rRmb6.js → MetallicPaint.stories-DwrE7et4.js} +1 -1
- package/storybook-static/assets/{MoodChart.stories-CPYfb3Vh.js → MoodChart.stories-BW4k1gRH.js} +1 -1
- package/storybook-static/assets/{MotionConfigContext-D6NZivNz.js → MotionConfigContext-C6KIXCCK.js} +1 -1
- package/storybook-static/assets/{Navbar.stories-BlXz9F4l.js → Navbar.stories-MCOlCO7j.js} +1 -1
- package/storybook-static/assets/{Noise.stories-d4cOtpBC.js → Noise.stories-BX29bXzI.js} +1 -1
- package/storybook-static/assets/NumberStepper-BO5RBIZk.css +1 -0
- package/storybook-static/assets/{NumberStepper-ZN01Ap-l.js → NumberStepper-CGuZE3IG.js} +1 -1
- package/storybook-static/assets/{NumberStepper.stories-VjvC6Mcm.js → NumberStepper.stories-CM1-xjqx.js} +1 -1
- package/storybook-static/assets/{Orb.stories-DbxZC5Pq.js → Orb.stories-C1U1NFn1.js} +1 -1
- package/storybook-static/assets/{OrbitImages.stories-DOl9acKl.js → OrbitImages.stories-_U1a6MJ2.js} +1 -1
- package/storybook-static/assets/{PieChart.stories-CjZMI917.js → PieChart.stories-U46uc40e.js} +1 -1
- package/storybook-static/assets/{PixelBlast.stories-OEKBAcU1.js → PixelBlast.stories--1zBJff-.js} +1 -1
- package/storybook-static/assets/{PixelCard.stories-CiiRb3ws.js → PixelCard.stories-CKIsLyL5.js} +1 -1
- package/storybook-static/assets/{PixelSnow.stories-BBhdEpdz.js → PixelSnow.stories-CR4xLE4U.js} +1 -1
- package/storybook-static/assets/{PixelTransition.stories-D1h3Den_.js → PixelTransition.stories-Dd9P0Ope.js} +1 -1
- package/storybook-static/assets/{Plasma.stories-D2nFMeJk.js → Plasma.stories-M-hYDX27.js} +1 -1
- package/storybook-static/assets/{Prism.stories-BnwL00ML.js → Prism.stories-DwfbD3cn.js} +1 -1
- package/storybook-static/assets/{PrismaticBurst.stories-CLhPte_s.js → PrismaticBurst.stories-CvPmYAX_.js} +1 -1
- package/storybook-static/assets/{ProfileCard.stories-BBZbrkcn.js → ProfileCard.stories-DP2eHRdZ.js} +1 -1
- package/storybook-static/assets/{QuantifiableHabitsChart.stories-BfiRGnfQ.js → QuantifiableHabitsChart.stories-RglnD2R_.js} +1 -1
- package/storybook-static/assets/{Radar.stories-D4ZyWw-C.js → Radar.stories-D-LhC9r4.js} +1 -1
- package/storybook-static/assets/{Ribbons.stories-By-8qFNy.js → Ribbons.stories-CJuxGieY.js} +1 -1
- package/storybook-static/assets/{RippleGrid.stories-BIX4S-Vo.js → RippleGrid.stories-D_3EPPTM.js} +1 -1
- package/storybook-static/assets/{RotatingText.stories-BOHcZ5K2.js → RotatingText.stories-DYP0oyH6.js} +1 -1
- package/storybook-static/assets/{ScrollFloat.stories-aNiacoFg.js → ScrollFloat.stories-Dzwz8uzu.js} +1 -1
- package/storybook-static/assets/{ScrollReveal.stories-DvWFu4ip.js → ScrollReveal.stories-C_EqHFb_.js} +1 -1
- package/storybook-static/assets/{ScrollVelocity.stories-DnFqV7uy.js → ScrollVelocity.stories-YdJitu_P.js} +1 -1
- package/storybook-static/assets/{SearchBar.stories-C_AjXbnk.js → SearchBar.stories-BJbLKP2g.js} +1 -1
- package/storybook-static/assets/{SearchableDropdown-BR5vgsXI.js → SearchableDropdown-fnf6ZW_h.js} +1 -1
- package/storybook-static/assets/{SearchableDropdown.stories-BDKkzAZj.js → SearchableDropdown.stories-CJ8_zZjz.js} +1 -1
- package/storybook-static/assets/{SelectInput-DKqA_OVH.js → SelectInput-DXau1Dph.js} +1 -1
- package/storybook-static/assets/{SelectInput.stories-CbFRJqhN.js → SelectInput.stories-DuPwC-pM.js} +1 -1
- package/storybook-static/assets/{ShapeBlur.stories-D72m8aFk.js → ShapeBlur.stories-BzSypzdO.js} +1 -1
- package/storybook-static/assets/{ShapeGrid.stories-B-BHl7mw.js → ShapeGrid.stories-CDkUZpth.js} +1 -1
- package/storybook-static/assets/{ShinyText.stories-Bv-OhYJ6.js → ShinyText.stories-CGKy0Lsc.js} +1 -1
- package/storybook-static/assets/{Silk.stories-CqAHanOq.js → Silk.stories-CChDBqxY.js} +1 -1
- package/storybook-static/assets/{SleepChart.stories-CZfGluFu.js → SleepChart.stories-WRltn-Jx.js} +1 -1
- package/storybook-static/assets/{Slider-DSsSUHGS.js → Slider-BeoCTJYT.js} +1 -1
- package/storybook-static/assets/{Slider.stories-CsRWFKJK.js → Slider.stories-DVeQHWs3.js} +1 -1
- package/storybook-static/assets/{SoftAurora.stories-DsabeFl6.js → SoftAurora.stories-DrO_ij-V.js} +1 -1
- package/storybook-static/assets/{SoundDemo.stories-BoZmCWQ8.js → SoundDemo.stories-f1ehfLPn.js} +1 -1
- package/storybook-static/assets/{SplashCursor.stories-CNbhLBnP.js → SplashCursor.stories-BECToVQy.js} +1 -1
- package/storybook-static/assets/{SpotlightCard.stories-DkQ5I1d8.js → SpotlightCard.stories-Ck8nALce.js} +1 -1
- package/storybook-static/assets/{Stack.stories-C_k-gD4B.js → Stack.stories-BdN1_7tM.js} +1 -1
- package/storybook-static/assets/{StaggeredMenu.stories-BvHCXOtg.js → StaggeredMenu.stories-CTDmplGV.js} +1 -1
- package/storybook-static/assets/{StarBorder.stories-CjgqvUI7.js → StarBorder.stories-Bwpc59IM.js} +1 -1
- package/storybook-static/assets/{SunburstChart.stories-CzQ8X8LJ.js → SunburstChart.stories-CNOZJwAZ.js} +1 -1
- package/storybook-static/assets/{Table.stories-CXHthPhd.js → Table.stories-Cd6TvRiK.js} +1 -1
- package/storybook-static/assets/{Tabs.stories-GyLjrMhv.js → Tabs.stories-BoVk_o27.js} +1 -1
- package/storybook-static/assets/{TargetCursor.stories-DeWDEn-s.js → TargetCursor.stories-DdklJLjf.js} +1 -1
- package/storybook-static/assets/{TextArea-C4_pRJa8.js → TextArea-BoTwFvlF.js} +1 -1
- package/storybook-static/assets/{TextArea.stories-fK1SqQgj.js → TextArea.stories-4mPBw5bl.js} +1 -1
- package/storybook-static/assets/{TextCursor.stories-DDazzNqN.js → TextCursor.stories-Dbz8i54O.js} +1 -1
- package/storybook-static/assets/{TextInput-jndRU6dX.js → TextInput-DTyHhomU.js} +1 -1
- package/storybook-static/assets/{TextInput.stories-CzTyBpKu.js → TextInput.stories-CjQMs9vK.js} +1 -1
- package/storybook-static/assets/{TextPressure.stories-LSGMK8CF.js → TextPressure.stories-Da2afCXS.js} +1 -1
- package/storybook-static/assets/{TextType.stories-C_wJ8HAS.js → TextType.stories-DP8FaemU.js} +1 -1
- package/storybook-static/assets/{ThemeSwitcher.stories-B9YxRdqX.js → ThemeSwitcher.stories-BOdoMWBr.js} +1 -1
- package/storybook-static/assets/{Threads.stories-CzJGdrhF.js → Threads.stories-Bsyw4BNf.js} +1 -1
- package/storybook-static/assets/{TimeInput.stories-C0mVKzgI.js → TimeInput.stories-3qbOV7Ls.js} +1 -1
- package/storybook-static/assets/{Toggle-ZNFl7Zf5.js → Toggle-Bwvgtrvs.js} +1 -1
- package/storybook-static/assets/{Toggle.stories-DeRA-IFt.js → Toggle.stories-BZa844c0.js} +1 -1
- package/storybook-static/assets/{ToggleButton-CfYinXVa.js → ToggleButton-BINAb7TQ.js} +1 -1
- package/storybook-static/assets/{ToggleButton.stories-CVKDSxt7.js → ToggleButton.stories-GWQ4L4ac.js} +1 -1
- package/storybook-static/assets/{TrueFocus.stories-o4-m4pDu.js → TrueFocus.stories-CiK6TsZ_.js} +1 -1
- package/storybook-static/assets/{VariableProximity.stories-BMVF76ti.js → VariableProximity.stories-DE-_f9_v.js} +1 -1
- package/storybook-static/assets/{Waves.stories-Bsm4cTNh.js → Waves.stories-Bah9ng0K.js} +1 -1
- package/storybook-static/assets/{check-CcGKVANr.js → check-bvk6C-TA.js} +1 -1
- package/storybook-static/assets/{chevron-down-BL6oos_p.js → chevron-down-Dnj3nVPe.js} +1 -1
- package/storybook-static/assets/{chevron-right-BOro2OVm.js → chevron-right-FoZPyhXE.js} +1 -1
- package/storybook-static/assets/client-Dyko2a81.js +1 -0
- package/storybook-static/assets/{createLucideIcon-X00nnVkp.js → createLucideIcon-DvNKQIkb.js} +1 -1
- package/storybook-static/assets/{download-CR0B0bUl.js → download-BEyY_c4w.js} +1 -1
- package/storybook-static/assets/{folder-NtiCUKr7.js → folder-Dr-EdDO1.js} +1 -1
- package/storybook-static/assets/{iconBase-D4ELiZwq.js → iconBase-daIQ2k2U.js} +1 -1
- package/storybook-static/assets/{iframe-0Lx_Gg0M.js → iframe-BmJYCQaV.js} +3 -3
- package/storybook-static/assets/{index-sWjLcHSO.js → index-8y2D1xIF.js} +1 -1
- package/storybook-static/assets/{index-UFKsHW_W.js → index-CCV231j6.js} +1 -1
- package/storybook-static/assets/{index-DC1KDIA7.js → index-GkLzrRJX.js} +1 -1
- package/storybook-static/assets/{proxy-BKn6lL2c.js → proxy-MAU_yIzM.js} +1 -1
- package/storybook-static/assets/{react-18-BPQ6iK-n.js → react-18-DCqWj-iG.js} +1 -1
- package/storybook-static/assets/{react-three-fiber.esm-CzGemEFc.js → react-three-fiber.esm-J8Ycqtkj.js} +1 -1
- package/storybook-static/assets/{search-C1RQusWF.js → search-T1_DPJWy.js} +1 -1
- package/storybook-static/assets/{settings-CSFhIwio.js → settings-D0WRQxad.js} +1 -1
- package/storybook-static/assets/{sun-BI1jVlRN.js → sun-D1G2h9I4.js} +1 -1
- package/storybook-static/assets/{trash-2-BH9Df1AO.js → trash-2-B7B7imFa.js} +1 -1
- package/storybook-static/assets/{use-animation-frame-cfKOttYo.js → use-animation-frame-C3OkOmFg.js} +1 -1
- package/storybook-static/assets/{use-in-view-CArLjB-c.js → use-in-view-BUiyIXbb.js} +1 -1
- package/storybook-static/assets/{use-motion-value-CDeI3wJO.js → use-motion-value-D1yqdG0l.js} +1 -1
- package/storybook-static/assets/{use-spring-C-KD4gvs.js → use-spring-BwMrSe4y.js} +1 -1
- package/storybook-static/assets/{use-transform-BZD0Xyag.js → use-transform-CTCcIVjx.js} +1 -1
- package/storybook-static/assets/{useSound-D-J1T6nx.js → useSound-C72L733V.js} +1 -1
- package/storybook-static/assets/{users-BNBikfx_.js → users-DMXSY-kZ.js} +1 -1
- package/storybook-static/assets/{x-CinnmsFm.js → x-DzTJWbpQ.js} +1 -1
- package/storybook-static/iframe.html +1 -1
- package/storybook-static/project.json +1 -1
- package/storybook-static/assets/Button-O-w2-ag3.css +0 -1
- package/storybook-static/assets/NumberStepper-vsuSLafY.css +0 -1
- package/storybook-static/assets/client-j5HQHA7g.js +0 -1
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/TimeInput.tsx","../src/components/organisms/ThemeProvider/ThemeProvider.tsx","../src/components/molecules/ThemeSwitcher/ThemeSwitcher.tsx","../src/components/molecules/Tabs/Tabs.tsx","../src/components/molecules/Toast/Toast.tsx","../src/components/molecules/Breadcrumb/Breadcrumb.tsx","../src/components/molecules/LiquidButton/LiquidButton.tsx","../src/components/molecules/StreamConsole/StreamConsole.tsx","../src/components/organisms/Calendar/DayEventCard.tsx","../src/components/organisms/Calendar/exportEvents.ts","../src/components/organisms/Calendar/Calendar.tsx","../src/components/organisms/Navbar/Navbar.tsx","../src/components/organisms/charts/MoodChart/MoodChart.tsx","../src/components/organisms/charts/QuantifiableHabitsChart/QuantifiableHabitsChart.tsx","../src/components/organisms/charts/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 { useMemo } from 'react';\nimport dayjs from 'dayjs';\nimport { MobileTimePicker } from '@mui/x-date-pickers/MobileTimePicker';\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';\nimport { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';\nimport { createTheme, ThemeProvider } from '@mui/material/styles';\nimport styles from './TimeInput.module.css';\n\nconst lightTheme = createTheme({\n palette: {\n mode: 'light',\n primary: { main: '#3b82f6' },\n background: {\n default: '#f8fafc',\n paper: '#ffffff',\n },\n text: {\n primary: '#0f172a',\n secondary: '#475569',\n },\n },\n});\n\nconst darkTheme = createTheme({\n palette: {\n mode: 'dark',\n primary: { main: '#f5b829' },\n background: {\n default: '#010907',\n paper: '#0e1a19',\n },\n text: {\n primary: '#f1f5f9',\n secondary: '#cbd5e1',\n },\n },\n});\n\nexport interface TimeInputProps {\n label: string;\n value: string;\n onChange: (newValue: string) => void;\n placeholder?: string;\n onFocus?: () => void;\n onBlur?: () => void;\n error?: boolean;\n success?: boolean;\n loading?: boolean;\n disabled?: boolean;\n required?: boolean;\n className?: string;\n}\n\nexport function TimeInput({\n label,\n value,\n onChange,\n error = false,\n success = false,\n loading = false,\n disabled = false,\n required = false,\n className = '',\n}: Readonly<TimeInputProps>) {\n const dayjsValue = value ? dayjs(`2000-01-01 ${value}`) : null;\n\n const isDark =\n typeof document !== 'undefined' &&\n !!document.documentElement.getAttribute('data-theme')?.includes('dark');\n const muiTheme = useMemo(() => (isDark ? darkTheme : lightTheme), [isDark]);\n\n const getContainerClassName = () => {\n const classes = [styles.timeInput];\n if (error) classes.push(styles.error);\n if (success) classes.push(styles.success);\n if (loading) classes.push(styles.loading);\n if (disabled) classes.push(styles.disabled);\n if (className) classes.push(className);\n return classes.join(' ');\n };\n\n return (\n <div className={getContainerClassName()}>\n {label && (\n <label className={styles.label}>\n {label}\n {required && <span className={styles.required}>*</span>}\n </label>\n )}\n <ThemeProvider theme={muiTheme}>\n <LocalizationProvider dateAdapter={AdapterDayjs}>\n <MobileTimePicker\n value={dayjsValue}\n onChange={(newValue) => {\n onChange(newValue ? newValue.format('HH:mm') : '');\n }}\n ampm={false}\n views={['hours', 'minutes']}\n disabled={disabled || loading}\n slotProps={{\n textField: {\n size: 'small',\n fullWidth: true,\n className: styles.picker,\n sx: {\n '& .MuiPickersOutlinedInput-root': {\n fontFamily:\n \"'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, monospace\",\n fontSize: 'var(--font-size-lg)',\n borderRadius: 'var(--radius-lg)',\n color: 'var(--color-text) !important',\n '& .MuiPickersOutlinedInput-notchedOutline': {\n borderWidth: '2px !important',\n borderColor: 'var(--color-border) !important',\n },\n '&:hover .MuiPickersOutlinedInput-notchedOutline': {\n borderColor: 'var(--color-border-hover) !important',\n },\n '&.Mui-focused .MuiPickersOutlinedInput-notchedOutline': {\n borderColor: 'var(--color-primary) !important',\n },\n },\n '& .MuiIconButton-root': {\n color: 'var(--color-text-secondary) !important',\n },\n },\n },\n }}\n />\n </LocalizationProvider>\n </ThemeProvider>\n </div>\n );\n}\n","import React, { createContext, useContext, useState, useEffect } from 'react';\n\nexport type Theme = 'light' | 'dark' | 'lossito' | 'lossito-dark' | 'dao' | 'dao-dark' | 'crt';\n\ninterface ThemeContextType {\n theme: Theme;\n setTheme: (theme: Theme) => void;\n toggleTheme: () => void;\n}\n\nconst ThemeContext = createContext<ThemeContextType | undefined>(undefined);\n\nexport const useTheme = () => {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within a ThemeProvider');\n }\n return context;\n};\n\n/** Safe version of useTheme that returns null when outside a ThemeProvider */\nexport const useThemeSafe = (): ThemeContextType | null => {\n return useContext(ThemeContext) ?? null;\n};\n\ninterface ThemeProviderProps {\n children: React.ReactNode;\n defaultTheme?: Theme;\n storageKey?: string;\n}\n\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({\n children,\n defaultTheme = 'light',\n storageKey = 'app-theme',\n}) => {\n const [theme, setThemeState] = useState<Theme>(() => {\n // Check localStorage first\n const stored = localStorage.getItem(storageKey);\n if (stored && ['light', 'dark', 'lossito', 'lossito-dark', 'dao', 'dao-dark', 'crt'].includes(stored)) {\n return stored as Theme;\n }\n // Check system preference\n if (window.matchMedia('(prefers-color-scheme: dark)').matches) {\n return 'dark';\n }\n return defaultTheme;\n });\n\n const setTheme = (newTheme: Theme) => {\n setThemeState(newTheme);\n localStorage.setItem(storageKey, newTheme);\n };\n\n const toggleTheme = () => {\n const themeOrder: Theme[] = ['light', 'dark', 'lossito', 'lossito-dark', 'dao', 'dao-dark', 'crt'];\n const currentIndex = themeOrder.indexOf(theme);\n const nextIndex = (currentIndex + 1) % themeOrder.length;\n setTheme(themeOrder[nextIndex]);\n };\n\n useEffect(() => {\n const root = document.documentElement;\n \n // Apply theme attribute\n root.setAttribute('data-theme', theme);\n \n // Apply dark class if needed\n if (theme.includes('dark')) {\n root.classList.add('dark');\n } else {\n root.classList.remove('dark');\n }\n }, [theme]);\n\n // Listen for system theme changes\n useEffect(() => {\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handleChange = (e: MediaQueryListEvent) => {\n const stored = localStorage.getItem(storageKey);\n if (!stored) {\n setThemeState(e.matches ? 'dark' : 'light');\n }\n };\n\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }, [storageKey]);\n\n return (\n <ThemeContext.Provider value={{ theme, setTheme, toggleTheme }}>\n {children}\n </ThemeContext.Provider>\n );\n};","import React from 'react';\nimport { motion } from 'framer-motion';\nimport { Sun, Moon } from 'lucide-react';\nimport { useThemeSafe, Theme } from '../../organisms/ThemeProvider/ThemeProvider';\nimport styles from './ThemeSwitcher.module.css';\n\nexport interface ThemeOption {\n value: Theme;\n label: string;\n icon: React.ReactNode;\n}\n\nexport interface ThemeSwitcherProps {\n variant?: 'button' | 'dropdown' | 'toggle';\n showLabel?: boolean;\n className?: string;\n currentTheme?: Theme;\n onThemeChange?: (theme: Theme) => void;\n themes?: ThemeOption[];\n}\n\nexport const ThemeSwitcher: React.FC<ThemeSwitcherProps> = ({\n variant = 'button',\n showLabel = false,\n className = '',\n currentTheme,\n onThemeChange,\n themes: customThemes,\n}) => {\n // Use safe version that returns null when outside a ThemeProvider\n const contextTheme = useThemeSafe();\n\n const theme = currentTheme ?? contextTheme?.theme ?? 'light';\n const setTheme = onThemeChange ?? contextTheme?.setTheme ?? (() => {});\n\n const defaultThemes: ThemeOption[] = [\n { value: 'light', label: 'Light', icon: <Sun /> },\n { value: 'dark', label: 'Dark', icon: <Moon /> },\n { value: 'lossito', label: 'Lossito Light', icon: '✨' },\n { value: 'lossito-dark', label: 'Lossito Dark', icon: '🌑' },\n { value: 'dao', label: 'Dao Light', icon: '⬜' },\n { value: 'dao-dark', label: 'Dao Dark', icon: '⬛' },\n ];\n\n const themes = customThemes ?? defaultThemes;\n\n const currentThemeIndex = themes.findIndex(t => t.value === theme);\n const currentThemeData = themes[currentThemeIndex] ?? themes[0];\n\n if (variant === 'toggle') {\n // Simple toggle between light and dark\n const isDark = theme.includes('dark');\n return (\n <motion.button\n className={`${styles.toggle} ${className}`}\n onClick={() => setTheme(isDark ? 'light' : 'dark')}\n whileTap={{ scale: 0.95 }}\n aria-label=\"Toggle theme\"\n >\n <motion.div\n className={styles.toggleTrack}\n animate={{ backgroundColor: isDark ? 'var(--color-primary)' : 'var(--color-border)' }}\n >\n <motion.div\n className={styles.toggleThumb}\n animate={{ x: isDark ? 24 : 0 }}\n transition={{ type: 'spring', stiffness: 500, damping: 30 }}\n >\n {isDark ? <Moon size={14} /> : <Sun size={14} />}\n </motion.div>\n </motion.div>\n {showLabel && <span className={styles.label}>{isDark ? 'Dark' : 'Light'}</span>}\n </motion.button>\n );\n }\n\n if (variant === 'dropdown') {\n return (\n <div className={`${styles.dropdown} ${className}`}>\n <motion.button\n className={styles.dropdownTrigger}\n whileTap={{ scale: 0.98 }}\n >\n {currentThemeData.icon}\n {showLabel && <span className={styles.label}>{currentThemeData.label}</span>}\n </motion.button>\n <motion.div\n className={styles.dropdownMenu}\n initial={{ opacity: 0, y: -10 }}\n animate={{ opacity: 1, y: 0 }}\n >\n {themes.map((t) => (\n <motion.button\n key={t.value}\n className={`${styles.dropdownItem} ${theme === t.value ? styles.active : ''}`}\n onClick={() => setTheme(t.value)}\n whileHover={{ x: 4 }}\n whileTap={{ scale: 0.98 }}\n >\n <span className={styles.icon}>{t.icon}</span>\n <span className={styles.text}>{t.label}</span>\n </motion.button>\n ))}\n </motion.div>\n </div>\n );\n }\n\n // Default button variant - cycles through themes\n return (\n <motion.button\n className={`${styles.button} ${className}`}\n onClick={() => {\n const nextIndex = (currentThemeIndex + 1) % themes.length;\n setTheme(themes[nextIndex].value);\n }}\n whileTap={{ scale: 0.95 }}\n whileHover={{ scale: 1.05 }}\n aria-label={`Current theme: ${currentThemeData.label}. Click to change.`}\n >\n <motion.div\n key={theme}\n initial={{ rotate: -180, opacity: 0 }}\n animate={{ rotate: 0, opacity: 1 }}\n exit={{ rotate: 180, opacity: 0 }}\n transition={{ duration: 0.3 }}\n className={styles.iconWrapper}\n >\n {currentThemeData.icon}\n </motion.div>\n {showLabel && <span className={styles.label}>{currentThemeData.label}</span>}\n </motion.button>\n );\n};","import React from 'react';\nimport { Info, Github, SquareKanban } from 'lucide-react';\nimport { motion } from 'framer-motion';\nimport styles from './Tabs.module.css';\n\nexport interface Tab {\n id: string;\n label: string;\n icon?: React.ComponentType<object> | React.ReactNode;\n}\n\nexport interface TabsProps {\n activeTab: string;\n onTabChange: (tab: string) => void;\n tabs?: Tab[];\n className?: string;\n /** Stretch each tab to share the available width equally */\n fullWidth?: boolean;\n}\n\n// Default tabs for backwards compatibility\nconst defaultTabs: Tab[] = [\n { id: 'details', icon: Info, label: 'Dettagli' },\n { id: 'github', icon: Github, label: 'GitHub' },\n { id: 'jira', icon: SquareKanban, label: 'Jira' },\n { id: 'functional', icon: Info, label: 'Analisi funzionale' }\n];\n\n// Legacy type for backwards compatibility\nexport type TabType = 'details' | 'github' | 'jira' | 'functional';\n\nexport const Tabs: React.FC<TabsProps> = ({\n activeTab,\n onTabChange,\n tabs: customTabs,\n className = '',\n fullWidth = false\n}) => {\n const tabs = customTabs ?? defaultTabs;\n\n return (\n <div className={`${styles.tabs} ${fullWidth ? styles.fullWidth : ''} ${className}`}>\n {tabs.map((tab) => {\n const isActive = activeTab === tab.id;\n \n return (\n <motion.button\n key={tab.id}\n className={styles.tab}\n data-active={isActive}\n onClick={() => onTabChange(tab.id)}\n style={{ position: 'relative' }}\n >\n <motion.div\n animate={{\n rotate: isActive ? [0, -10, 10, -5, 5, 0] : 0,\n }}\n transition={{\n rotate: {\n duration: 0.5,\n ease: 'easeInOut'\n }\n }}\n >\n {tab.icon && (\n React.isValidElement(tab.icon) ? (\n <span className={styles.tabIcon}>{tab.icon}</span>\n ) : (\n <span className={styles.tabIcon}>\n {React.createElement(tab.icon as React.ComponentType)}\n </span>\n )\n )}\n </motion.div>\n <span>{tab.label}</span>\n </motion.button>\n );\n })}\n </div>\n );\n};","import React, { useEffect, useState } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { createPortal } from 'react-dom';\nimport styles from './Toast.module.css';\n\nexport type ToastType = 'success' | 'error' | 'warning' | 'info';\n\nexport interface ToastData {\n id: string;\n type: ToastType;\n title?: string;\n message: string;\n duration?: number;\n}\n\ninterface ToastProps {\n toasts: ToastData[];\n removeToast: (id: string) => void;\n}\n\nconst getIcon = (type: ToastType) => {\n switch (type) {\n case 'success':\n return (\n <svg className={`${styles.icon} ${styles.iconSuccess}`} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n );\n case 'error':\n return (\n <svg className={`${styles.icon} ${styles.iconError}`} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n );\n case 'warning':\n return (\n <svg className={`${styles.icon} ${styles.iconWarning}`} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\" />\n </svg>\n );\n case 'info':\n return (\n <svg className={`${styles.icon} ${styles.iconInfo}`} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n );\n }\n};\n\nconst getToastStyle = (type: ToastType) => {\n switch (type) {\n case 'success': return styles.toastSuccess;\n case 'error': return styles.toastError;\n case 'warning': return styles.toastWarning;\n case 'info': return styles.toastInfo;\n default: return '';\n }\n};\n\nconst ToastItem: React.FC<{ toast: ToastData; removeToast: (id: string) => void }> = ({\n toast,\n removeToast,\n}) => {\n const [progress, setProgress] = useState(100);\n const duration = toast.duration || 5000;\n\n useEffect(() => {\n const timer = setTimeout(() => {\n removeToast(toast.id);\n }, duration);\n\n const interval = setInterval(() => {\n setProgress((prev) => {\n const newProgress = prev - 100 / (duration / 100);\n return newProgress <= 0 ? 0 : newProgress;\n });\n }, 100);\n\n return () => {\n clearTimeout(timer);\n clearInterval(interval);\n };\n }, [toast.id, duration, removeToast]);\n\n return (\n <motion.div\n className={`${styles.toast} ${getToastStyle(toast.type)}`}\n initial={{ opacity: 0, x: 100, scale: 0.9 }}\n animate={{ opacity: 1, x: 0, scale: 1 }}\n exit={{ opacity: 0, x: 100, scale: 0.9 }}\n transition={{ type: 'spring', stiffness: 500, damping: 40 }}\n layout\n >\n {getIcon(toast.type)}\n <div className={styles.content}>\n {toast.title && <p className={styles.title}>{toast.title}</p>}\n <p className={styles.message}>{toast.message}</p>\n </div>\n <button\n className={styles.closeButton}\n onClick={() => removeToast(toast.id)}\n aria-label=\"Close notification\"\n >\n <svg width=\"16\" height=\"16\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n <motion.div\n className={styles.progressBar}\n initial={{ width: '100%' }}\n animate={{ width: `${progress}%` }}\n style={{\n color: toast.type === 'success' ? '#10B981'\n : toast.type === 'error' ? '#EF4444'\n : toast.type === 'warning' ? '#F59E0B'\n : '#3B82F6',\n }}\n />\n </motion.div>\n );\n};\n\nexport const ToastContainer: React.FC<ToastProps> = ({ toasts, removeToast }) => {\n if (typeof document === 'undefined') return null;\n\n return createPortal(\n <div className={styles.toastContainer}>\n <AnimatePresence mode=\"sync\">\n {toasts.map((toast) => (\n <ToastItem key={toast.id} toast={toast} removeToast={removeToast} />\n ))}\n </AnimatePresence>\n </div>,\n document.body\n );\n};\n","import React from 'react';\nimport { ChevronRight } from 'lucide-react';\nimport styles from './Breadcrumb.module.css';\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n}\n\nexport interface BreadcrumbProps {\n items: BreadcrumbItem[];\n onNavigate?: (href: string) => void;\n className?: string;\n}\n\n/**\n * Breadcrumb Component\n *\n * Navigation breadcrumb trail. Router-agnostic: pass onNavigate to handle\n * clicks on breadcrumb links (e.g. with react-router's navigate function).\n *\n * @example\n * <Breadcrumb\n * items={[\n * { label: 'Home', href: '/' },\n * { label: 'Settings', href: '/settings' },\n * { label: 'Profile' },\n * ]}\n * onNavigate={(href) => navigate(href)}\n * />\n */\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({ items, onNavigate, className = '' }) => {\n return (\n <nav className={`${styles.breadcrumb} ${className}`} aria-label=\"Breadcrumb\">\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n\n return (\n <React.Fragment key={index}>\n {index > 0 && <ChevronRight size={14} className={styles.separator} />}\n {isLast || !item.href ? (\n <span className={`${styles.item} ${isLast ? styles.current : ''}`}>\n {item.label}\n </span>\n ) : (\n <button\n className={`${styles.item} ${styles.link}`}\n onClick={() => onNavigate?.(item.href!)}\n >\n {item.label}\n </button>\n )}\n </React.Fragment>\n );\n })}\n </nav>\n );\n};\n","import { useState, useCallback } from 'react';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { Plus, type LucideIcon } from 'lucide-react';\nimport styles from './LiquidButton.module.css';\n\nexport interface QuickAction {\n key: string;\n label: string;\n icon: LucideIcon;\n color?: string;\n onClick: () => void;\n}\n\nexport interface LiquidButtonProps {\n /** Array of quick actions to show when expanded */\n actions: QuickAction[];\n /** Custom icon for the main button (defaults to Plus) */\n icon?: LucideIcon;\n /** Custom class name for the container */\n className?: string;\n}\n\n/**\n * LiquidButton Component\n *\n * A floating action button that expands to reveal quick action options.\n * The main button rotates 45 degrees when expanded (Plus becomes X).\n * Actions fan out above the button with staggered animations.\n *\n * @example\n * <LiquidButton\n * actions={[\n * { key: 'add', label: 'Add Item', icon: Plus, color: '#2196F3', onClick: () => {} },\n * { key: 'edit', label: 'Edit', icon: Edit, color: '#FF9800', onClick: () => {} },\n * ]}\n * />\n */\nexport const LiquidButton: React.FC<LiquidButtonProps> = ({\n actions,\n icon: Icon = Plus,\n className = '',\n}) => {\n const [expanded, setExpanded] = useState(false);\n\n const handleToggle = useCallback(() => {\n setExpanded((prev) => !prev);\n }, []);\n\n const handleAction = useCallback((action: QuickAction) => {\n setExpanded(false);\n action.onClick();\n }, []);\n\n return (\n <>\n <AnimatePresence>\n {expanded && (\n <motion.div\n className={styles.overlay}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n onClick={handleToggle}\n />\n )}\n </AnimatePresence>\n <div className={`${styles.container} ${className}`}>\n <AnimatePresence>\n {expanded && (\n <div className={styles.actions}>\n {actions.map((action, index) => (\n <motion.button\n key={action.key}\n type=\"button\"\n className={styles.actionButton}\n initial={{ opacity: 0, scale: 0.8 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.8 }}\n transition={{\n duration: 0.15,\n delay: (actions.length - 1 - index) * 0.05,\n }}\n onClick={() => handleAction(action)}\n >\n <action.icon size={18} color={action.color} />\n <span className={styles.actionLabel}>{action.label}</span>\n </motion.button>\n ))}\n </div>\n )}\n </AnimatePresence>\n\n <motion.button\n type=\"button\"\n className={styles.button}\n onClick={handleToggle}\n animate={{ rotate: expanded ? 45 : 0 }}\n transition={{ duration: 0.2 }}\n aria-label={expanded ? 'Close actions' : 'Open actions'}\n >\n <Icon size={24} strokeWidth={2.5} />\n </motion.button>\n </div>\n </>\n );\n};\n","import { useEffect, useRef, type ComponentType } from 'react';\nimport { motion } from 'framer-motion';\nimport {\n\tCheck,\n\tX,\n\tLoader2,\n\tAlertTriangle,\n\tTerminal,\n\tFileText,\n\tPencil,\n\tFilePlus,\n\tSearch,\n\tFolderSearch,\n\tBrain,\n\tPlay,\n\ttype LucideProps,\n} from 'lucide-react';\nimport styles from './StreamConsole.module.css';\n\nexport type StreamEventType = 'step' | 'success' | 'warning' | 'error';\n\nexport interface StreamEvent {\n\ttype: StreamEventType;\n\tmessage: string;\n\tdata?: Record<string, unknown>;\n\ttimestamp?: string;\n}\n\nexport type StreamStatus = 'running' | 'success' | 'error';\n\nexport interface StreamState {\n\tid: string;\n\tlabel: string;\n\tstatus: StreamStatus;\n\tevents: StreamEvent[];\n\tstartedAt: number;\n\tendedAt?: number;\n\terrorMessage?: string;\n\tresult?: Record<string, unknown>;\n}\n\nexport interface StreamConsoleProps {\n\tstream: StreamState;\n\tonCancel?: (id: string) => void;\n\tonDismiss?: (id: string) => void;\n\thideDismiss?: boolean;\n\trunningLabel?: string;\n\tsuccessLabel?: string;\n\terrorLabel?: string;\n}\n\ntype StepSubtype =\n\t| 'bash'\n\t| 'read'\n\t| 'edit'\n\t| 'write'\n\t| 'grep'\n\t| 'glob'\n\t| 'thinking'\n\t| 'lifecycle';\n\ninterface ParsedStep {\n\tsubtype: StepSubtype | null;\n\tlabel: string;\n\tbody: string;\n}\n\n// Known prefixes produced by stream-json summarizers (DAO-style):\n// \"bash: ls -la\", \"read: path/to/file\", \"edit: path/to/file\",\n// \"write: path\", \"grep: pattern\", \"glob: pattern\", \"thinking: ...\"\n// Plus scaffold-specific lifecycle markers like \"spawning claude ...\" and\n// \"resuming session ...\". Anything else keeps the default `·` dot.\nfunction parseStep(message: string): ParsedStep {\n\tconst prefixMatch = /^([a-z]+):\\s*(.*)$/i.exec(message);\n\tif (prefixMatch) {\n\t\tconst key = prefixMatch[1].toLowerCase();\n\t\tconst body = prefixMatch[2];\n\t\tconst known: Record<string, StepSubtype> = {\n\t\t\tbash: 'bash',\n\t\t\tread: 'read',\n\t\t\tedit: 'edit',\n\t\t\twrite: 'write',\n\t\t\tgrep: 'grep',\n\t\t\tglob: 'glob',\n\t\t\tthinking: 'thinking',\n\t\t};\n\t\tif (known[key]) return { subtype: known[key], label: key, body };\n\t}\n\tif (/^(spawning|resuming|starting|launching)\\b/i.test(message)) {\n\t\treturn { subtype: 'lifecycle', label: '', body: message };\n\t}\n\treturn { subtype: null, label: '', body: message };\n}\n\nconst STEP_ICON: Record<StepSubtype, ComponentType<LucideProps>> = {\n\tbash: Terminal,\n\tread: FileText,\n\tedit: Pencil,\n\twrite: FilePlus,\n\tgrep: Search,\n\tglob: FolderSearch,\n\tthinking: Brain,\n\tlifecycle: Play,\n};\n\nexport function StreamConsole({\n\tstream,\n\tonCancel,\n\tonDismiss,\n\thideDismiss = false,\n\trunningLabel = 'Running',\n\tsuccessLabel = 'Done',\n\terrorLabel = 'Failed',\n}: StreamConsoleProps) {\n\tconst listRef = useRef<HTMLDivElement>(null);\n\tconst userScrolledUp = useRef(false);\n\n\tuseEffect(() => {\n\t\tconst el = listRef.current;\n\t\tif (!el) return;\n\t\tconst onScroll = () => {\n\t\t\tconst atBottom = el.scrollHeight - el.scrollTop - el.clientHeight < 40;\n\t\t\tuserScrolledUp.current = !atBottom;\n\t\t};\n\t\tel.addEventListener('scroll', onScroll);\n\t\treturn () => el.removeEventListener('scroll', onScroll);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tconst el = listRef.current;\n\t\tif (!el || userScrolledUp.current) return;\n\t\tel.scrollTop = el.scrollHeight;\n\t}, [stream.events.length]);\n\n\tconst Icon =\n\t\tstream.status === 'running' ? Loader2 : stream.status === 'success' ? Check : AlertTriangle;\n\tconst statusLabel =\n\t\tstream.status === 'running'\n\t\t\t? runningLabel\n\t\t\t: stream.status === 'success'\n\t\t\t\t? successLabel\n\t\t\t\t: errorLabel;\n\n\tconst canShowDismiss =\n\t\t!hideDismiss && (stream.status === 'running' ? !!onCancel : !!onDismiss);\n\n\treturn (\n\t\t<motion.div\n\t\t\tclassName={styles.wrap}\n\t\t\tdata-status={stream.status}\n\t\t\tinitial={{ opacity: 0, y: -8 }}\n\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\texit={{ opacity: 0, y: -8 }}\n\t\t\ttransition={{ duration: 0.18 }}\n\t\t>\n\t\t\t<header className={styles.header}>\n\t\t\t\t<div className={styles.headerLeft}>\n\t\t\t\t\t<span className={styles.statusDot} data-status={stream.status}>\n\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\tsize={12}\n\t\t\t\t\t\t\tclassName={stream.status === 'running' ? styles.spin : ''}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span className={styles.label}>{stream.label}</span>\n\t\t\t\t\t<span className={styles.statusText}>{statusLabel}</span>\n\t\t\t\t</div>\n\t\t\t\t{canShowDismiss && (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName={styles.dismiss}\n\t\t\t\t\t\taria-label={stream.status === 'running' ? 'Cancel' : 'Dismiss'}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tif (stream.status === 'running') onCancel?.(stream.id);\n\t\t\t\t\t\t\telse onDismiss?.(stream.id);\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<X size={14} />\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\t\t\t</header>\n\t\t\t<div className={styles.body} ref={listRef}>\n\t\t\t\t{stream.events.length === 0 && stream.status === 'running' && (\n\t\t\t\t\t<p className={styles.hint}>Waiting for output…</p>\n\t\t\t\t)}\n\t\t\t\t{stream.events.map((event, i) => {\n\t\t\t\t\tconst step = event.type === 'step' ? parseStep(event.message) : null;\n\t\t\t\t\tconst StepIcon = step?.subtype ? STEP_ICON[step.subtype] : null;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<p\n\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\tclassName={styles.line}\n\t\t\t\t\t\t\tdata-type={event.type}\n\t\t\t\t\t\t\tdata-subtype={step?.subtype ?? undefined}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span className={styles.linePrefix}>\n\t\t\t\t\t\t\t\t{StepIcon ? (\n\t\t\t\t\t\t\t\t\t<StepIcon size={11} />\n\t\t\t\t\t\t\t\t) : event.type === 'error' ? (\n\t\t\t\t\t\t\t\t\t'!'\n\t\t\t\t\t\t\t\t) : event.type === 'warning' ? (\n\t\t\t\t\t\t\t\t\t'⚠'\n\t\t\t\t\t\t\t\t) : event.type === 'success' ? (\n\t\t\t\t\t\t\t\t\t'✓'\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t'·'\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t{step?.label ? (\n\t\t\t\t\t\t\t\t<span className={styles.lineLabel}>{step.label}</span>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t<span className={styles.lineText}>\n\t\t\t\t\t\t\t\t{step ? step.body : event.message}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t\t{stream.status === 'error' && stream.errorMessage && (\n\t\t\t\t\t<p className={styles.line} data-type=\"error\">\n\t\t\t\t\t\t<span className={styles.linePrefix}>!</span>\n\t\t\t\t\t\t<span className={styles.lineText}>{stream.errorMessage}</span>\n\t\t\t\t\t</p>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</motion.div>\n\t);\n}\n","import { useRef, useState, PointerEvent as ReactPointerEvent } from 'react';\nimport { motion, useMotionValue, useTransform, animate, PanInfo } from 'framer-motion';\nimport { Trash2, Check, Pencil, GripVertical } from 'lucide-react';\nimport type { CalendarEvent } from './Calendar';\nimport styles from './DayEventCard.module.css';\n\ninterface DayEventCardProps {\n event: CalendarEvent;\n color: string;\n textColor: string;\n onComplete?: (event: CalendarEvent) => void;\n onEdit?: (event: CalendarEvent) => void;\n onDelete?: (event: CalendarEvent) => void;\n onDragEnd?: (clientY: number, clientX: number) => void;\n draggable?: boolean;\n}\n\nconst SWIPE_DELETE_THRESHOLD = -80;\n\nexport const DayEventCard: React.FC<DayEventCardProps> = ({\n event,\n color,\n textColor,\n onComplete,\n onEdit,\n onDelete,\n onDragEnd,\n draggable = true,\n}) => {\n const x = useMotionValue(0);\n const y = useMotionValue(0);\n const deleteOpacity = useTransform(x, [-80, 0], [1, 0]);\n const [verticalDragging, setVerticalDragging] = useState(false);\n const didSwipe = useRef(false);\n const dragStart = useRef<{ x: number; y: number; pointerId: number } | null>(null);\n const completed = event.status === 'completed';\n\n const handleSwipeEnd = (_: MouseEvent | TouchEvent | PointerEvent, info: PanInfo) => {\n if (onDelete && info.offset.x < SWIPE_DELETE_THRESHOLD) {\n animate(x, -1000, { duration: 0.2, onComplete: () => onDelete(event) });\n } else {\n animate(x, 0, { type: 'spring', stiffness: 400, damping: 30 });\n }\n };\n\n const handleCardClick = () => {\n if (didSwipe.current) {\n didSwipe.current = false;\n return;\n }\n if (verticalDragging) return;\n onComplete?.(event);\n };\n\n const handleGripPointerDown = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (!draggable || !onDragEnd) return;\n e.stopPropagation();\n e.preventDefault();\n dragStart.current = { x: e.clientX, y: e.clientY, pointerId: e.pointerId };\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n setVerticalDragging(true);\n };\n\n const handleGripPointerMove = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (!dragStart.current) return;\n x.set(e.clientX - dragStart.current.x);\n y.set(e.clientY - dragStart.current.y);\n };\n\n const handleGripPointerUp = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (!dragStart.current) return;\n const clientY = e.clientY;\n const clientX = e.clientX;\n try {\n (e.currentTarget as HTMLElement).releasePointerCapture(dragStart.current.pointerId);\n } catch {\n // ignore\n }\n dragStart.current = null;\n setVerticalDragging(false);\n animate(y, 0, { type: 'spring', stiffness: 400, damping: 30 });\n animate(x, 0, { type: 'spring', stiffness: 400, damping: 30 });\n onDragEnd?.(clientY, clientX);\n };\n\n const canSwipe = !!onDelete;\n const showGrip = draggable && !!onDragEnd;\n\n return (\n <div className={styles.wrapper}>\n {canSwipe && (\n <motion.div className={styles.deleteUnderlay} style={{ opacity: deleteOpacity }}>\n <Trash2 size={16} />\n <span>Delete</span>\n </motion.div>\n )}\n <motion.div\n className={`${styles.card} ${completed ? styles.completed : ''} ${verticalDragging ? styles.dragging : ''}`}\n style={{ x, y, background: color, color: textColor, borderLeftColor: color }}\n drag={canSwipe && !verticalDragging ? 'x' : false}\n dragConstraints={canSwipe ? { left: -200, right: 0 } : undefined}\n dragElastic={0.15}\n dragDirectionLock\n onDragStart={() => {\n didSwipe.current = true;\n }}\n onDragEnd={handleSwipeEnd}\n whileTap={verticalDragging ? undefined : { scale: 0.98 }}\n animate={verticalDragging ? { scale: 1.03 } : { scale: 1 }}\n onClick={handleCardClick}\n >\n {showGrip && (\n <div\n className={styles.grip}\n onPointerDown={handleGripPointerDown}\n onPointerMove={handleGripPointerMove}\n onPointerUp={handleGripPointerUp}\n onPointerCancel={handleGripPointerUp}\n onClick={(e) => e.stopPropagation()}\n >\n <GripVertical size={14} />\n </div>\n )}\n {completed && <Check size={14} className={styles.checkIcon} strokeWidth={3} />}\n <span className={styles.text}>{event.title}</span>\n {event.time && <span className={styles.time}>{event.time}</span>}\n {onEdit && (\n <button\n className={styles.editButton}\n onClick={(e) => {\n e.stopPropagation();\n onEdit(event);\n }}\n aria-label=\"Edit event\"\n >\n <Pencil size={13} />\n </button>\n )}\n </motion.div>\n </div>\n );\n};\n","import type { CalendarEvent } from './Calendar';\n\nexport type ExportFormat = 'csv' | 'json' | 'toon';\n\nconst EXPORT_FIELDS: Array<keyof CalendarEvent> = [\n 'id', 'title', 'date', 'time', 'endTime', 'allDay',\n 'type', 'status', 'priority', 'category',\n];\n\nconst toIsoDate = (d: Date | string) => {\n const date = typeof d === 'string' ? new Date(d) : d;\n return date.toISOString();\n};\n\nconst normalize = (event: CalendarEvent): Record<string, unknown> => {\n const row: Record<string, unknown> = {};\n for (const f of EXPORT_FIELDS) {\n const v = event[f];\n if (v === undefined) continue;\n row[f] = f === 'date' ? toIsoDate(v as Date | string) : v;\n }\n return row;\n};\n\nconst escCsv = (value: unknown): string => {\n if (value === undefined || value === null) return '';\n const s = String(value);\n if (/[\",\\n\\r]/.test(s)) return `\"${s.replace(/\"/g, '\"\"')}\"`;\n return s;\n};\n\nexport const toCsv = (events: CalendarEvent[]): string => {\n const header = EXPORT_FIELDS.join(',');\n const rows = events.map(e => {\n const n = normalize(e);\n return EXPORT_FIELDS.map(f => escCsv(n[f])).join(',');\n });\n return [header, ...rows].join('\\n');\n};\n\nexport const toJson = (events: CalendarEvent[]): string => {\n return JSON.stringify(events.map(normalize), null, 2);\n};\n\n// TOON (Token-Oriented Object Notation): compact tabular text for uniform arrays.\n// Format: `events[N]{field1,field2,...}:` then indented rows of comma-separated values.\n// Strings containing comma/quote/newline are wrapped in double quotes with \"\" escaping.\nconst escToon = (value: unknown): string => {\n if (value === undefined || value === null) return '';\n const s = String(value);\n if (/[\",\\n\\r]/.test(s)) return `\"${s.replace(/\"/g, '\"\"')}\"`;\n return s;\n};\n\nexport const toToon = (events: CalendarEvent[]): string => {\n const header = `events[${events.length}]{${EXPORT_FIELDS.join(',')}}:`;\n const rows = events.map(e => {\n const n = normalize(e);\n return ' ' + EXPORT_FIELDS.map(f => escToon(n[f])).join(',');\n });\n return [header, ...rows].join('\\n');\n};\n\nconst MIME: Record<ExportFormat, string> = {\n csv: 'text/csv;charset=utf-8;',\n json: 'application/json;charset=utf-8;',\n toon: 'text/plain;charset=utf-8;',\n};\n\nconst EXT: Record<ExportFormat, string> = {\n csv: 'csv',\n json: 'json',\n toon: 'toon',\n};\n\nexport const serializeEvents = (events: CalendarEvent[], format: ExportFormat): string => {\n if (format === 'csv') return toCsv(events);\n if (format === 'json') return toJson(events);\n return toToon(events);\n};\n\nexport const downloadEvents = (\n events: CalendarEvent[],\n format: ExportFormat,\n filename?: string,\n) => {\n const content = serializeEvents(events, format);\n const blob = new Blob([content], { type: MIME[format] });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename ?? `events-${new Date().toISOString().slice(0, 10)}.${EXT[format]}`;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n};\n","import { useMemo, useState, useEffect, useRef, Fragment } from 'react';\nimport { motion } from 'framer-motion';\nimport styles from './Calendar.module.css';\nimport { DayEventCard } from './DayEventCard';\nimport { Download, Moon, Sun } from 'lucide-react';\nimport { downloadEvents, type ExportFormat } from './exportEvents';\n\n/**\n * Generic calendar event interface - flexible for any use case\n * @interface CalendarEvent\n */\nexport interface CalendarEvent {\n /** Unique identifier for the event */\n id: string;\n /** Event title/name */\n title: string;\n /** Event date */\n date: Date | string;\n /** Optional start time string (e.g., \"14:30\") */\n time?: string;\n /** Optional end time string (e.g., \"15:30\") — used for duration-based height in day view */\n endTime?: string;\n /** If true, event is rendered in the all-day strip above the timeline */\n allDay?: boolean;\n /** Event type/category for styling and icons */\n type?: string;\n /** Event status (affects opacity and styling) */\n status?: 'pending' | 'completed' | 'cancelled' | string;\n /** Priority level for color coding */\n priority?: 'high' | 'medium' | 'low' | string;\n /** Category id used by the built-in category filter (see CalendarConfig.categories) */\n category?: string;\n /** Background color override */\n color?: string;\n /** Text color override */\n textColor?: string;\n /** Additional metadata */\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Configuration for calendar appearance and behavior\n * @interface CalendarConfig\n */\nexport interface CalendarConfig {\n /** Custom color scheme for event types */\n eventColors?: Record<string, string>;\n /** Custom icon renderer for event types */\n iconRenderer?: (event: CalendarEvent) => React.ReactNode;\n /** Maximum events to show per day before \"more\" indicator */\n maxEventsPerDay?: number;\n /** Week starts on Monday (true) or Sunday (false) */\n mondayStart?: boolean;\n /** Show week numbers */\n showWeekNumbers?: boolean;\n /** Day view: first hour to show (default 0) */\n startHour?: number;\n /** Day view: last hour to show, exclusive (default 24) */\n endHour?: number;\n /** Day view: pixel height per hour slot (default 60) */\n hourHeight?: number;\n /** Day view: split hour slots into two clickable halves with 30-minute precision (default false) */\n halfHourSlots?: boolean;\n /** Custom date format */\n dateFormat?: Intl.DateTimeFormatOptions;\n /** Custom locale */\n locale?: string;\n /** Custom day labels */\n dayLabels?: string[];\n /** Custom month names */\n monthNames?: string[];\n /** Categories for the built-in segmented filter. When provided, Calendar renders a pill row\n * below the header with an \"All\" toggle plus one pill per category. Events with a matching\n * `category` are filtered by selection; events with no `category` are always shown. */\n categories?: Array<{ id: string; label: string; color: string }>;\n}\n\n/** A category for the built-in filter */\nexport interface CalendarCategory {\n id: string;\n label: string;\n color: string;\n}\n\n/**\n * Props for the Calendar component\n * @interface CalendarProps\n */\nexport interface CalendarProps {\n /** Array of events to display */\n events: CalendarEvent[];\n /** Callback when an event is clicked */\n onEventClick?: (event: CalendarEvent) => void;\n /** Callback when a date is clicked */\n onDateClick?: (date: Date) => void;\n /** View-specific event click handlers */\n onEventClickByView?: {\n month?: (event: CalendarEvent) => void;\n week?: (event: CalendarEvent) => void;\n day?: (event: CalendarEvent) => void;\n };\n /** View-specific date click handlers */\n onDateClickByView?: {\n month?: (date: Date) => void;\n week?: (date: Date) => void;\n day?: (date: Date) => void;\n };\n /** Callback when a time slot is clicked in day view */\n onTimeSlotClick?: (date: Date, hour: number, time: string) => void;\n /** Callback when an event is dropped (drag-rescheduled) in day view */\n onEventDrop?: (event: CalendarEvent, newDate: Date) => void;\n /** Day view: callback when an event body is tapped to toggle complete */\n onEventComplete?: (event: CalendarEvent) => void;\n /** Day view: callback when an event is swiped left to delete */\n onEventDelete?: (event: CalendarEvent) => void;\n /** Day view: callback when an event's edit button is clicked */\n onEventEdit?: (event: CalendarEvent) => void;\n /** Initial view mode */\n viewMode?: 'month' | 'week' | 'day';\n /** Initial date to display */\n initialDate?: Date;\n /** Configuration options */\n config?: CalendarConfig;\n /** Custom CSS class */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Loading state */\n loading?: boolean;\n /** Custom empty state component */\n emptyState?: React.ReactNode;\n /** Hide the calendar header (navigation, title, view controls) */\n hideHeader?: boolean;\n /** Compact mode - renders colored dots instead of event blocks in month view */\n compact?: boolean;\n /** Externally controlled selected date highlight (distinct from initialDate which controls navigation) */\n selectedDate?: Date;\n /** Controlled category filter selection. `null` means \"All\". Omit for uncontrolled. */\n selectedCategoryId?: string | null;\n /** Called when the user picks a pill in the category filter. `null` = \"All\". */\n onCategoryChange?: (categoryId: string | null) => void;\n /** Offer an \"Export\" dropdown in the header with the given formats. Exports the currently\n * filtered events (respects category filter). Omit or pass `[]` to hide the button. */\n exportFormats?: ExportFormat[];\n}\n\n/**\n * Calendar component - A flexible, reusable calendar for displaying events\n * \n * @component\n * @description\n * A highly customizable calendar component that can display events in month or week view.\n * Supports custom event types, colors, icons, and localization. Perfect for scheduling,\n * project management, habit tracking, or any date-based data visualization.\n * \n * @example\n * // Basic usage\n * <Calendar\n * events={myEvents}\n * onEventClick={handleEventClick}\n * viewMode=\"month\"\n * />\n * \n * @example\n * // With custom configuration\n * <Calendar\n * events={projectEvents}\n * config={{\n * eventColors: { task: '#4A90E2', meeting: '#7ED321' },\n * maxEventsPerDay: 5,\n * mondayStart: true\n * }}\n * onEventClick={handleEventClick}\n * />\n */\nexport function Calendar({\n events,\n onEventClick,\n onDateClick,\n onEventClickByView,\n onDateClickByView,\n onTimeSlotClick,\n onEventDrop,\n onEventComplete,\n onEventDelete,\n onEventEdit,\n viewMode = 'month',\n initialDate = new Date(),\n config = {},\n className = '',\n style = {},\n loading = false,\n emptyState,\n hideHeader = false,\n compact = false,\n selectedDate,\n selectedCategoryId,\n onCategoryChange,\n exportFormats\n}: CalendarProps) {\n const [currentDate, setCurrentDate] = useState(initialDate);\n const [currentViewMode, setCurrentViewMode] = useState(viewMode);\n const [hideNightHours, setHideNightHours] = useState(false);\n const [internalCategoryId, setInternalCategoryId] = useState<string | null>(null);\n const isCategoryControlled = selectedCategoryId !== undefined;\n const activeCategoryId = isCategoryControlled ? selectedCategoryId ?? null : internalCategoryId;\n const handleCategoryPick = (id: string | null) => {\n if (!isCategoryControlled) setInternalCategoryId(id);\n onCategoryChange?.(id);\n };\n const dayViewScrollRef = useRef<HTMLDivElement>(null);\n const weekViewScrollRef = useRef<HTMLDivElement>(null);\n const [exportOpen, setExportOpen] = useState(false);\n const exportRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!exportOpen) return;\n const handler = (e: MouseEvent) => {\n if (exportRef.current && !exportRef.current.contains(e.target as Node)) {\n setExportOpen(false);\n }\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [exportOpen]);\n\n const {\n eventColors = {},\n iconRenderer,\n maxEventsPerDay = 3,\n mondayStart = false,\n showWeekNumbers = false,\n dateFormat = { month: 'long', year: 'numeric' },\n locale = 'en-US',\n dayLabels,\n monthNames,\n startHour: configStartHour = 0,\n endHour = 24,\n hourHeight = 60,\n halfHourSlots = false,\n categories\n } = config;\n\n // Effective start hour — when the user toggles \"hide night hours\", collapse\n // the pre-8am range in day/week timelines.\n const startHour = hideNightHours ? Math.max(configStartHour, 8) : configStartHour;\n\n const filteredEvents = useMemo(() => {\n if (!categories || categories.length === 0 || activeCategoryId === null) return events;\n return events.filter(e => !e.category || e.category === activeCategoryId);\n }, [events, categories, activeCategoryId]);\n \n const defaultDayLabels = mondayStart \n ? ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']\n : ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n \n const finalDayLabels = dayLabels || defaultDayLabels;\n\n const timelineHourHeight = config?.hourHeight ?? 60;\n const timelineStartHour = startHour;\n\n const calendarData = useMemo(() => {\n const year = currentDate.getFullYear();\n const month = currentDate.getMonth();\n \n let startDate: Date;\n let endDate: Date;\n let displayTitle: string;\n \n if (currentViewMode === 'week') {\n startDate = new Date(currentDate);\n const day = startDate.getDay();\n const diff = mondayStart \n ? startDate.getDate() - day + (day === 0 ? -6 : 1)\n : startDate.getDate() - day;\n startDate = new Date(startDate.setDate(diff));\n startDate.setHours(0, 0, 0, 0);\n \n endDate = new Date(startDate);\n endDate.setDate(endDate.getDate() + 6);\n \n const weekStart = startDate.toLocaleDateString(locale, { day: 'numeric', month: 'short' });\n const weekEnd = endDate.toLocaleDateString(locale, { day: 'numeric', month: 'short' });\n displayTitle = `${weekStart} - ${weekEnd}`;\n } else if (currentViewMode === 'day') {\n startDate = new Date(currentDate);\n startDate.setHours(0, 0, 0, 0);\n \n endDate = new Date(currentDate);\n endDate.setHours(23, 59, 59, 999);\n \n displayTitle = currentDate.toLocaleDateString(locale, { \n weekday: 'long', \n year: 'numeric', \n month: 'long', \n day: 'numeric' \n });\n } else {\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n \n startDate = new Date(firstDay);\n const firstDayWeek = mondayStart \n ? (firstDay.getDay() + 6) % 7 \n : firstDay.getDay();\n startDate.setDate(startDate.getDate() - firstDayWeek);\n \n endDate = new Date(lastDay);\n const lastDayWeek = mondayStart \n ? (lastDay.getDay() + 6) % 7 \n : lastDay.getDay();\n endDate.setDate(endDate.getDate() + (6 - lastDayWeek));\n \n if (monthNames && monthNames[month]) {\n displayTitle = `${monthNames[month]} ${year}`;\n } else {\n displayTitle = currentDate.toLocaleDateString(locale, dateFormat);\n }\n }\n \n const days = [];\n const current = new Date(startDate);\n \n while (current <= endDate) {\n days.push(new Date(current));\n current.setDate(current.getDate() + 1);\n }\n \n return { days, displayTitle };\n }, [currentDate, currentViewMode, mondayStart, locale, dateFormat, monthNames]);\n\n // Auto-scroll to current time in day/week views. Only re-fires when the\n // user changes view mode or navigates to a different date — not on every\n // re-render (e.g. after dropping an event), which would snap the scroll.\n const lastScrollKeyRef = useRef<string>('');\n useEffect(() => {\n if (currentViewMode !== 'day' && currentViewMode !== 'week') return;\n const targetRef = currentViewMode === 'day' ? dayViewScrollRef : weekViewScrollRef;\n if (!targetRef.current) return;\n\n const now = new Date();\n const isTodayOnScreen = (() => {\n if (currentViewMode === 'day') {\n return currentDate.toDateString() === now.toDateString();\n }\n const weekStart = new Date(currentDate);\n const day = weekStart.getDay();\n const offset = mondayStart ? (day === 0 ? -6 : 1 - day) : -day;\n weekStart.setDate(weekStart.getDate() + offset);\n weekStart.setHours(0, 0, 0, 0);\n const weekEnd = new Date(weekStart);\n weekEnd.setDate(weekStart.getDate() + 7);\n return now >= weekStart && now < weekEnd;\n })();\n if (!isTodayOnScreen) return;\n\n const key = `${currentViewMode}-${currentDate.toDateString()}`;\n if (lastScrollKeyRef.current === key) return;\n lastScrollKeyRef.current = key;\n\n const minutesFromStart = (now.getHours() - timelineStartHour) * 60 + now.getMinutes();\n const scrollPosition = Math.max(0, (minutesFromStart / 60) * timelineHourHeight - 100);\n setTimeout(() => {\n if (targetRef.current) targetRef.current.scrollTop = scrollPosition;\n }, 0);\n }, [currentViewMode, currentDate, timelineStartHour, timelineHourHeight, mondayStart]);\n \n const getDayEvents = (day: Date) => {\n const dayEvents = filteredEvents.filter(event => {\n const eventDate = new Date(event.date);\n return eventDate.toDateString() === day.toDateString();\n });\n \n return dayEvents.sort((a, b) => {\n const timeA = a.time ? convertTimeToMinutes(a.time) : 999999;\n const timeB = b.time ? convertTimeToMinutes(b.time) : 999999;\n return timeA - timeB;\n });\n };\n \n const convertTimeToMinutes = (time: string): number => {\n const [hours, minutes] = time.split(':').map(Number);\n return hours * 60 + minutes;\n };\n\n // Compute side-by-side column layout for events that overlap in time.\n // Returns a map: eventId -> { col, totalCols } where totalCols is the width\n // of the group (so a 3-way overlap yields totalCols=3 and col in {0,1,2}).\n const layoutOverlappingEvents = (\n events: CalendarEvent[]\n ): Map<string, { col: number; totalCols: number }> => {\n const result = new Map<string, { col: number; totalCols: number }>();\n const timed = events.filter(e => e.time).map(e => {\n const start = convertTimeToMinutes(e.time!);\n const end = e.endTime ? convertTimeToMinutes(e.endTime) : start + 30;\n return { event: e, start, end: Math.max(end, start + 1) };\n });\n timed.sort((a, b) => a.start - b.start || a.end - b.end);\n\n let cluster: typeof timed = [];\n let clusterEnd = -1;\n const flushCluster = () => {\n if (cluster.length === 0) return;\n const cols: number[] = []; // cols[i] = end time of last event in col i\n const assigned: { id: string; col: number }[] = [];\n for (const item of cluster) {\n let placed = false;\n for (let i = 0; i < cols.length; i++) {\n if (cols[i] <= item.start) {\n cols[i] = item.end;\n assigned.push({ id: item.event.id, col: i });\n placed = true;\n break;\n }\n }\n if (!placed) {\n cols.push(item.end);\n assigned.push({ id: item.event.id, col: cols.length - 1 });\n }\n }\n const totalCols = cols.length;\n for (const a of assigned) result.set(a.id, { col: a.col, totalCols });\n cluster = [];\n clusterEnd = -1;\n };\n for (const item of timed) {\n if (cluster.length === 0 || item.start < clusterEnd) {\n cluster.push(item);\n clusterEnd = Math.max(clusterEnd, item.end);\n } else {\n flushCluster();\n cluster.push(item);\n clusterEnd = item.end;\n }\n }\n flushCluster();\n return result;\n };\n \n const handlePrevious = () => {\n const newDate = new Date(currentDate);\n if (currentViewMode === 'week') {\n newDate.setDate(newDate.getDate() - 7);\n } else if (currentViewMode === 'day') {\n newDate.setDate(newDate.getDate() - 1);\n } else {\n newDate.setMonth(newDate.getMonth() - 1);\n }\n setCurrentDate(newDate);\n };\n \n const handleNext = () => {\n const newDate = new Date(currentDate);\n if (currentViewMode === 'week') {\n newDate.setDate(newDate.getDate() + 7);\n } else if (currentViewMode === 'day') {\n newDate.setDate(newDate.getDate() + 1);\n } else {\n newDate.setMonth(newDate.getMonth() + 1);\n }\n setCurrentDate(newDate);\n };\n \n const handleToday = () => {\n setCurrentDate(new Date());\n };\n \n const getEventColor = (event: CalendarEvent) => {\n if (event.color) return event.color;\n if (event.type && eventColors[event.type]) return eventColors[event.type];\n \n // Default color scheme based on priority\n const defaultColors = {\n high: '#FF4444',\n medium: '#FFA500',\n low: '#4A90E2'\n };\n \n if (event.priority && defaultColors[event.priority as keyof typeof defaultColors]) {\n return defaultColors[event.priority as keyof typeof defaultColors];\n }\n \n return '#4A90E2'; // Default blue\n };\n \n const getContrastColor = (bgColor: string): string => {\n // Convert hex to RGB\n const hex = bgColor.replace('#', '');\n const r = parseInt(hex.substring(0, 2), 16);\n const g = parseInt(hex.substring(2, 4), 16);\n const b = parseInt(hex.substring(4, 6), 16);\n \n // Calculate luminance\n const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;\n \n // Return black or white based on luminance\n return luminance > 0.5 ? '#000000' : '#FFFFFF';\n };\n \n const getEventTextColor = (event: CalendarEvent): string => {\n if (event.textColor) return event.textColor;\n const bgColor = getEventColor(event);\n return getContrastColor(bgColor);\n };\n \n const handleEventClick = (event: CalendarEvent) => {\n // Check for view-specific handler first\n if (onEventClickByView && onEventClickByView[currentViewMode]) {\n onEventClickByView[currentViewMode](event);\n } else if (onEventClick) {\n // Fall back to general handler\n onEventClick(event);\n }\n };\n\n const handleDateClick = (date: Date) => {\n // Check for view-specific handler first\n if (onDateClickByView && onDateClickByView[currentViewMode]) {\n onDateClickByView[currentViewMode](date);\n } else if (onDateClick) {\n // Fall back to general handler\n onDateClick(date);\n }\n };\n\n const isToday = (date: Date) => {\n const today = new Date();\n return date.toDateString() === today.toDateString();\n };\n \n const isCurrentMonth = (date: Date) => {\n return date.getMonth() === currentDate.getMonth();\n };\n \n const getWeekNumber = (date: Date) => {\n const start = new Date(date.getFullYear(), 0, 1);\n const diff = date.getTime() - start.getTime();\n const oneWeek = 1000 * 60 * 60 * 24 * 7;\n return Math.floor(diff / oneWeek) + 1;\n };\n \n if (loading) {\n return (\n <div className={`${styles.calendar} ${styles.loading} ${className}`} style={style}>\n <div className={styles.loadingSpinner}>Loading...</div>\n </div>\n );\n }\n \n return (\n <div className={`${styles.calendar} ${compact ? styles.compact : ''} ${className}`} style={style}>\n {!hideHeader && (\n <div className={styles.header}>\n <div className={styles.navigation}>\n <button onClick={handlePrevious} className={styles.navButton} aria-label=\"Previous\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n <polyline points=\"15,18 9,12 15,6\" />\n </svg>\n </button>\n <h3 className={styles.title}>{calendarData.displayTitle}</h3>\n <button onClick={handleNext} className={styles.navButton} aria-label=\"Next\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n <polyline points=\"9,6 15,12 9,18\" />\n </svg>\n </button>\n </div>\n\n {categories && categories.length > 0 && (\n <div className={styles.filterBar} role=\"tablist\" aria-label=\"Filter by category\">\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={activeCategoryId === null}\n className={`${styles.filterPill} ${activeCategoryId === null ? styles.filterPillActive : ''}`}\n onClick={() => handleCategoryPick(null)}\n >\n All\n </button>\n {categories.map(cat => {\n const active = activeCategoryId === cat.id;\n return (\n <button\n key={cat.id}\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n className={`${styles.filterPill} ${active ? styles.filterPillActive : ''}`}\n style={active ? { background: cat.color, borderColor: cat.color, color: '#ffffff' } : undefined}\n onClick={() => handleCategoryPick(cat.id)}\n >\n {!active && (\n <span className={styles.filterDot} style={{ background: cat.color }} />\n )}\n {cat.label}\n </button>\n );\n })}\n </div>\n )}\n\n <div className={styles.controls}>\n {exportFormats && exportFormats.length > 0 && (\n <div className={styles.exportDropdown} ref={exportRef}>\n <button\n type=\"button\"\n className={styles.exportButton}\n onClick={() => setExportOpen(v => !v)}\n aria-haspopup=\"menu\"\n aria-expanded={exportOpen}\n aria-label=\"Export events\"\n title=\"Export events\"\n >\n <Download size={16} />\n </button>\n {exportOpen && (\n <div className={styles.exportMenu} role=\"menu\">\n {exportFormats.map(format => (\n <button\n key={format}\n type=\"button\"\n role=\"menuitem\"\n className={styles.exportMenuItem}\n onClick={() => {\n downloadEvents(filteredEvents, format);\n setExportOpen(false);\n }}\n >\n {format.toUpperCase()}\n </button>\n ))}\n </div>\n )}\n </div>\n )}\n {(currentViewMode === 'day' || currentViewMode === 'week') && (\n <button\n type=\"button\"\n className={styles.nightToggle}\n onClick={() => setHideNightHours(v => !v)}\n aria-pressed={hideNightHours}\n title={hideNightHours ? 'Show night hours' : 'Hide night hours (00:00–08:00)'}\n aria-label={hideNightHours ? 'Show night hours' : 'Hide night hours'}\n >\n {hideNightHours ? <Sun size={16} /> : <Moon size={16} />}\n </button>\n )}\n <button onClick={handleToday} className={styles.todayButton}>\n Today\n </button>\n <div className={styles.viewToggle}>\n <button\n className={`${styles.viewButton} ${currentViewMode === 'month' ? styles.active : ''}`}\n onClick={() => setCurrentViewMode('month')}\n >\n Month\n </button>\n <button\n className={`${styles.viewButton} ${currentViewMode === 'week' ? styles.active : ''}`}\n onClick={() => setCurrentViewMode('week')}\n >\n Week\n </button>\n <button\n className={`${styles.viewButton} ${currentViewMode === 'day' ? styles.active : ''}`}\n onClick={() => setCurrentViewMode('day')}\n >\n Day\n </button>\n </div>\n </div>\n </div>\n )}\n\n {currentViewMode === 'month' && (\n <div className={`${styles.weekDays} ${showWeekNumbers ? styles.withWeekNumbers : ''}`}>\n {showWeekNumbers && <div className={styles.weekNumberHeader}>Wk</div>}\n {finalDayLabels.map((day) => (\n <div key={day} className={styles.weekDay}>\n {day}\n </div>\n ))}\n </div>\n )}\n \n {currentViewMode === 'day' ? (\n // Day view layout — positioned events with duration, all-day strip, now-line\n (() => {\n const dayEvents = getDayEvents(currentDate);\n const scheduled = dayEvents.filter(e => !e.allDay && e.time);\n const allDayEvents = dayEvents.filter(e => e.allDay || !e.time);\n\n const hours = Array.from({ length: endHour - startHour }, (_, i) => startHour + i);\n const timelineHeight = hours.length * hourHeight;\n\n const now = new Date();\n const dayIsToday = currentDate.toDateString() === now.toDateString();\n const nowMinutesFromStart = (now.getHours() - startHour) * 60 + now.getMinutes();\n const nowOffset = (nowMinutesFromStart / 60) * hourHeight;\n const showNow = dayIsToday && nowOffset >= 0 && nowOffset <= timelineHeight;\n\n const eventMinutes = (time: string) => {\n const [h, m] = time.split(':').map(Number);\n return h * 60 + m;\n };\n const eventDuration = (event: CalendarEvent) => {\n if (!event.time || !event.endTime) return 30;\n const d = eventMinutes(event.endTime) - eventMinutes(event.time);\n return d > 0 ? d : 30;\n };\n\n const dayLayout = layoutOverlappingEvents(scheduled);\n\n const handleSlotClick = (hour: number, minute: number) => {\n if (onTimeSlotClick) {\n const slotDate = new Date(currentDate);\n slotDate.setHours(hour, minute, 0, 0);\n const timeString = `${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}`;\n onTimeSlotClick(slotDate, hour, timeString);\n }\n };\n\n const handleEventDragEnd = (event: CalendarEvent, clientY: number) => {\n if (!onEventDrop) return;\n const gridEl = dayViewScrollRef.current?.querySelector(`.${styles.dayTimelineGrid}`) as HTMLElement | null;\n if (!gridEl) return;\n const rect = gridEl.getBoundingClientRect();\n const relativeY = clientY - rect.top;\n const slotSize = halfHourSlots ? hourHeight / 2 : hourHeight;\n const slotIndex = Math.max(0, Math.floor(relativeY / slotSize));\n const totalSlots = halfHourSlots ? hours.length * 2 : hours.length;\n const clamped = Math.min(totalSlots - 1, slotIndex);\n const newHour = startHour + Math.floor(halfHourSlots ? clamped / 2 : clamped);\n const newMinute = halfHourSlots && clamped % 2 === 1 ? 30 : 0;\n const newDate = new Date(currentDate);\n newDate.setHours(newHour, newMinute, 0, 0);\n onEventDrop(event, newDate);\n };\n\n return (\n <div className={styles.dayView}>\n <div className={styles.dayViewHeader}>\n <div className={styles.timeColumnHeader}></div>\n <div className={styles.dayColumnHeader}>\n {currentDate.toLocaleDateString(locale, { weekday: 'short', day: 'numeric' })}\n </div>\n </div>\n\n {allDayEvents.length > 0 && (\n <div className={styles.allDayStrip}>\n <span className={styles.allDayLabel}>All day</span>\n <div className={styles.allDayList}>\n {allDayEvents.map(event => (\n <DayEventCard\n key={event.id}\n event={event}\n color={getEventColor(event)}\n textColor={getEventTextColor(event)}\n onComplete={onEventComplete ?? (onEventClick ? handleEventClick : undefined)}\n onEdit={onEventEdit}\n onDelete={onEventDelete}\n draggable={false}\n />\n ))}\n </div>\n </div>\n )}\n\n <div className={styles.dayViewScrollContainer} ref={dayViewScrollRef}>\n <div className={styles.dayTimelineGrid} style={{ height: timelineHeight }}>\n {hours.map(hour => (\n <div\n key={hour}\n className={styles.hourRow}\n style={{ height: hourHeight }}\n >\n <span className={styles.hourLabel}>\n {hour.toString().padStart(2, '0')}:00\n </span>\n <div className={styles.hourSlots}>\n {halfHourSlots ? (\n <>\n <div\n className={styles.halfHourSlot}\n onClick={() => handleSlotClick(hour, 0)}\n />\n <div\n className={`${styles.halfHourSlot} ${styles.halfHourSlotBottom}`}\n onClick={() => handleSlotClick(hour, 30)}\n />\n </>\n ) : (\n <div\n className={styles.halfHourSlot}\n onClick={() => handleSlotClick(hour, 0)}\n />\n )}\n </div>\n </div>\n ))}\n\n {scheduled.map((event) => {\n const [h, m] = event.time!.split(':').map(Number);\n const top = (h - startHour) * hourHeight + (m / 60) * hourHeight;\n const duration = eventDuration(event);\n const height = Math.max(24, (duration / 60) * hourHeight - 2);\n const lane = dayLayout.get(event.id);\n const totalCols = lane?.totalCols ?? 1;\n const col = lane?.col ?? 0;\n return (\n <div\n key={event.id}\n className={styles.dayEventAnchor}\n style={{\n top,\n height,\n '--lane-col': col,\n '--lane-total': totalCols,\n } as React.CSSProperties}\n onClick={(e) => e.stopPropagation()}\n >\n <DayEventCard\n event={event}\n color={getEventColor(event)}\n textColor={getEventTextColor(event)}\n onComplete={onEventComplete ?? (onEventClick ? handleEventClick : undefined)}\n onEdit={onEventEdit}\n onDelete={onEventDelete}\n onDragEnd={onEventDrop ? (clientY) => handleEventDragEnd(event, clientY) : undefined}\n />\n </div>\n );\n })}\n\n {showNow && (\n <div\n className={styles.currentTimeIndicator}\n style={{ top: `${nowOffset}px` }}\n />\n )}\n </div>\n </div>\n </div>\n );\n })()\n ) : currentViewMode === 'week' ? (\n // Week view layout — 7 side-by-side day timelines. Drag events across\n // columns to reschedule to a different day + hour in one gesture.\n (() => {\n const days = calendarData.days;\n const hours = Array.from({ length: endHour - startHour }, (_, i) => startHour + i);\n const timelineHeight = hours.length * hourHeight;\n\n const now = new Date();\n const todayIdx = days.findIndex(d => d.toDateString() === now.toDateString());\n const nowMinutesFromStart = (now.getHours() - startHour) * 60 + now.getMinutes();\n const nowOffset = (nowMinutesFromStart / 60) * hourHeight;\n const showNow = todayIdx >= 0 && nowOffset >= 0 && nowOffset <= timelineHeight;\n\n const eventMinutes = (time: string) => {\n const [h, m] = time.split(':').map(Number);\n return h * 60 + m;\n };\n const eventDuration = (event: CalendarEvent) => {\n if (!event.time || !event.endTime) return 30;\n const d = eventMinutes(event.endTime) - eventMinutes(event.time);\n return d > 0 ? d : 30;\n };\n\n const handleWeekSlotClick = (day: Date, hour: number, minute: number) => {\n if (!onTimeSlotClick) return;\n const slotDate = new Date(day);\n slotDate.setHours(hour, minute, 0, 0);\n const timeString = `${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}`;\n onTimeSlotClick(slotDate, hour, timeString);\n };\n\n const handleWeekDragEnd = (event: CalendarEvent, clientY: number, clientX: number) => {\n if (!onEventDrop) return;\n const gridEl = weekViewScrollRef.current?.querySelector(`.${styles.weekDayColumns}`) as HTMLElement | null;\n if (!gridEl) return;\n const rect = gridEl.getBoundingClientRect();\n const relativeX = clientX - rect.left;\n const relativeY = clientY - rect.top;\n const columnWidth = rect.width / 7;\n const columnIndex = Math.min(6, Math.max(0, Math.floor(relativeX / columnWidth)));\n const targetDay = days[columnIndex];\n const slotSize = halfHourSlots ? hourHeight / 2 : hourHeight;\n const totalSlots = halfHourSlots ? hours.length * 2 : hours.length;\n const slotIndex = Math.min(totalSlots - 1, Math.max(0, Math.floor(relativeY / slotSize)));\n const newHour = startHour + Math.floor(halfHourSlots ? slotIndex / 2 : slotIndex);\n const newMinute = halfHourSlots && slotIndex % 2 === 1 ? 30 : 0;\n const newDate = new Date(targetDay);\n newDate.setHours(newHour, newMinute, 0, 0);\n onEventDrop(event, newDate);\n };\n\n return (\n <div className={styles.weekTimeline}>\n <div className={styles.weekTimelineHeader}>\n <div className={styles.timeColumnHeader} />\n {days.map(day => {\n const dayIsToday = day.toDateString() === now.toDateString();\n const dayIsSelected = selectedDate && day.toDateString() === selectedDate.toDateString();\n return (\n <button\n key={day.toISOString()}\n type=\"button\"\n className={`${styles.weekDayColumnHeader} ${dayIsToday ? styles.today : ''} ${dayIsSelected ? styles.selected : ''}`}\n onClick={() => handleDateClick(day)}\n >\n <span className={styles.weekDayLabel}>\n {day.toLocaleDateString(locale, { weekday: 'short' })}\n </span>\n <span className={styles.weekDayNumber}>{day.getDate()}</span>\n </button>\n );\n })}\n </div>\n\n <div className={styles.weekTimelineScroll} ref={weekViewScrollRef}>\n <div className={styles.weekTimelineGrid} style={{ height: timelineHeight }}>\n <div className={styles.weekTimeColumn}>\n {hours.map(hour => (\n <div\n key={hour}\n className={styles.weekTimeSlot}\n style={{ height: hourHeight }}\n >\n <span className={styles.weekHourLabel}>\n {hour.toString().padStart(2, '0')}:00\n </span>\n </div>\n ))}\n </div>\n\n <div className={styles.weekDayColumns}>\n {days.map(day => {\n const dayEvents = getDayEvents(day).filter(e => !e.allDay && e.time);\n const dayIsToday = day.toDateString() === now.toDateString();\n const dayLayout = layoutOverlappingEvents(dayEvents);\n return (\n <div key={day.toISOString()} className={styles.weekDayColumn}>\n {hours.map(hour => (\n <div\n key={hour}\n className={styles.weekHourRow}\n style={{ height: hourHeight }}\n >\n {halfHourSlots ? (\n <>\n <div\n className={styles.halfHourSlot}\n onClick={() => handleWeekSlotClick(day, hour, 0)}\n />\n <div\n className={`${styles.halfHourSlot} ${styles.halfHourSlotBottom}`}\n onClick={() => handleWeekSlotClick(day, hour, 30)}\n />\n </>\n ) : (\n <div\n className={styles.halfHourSlot}\n onClick={() => handleWeekSlotClick(day, hour, 0)}\n />\n )}\n </div>\n ))}\n\n {dayEvents.map(event => {\n const [h, m] = event.time!.split(':').map(Number);\n const top = (h - startHour) * hourHeight + (m / 60) * hourHeight;\n const duration = eventDuration(event);\n const height = Math.max(24, (duration / 60) * hourHeight - 2);\n const lane = dayLayout.get(event.id);\n const totalCols = lane?.totalCols ?? 1;\n const col = lane?.col ?? 0;\n return (\n <div\n key={event.id}\n className={styles.weekEventAnchor}\n style={{\n top,\n height,\n '--lane-col': col,\n '--lane-total': totalCols,\n } as React.CSSProperties}\n onClick={(e) => e.stopPropagation()}\n >\n <DayEventCard\n event={event}\n color={getEventColor(event)}\n textColor={getEventTextColor(event)}\n onComplete={onEventComplete ?? (onEventClick ? handleEventClick : undefined)}\n onEdit={onEventEdit}\n onDelete={onEventDelete}\n onDragEnd={onEventDrop ? (cy, cx) => handleWeekDragEnd(event, cy, cx) : undefined}\n />\n </div>\n );\n })}\n\n {dayIsToday && showNow && (\n <div\n className={styles.currentTimeIndicator}\n style={{ top: `${nowOffset}px`, left: 0 }}\n />\n )}\n </div>\n );\n })}\n </div>\n </div>\n </div>\n </div>\n );\n })()\n ) : (\n (() => {\n // Fixed month-view cell height derived from maxEventsPerDay.\n // Day number + padding ≈ 40px, each event row ≈ 24px.\n // Week and compact views keep their own CSS-driven sizing.\n const monthCellHeight = !compact ? 40 + maxEventsPerDay * 24 : undefined;\n return (\n <div className={`${styles.daysGrid} ${showWeekNumbers ? styles.withWeekNumbers : ''}`}>\n {calendarData.days.map((day, index) => {\n const dayEvents = getDayEvents(day);\n const dayIsToday = isToday(day);\n const isInCurrentMonth = isCurrentMonth(day);\n const isWeekStart = showWeekNumbers && (index % 7 === 0);\n const dayIsSelected = selectedDate && day.toDateString() === selectedDate.toDateString();\n\n return (\n <Fragment key={`${day.getFullYear()}-${day.getMonth()}-${day.getDate()}`}>\n {isWeekStart && (\n <div\n className={styles.weekNumberCell}\n style={monthCellHeight !== undefined ? { height: monthCellHeight, minHeight: monthCellHeight } : undefined}\n >\n {getWeekNumber(day)}\n </div>\n )}\n <motion.div\n className={`${styles.dayCell} ${dayIsToday ? styles.today : ''} ${!isInCurrentMonth ? styles.otherMonth : ''} ${dayIsSelected ? styles.selected : ''}`}\n style={monthCellHeight !== undefined ? { height: monthCellHeight, minHeight: monthCellHeight } : undefined}\n initial={{ opacity: 0, y: 20 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{\n duration: 0.3,\n delay: index * 0.02,\n ease: \"easeOut\"\n }}\n onClick={() => handleDateClick(day)}\n >\n <div className={styles.dayNumber}>\n {day.getDate()}\n </div>\n {dayEvents.length > 0 && compact && currentViewMode === 'month' ? (\n <div className={styles.dots}>\n {dayEvents.slice(0, maxEventsPerDay).map((event) => (\n <span\n key={event.id}\n className={styles.dot}\n style={{ backgroundColor: getEventColor(event) }}\n />\n ))}\n {dayEvents.length > maxEventsPerDay && (\n <span className={styles.dotMore}>\n +{dayEvents.length - maxEventsPerDay}\n </span>\n )}\n </div>\n ) : dayEvents.length > 0 ? (\n <div className={styles.events}>\n {dayEvents.slice(0, maxEventsPerDay).map((event, eventIndex) => (\n <motion.div\n key={event.id}\n className={`${styles.event} ${event.status === 'completed' ? styles.completed : ''}`}\n style={{\n backgroundColor: getEventColor(event),\n color: getEventTextColor(event),\n opacity: event.status === 'completed' ? 0.7 : 1\n }}\n onClick={(e) => {\n e.stopPropagation();\n handleEventClick(event);\n }}\n initial={{ opacity: 0, x: -10 }}\n animate={{ opacity: 1, x: 0 }}\n transition={{\n duration: 0.2,\n delay: eventIndex * 0.05,\n ease: \"easeOut\"\n }}\n whileHover={{\n scale: 1.02,\n y: -1,\n transition: { duration: 0.1 }\n }}\n whileTap={{\n scale: 0.98,\n transition: { duration: 0.1 }\n }}\n >\n {iconRenderer && iconRenderer(event)}\n <span className={styles.eventTitle}>\n {event.time && (\n <span className={styles.eventTime}>\n {event.time}\n </span>\n )}\n {event.title}\n </span>\n {event.status === 'completed' && (\n <svg className={styles.completedIcon} width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n <polyline points=\"20,6 9,17 4,12\" />\n </svg>\n )}\n </motion.div>\n ))}\n {dayEvents.length > maxEventsPerDay && (\n <div className={styles.moreEvents}>\n +{dayEvents.length - maxEventsPerDay} more\n </div>\n )}\n </div>\n ) : emptyState ? (\n <div className={styles.emptyState}>\n {emptyState}\n </div>\n ) : null}\n </motion.div>\n </Fragment>\n );\n })}\n </div>\n );\n })()\n )}\n </div>\n );\n}","import React, { useState, useEffect, useMemo, useRef } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { Menu, X } from 'lucide-react';\nimport desktopStyles from './styles/Navbar.module.css';\nimport mobileStyles from './styles/Navbar.mobile.module.css';\nimport { useComponentSound, ComponentSoundConfig } from '../../../utils/useSound';\n\nexport interface NavItem {\n id: string;\n label: React.ReactNode;\n icon?: React.ComponentType<{ className?: string }>;\n href?: string;\n onClick?: () => void;\n isActive?: boolean;\n badge?: string | number;\n children?: NavItem[];\n}\n\nexport interface NavbarProps {\n items: NavItem[];\n logo?: {\n src?: string;\n alt?: string;\n text?: React.ReactNode;\n subtitle?: React.ReactNode;\n };\n onItemClick?: (item: NavItem) => void;\n variant?: 'sidebar' | 'top' | 'minimal';\n isMobile?: boolean;\n footer?: React.ReactNode;\n className?: string;\n soundConfig?: ComponentSoundConfig;\n colorfulIcons?: boolean;\n}\n\nexport const Navbar: React.FC<NavbarProps> = ({\n items,\n logo,\n onItemClick,\n variant = 'sidebar',\n isMobile = false,\n footer,\n className = '',\n soundConfig,\n colorfulIcons = false,\n}) => {\n const coloredIconsAttr = colorfulIcons ? 'true' : undefined;\n const styles = useMemo(() => (isMobile ? mobileStyles : desktopStyles), [isMobile]);\n const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);\n const [expandedItems, setExpandedItems] = useState<Set<string>>(new Set());\n const { handlers, playSound } = useComponentSound(soundConfig);\n\n // Close mobile menu when switching away from mobile\n useEffect(() => {\n if (!isMobile) {\n setIsMobileMenuOpen(false);\n }\n }, [isMobile]);\n\n // Swipe from left edge to open menu\n const touchStartRef = useRef<{ x: number; y: number } | null>(null);\n\n useEffect(() => {\n if (!isMobile) return;\n\n const handleTouchStart = (e: TouchEvent) => {\n const touch = e.touches[0];\n if (touch.clientX < 30) {\n touchStartRef.current = { x: touch.clientX, y: touch.clientY };\n }\n };\n\n const handleTouchEnd = (e: TouchEvent) => {\n if (!touchStartRef.current) return;\n const touch = e.changedTouches[0];\n const dx = touch.clientX - touchStartRef.current.x;\n const dy = Math.abs(touch.clientY - touchStartRef.current.y);\n touchStartRef.current = null;\n\n if (dx > 60 && dy < dx) {\n setIsMobileMenuOpen(true);\n playSound('toggle');\n }\n };\n\n document.addEventListener('touchstart', handleTouchStart, { passive: true });\n document.addEventListener('touchend', handleTouchEnd, { passive: true });\n\n return () => {\n document.removeEventListener('touchstart', handleTouchStart);\n document.removeEventListener('touchend', handleTouchEnd);\n };\n }, [isMobile, playSound]);\n\n // Lock body scroll when overlay is open (position: fixed is more reliable on mobile)\n useEffect(() => {\n if (isMobileMenuOpen) {\n const scrollY = window.scrollY;\n document.body.style.position = 'fixed';\n document.body.style.top = `-${scrollY}px`;\n document.body.style.left = '0';\n document.body.style.right = '0';\n document.body.style.overflow = 'hidden';\n } else {\n const scrollY = document.body.style.top;\n document.body.style.position = '';\n document.body.style.top = '';\n document.body.style.left = '';\n document.body.style.right = '';\n document.body.style.overflow = '';\n if (scrollY) {\n window.scrollTo(0, parseInt(scrollY, 10) * -1);\n }\n }\n return () => {\n document.body.style.position = '';\n document.body.style.top = '';\n document.body.style.left = '';\n document.body.style.right = '';\n document.body.style.overflow = '';\n };\n }, [isMobileMenuOpen]);\n\n const toggleMobileMenu = () => {\n playSound('toggle');\n setIsMobileMenuOpen(!isMobileMenuOpen);\n };\n\n const toggleExpanded = (itemId: string) => {\n setExpandedItems((prev) => {\n const newSet = new Set(prev);\n if (newSet.has(itemId)) {\n newSet.delete(itemId);\n } else {\n newSet.add(itemId);\n }\n return newSet;\n });\n };\n\n const handleItemClick = (item: NavItem) => {\n handlers.onClick?.();\n if (item.children && item.children.length > 0) {\n toggleExpanded(item.id);\n } else {\n if (item.onClick) {\n item.onClick();\n }\n if (onItemClick) {\n onItemClick(item);\n }\n if (isMobile || isMobileMenuOpen) {\n setIsMobileMenuOpen(false);\n }\n }\n };\n\n const renderNavItem = (item: NavItem, index: number, depth: number = 0) => {\n const Icon = item.icon;\n const isExpanded = expandedItems.has(item.id);\n const hasChildren = item.children && item.children.length > 0;\n\n return (\n <motion.li\n key={item.id}\n className={`${styles.navItem} ${depth > 0 ? styles.subNavItem : ''}`}\n initial={{ opacity: 0, x: -20 }}\n animate={{ opacity: 1, x: 0 }}\n transition={{ delay: index * 0.05 }}\n >\n <motion.button\n className={`${styles.navLink} ${item.isActive ? styles.active : ''}`}\n onClick={() => handleItemClick(item)}\n onMouseEnter={handlers.onMouseEnter}\n whileHover={{ x: 5 }}\n whileTap={{ scale: 0.98 }}\n >\n {item.isActive && (\n <motion.div\n className={styles.activeBackground}\n layoutId=\"activeNavBackground\"\n initial={false}\n transition={{\n type: 'spring',\n stiffness: 500,\n damping: 35,\n }}\n />\n )}\n\n {Icon && (\n <Icon\n className={`${styles.navIcon} ${item.isActive ? styles.activeIcon : ''}`}\n />\n )}\n\n <span className={`${styles.navText} ${item.isActive ? styles.activeText : ''}`}>\n {item.label}\n </span>\n\n {item.badge && <span className={styles.navBadge}>{item.badge}</span>}\n\n {hasChildren && (\n <motion.span\n className={styles.chevron}\n animate={{ rotate: isExpanded ? 180 : 0 }}\n transition={{ duration: 0.2 }}\n >\n ▼\n </motion.span>\n )}\n </motion.button>\n\n {hasChildren && (\n <AnimatePresence>\n {isExpanded && (\n <motion.ul\n className={styles.subNavList}\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n transition={{ duration: 0.2 }}\n >\n {item.children!.map((child, childIndex) =>\n renderNavItem(child, childIndex, depth + 1)\n )}\n </motion.ul>\n )}\n </AnimatePresence>\n )}\n </motion.li>\n );\n };\n\n const navContent = (\n <>\n {logo && (\n <motion.div\n className={styles.navLogo}\n initial={{ opacity: 0, y: -20 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: 0.1 }}\n >\n <div className={styles.logoContainer}>\n {logo.src ? (\n <motion.img\n src={logo.src}\n alt={logo.alt || 'Logo'}\n className={styles.logoImage}\n onMouseEnter={handlers.onMouseEnter}\n whileHover={{ scale: 1.05 }}\n transition={{ type: 'spring', stiffness: 400 }}\n />\n ) : (\n <div className={styles.logoPlaceholder}>\n {typeof logo.text === 'string'\n ? logo.text.charAt(0) || 'L'\n : 'L'}\n </div>\n )}\n\n {(logo.text || logo.subtitle) && (\n <div className={styles.logoContent}>\n {logo.text && <span className={styles.logoText}>{logo.text}</span>}\n {logo.subtitle && (\n <span className={styles.logoSubtitle}>{logo.subtitle}</span>\n )}\n </div>\n )}\n </div>\n </motion.div>\n )}\n\n <ul className={styles.navList}>\n {items.map((item, index) => renderNavItem(item, index))}\n </ul>\n\n {footer && (\n <motion.div\n className={styles.navFooter}\n initial={{ opacity: 0, y: 20 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: 0.3 }}\n >\n {footer}\n </motion.div>\n )}\n </>\n );\n\n if (variant === 'top') {\n return (\n <motion.nav\n className={`${styles.navbar} ${styles.navbarTop} ${className}`}\n data-colored-icons={coloredIconsAttr}\n initial={{ y: -100 }}\n animate={{ y: 0 }}\n transition={{ type: 'spring', stiffness: 300, damping: 30 }}\n >\n {navContent}\n </motion.nav>\n );\n }\n\n if (isMobile) {\n return (\n <>\n {/* Mobile top bar */}\n <nav className={`${styles.navbar} ${className}`} data-colored-icons={coloredIconsAttr}>\n {logo && (\n <div className={styles.navLogo}>\n <div className={styles.logoContainer}>\n {logo.src ? (\n <img\n src={logo.src}\n alt={logo.alt || 'Logo'}\n className={styles.logoImage}\n />\n ) : (\n <div className={styles.logoPlaceholder}>\n {typeof logo.text === 'string'\n ? logo.text.charAt(0) || 'L'\n : 'L'}\n </div>\n )}\n {logo.text && (\n <div className={styles.logoContent}>\n <span className={styles.logoText}>{logo.text}</span>\n </div>\n )}\n </div>\n </div>\n )}\n\n <div className={styles.navActions}>\n {footer && <div className={styles.navFooter}>{footer}</div>}\n\n <button\n className={`${styles.mobileMenuButton} ${isMobileMenuOpen ? styles.menuOpen : ''}`}\n onClick={toggleMobileMenu}\n aria-label=\"Toggle navigation menu\"\n >\n {isMobileMenuOpen ? <X /> : <Menu />}\n </button>\n </div>\n </nav>\n\n {/* Full-screen overlay */}\n <AnimatePresence>\n {isMobileMenuOpen && (\n <motion.div\n className={styles.mobileBackdrop}\n data-colored-icons={coloredIconsAttr}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.2 }}\n onClick={() => setIsMobileMenuOpen(false)}\n >\n <motion.div\n initial={{ y: -20, opacity: 0 }}\n animate={{ y: 0, opacity: 1 }}\n exit={{ y: -20, opacity: 0 }}\n transition={{ duration: 0.2 }}\n onClick={(e) => e.stopPropagation()}\n >\n <ul className={styles.navList}>\n {items.map((item, index) => renderNavItem(item, index))}\n </ul>\n </motion.div>\n </motion.div>\n )}\n </AnimatePresence>\n </>\n );\n }\n\n return (\n <>\n {/* Desktop Navbar */}\n <motion.nav\n className={`${styles.navbar} ${styles[`navbar${variant.charAt(0).toUpperCase() + variant.slice(1)}`]} ${className}`}\n data-colored-icons={coloredIconsAttr}\n initial={variant === 'sidebar' ? { x: -300 } : { opacity: 0 }}\n animate={variant === 'sidebar' ? { x: 0 } : { opacity: 1 }}\n transition={{ type: 'spring', stiffness: 300, damping: 30 }}\n >\n {navContent}\n </motion.nav>\n </>\n );\n};\n","import React, { useState, useEffect, useMemo, useRef } 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('%m-%d')\n case 'weekly':\n return (d: Date) => {\n const weekNum = getISOWeek(d)\n return `W${weekNum.toString().padStart(2, '0')}`\n }\n case 'monthly':\n return d3.timeFormat('%b')\n case 'quarterly':\n return (d: Date) => {\n const quarter = Math.floor(d.getMonth() / 3) + 1\n return `Q${quarter}`\n }\n default:\n return d3.timeFormat('%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 viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"xMidYMid meet\"\n className={styles.chart}\n />\n \n {tooltipData && (\n <div\n ref={tooltipRef}\n className={`${styles.tooltip} ${tooltipData ? styles.visible : ''}`}\n style={{\n left: `${tooltipData.x}px`,\n top: `${tooltipData.y - 80}px`\n }}\n >\n <div className={styles.tooltipHeader}>\n <span className={styles.tooltipEmoji}>\n {customHabitEmojis[tooltipData.habit] || '📊'}\n </span>\n <span \n className={styles.tooltipDot}\n style={{ backgroundColor: getColor(tooltipData.habit) }}\n />\n <span>{tooltipData.habit}</span>\n </div>\n <div className={styles.tooltipInfo}>\n <div className={styles.tooltipDate}>\n {formatTooltipDate(tooltipData.date, viewType)}\n </div>\n <div className={styles.tooltipValue}>\n <strong>{Math.round(tooltipData.value * 10) / 10}</strong>\n <span style={{ fontSize: '12px', fontWeight: 'normal', opacity: 0.6 }}>units</span>\n </div>\n </div>\n </div>\n )}\n </div>\n )\n}","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\tname: string;\n\tsize?: number;\n\tchildren?: SunBurstRecord[];\n}\n\ninterface SunburstChartProps {\n\tdata: SunBurstRecord;\n\twidth?: number;\n\theight?: number;\n\ttitle?: string;\n\ttagColors?: Record<string, string>;\n\tunit?: string;\n\tcenterLabel?: string;\n}\n\nconst COLOR_PALETTE = [\n\t'#6366f1',\n\t'#8b5cf6',\n\t'#06b6d4',\n\t'#10b981',\n\t'#f59e0b',\n\t'#ef4444',\n\t'#ec4899',\n\t'#84cc16',\n\t'#f97316',\n\t'#3b82f6',\n\t'#14b8a6',\n\t'#f59e0b',\n];\n\nexport const SunburstChart: React.FC<SunburstChartProps> = ({\n\tdata,\n\twidth = 500,\n\theight = 500,\n\ttitle = 'Sunburst Chart',\n\ttagColors = {},\n\tunit = 'items',\n\tcenterLabel,\n}) => {\n\tconst svgRef = useRef<SVGSVGElement>(null);\n\tconst colorMap = useRef(new Map<string, string>()).current;\n\tconst colorIndex = useRef(0);\n\tconst focusedNodeRef = useRef<d3.HierarchyRectangularNode<SunBurstRecord> | null>(null);\n\n\tconst radius = Math.min(width, height) / 2;\n\n\tconst getColor = useCallback(\n\t\t(name: string, depth: number): string => {\n\t\t\t// First check if we have a tag color for this name\n\t\t\tif (tagColors[name]) {\n\t\t\t\tconst color = d3.color(tagColors[name]);\n\t\t\t\tif (color) {\n\t\t\t\t\t// Darken for deeper levels\n\t\t\t\t\treturn depth > 1\n\t\t\t\t\t\t? color.darker((depth - 1) * 0.3).toString()\n\t\t\t\t\t\t: color.toString();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fallback to color palette\n\t\t\tif (!colorMap.has(name)) {\n\t\t\t\tcolorMap.set(name, COLOR_PALETTE[colorIndex.current % COLOR_PALETTE.length]);\n\t\t\t\tcolorIndex.current++;\n\t\t\t}\n\t\t\tconst baseColor = colorMap.get(name) || '#d4af37';\n\n\t\t\tconst color = d3.color(baseColor);\n\t\t\tif (color) {\n\t\t\t\treturn color.darker(depth * 0.3).toString();\n\t\t\t}\n\t\t\treturn baseColor;\n\t\t},\n\t\t[tagColors, colorMap]\n\t);\n\n\tuseEffect(() => {\n\t\tif (!svgRef.current || !data) return;\n\n\t\tconst svg = d3.select(svgRef.current);\n\t\tsvg.selectAll('*').remove();\n\n\t\tconst g = svg.append('g').attr('transform', `translate(${width / 2},${height / 2})`);\n\n\t\tconst root = d3\n\t\t\t.hierarchy(data)\n\t\t\t.sum((d) => d.size ?? 0)\n\t\t\t.sort((a, b) => (b.value ?? 0) - (a.value ?? 0));\n\n\t\tconst partition = d3.partition<SunBurstRecord>().size([2 * Math.PI, radius * radius]);\n\n\t\tconst nodes = partition(root).descendants();\n\n\t\t// Store original positions for reset\n\t\tinterface ExtendedNode extends d3.HierarchyRectangularNode<SunBurstRecord> {\n\t\t\tx0Original: number;\n\t\t\tx1Original: number;\n\t\t\ty0Original: number;\n\t\t\ty1Original: number;\n\t\t}\n\n\t\tnodes.forEach((d) => {\n\t\t\tconst node = d as ExtendedNode;\n\t\t\tnode.x0Original = d.x0;\n\t\t\tnode.x1Original = d.x1;\n\t\t\tnode.y0Original = d.y0;\n\t\t\tnode.y1Original = d.y1;\n\t\t});\n\n\t\tconst arc = d3\n\t\t\t.arc<d3.HierarchyRectangularNode<SunBurstRecord>>()\n\t\t\t.startAngle((d) => d.x0)\n\t\t\t.endAngle((d) => d.x1)\n\t\t\t.innerRadius((d) => Math.sqrt(d.y0))\n\t\t\t.outerRadius((d) => Math.sqrt(d.y1))\n\t\t\t.cornerRadius(3);\n\n\t\tconst tooltip = d3\n\t\t\t.select('body')\n\t\t\t.append('div')\n\t\t\t.attr('class', styles.tooltip)\n\t\t\t.style('opacity', 0)\n\t\t\t.style('position', 'absolute');\n\n\t\t// Function to reset to original view\n\t\tconst resetView = () => {\n\t\t\tfocusedNodeRef.current = null;\n\n\t\t\tconst transition = d3.transition().duration(750).ease(d3.easeCubicInOut);\n\n\t\t\t// First show all elements\n\t\t\tpaths.style('opacity', 1);\n\n\t\t\tpaths\n\t\t\t\t.transition(\n\t\t\t\t\ttransition as d3.Transition<\n\t\t\t\t\t\tany,\n\t\t\t\t\t\td3.HierarchyRectangularNode<SunBurstRecord>,\n\t\t\t\t\t\tany,\n\t\t\t\t\t\tany\n\t\t\t\t\t>\n\t\t\t\t)\n\t\t\t\t.attrTween('d', (d) => {\n\t\t\t\t\tconst node = d as ExtendedNode;\n\n\t\t\t\t\treturn (t: number) => {\n\t\t\t\t\t\t// Calculate interpolated positions\n\t\t\t\t\t\tconst currX0 = d3.interpolate(node.x0, node.x0Original)(t);\n\t\t\t\t\t\tconst currX1 = d3.interpolate(node.x1, node.x1Original)(t);\n\t\t\t\t\t\tconst currY0 = d3.interpolate(node.y0, node.y0Original)(t);\n\t\t\t\t\t\tconst currY1 = d3.interpolate(node.y1, node.y1Original)(t);\n\n\t\t\t\t\t\t// Update node positions continuously\n\t\t\t\t\t\tnode.x0 = currX0;\n\t\t\t\t\t\tnode.x1 = currX1;\n\t\t\t\t\t\tnode.y0 = currY0;\n\t\t\t\t\t\tnode.y1 = currY1;\n\n\t\t\t\t\t\tconst interpolatedArc = d3\n\t\t\t\t\t\t\t.arc<any>()\n\t\t\t\t\t\t\t.startAngle(() => currX0)\n\t\t\t\t\t\t\t.endAngle(() => currX1)\n\t\t\t\t\t\t\t.innerRadius(() => Math.min(radius, Math.sqrt(Math.max(0, currY0))))\n\t\t\t\t\t\t\t.outerRadius(() => Math.min(radius, Math.sqrt(Math.max(0, currY1))))\n\t\t\t\t\t\t\t.cornerRadius(3);\n\n\t\t\t\t\t\treturn interpolatedArc(node) || '';\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t// Restore cursor style based on whether nodes have children\n\t\t\tpaths.style('cursor', (d) =>\n\t\t\t\t!d.children || d.children.length === 0 ? 'default' : 'pointer'\n\t\t\t);\n\n\t\t\t// Reset center button cursor\n\t\t\tcenterResetButton.style('cursor', 'default');\n\n\t\t\t// Update labels\n\t\t\tupdateLabels(transition, nodes, true);\n\t\t};\n\n\t\t// Function to handle click and expand\n\t\tconst handleClick = (\n\t\t\tevent: MouseEvent,\n\t\t\tclickedNode: d3.HierarchyRectangularNode<SunBurstRecord>\n\t\t) => {\n\t\t\tevent.stopPropagation();\n\n\t\t\t// If already focused on a node, don't allow clicking on other segments\n\t\t\t// Only allow reset through the center button\n\t\t\tif (focusedNodeRef.current) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Don't allow clicking on leaf nodes (nodes without children)\n\t\t\tif (!clickedNode.children || clickedNode.children.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfocusedNodeRef.current = clickedNode;\n\n\t\t\tconst transition = d3.transition().duration(750).ease(d3.easeCubicInOut);\n\n\t\t\t// Zoom to clicked node - scale to fill the entire circle\n\t\t\tconst clickedOriginal = clickedNode as ExtendedNode;\n\n\t\t\t// Ensure we use the original x values for proper scaling\n\t\t\t// The x-scale maps the clicked node's angular extent to the full circle\n\t\t\tconst xScale = d3\n\t\t\t\t.scaleLinear()\n\t\t\t\t.domain([clickedOriginal.x0Original, clickedOriginal.x1Original])\n\t\t\t\t.range([0, 2 * Math.PI])\n\t\t\t\t.clamp(true); // Ensure values stay within bounds\n\n\t\t\t// For the radial scale, always use the full radius available\n\t\t\t// Find the deepest descendant to ensure all children fit\n\t\t\tconst descendants = nodes.filter((d) => isParentOf(clickedNode, d));\n\t\t\tconst maxChildRadius = Math.max(\n\t\t\t\t...descendants.map((d) => (d as ExtendedNode).y1Original)\n\t\t\t);\n\n\t\t\t// Always scale to use the full radius, regardless of original size\n\t\t\tconst yScale = d3\n\t\t\t\t.scaleLinear()\n\t\t\t\t.domain([clickedOriginal.y0Original, maxChildRadius])\n\t\t\t\t.range([0, radius * radius])\n\t\t\t\t.clamp(true); // Ensure values stay within bounds\n\n\t\t\t// First, immediately hide elements that shouldn't be visible\n\t\t\tpaths.style('opacity', (d) => (isParentOf(clickedNode, d) ? 1 : 0));\n\n\t\t\tpaths\n\t\t\t\t.transition(\n\t\t\t\t\ttransition as d3.Transition<\n\t\t\t\t\t\tany,\n\t\t\t\t\t\td3.HierarchyRectangularNode<SunBurstRecord>,\n\t\t\t\t\t\tany,\n\t\t\t\t\t\tany\n\t\t\t\t\t>\n\t\t\t\t)\n\t\t\t\t.attrTween('d', (d) => {\n\t\t\t\t\tconst node = d as ExtendedNode;\n\t\t\t\t\t// Only transform nodes that are descendants of the clicked node\n\t\t\t\t\tif (!isParentOf(clickedNode, d)) {\n\t\t\t\t\t\t// Keep them hidden\n\t\t\t\t\t\treturn () => '';\n\t\t\t\t\t}\n\n\t\t\t\t\t// Calculate new positions based on the original positions\n\t\t\t\t\t// ALWAYS scale to fill the full circle, no minimum size preservation\n\t\t\t\t\tlet newX0 = xScale(node.x0Original);\n\t\t\t\t\tlet newX1 = xScale(node.x1Original);\n\n\t\t\t\t\t// Ensure proper scaling even for very small segments\n\t\t\t\t\t// The clicked node's extent should always map to full circle\n\t\t\t\t\tif (newX1 <= newX0) {\n\t\t\t\t\t\t// Force proper angular extent based on proportion\n\t\t\t\t\t\tconst proportion =\n\t\t\t\t\t\t\t(node.x1Original - node.x0Original) /\n\t\t\t\t\t\t\t(clickedOriginal.x1Original - clickedOriginal.x0Original);\n\t\t\t\t\t\tnewX1 = newX0 + 2 * Math.PI * proportion;\n\t\t\t\t\t}\n\n\t\t\t\t\t// For radial positions, scale appropriately\n\t\t\t\t\tlet newY0, newY1;\n\t\t\t\t\tif (node === clickedNode) {\n\t\t\t\t\t\t// The clicked node itself should fill from center\n\t\t\t\t\t\tnewY0 = 0;\n\t\t\t\t\t\t// If it has children, leave room for them; otherwise fill to edge\n\t\t\t\t\t\tif (node.children && node.children.length > 0) {\n\t\t\t\t\t\t\tconst childrenY0 = Math.min(\n\t\t\t\t\t\t\t\t...node.children.map((c) => (c as ExtendedNode).y0Original)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tnewY1 = yScale(childrenY0) * 0.98; // Very slight gap for visual separation\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnewY1 = radius * radius * 0.98; // Fill almost to edge\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Child nodes should be scaled to fill the remaining space proportionally\n\t\t\t\t\t\t// NO minimum size enforcement - pure proportional scaling\n\t\t\t\t\t\tnewY0 = yScale(node.y0Original);\n\t\t\t\t\t\tnewY1 = yScale(node.y1Original);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Use current positions as start (they should be at original if not previously zoomed)\n\t\t\t\t\tconst startX0 = node.x0;\n\t\t\t\t\tconst startX1 = node.x1;\n\t\t\t\t\tconst startY0 = node.y0;\n\t\t\t\t\tconst startY1 = node.y1;\n\n\t\t\t\t\treturn (t: number) => {\n\t\t\t\t\t\t// Calculate interpolated positions\n\t\t\t\t\t\tconst currX0 = d3.interpolate(startX0, newX0)(t);\n\t\t\t\t\t\tconst currX1 = d3.interpolate(startX1, newX1)(t);\n\t\t\t\t\t\tconst currY0 = d3.interpolate(startY0, newY0)(t);\n\t\t\t\t\t\tconst currY1 = d3.interpolate(startY1, newY1)(t);\n\n\t\t\t\t\t\t// Update node positions continuously\n\t\t\t\t\t\tnode.x0 = currX0;\n\t\t\t\t\t\tnode.x1 = currX1;\n\t\t\t\t\t\tnode.y0 = currY0;\n\t\t\t\t\t\tnode.y1 = currY1;\n\n\t\t\t\t\t\tconst interpolatedArc = d3\n\t\t\t\t\t\t\t.arc<any>()\n\t\t\t\t\t\t\t.startAngle(() => currX0)\n\t\t\t\t\t\t\t.endAngle(() => currX1)\n\t\t\t\t\t\t\t.innerRadius(() => Math.min(radius, Math.sqrt(Math.max(0, currY0))))\n\t\t\t\t\t\t\t.outerRadius(() => Math.min(radius, Math.sqrt(Math.max(0, currY1))))\n\t\t\t\t\t\t\t.cornerRadius(3);\n\n\t\t\t\t\t\treturn interpolatedArc(node) || '';\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t// Update labels for zoomed view\n\t\t\tupdateLabels(\n\t\t\t\ttransition,\n\t\t\t\tnodes.filter((d) => isParentOf(clickedNode, d)),\n\t\t\t\tfalse\n\t\t\t);\n\n\t\t\t// Update cursor style to indicate segments are not clickable\n\t\t\tpaths.style('cursor', 'default');\n\n\t\t\t// Update center button to be clickable\n\t\t\tcenterResetButton.style('cursor', 'pointer');\n\t\t};\n\n\t\t// Helper function to check if a node is parent of another\n\t\tconst isParentOf = (\n\t\t\tparent: d3.HierarchyNode<SunBurstRecord>,\n\t\t\tdescendant: d3.HierarchyNode<SunBurstRecord>\n\t\t): boolean => {\n\t\t\tif (parent === descendant) return true;\n\t\t\tlet current = descendant.parent;\n\t\t\twhile (current) {\n\t\t\t\tif (current === parent) return true;\n\t\t\t\tcurrent = current.parent;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tconst paths = g\n\t\t\t.selectAll('path')\n\t\t\t.data(nodes.filter((d) => d.depth > 0 && d.value && d.value > 0))\n\t\t\t.enter()\n\t\t\t.append('path')\n\t\t\t.attr('d', arc as any)\n\t\t\t.attr('fill', (d) => {\n\t\t\t\tlet ancestor = d;\n\t\t\t\twhile (ancestor.depth > 1 && ancestor.parent) {\n\t\t\t\t\tancestor = ancestor.parent;\n\t\t\t\t}\n\t\t\t\treturn getColor(ancestor.data.name, d.depth);\n\t\t\t})\n\t\t\t.attr('stroke', () => {\n\t\t\t\t// Get computed border color from theme\n\t\t\t\tconst computedStyle = window.getComputedStyle(svgRef.current!);\n\t\t\t\treturn computedStyle.getPropertyValue('--color-border') || '#e2e8f0';\n\t\t\t})\n\t\t\t.attr('stroke-width', 2)\n\t\t\t.style('cursor', (d) =>\n\t\t\t\t!d.children || d.children.length === 0 ? 'default' : 'pointer'\n\t\t\t)\n\t\t\t.on('click', handleClick)\n\t\t\t.on('mouseover', function (event, d) {\n\t\t\t\t// Don't show hover effect if already focused\n\t\t\t\tif (focusedNodeRef.current) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst hoveredElement = this;\n\n\t\t\t\t// Show tooltip for all nodes\n\t\t\t\ttooltip.transition().duration(200).style('opacity', 1);\n\n\t\t\t\tconst value = d.value || 0;\n\t\t\t\tconst percentage = ((value / (root.value || 1)) * 100).toFixed(1);\n\n\t\t\t\ttooltip\n\t\t\t\t\t.html(\n\t\t\t\t\t\t`\n <div><strong>${d.data.name}</strong></div>\n <div>Value: ${value}</div>\n <div>${percentage}% of total</div>\n `\n\t\t\t\t\t)\n\t\t\t\t\t.style('left', (event as MouseEvent).pageX + 10 + 'px')\n\t\t\t\t\t.style('top', (event as MouseEvent).pageY - 28 + 'px');\n\n\t\t\t\t// Apply blur to all other segments\n\t\t\t\tpaths.each(function () {\n\t\t\t\t\tif (this !== hoveredElement) {\n\t\t\t\t\t\td3.select(this)\n\t\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t\t.duration(200)\n\t\t\t\t\t\t\t.style('opacity', 0.3)\n\t\t\t\t\t\t\t.style('filter', 'blur(1px)');\n\t\t\t\t\t} else {\n\t\t\t\t\t\td3.select(this)\n\t\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t\t.duration(200)\n\t\t\t\t\t\t\t.style('opacity', 1)\n\t\t\t\t\t\t\t.style('filter', 'none');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mouseout', function () {\n\t\t\t\t// Hide tooltip\n\t\t\t\ttooltip.transition().duration(500).style('opacity', 0);\n\n\t\t\t\t// Reset all segments\n\t\t\t\tpaths.transition().duration(200).style('opacity', 1).style('filter', 'none');\n\t\t\t})\n\t\t\t.on('mousemove', function (event) {\n\t\t\t\t// Update tooltip position on mouse move\n\t\t\t\ttooltip\n\t\t\t\t\t.style('left', (event as MouseEvent).pageX + 10 + 'px')\n\t\t\t\t\t.style('top', (event as MouseEvent).pageY - 28 + 'px');\n\t\t\t});\n\n\t\tconst shouldDisplayLabel = (d: d3.HierarchyRectangularNode<SunBurstRecord>) => {\n\t\t\tconst angle = d.x1 - d.x0;\n\t\t\t// When zoomed in, be more lenient with label display since segments are larger\n\t\t\tconst minAngle = focusedNodeRef.current ? 0.05 : 0.15;\n\t\t\treturn angle > minAngle && d.depth <= 2;\n\t\t};\n\n\t\t// Function to update labels after transitions\n\t\tconst updateLabels = (\n\t\t\ttransition: d3.Transition<d3.BaseType, unknown, d3.BaseType, unknown>,\n\t\t\tvisibleNodes: d3.HierarchyRectangularNode<SunBurstRecord>[],\n\t\t\t_isReset: boolean\n\t\t) => {\n\t\t\t// Remove old labels\n\t\t\tg.selectAll('text.segment-label').remove();\n\t\t\tg.selectAll('text.center-label').remove();\n\n\t\t\t// Wait for transition to complete before adding new labels\n\t\t\ttransition.on('end', () => {\n\t\t\t\t// Filter out the focused node itself when zoomed (it's shown in center)\n\t\t\t\tconst nodesToLabel = visibleNodes.filter((d) => {\n\t\t\t\t\tif (focusedNodeRef.current && d === focusedNodeRef.current) {\n\t\t\t\t\t\treturn false; // Don't show label for the zoomed parent node\n\t\t\t\t\t}\n\t\t\t\t\treturn d.depth > 0 && d.value && d.value > 0 && shouldDisplayLabel(d);\n\t\t\t\t});\n\n\t\t\t\tg.selectAll('text.segment-label')\n\t\t\t\t\t.data(nodesToLabel)\n\t\t\t\t\t.enter()\n\t\t\t\t\t.append('text')\n\t\t\t\t\t.attr('class', 'segment-label')\n\t\t\t\t\t.attr('transform', (d) => {\n\t\t\t\t\t\tconst angle = (d.x0 + d.x1) / 2;\n\t\t\t\t\t\tconst radiusVal = (Math.sqrt(d.y0) + Math.sqrt(d.y1)) / 2;\n\t\t\t\t\t\tconst x = Math.cos(angle - Math.PI / 2) * radiusVal;\n\t\t\t\t\t\tconst y = Math.sin(angle - Math.PI / 2) * radiusVal;\n\t\t\t\t\t\treturn `translate(${x},${y})`;\n\t\t\t\t\t})\n\t\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t\t.attr('alignment-baseline', 'middle')\n\t\t\t\t\t.attr('font-size', (d) => (d.depth === 1 ? '14px' : '12px'))\n\t\t\t\t\t.attr('fill', 'var(--color-text)')\n\t\t\t\t\t.attr('font-weight', '700')\n\t\t\t\t\t.style('pointer-events', 'none')\n\t\t\t\t\t.style('text-shadow', 'none')\n\t\t\t\t\t.text((d) => {\n\t\t\t\t\t\tconst maxLength = d.depth === 1 ? 12 : 8;\n\t\t\t\t\t\treturn d.data.name.substring(0, maxLength);\n\t\t\t\t\t})\n\t\t\t\t\t.style('opacity', 0)\n\t\t\t\t\t.transition()\n\t\t\t\t\t.duration(200)\n\t\t\t\t\t.style('opacity', 1);\n\n\t\t\t\t// Update center text\n\t\t\t\tconst currentNode = focusedNodeRef.current || root;\n\t\t\t\tconst computedStyle = window.getComputedStyle(svgRef.current!);\n\t\t\t\tconst centerTextColor =\n\t\t\t\t\tcomputedStyle.getPropertyValue('--text-primary') ||\n\t\t\t\t\t(computedStyle.getPropertyValue('--bg-primary') === '#000000' ||\n\t\t\t\t\tcomputedStyle.getPropertyValue('color-scheme') === 'dark'\n\t\t\t\t\t\t? '#ffffff'\n\t\t\t\t\t\t: '#000000');\n\n\t\t\t\tg.append('text')\n\t\t\t\t\t.attr('class', 'center-label')\n\t\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t\t.attr('alignment-baseline', 'middle')\n\t\t\t\t\t.attr('font-size', '18px')\n\t\t\t\t\t.attr('font-weight', 'bold')\n\t\t\t\t\t.attr('fill', centerTextColor)\n\t\t\t\t\t.style('pointer-events', 'none')\n\t\t\t\t\t.text(\n\t\t\t\t\t\tcurrentNode === root\n\t\t\t\t\t\t\t? centerLabel || data.name || 'Total'\n\t\t\t\t\t\t\t: currentNode.data.name\n\t\t\t\t\t)\n\t\t\t\t\t.style('opacity', 0)\n\t\t\t\t\t.transition()\n\t\t\t\t\t.duration(200)\n\t\t\t\t\t.style('opacity', 1);\n\n\t\t\t\tg.append('text')\n\t\t\t\t\t.attr('class', 'center-label')\n\t\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t\t.attr('alignment-baseline', 'middle')\n\t\t\t\t\t.attr('y', 20)\n\t\t\t\t\t.attr('font-size', '14px')\n\t\t\t\t\t.attr('font-weight', '500')\n\t\t\t\t\t.attr('fill', centerTextColor)\n\t\t\t\t\t.style('pointer-events', 'none')\n\t\t\t\t\t.text(`${(currentNode.value || 0).toLocaleString()} ${unit}`)\n\t\t\t\t\t.style('opacity', 0)\n\t\t\t\t\t.transition()\n\t\t\t\t\t.duration(200)\n\t\t\t\t\t.style('opacity', 1);\n\t\t\t});\n\t\t};\n\n\t\t// Add invisible center reset button (circle in the middle)\n\t\tconst centerRadius = Math.sqrt(nodes[0].y0) || radius * 0.3;\n\n\t\tconst centerResetButton = g\n\t\t\t.append('circle')\n\t\t\t.attr('class', 'center-reset-button')\n\t\t\t.attr('r', centerRadius)\n\t\t\t.attr('fill', 'transparent')\n\t\t\t.style('cursor', 'default')\n\t\t\t.on('click', () => {\n\t\t\t\tif (focusedNodeRef.current) {\n\t\t\t\t\tresetView();\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('mouseover', function () {\n\t\t\t\tif (focusedNodeRef.current) {\n\t\t\t\t\td3.select(this)\n\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t.duration(150)\n\t\t\t\t\t\t.attr('fill', 'rgba(100, 100, 100, 0.1)')\n\t\t\t\t\t\t.attr('stroke', 'rgba(100, 100, 100, 0.3)')\n\t\t\t\t\t\t.attr('stroke-width', 2);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('mouseout', function () {\n\t\t\t\tif (focusedNodeRef.current) {\n\t\t\t\t\td3.select(this)\n\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t.duration(150)\n\t\t\t\t\t\t.attr('fill', 'transparent')\n\t\t\t\t\t\t.attr('stroke', 'none');\n\t\t\t\t}\n\t\t\t});\n\n\t\t// Calculate center text color - get computed theme color\n\t\tconst computedStyle = window.getComputedStyle(svgRef.current!);\n\t\tconst centerTextColor =\n\t\t\tcomputedStyle.getPropertyValue('--text-primary') ||\n\t\t\t(computedStyle.getPropertyValue('--bg-primary') === '#000000' ||\n\t\t\tcomputedStyle.getPropertyValue('color-scheme') === 'dark'\n\t\t\t\t? '#ffffff'\n\t\t\t\t: '#000000');\n\n\t\t// Add center text\n\t\tg.append('text')\n\t\t\t.attr('class', 'center-label')\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.attr('alignment-baseline', 'middle')\n\t\t\t.attr('font-size', '18px')\n\t\t\t.attr('font-weight', 'bold')\n\t\t\t.attr('fill', centerTextColor)\n\t\t\t.style('pointer-events', 'none')\n\t\t\t.text(centerLabel || data.name || 'Total');\n\n\t\tg.append('text')\n\t\t\t.attr('class', 'center-label')\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.attr('alignment-baseline', 'middle')\n\t\t\t.attr('y', 20)\n\t\t\t.attr('font-size', '14px')\n\t\t\t.attr('font-weight', '500')\n\t\t\t.attr('fill', centerTextColor)\n\t\t\t.style('pointer-events', 'none')\n\t\t\t.text(`${(root.value || 0).toLocaleString()} ${unit}`);\n\n\t\tg.selectAll('text.segment-label')\n\t\t\t.data(\n\t\t\t\tnodes.filter((d) => d.depth > 0 && d.value && d.value > 0 && shouldDisplayLabel(d))\n\t\t\t)\n\t\t\t.enter()\n\t\t\t.append('text')\n\t\t\t.attr('class', 'segment-label')\n\t\t\t.attr('transform', (d) => {\n\t\t\t\tconst angle = (d.x0 + d.x1) / 2;\n\t\t\t\tconst radiusVal = (Math.sqrt(d.y0) + Math.sqrt(d.y1)) / 2;\n\t\t\t\tconst x = Math.cos(angle - Math.PI / 2) * radiusVal;\n\t\t\t\tconst y = Math.sin(angle - Math.PI / 2) * radiusVal;\n\t\t\t\treturn `translate(${x},${y})`;\n\t\t\t})\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.attr('alignment-baseline', 'middle')\n\t\t\t.attr('font-size', (d) => (d.depth === 1 ? '14px' : '12px'))\n\t\t\t.attr('fill', 'var(--color-text)')\n\t\t\t.attr('font-weight', '700')\n\t\t\t.style('pointer-events', 'none')\n\t\t\t.style('text-shadow', 'none')\n\t\t\t.text((d) => {\n\t\t\t\tconst maxLength = d.depth === 1 ? 12 : 8;\n\t\t\t\treturn d.data.name.substring(0, maxLength);\n\t\t\t});\n\n\t\treturn () => {\n\t\t\ttooltip.remove();\n\t\t};\n\t}, [data, width, height, colorMap, radius, tagColors, unit, centerLabel]);\n\n\treturn (\n\t\t<div className={styles.container}>\n\t\t\t<h3 className={styles.title}>{title}</h3>\n\t\t\t<svg ref={svgRef} viewBox={`0 0 ${width} ${height}`} className={styles.chart} />\n\t\t</div>\n\t);\n};\n","import React, { useRef, useEffect } from 'react'\nimport * as d3 from 'd3'\nimport styles from './PieChart.module.css'\n\ninterface PieDataPoint {\n name: string\n value: number\n color?: string\n}\n\ninterface PieChartProps {\n data: PieDataPoint[]\n width?: number\n height?: number\n title?: string\n showLegend?: boolean\n unit?: string\n centerLabel?: string\n}\n\nconst DEFAULT_COLORS = [\n '#6366f1', '#8b5cf6', '#06b6d4', '#10b981',\n '#f59e0b', '#ef4444', '#ec4899', '#84cc16',\n '#f97316', '#3b82f6', '#8b5cf6', '#14b8a6',\n '#f59e0b', '#ef4444', '#06b6d4', '#10b981'\n]\n\n// Calculate text color based on background luminance for optimal contrast\nconst getTextColor = (backgroundColor: string): string => {\n const color = d3.color(backgroundColor);\n if (!color) return '#ffffff';\n\n const rgb = color.rgb();\n // Calculate relative luminance using WCAG formula\n const luminance = (0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b) / 255;\n\n // Return white text for dark backgrounds, black for light backgrounds\n return luminance > 0.5 ? '#000000' : '#ffffff';\n}\n\nexport const PieChart: React.FC<PieChartProps> = ({\n data,\n width = 400,\n height = 400,\n title = 'Distribution',\n showLegend = true,\n unit = 'items',\n centerLabel\n}) => {\n const svgRef = useRef<SVGSVGElement>(null)\n const radius = Math.min(width, height) / 2 - 20\n\n useEffect(() => {\n if (!svgRef.current || !data.length) return\n\n const svg = d3.select(svgRef.current)\n svg.selectAll('*').remove()\n\n const g = svg.append('g')\n .attr('transform', `translate(${width / 2},${height / 2})`)\n\n const pie = d3.pie<PieDataPoint>()\n .value(d => d.value)\n .sort(null)\n\n const arc = d3.arc<d3.PieArcDatum<PieDataPoint>>()\n .innerRadius(radius * 0.4)\n .outerRadius(radius)\n .cornerRadius(4)\n\n const labelArc = d3.arc<d3.PieArcDatum<PieDataPoint>>()\n .innerRadius(radius * 0.7)\n .outerRadius(radius * 0.7)\n\n const tooltip = d3.select('body').append('div')\n .attr('class', styles.tooltip)\n .style('opacity', 0)\n .style('position', 'absolute')\n\n const pieData = pie(data)\n const total = d3.sum(data, d => d.value)\n\n const arcs = g.selectAll('.arc')\n .data(pieData)\n .enter().append('g')\n .attr('class', 'arc')\n\n arcs.append('path')\n .attr('d', d => arc(d))\n .attr('fill', (d, i) => d.data.color || DEFAULT_COLORS[i % DEFAULT_COLORS.length])\n .attr('stroke', 'var(--bg-primary)')\n .attr('stroke-width', 3)\n .style('cursor', 'pointer')\n .style('filter', 'drop-shadow(0 2px 8px rgba(0,0,0,0.15))')\n .on('mouseover', function(event, d) {\n const hoverArc = d3.arc<d3.PieArcDatum<PieDataPoint>>()\n .innerRadius(radius * 0.4)\n .outerRadius(radius * 1.05)\n .cornerRadius(4)\n\n d3.select(this)\n .transition()\n .duration(200)\n .attr('d', (d) => hoverArc(d as d3.PieArcDatum<PieDataPoint>))\n .style('filter', 'drop-shadow(0 4px 12px rgba(0,0,0,0.25))')\n\n tooltip.transition()\n .duration(200)\n .style('opacity', 1)\n\n const percentage = ((d.data.value / total) * 100).toFixed(1)\n\n tooltip.html(`\n <div><strong>${d.data.name}</strong></div>\n <div>Value: ${d.data.value.toLocaleString()}</div>\n <div>${percentage}% of total</div>\n `)\n .style('left', (event.pageX + 10) + 'px')\n .style('top', (event.pageY - 28) + 'px')\n })\n .on('mouseout', function(_event, _d) {\n d3.select(this)\n .transition()\n .duration(200)\n .attr('d', (d) => arc(d as d3.PieArcDatum<PieDataPoint>))\n .style('filter', 'drop-shadow(0 2px 8px rgba(0,0,0,0.15))')\n\n tooltip.transition()\n .duration(500)\n .style('opacity', 0)\n })\n\n // Calculate average background color for center text contrast\n const colors = data.map((d, i) => d.color || DEFAULT_COLORS[i % DEFAULT_COLORS.length])\n const avgColor = colors.length >= 2\n ? d3.interpolateRgb.gamma(2.2)(colors[0], colors[1])(0.5)\n : colors[0] || '#ffffff';\n const centerTextColor = getTextColor(avgColor);\n\n // Add center text for donut\n g.append('text')\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .attr('font-size', '20px')\n .attr('font-weight', 'bold')\n .attr('fill', centerTextColor)\n .style('text-shadow', centerTextColor === '#ffffff' ? '0 1px 3px rgba(0,0,0,0.5)' : '0 1px 3px rgba(255,255,255,0.5)')\n .text(centerLabel || 'Total')\n\n g.append('text')\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .attr('y', 22)\n .attr('font-size', '16px')\n .attr('font-weight', '600')\n .attr('fill', centerTextColor)\n .style('text-shadow', centerTextColor === '#ffffff' ? '0 1px 2px rgba(0,0,0,0.4)' : '0 1px 2px rgba(255,255,255,0.4)')\n .text(`${total.toLocaleString()} ${unit}`)\n\n arcs.filter(d => (d.endAngle - d.startAngle) > 0.2)\n .append('text')\n .attr('transform', d => `translate(${labelArc.centroid(d)})`)\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .attr('font-size', '13px')\n .attr('fill', (d, i) => {\n const segmentColor = d.data.color || DEFAULT_COLORS[i % DEFAULT_COLORS.length];\n return getTextColor(segmentColor);\n })\n .attr('font-weight', '600')\n .style('pointer-events', 'none')\n .style('text-shadow', (d, i) => {\n const segmentColor = d.data.color || DEFAULT_COLORS[i % DEFAULT_COLORS.length];\n const textColor = getTextColor(segmentColor);\n // Use contrasting shadow color\n const shadowColor = textColor === '#ffffff' ? 'rgba(0,0,0,0.4)' : 'rgba(255,255,255,0.4)';\n return `0 1px 2px ${shadowColor}`;\n })\n .text(d => {\n const percentage = ((d.data.value / total) * 100)\n return percentage > 8 ? `${percentage.toFixed(0)}%` : ''\n })\n\n return () => {\n tooltip.remove()\n }\n }, [data, width, height, radius, centerLabel, unit])\n\n return (\n <div className={styles.container}>\n <h3 className={styles.title}>{title}</h3>\n <div className={styles.chartContainer}>\n <svg\n ref={svgRef}\n width={width}\n height={height}\n className={styles.chart}\n />\n {showLegend && (\n <div className={styles.legend}>\n {data.map((item, index) => (\n <div key={item.name} className={styles.legendItem}>\n <span\n className={styles.legendColor}\n style={{\n backgroundColor: item.color || DEFAULT_COLORS[index % DEFAULT_COLORS.length]\n }}\n />\n <span className={styles.legendLabel}>\n {item.name}\n </span>\n <span className={styles.legendValue}>\n {item.value.toLocaleString()}\n </span>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n )\n}","import React, { useState, useCallback, useEffect, useRef } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { ChevronLeft, ChevronRight, Play, Pause, Maximize, Download, Share2 } from 'lucide-react';\nimport styles from './ImageSlideshow.module.css';\n\nexport interface SlideshowImage {\n id: string;\n src: string;\n alt: string;\n caption?: string;\n title?: string;\n srcSet?: string;\n sizes?: string;\n downloadUrl?: string;\n metadata?: {\n width?: number;\n height?: number;\n photographer?: string;\n location?: string;\n camera?: string;\n [key: string]: unknown;\n };\n}\n\nexport interface ImageSlideshowProps {\n images: SlideshowImage[];\n autoPlay?: boolean;\n autoPlayInterval?: number;\n showThumbnails?: boolean;\n showControls?: boolean;\n showIndicators?: boolean;\n showCaptions?: boolean;\n loop?: boolean;\n fadeTransition?: boolean;\n enableFullscreen?: boolean;\n enableDownload?: boolean;\n enableShare?: boolean;\n enableDragReorder?: boolean;\n lazyLoading?: boolean;\n preloadAdjacent?: boolean;\n className?: string;\n onImageChange?: (index: number, image: SlideshowImage) => void;\n onDownload?: (image: SlideshowImage) => void;\n onShare?: (image: SlideshowImage) => void;\n onImageReorder?: (newOrder: SlideshowImage[]) => void;\n initialIndex?: number;\n}\n\nexport const ImageSlideshow: React.FC<ImageSlideshowProps> = ({\n images,\n autoPlay = false,\n autoPlayInterval = 3000,\n showThumbnails = true,\n showControls = true,\n showIndicators = true,\n showCaptions = true,\n loop = true,\n fadeTransition = false,\n enableFullscreen = true,\n enableDownload = false,\n enableShare = false,\n enableDragReorder = false,\n lazyLoading = true,\n preloadAdjacent = true,\n className = '',\n onImageChange,\n onDownload,\n onShare,\n onImageReorder,\n initialIndex = 0,\n}) => {\n const [currentIndex, setCurrentIndex] = useState(initialIndex);\n const [isPlaying, setIsPlaying] = useState(autoPlay);\n const [touchStart, setTouchStart] = useState<number | null>(null);\n const [touchEnd, setTouchEnd] = useState<number | null>(null);\n const [isFullscreen, setIsFullscreen] = useState(false);\n const [loadedImages, setLoadedImages] = useState<Set<string>>(new Set());\n const [imageOrder, setImageOrder] = useState(images);\n const [isDragging, setIsDragging] = useState(false);\n const [draggedIndex, setDraggedIndex] = useState<number | null>(null);\n \n const slideshowRef = useRef<HTMLDivElement>(null);\n const imageRef = useRef<HTMLImageElement>(null);\n const observerRef = useRef<IntersectionObserver | null>(null);\n\n const minSwipeDistance = 50;\n\n const goToSlide = useCallback((index: number) => {\n const newIndex = Math.max(0, Math.min(index, imageOrder.length - 1));\n setCurrentIndex(newIndex);\n if (onImageChange) {\n onImageChange(newIndex, imageOrder[newIndex]);\n }\n }, [imageOrder, onImageChange]);\n\n const goToNext = useCallback(() => {\n if (currentIndex < imageOrder.length - 1) {\n goToSlide(currentIndex + 1);\n } else if (loop) {\n goToSlide(0);\n }\n }, [currentIndex, imageOrder.length, loop, goToSlide]);\n\n const goToPrevious = useCallback(() => {\n if (currentIndex > 0) {\n goToSlide(currentIndex - 1);\n } else if (loop) {\n goToSlide(imageOrder.length - 1);\n }\n }, [currentIndex, imageOrder.length, loop, goToSlide]);\n\n const togglePlayPause = useCallback(() => {\n setIsPlaying(prev => !prev);\n }, []);\n\n\n\n\n const toggleFullscreen = () => {\n if (!document.fullscreenElement) {\n slideshowRef.current?.requestFullscreen();\n setIsFullscreen(true);\n } else {\n document.exitFullscreen();\n setIsFullscreen(false);\n }\n };\n\n const handleImageLoad = (imageId: string) => {\n setLoadedImages(prev => new Set([...prev, imageId]));\n };\n\n const handleDownload = () => {\n const currentImage = imageOrder[currentIndex];\n if (onDownload) {\n onDownload(currentImage);\n } else if (currentImage.downloadUrl || currentImage.src) {\n const link = document.createElement('a');\n link.href = currentImage.downloadUrl || currentImage.src;\n link.download = currentImage.title || currentImage.alt || 'image';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n };\n\n const handleShare = async () => {\n const currentImage = imageOrder[currentIndex];\n if (onShare) {\n onShare(currentImage);\n } else if (navigator.share) {\n try {\n await navigator.share({\n title: currentImage.title || currentImage.alt,\n text: currentImage.caption,\n url: currentImage.src\n });\n } catch (error) {\n console.log('Error sharing:', error);\n }\n } else {\n navigator.clipboard.writeText(currentImage.src);\n }\n };\n\n const handleDragStart = (e: React.DragEvent, index: number) => {\n if (!enableDragReorder) return;\n setIsDragging(true);\n setDraggedIndex(index);\n e.dataTransfer.effectAllowed = 'move';\n };\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n };\n\n const handleDrop = (e: React.DragEvent, dropIndex: number) => {\n e.preventDefault();\n if (draggedIndex === null || draggedIndex === dropIndex) return;\n \n const newOrder = [...imageOrder];\n const draggedItem = newOrder[draggedIndex];\n newOrder.splice(draggedIndex, 1);\n newOrder.splice(dropIndex, 0, draggedItem);\n \n setImageOrder(newOrder);\n setIsDragging(false);\n setDraggedIndex(null);\n \n if (onImageReorder) {\n onImageReorder(newOrder);\n }\n };\n\n const preloadImage = (src: string) => {\n const img = new Image();\n img.src = src;\n };\n\n const onTouchStart = (e: React.TouchEvent) => {\n setTouchEnd(null);\n setTouchStart(e.targetTouches[0].clientX);\n };\n\n const onTouchMove = (e: React.TouchEvent) => {\n setTouchEnd(e.targetTouches[0].clientX);\n };\n\n const onTouchEnd = () => {\n if (!touchStart || !touchEnd) return;\n const distance = touchStart - touchEnd;\n const isLeftSwipe = distance > minSwipeDistance;\n const isRightSwipe = distance < -minSwipeDistance;\n\n if (isLeftSwipe) {\n goToNext();\n } else if (isRightSwipe) {\n goToPrevious();\n }\n };\n\n useEffect(() => {\n if (!isPlaying || imageOrder.length <= 1) return;\n\n const interval = setInterval(() => {\n goToNext();\n }, autoPlayInterval);\n\n return () => clearInterval(interval);\n }, [isPlaying, autoPlayInterval, goToNext, imageOrder.length]);\n\n useEffect(() => {\n setImageOrder(images);\n }, [images]);\n\n useEffect(() => {\n if (preloadAdjacent) {\n const preloadIndices = [\n currentIndex - 1,\n currentIndex + 1,\n loop && currentIndex === 0 ? imageOrder.length - 1 : -1,\n loop && currentIndex === imageOrder.length - 1 ? 0 : -1\n ].filter(i => i >= 0 && i < imageOrder.length);\n \n preloadIndices.forEach(index => {\n if (imageOrder[index]) {\n preloadImage(imageOrder[index].src);\n }\n });\n }\n }, [currentIndex, imageOrder, images, loop, preloadAdjacent]);\n\n useEffect(() => {\n const handleFullscreenChange = () => {\n setIsFullscreen(!!document.fullscreenElement);\n };\n \n document.addEventListener('fullscreenchange', handleFullscreenChange);\n return () => document.removeEventListener('fullscreenchange', handleFullscreenChange);\n }, []);\n\n useEffect(() => {\n if (lazyLoading) {\n observerRef.current = new IntersectionObserver(\n (entries) => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n const img = entry.target as HTMLImageElement;\n const src = img.dataset.src;\n if (src) {\n img.src = src;\n img.removeAttribute('data-src');\n observerRef.current?.unobserve(img);\n }\n }\n });\n },\n { threshold: 0.1 }\n );\n }\n \n return () => {\n observerRef.current?.disconnect();\n };\n }, [lazyLoading]);\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowLeft':\n goToPrevious();\n break;\n case 'ArrowRight':\n goToNext();\n break;\n case ' ':\n e.preventDefault();\n togglePlayPause();\n break;\n case 'f':\n case 'F':\n if (enableFullscreen) {\n toggleFullscreen();\n }\n break;\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [goToPrevious, goToNext, enableFullscreen, togglePlayPause]);\n\n if (!imageOrder || imageOrder.length === 0) {\n return (\n <div className={`${styles.slideshow} ${styles.empty} ${className}`}>\n <div className={styles.emptyState}>\n <span>No images to display</span>\n </div>\n </div>\n );\n }\n\n const slideVariants = {\n enter: (direction: number) => ({\n x: direction > 0 ? 1000 : -1000,\n opacity: fadeTransition ? 0 : 1,\n }),\n center: {\n zIndex: 1,\n x: 0,\n opacity: 1,\n },\n exit: (direction: number) => ({\n zIndex: 0,\n x: direction < 0 ? 1000 : -1000,\n opacity: fadeTransition ? 0 : 1,\n }),\n };\n\n const currentImage = imageOrder[currentIndex];\n const isImageLoaded = loadedImages.has(currentImage.id);\n\n return (\n <div \n ref={slideshowRef}\n className={`${styles.slideshow} ${isFullscreen ? styles.fullscreen : ''} ${showThumbnails && imageOrder.length > 1 ? styles.hasThumbnails : ''} ${className}`}\n >\n <div \n className={styles.mainContainer}\n onTouchStart={onTouchStart}\n onTouchMove={onTouchMove}\n onTouchEnd={onTouchEnd}\n >\n <AnimatePresence mode=\"wait\" custom={1}>\n <motion.div\n key={currentIndex}\n custom={1}\n variants={slideVariants}\n initial=\"enter\"\n animate=\"center\"\n exit=\"exit\"\n transition={{\n x: { type: \"spring\", stiffness: 300, damping: 30 },\n opacity: { duration: 0.3 }\n }}\n className={styles.slide}\n >\n <img\n ref={imageRef}\n src={lazyLoading && !isImageLoaded ? undefined : currentImage.src}\n data-src={lazyLoading ? currentImage.src : undefined}\n srcSet={currentImage.srcSet}\n sizes={currentImage.sizes}\n alt={currentImage.alt}\n className={styles.image}\n draggable={false}\n onLoad={() => handleImageLoad(currentImage.id)}\n style={{\n opacity: lazyLoading && !isImageLoaded ? 0 : 1,\n transition: 'opacity 0.3s ease'\n }}\n />\n {lazyLoading && !isImageLoaded && (\n <div className={styles.imageLoader}>\n <div className={styles.spinner} />\n </div>\n )}\n </motion.div>\n </AnimatePresence>\n\n {showControls && imageOrder.length > 1 && (\n <>\n <button\n className={`${styles.control} ${styles.controlPrev}`}\n onClick={goToPrevious}\n disabled={!loop && currentIndex === 0}\n aria-label=\"Previous image\"\n >\n <ChevronLeft />\n </button>\n\n <button\n className={`${styles.control} ${styles.controlNext}`}\n onClick={goToNext}\n disabled={!loop && currentIndex === imageOrder.length - 1}\n aria-label=\"Next image\"\n >\n <ChevronRight />\n </button>\n </>\n )}\n\n <div className={styles.topControls}>\n {enableFullscreen && (\n <button\n className={`${styles.control} ${styles.controlAction}`}\n onClick={toggleFullscreen}\n aria-label={isFullscreen ? 'Exit fullscreen' : 'Enter fullscreen'}\n title={isFullscreen ? 'Exit fullscreen (F)' : 'Enter fullscreen (F)'}\n >\n <span style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', width: '100%', height: '100%' }}>\n <Maximize />\n </span>\n </button>\n )}\n \n {enableDownload && (\n <button\n className={`${styles.control} ${styles.controlAction}`}\n onClick={handleDownload}\n aria-label=\"Download image\"\n title=\"Download image\"\n >\n <span style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', width: '100%', height: '100%' }}>\n <Download />\n </span>\n </button>\n )}\n \n {enableShare && (\n <button\n className={`${styles.control} ${styles.controlAction}`}\n onClick={handleShare}\n aria-label=\"Share image\"\n title=\"Share image\"\n >\n <span style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', width: '100%', height: '100%' }}>\n <Share2 />\n </span>\n </button>\n )}\n </div>\n\n {autoPlay && imageOrder.length > 1 && (\n <button\n className={`${styles.control} ${styles.controlPlay}`}\n onClick={togglePlayPause}\n aria-label={isPlaying ? 'Pause slideshow' : 'Play slideshow'}\n title={isPlaying ? 'Pause slideshow (Space)' : 'Play slideshow (Space)'}\n >\n {isPlaying ? <Pause /> : <Play />}\n </button>\n )}\n\n {showCaptions && (currentImage.caption || currentImage.title) && (\n <motion.div\n className={styles.caption}\n initial={{ opacity: 0, y: 20 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: 0.3 }}\n >\n {currentImage.title && (\n <h3 className={styles.captionTitle}>{currentImage.title}</h3>\n )}\n {currentImage.caption && (\n <p className={styles.captionText}>{currentImage.caption}</p>\n )}\n {currentImage.metadata && (\n <div className={styles.imageMetadata}>\n {currentImage.metadata.photographer && (\n <span className={styles.metadataItem}>\n 📷 {currentImage.metadata.photographer}\n </span>\n )}\n {currentImage.metadata.location && (\n <span className={styles.metadataItem}>\n 📍 {currentImage.metadata.location}\n </span>\n )}\n {currentImage.metadata.camera && (\n <span className={styles.metadataItem}>\n 📹 {currentImage.metadata.camera}\n </span>\n )}\n </div>\n )}\n </motion.div>\n )}\n </div>\n\n {showIndicators && imageOrder.length > 1 && (\n <div className={styles.indicators}>\n {imageOrder.map((_, index) => (\n <motion.button\n key={index}\n className={`${styles.indicator} ${index === currentIndex ? styles.indicatorActive : ''}`}\n onClick={() => goToSlide(index)}\n whileHover={{ scale: 1.2 }}\n whileTap={{ scale: 0.8 }}\n aria-label={`Go to slide ${index + 1}`}\n />\n ))}\n </div>\n )}\n\n {showThumbnails && imageOrder.length > 1 && (\n <div className={`${styles.thumbnails} ${isDragging ? styles.thumbnailsDragging : ''}`}>\n {imageOrder.map((image, index) => (\n <motion.button\n key={image.id}\n className={`${styles.thumbnail} ${index === currentIndex ? styles.thumbnailActive : ''} ${draggedIndex === index ? styles.thumbnailDragged : ''}`}\n onClick={() => goToSlide(index)}\n whileHover={{ scale: 1.05 }}\n whileTap={{ scale: 0.95 }}\n aria-label={`Go to ${image.alt}`}\n draggable={enableDragReorder}\n onDragStart={(e) => handleDragStart(e as unknown as React.DragEvent<HTMLButtonElement>, index)}\n onDragOver={handleDragOver}\n onDrop={(e) => handleDrop(e as unknown as React.DragEvent<HTMLButtonElement>, index)}\n title={image.title || image.alt}\n >\n <img\n src={image.src}\n alt={image.alt}\n className={styles.thumbnailImage}\n draggable={false}\n />\n </motion.button>\n ))}\n </div>\n )}\n </div>\n );\n};","import { useState, useMemo, useCallback, ReactNode, memo } from 'react'\nimport { motion, AnimatePresence, LayoutGroup } from 'framer-motion'\nimport styles from './Table.module.css'\n\n/**\n * Column configuration for the Table component\n * @template T - The type of data objects in the table\n */\nexport interface Column<T = object> {\n /** The key to access the data field in each row object */\n key: string\n /** The display text for the column header */\n header: string\n /** Whether this column can be sorted */\n sortable?: boolean\n /** Whether this column can be filtered */\n filterable?: boolean\n /** CSS width value for the column */\n width?: string\n /** Text alignment for the column content */\n align?: 'left' | 'center' | 'right'\n /** Custom renderer function for cell content */\n render?: (value: unknown, item: T, index: number) => ReactNode\n /** Additional CSS class for the column */\n className?: string\n}\n\n/**\n * Styling configuration for action buttons\n */\nexport interface ActionButtonStyles {\n /** Button size in pixels */\n size?: number\n /** Border radius (CSS value or number for px) */\n borderRadius?: string | number\n /** Button padding (CSS value) */\n padding?: string\n /** Font size (CSS value or number for px) */\n fontSize?: string | number\n /** Icon size (CSS value or number for px) */\n iconSize?: string | number\n /** Additional CSS class name */\n className?: string\n /** Inline styles object */\n style?: React.CSSProperties\n}\n\n/**\n * Configuration for row action buttons\n * @template T - The type of data objects in the table\n */\nexport interface RowAction<T = object> {\n /** Icon to display in the action button */\n icon: ReactNode\n /** Accessible label for the action button */\n label: string\n /** Function called when the action is clicked */\n onClick: (item: T, index: number) => void\n /** Visual variant of the action button */\n variant?: 'primary' | 'secondary' | 'danger' | 'warning' | 'success' | 'custom'\n /** Function to determine if action should be disabled for specific row */\n disabled?: (item: T) => boolean\n /** Custom CSS class for this specific action button */\n className?: string\n /** Custom inline styles for this specific action button */\n style?: React.CSSProperties\n /** Override button styling for this specific action */\n buttonStyles?: ActionButtonStyles\n}\n\n/**\n * Configuration for bulk action buttons that appear when rows are selected\n * @template T - The type of data objects in the table\n */\nexport interface BulkAction<T = object> {\n /** Icon to display in the bulk action button */\n icon: ReactNode\n /** Label for the bulk action button */\n label: string\n /** Function called when bulk action is clicked with selected items */\n onClick: (selectedItems: T[]) => void | Promise<void>\n /** Visual variant of the bulk action button */\n variant?: 'primary' | 'secondary' | 'danger' | 'warning' | 'success' | 'custom'\n /** Function to determine if bulk action should be disabled based on selected items */\n disabled?: (selectedItems: T[]) => boolean\n /** Minimum number of selected items required to enable this action */\n minSelection?: number\n /** Maximum number of selected items allowed for this action */\n maxSelection?: number\n /** Custom CSS class for this bulk action button */\n className?: string\n /** Custom inline styles for this bulk action button */\n style?: React.CSSProperties\n /** Confirm message before executing action (optional) */\n confirmMessage?: string | ((selectedItems: T[]) => string)\n}\n\n/**\n * Props for the Table component\n * @template T - The type of data objects in the table\n */\nexport interface TableProps<T = object> {\n /** Array of data objects to display in the table */\n data: T[]\n /** Column configuration defining how to display data fields */\n columns: Column<T>[]\n /** Field name to use as unique identifier for rows (defaults to 'id') */\n keyField?: string\n /** Optional title displayed above the table */\n title?: string\n /** Enable global search functionality */\n searchable?: boolean\n /** Enable row selection with checkboxes */\n selectable?: boolean\n /** Enable pagination (boolean for default settings or object for custom configuration) */\n pagination?: boolean | { pageSize?: number; pageSizeOptions?: number[] }\n /** Function called when a table row is clicked */\n onRowClick?: (item: T, index: number) => void\n /** Function called when row selection changes (only when selectable=true) */\n onSelectionChange?: (selectedItems: T[]) => void\n /** Array of bulk actions available when rows are selected */\n bulkActions?: BulkAction<T>[]\n /** @deprecated Use bulkActions instead. Function that returns action buttons for selected rows */\n actions?: (selectedItems: T[]) => ReactNode\n /** Configuration for action buttons displayed in each row */\n rowActions?: RowAction<T>[]\n /** Global styling configuration for all action buttons */\n actionButtonStyles?: ActionButtonStyles\n /** Message displayed when table is empty */\n emptyMessage?: string\n /** Show loading state */\n loading?: boolean\n /** Apply alternating row background colors */\n striped?: boolean\n /** Enable hover effects on table rows */\n hoverable?: boolean\n /** Use compact row spacing */\n compact?: boolean\n /** Make table header sticky when scrolling */\n stickyHeader?: boolean\n /** Enable Framer Motion animations (disable for better performance with large datasets) */\n animated?: boolean\n /** Enable horizontal scrolling for tables with many columns */\n horizontalScroll?: boolean\n /** Additional CSS class for the table container */\n className?: string\n}\n\ntype SortConfig = {\n key: string | null\n direction: 'asc' | 'desc'\n}\n\n/**\n * A comprehensive table component with sorting, filtering, pagination, selection, and row actions.\n *\n * Features:\n * - Sorting by clicking column headers\n * - Global search and per-column filtering\n * - Row selection with bulk actions\n * - Pagination with customizable page sizes\n * - Row-level action buttons\n * - Responsive design with sticky headers\n * - Framer Motion animations (can be disabled for performance)\n * - Full theme integration via CSS custom properties\n *\n * @template T - The type of data objects in the table\n * @param props - Table configuration and data\n * @returns React component\n *\n * @example\n * ```tsx\n * const users = [{ id: 1, name: 'John', email: 'john@example.com' }]\n * const columns = [\n * { key: 'name', header: 'Name', sortable: true },\n * { key: 'email', header: 'Email', filterable: true }\n * ]\n *\n * <Table\n * data={users}\n * columns={columns}\n * searchable\n * pagination\n * rowActions={[\n * {\n * icon: <EditIcon />,\n * label: 'Edit user',\n * onClick: (user) => editUser(user),\n * variant: 'primary'\n * }\n * ]}\n * />\n * ```\n */\nconst TableComponent = function Table<T extends object>({\n data,\n columns,\n keyField = 'id',\n title,\n searchable = false,\n selectable = false,\n pagination = false,\n onRowClick,\n onSelectionChange,\n actions,\n bulkActions,\n rowActions,\n actionButtonStyles,\n emptyMessage = 'No data available',\n loading = false,\n striped = false,\n hoverable = true,\n compact = false,\n stickyHeader = false,\n animated = true,\n horizontalScroll = false,\n className = ''\n}: TableProps<T>) {\n // State\n const [selectedRows, setSelectedRows] = useState<Set<unknown>>(new Set())\n const [searchQuery, setSearchQuery] = useState('')\n const [columnFilters, setColumnFilters] = useState<Record<string, string>>({})\n const [sortConfig, setSortConfig] = useState<SortConfig>({ key: null, direction: 'asc' })\n const [currentPage, setCurrentPage] = useState(1)\n const [pageSize, setPageSize] = useState(\n typeof pagination === 'object' && pagination.pageSize ? pagination.pageSize : 10\n )\n\n // Pagination options\n const pageSizeOptions = useMemo(() => {\n if (typeof pagination === 'object' && pagination.pageSizeOptions) {\n return pagination.pageSizeOptions\n }\n return [10, 25, 50, 100]\n }, [pagination])\n\n // Memoize search columns for performance\n const searchableColumns = useMemo(() =>\n columns.map(col => col.key),\n [columns]\n )\n\n // Filter data\n const filteredData = useMemo(() => {\n if (!searchQuery && Object.keys(columnFilters).length === 0) {\n return data\n }\n\n let filtered = data\n\n // Global search\n if (searchable && searchQuery) {\n const query = searchQuery.toLowerCase()\n filtered = filtered.filter(item => {\n return searchableColumns.some(key => {\n const value = item[key as keyof T]\n return value != null && String(value).toLowerCase().includes(query)\n })\n })\n }\n\n // Column filters\n for (const [key, filterValue] of Object.entries(columnFilters)) {\n if (filterValue) {\n const lowerFilterValue = filterValue.toLowerCase()\n filtered = filtered.filter(item => {\n const value = item[key as keyof T]\n return value != null && String(value).toLowerCase().includes(lowerFilterValue)\n })\n }\n }\n\n return filtered\n }, [data, searchableColumns, searchQuery, columnFilters, searchable])\n\n // Sort data\n const sortedData = useMemo(() => {\n if (!sortConfig.key) return filteredData\n\n return [...filteredData].sort((a, b) => {\n const aValue = a[sortConfig.key! as keyof T]\n const bValue = b[sortConfig.key! as keyof T]\n\n if (aValue === null || aValue === undefined) return 1\n if (bValue === null || bValue === undefined) return -1\n\n let comparison = 0\n if (typeof aValue === 'number' && typeof bValue === 'number') {\n comparison = aValue - bValue\n } else if (aValue instanceof Date && bValue instanceof Date) {\n comparison = aValue.getTime() - bValue.getTime()\n } else {\n comparison = String(aValue).localeCompare(String(bValue))\n }\n\n return sortConfig.direction === 'asc' ? comparison : -comparison\n })\n }, [filteredData, sortConfig])\n\n // Paginate data\n const paginatedData = useMemo(() => {\n if (!pagination) return sortedData\n\n const startIndex = (currentPage - 1) * pageSize\n const endIndex = startIndex + pageSize\n return sortedData.slice(startIndex, endIndex)\n }, [sortedData, pagination, currentPage, pageSize])\n\n const totalPages = useMemo(() => {\n if (!pagination) return 1\n return Math.ceil(sortedData.length / pageSize)\n }, [sortedData, pageSize, pagination])\n\n // Handlers\n const handleSort = useCallback((key: string) => {\n setSortConfig(prev => {\n if (prev.key !== key) {\n return { key, direction: 'asc' }\n }\n if (prev.direction === 'asc') {\n return { key, direction: 'desc' }\n }\n return { key: null, direction: 'asc' }\n })\n }, [])\n\n const handleSelectAll = useCallback(() => {\n const currentPageIds = paginatedData.map(item => item[keyField as keyof T])\n const allSelected = currentPageIds.every(id => selectedRows.has(id))\n\n const newSelected = new Set(selectedRows)\n if (allSelected) {\n currentPageIds.forEach(id => newSelected.delete(id))\n } else {\n currentPageIds.forEach(id => newSelected.add(id))\n }\n\n setSelectedRows(newSelected)\n if (onSelectionChange) {\n const selectedItems = data.filter(item => newSelected.has(item[keyField as keyof T]))\n onSelectionChange(selectedItems)\n }\n }, [paginatedData, selectedRows, keyField, data, onSelectionChange])\n\n const handleSelectRow = useCallback((itemId: unknown) => {\n const newSelected = new Set(selectedRows)\n if (newSelected.has(itemId)) {\n newSelected.delete(itemId)\n } else {\n newSelected.add(itemId)\n }\n\n setSelectedRows(newSelected)\n if (onSelectionChange) {\n const selectedItems = data.filter(item => newSelected.has(item[keyField as keyof T]))\n onSelectionChange(selectedItems)\n }\n }, [selectedRows, data, keyField, onSelectionChange])\n\n const handleColumnFilter = useCallback((key: string, value: string) => {\n setColumnFilters(prev => ({ ...prev, [key]: value }))\n setCurrentPage(1)\n }, [])\n\n const clearFilters = useCallback(() => {\n setSearchQuery('')\n setColumnFilters({})\n setSortConfig({ key: null, direction: 'asc' })\n setCurrentPage(1)\n }, [])\n\n // Computed values\n const hasActiveFilters = searchQuery || Object.values(columnFilters).some(v => v)\n const currentPageIds = paginatedData.map(item => item[keyField as keyof T])\n const allCurrentPageSelected = selectable && currentPageIds.length > 0 &&\n currentPageIds.every(id => selectedRows.has(id))\n const someCurrentPageSelected = selectable &&\n currentPageIds.some(id => selectedRows.has(id))\n\n const selectedItems = useMemo(() => {\n return data.filter(item => selectedRows.has(item[keyField as keyof T]))\n }, [data, selectedRows, keyField])\n\n // Helper function to merge button styles\n const getButtonStyles = useCallback((action: RowAction<T>) => {\n const defaultSize = actionButtonStyles?.size || 36\n const actionSize = action.buttonStyles?.size || defaultSize\n\n const baseStyles: React.CSSProperties & Record<string, unknown> = {\n width: actionSize,\n height: actionSize,\n borderRadius: action.buttonStyles?.borderRadius || actionButtonStyles?.borderRadius || '50%',\n fontSize: action.buttonStyles?.fontSize || actionButtonStyles?.fontSize,\n padding: action.buttonStyles?.padding || actionButtonStyles?.padding,\n ...actionButtonStyles?.style,\n ...action.style,\n ...action.buttonStyles?.style\n }\n\n // Handle icon size - set CSS custom property\n if (action.buttonStyles?.iconSize || actionButtonStyles?.iconSize) {\n baseStyles['--icon-size'] = typeof (action.buttonStyles?.iconSize || actionButtonStyles?.iconSize) === 'number'\n ? `${action.buttonStyles?.iconSize || actionButtonStyles?.iconSize}px`\n : action.buttonStyles?.iconSize || actionButtonStyles?.iconSize\n }\n\n return baseStyles as React.CSSProperties\n }, [actionButtonStyles])\n\n const getButtonClassName = useCallback((action: RowAction<T>) => {\n const baseClass = styles.actionButton\n const variantClass = action.variant === 'primary' ? styles.actionButtonPrimary :\n action.variant === 'danger' ? styles.actionButtonDanger :\n action.variant === 'warning' ? styles.actionButtonWarning :\n action.variant === 'success' ? styles.actionButtonSuccess :\n action.variant === 'custom' ? '' :\n styles.actionButtonSecondary\n\n const globalCustomClass = actionButtonStyles?.className || ''\n const actionCustomClass = action.className || ''\n const buttonCustomClass = action.buttonStyles?.className || ''\n\n return `${baseClass} ${variantClass} ${globalCustomClass} ${actionCustomClass} ${buttonCustomClass}`.trim()\n }, [actionButtonStyles])\n\n // Loading state\n if (loading) {\n return (\n <div className={`${styles.container} ${className}`}>\n <div className={styles.loading}>\n <div className={styles.spinner} />\n <span>Loading...</span>\n </div>\n </div>\n )\n }\n\n // Empty state\n if (data.length === 0) {\n return (\n <div className={`${styles.container} ${className}`}>\n {title && <h2 className={styles.title}>{title}</h2>}\n <div className={styles.empty}>\n <span className={styles.emptyIcon}>📊</span>\n <p>{emptyMessage}</p>\n </div>\n </div>\n )\n }\n\n return (\n <div className={`${styles.container} ${className}`}>\n {/* Header */}\n {(title || actions || bulkActions) && (\n <div className={styles.header}>\n {title && <h2 className={styles.title}>{title}</h2>}\n {(actions || bulkActions) && (\n <div className={styles.bulkActions}>\n {/* Legacy actions support */}\n {actions && selectedItems.length > 0 && (\n <div className={styles.actions}>\n {actions(selectedItems)}\n </div>\n )}\n {/* New bulk actions */}\n {bulkActions && bulkActions.length > 0 && selectedItems.length > 0 && (\n <div className={styles.bulkActionButtons}>\n {bulkActions.map((bulkAction, index) => {\n const isDisabled =\n (bulkAction.disabled && bulkAction.disabled(selectedItems)) ||\n (bulkAction.minSelection && selectedItems.length < bulkAction.minSelection) ||\n (bulkAction.maxSelection && selectedItems.length > bulkAction.maxSelection)\n\n return (\n <button\n key={index}\n className={`${styles.bulkActionButton} ${\n bulkAction.variant === 'primary' ? styles.bulkPrimary :\n bulkAction.variant === 'secondary' ? styles.bulkSecondary :\n bulkAction.variant === 'danger' ? styles.bulkDanger :\n bulkAction.variant === 'warning' ? styles.bulkWarning :\n bulkAction.variant === 'success' ? styles.bulkSuccess :\n bulkAction.variant === 'custom' ? styles.bulkCustom :\n styles.bulkPrimary\n } ${bulkAction.className || ''}`}\n style={bulkAction.style}\n disabled={!!isDisabled}\n onClick={async () => {\n if (bulkAction.confirmMessage) {\n const message = typeof bulkAction.confirmMessage === 'function'\n ? bulkAction.confirmMessage(selectedItems)\n : bulkAction.confirmMessage\n if (!confirm(message)) return\n }\n await bulkAction.onClick(selectedItems)\n }}\n title={bulkAction.label}\n aria-label={bulkAction.label}\n >\n {bulkAction.icon}\n <span>{bulkAction.label}</span>\n <span className={styles.selectionCount}>({selectedItems.length})</span>\n </button>\n )\n })}\n </div>\n )}\n </div>\n )}\n </div>\n )}\n\n {/* Controls */}\n {(searchable || hasActiveFilters) && (\n <div className={styles.controls}>\n {searchable && (\n <div className={styles.searchBox}>\n <span className={styles.searchIcon}>🔍</span>\n <input\n type=\"text\"\n placeholder=\"Search...\"\n value={searchQuery}\n onChange={e => {\n setSearchQuery(e.target.value)\n setCurrentPage(1)\n }}\n className={styles.searchInput}\n />\n {searchQuery && (\n <button\n className={styles.clearButton}\n onClick={() => setSearchQuery('')}\n >\n ✕\n </button>\n )}\n </div>\n )}\n {hasActiveFilters && (\n <button\n className={styles.clearFiltersButton}\n onClick={clearFilters}\n >\n Clear All Filters\n </button>\n )}\n <div className={styles.resultCount}>\n {filteredData.length} {filteredData.length === 1 ? 'result' : 'results'}\n </div>\n </div>\n )}\n\n {/* Table */}\n <div className={`${styles.tableWrapper} ${stickyHeader ? styles.stickyHeader : ''} ${horizontalScroll ? styles.horizontalScroll : ''}`}>\n <table\n className={`\n ${styles.table}\n ${striped ? styles.striped : ''}\n ${hoverable ? styles.hoverable : ''}\n ${compact ? styles.compact : ''}\n `}\n role=\"table\"\n aria-label={title || 'Data table'}\n aria-rowcount={sortedData.length}\n aria-describedby={title ? `${title.replace(/\\s+/g, '-').toLowerCase()}-summary` : undefined}\n >\n <thead>\n <tr>\n {selectable && (\n <th className={styles.checkboxColumn} scope=\"col\">\n <input\n type=\"checkbox\"\n checked={allCurrentPageSelected}\n ref={input => {\n if (input) {\n input.indeterminate = !allCurrentPageSelected && someCurrentPageSelected\n }\n }}\n onChange={handleSelectAll}\n className={styles.checkbox}\n aria-label=\"Select all rows\"\n />\n </th>\n )}\n {columns.map(column => (\n <th\n key={column.key}\n className={`${styles.th} ${column.className || ''}`}\n style={{\n width: column.width,\n textAlign: column.align || 'left'\n }}\n scope=\"col\"\n role=\"columnheader\"\n aria-sort={\n sortConfig.key === column.key\n ? sortConfig.direction === 'asc' ? 'ascending' : 'descending'\n : column.sortable ? 'none' : undefined\n }\n >\n <div className={styles.headerCell}>\n {column.sortable ? (\n <button\n className={styles.sortButton}\n onClick={() => handleSort(column.key)}\n aria-label={`Sort by ${column.header} ${\n sortConfig.key === column.key\n ? sortConfig.direction === 'asc' ? '(descending)' : '(ascending)'\n : '(ascending)'\n }`}\n >\n <span>{column.header}</span>\n <span className={styles.sortIcon} aria-hidden=\"true\">\n {sortConfig.key === column.key ? (\n sortConfig.direction === 'asc' ? '↑' : '↓'\n ) : '↕'}\n </span>\n </button>\n ) : (\n <span className={styles.headerText}>{column.header}</span>\n )}\n {column.filterable && (\n <input\n type=\"text\"\n placeholder=\"Filter...\"\n value={columnFilters[column.key] || ''}\n onChange={e => handleColumnFilter(column.key, e.target.value)}\n onClick={e => e.stopPropagation()}\n className={styles.columnFilter}\n aria-label={`Filter ${column.header}`}\n />\n )}\n </div>\n </th>\n ))}\n {rowActions && rowActions.length > 0 && (\n <th className={styles.actionsColumn} scope=\"col\">\n <span className={styles.headerText}>Actions</span>\n </th>\n )}\n </tr>\n </thead>\n <tbody>\n {animated ? (\n <LayoutGroup>\n <AnimatePresence mode=\"popLayout\">\n {paginatedData.map((item, index) => (\n <motion.tr\n key={`${String(item[keyField as keyof T])}-${currentPage}`}\n layout=\"position\"\n initial={{ opacity: 0, scale: 0.98 }}\n animate={{\n opacity: 1,\n scale: 1,\n transition: {\n duration: 0.12,\n delay: Math.min(index * 0.005, 0.08),\n ease: [0.25, 0.46, 0.45, 0.94]\n }\n }}\n exit={{\n opacity: 0,\n scale: 0.98,\n transition: { duration: 0.08 }\n }}\n className={`\n ${styles.tr}\n ${selectedRows.has(item[keyField as keyof T]) ? styles.selected : ''}\n ${onRowClick ? styles.clickable : ''}\n `}\n onClick={() => onRowClick?.(item, index)}\n >\n {selectable && (\n <td className={styles.checkboxColumn}>\n <input\n type=\"checkbox\"\n checked={selectedRows.has(item[keyField as keyof T])}\n onChange={() => handleSelectRow(item[keyField as keyof T])}\n onClick={e => e.stopPropagation()}\n className={styles.checkbox}\n />\n </td>\n )}\n {columns.map(column => (\n <td\n key={column.key}\n className={`${styles.td} ${column.className || ''}`}\n style={{ textAlign: column.align || 'left' }}\n >\n {column.render\n ? column.render(item[column.key as keyof T], item, index)\n : formatValue(item[column.key as keyof T])\n }\n </td>\n ))}\n {rowActions && rowActions.length > 0 && (\n <td\n className={styles.actionsColumn}\n onClick={e => e.stopPropagation()}\n >\n <div className={styles.actionButtons}>\n {rowActions.map((action, actionIndex) => (\n <button\n key={actionIndex}\n className={getButtonClassName(action)}\n style={getButtonStyles(action)}\n onClick={() => action.onClick(item, index)}\n disabled={action.disabled ? action.disabled(item) : false}\n title={action.label}\n aria-label={action.label}\n >\n {action.icon}\n </button>\n ))}\n </div>\n </td>\n )}\n </motion.tr>\n ))}\n </AnimatePresence>\n </LayoutGroup>\n ) : (\n paginatedData.map((item, index) => (\n <tr\n key={String(item[keyField as keyof T])}\n className={`\n ${styles.tr}\n ${selectedRows.has(item[keyField as keyof T]) ? styles.selected : ''}\n ${onRowClick ? styles.clickable : ''}\n `}\n onClick={() => onRowClick?.(item, index)}\n >\n {selectable && (\n <td className={styles.checkboxColumn}>\n <input\n type=\"checkbox\"\n checked={selectedRows.has(item[keyField as keyof T])}\n onChange={() => handleSelectRow(item[keyField as keyof T])}\n onClick={e => e.stopPropagation()}\n className={styles.checkbox}\n />\n </td>\n )}\n {columns.map(column => (\n <td\n key={column.key}\n className={`${styles.td} ${column.className || ''}`}\n style={{ textAlign: column.align || 'left' }}\n >\n {column.render\n ? column.render(item[column.key as keyof T], item, index)\n : formatValue(item[column.key as keyof T])\n }\n </td>\n ))}\n {rowActions && rowActions.length > 0 && (\n <td\n className={styles.actionsColumn}\n onClick={e => e.stopPropagation()}\n >\n <div className={styles.actionButtons}>\n {rowActions.map((action, actionIndex) => (\n <button\n key={actionIndex}\n className={getButtonClassName(action)}\n style={getButtonStyles(action)}\n onClick={() => action.onClick(item, index)}\n disabled={action.disabled ? action.disabled(item) : false}\n title={action.label}\n aria-label={action.label}\n >\n {action.icon}\n </button>\n ))}\n </div>\n </td>\n )}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n\n {/* Pagination */}\n {pagination && totalPages > 1 && (\n <div className={styles.pagination}>\n <div className={styles.pageInfo}>\n Showing {((currentPage - 1) * pageSize) + 1}-\n {Math.min(currentPage * pageSize, sortedData.length)} of {sortedData.length}\n </div>\n\n <div className={styles.pageControls}>\n <button\n className={styles.pageButton}\n onClick={() => setCurrentPage(1)}\n disabled={currentPage === 1}\n >\n ⟨⟨\n </button>\n <button\n className={styles.pageButton}\n onClick={() => setCurrentPage(prev => Math.max(1, prev - 1))}\n disabled={currentPage === 1}\n >\n ⟨\n </button>\n\n <span className={styles.pageNumber}>\n Page {currentPage} of {totalPages}\n </span>\n\n <button\n className={styles.pageButton}\n onClick={() => setCurrentPage(prev => Math.min(totalPages, prev + 1))}\n disabled={currentPage === totalPages}\n >\n ⟩\n </button>\n <button\n className={styles.pageButton}\n onClick={() => setCurrentPage(totalPages)}\n disabled={currentPage === totalPages}\n >\n ⟩⟩\n </button>\n </div>\n\n {typeof pagination === 'object' && (\n <select\n className={styles.pageSizeSelect}\n value={pageSize}\n onChange={e => {\n setPageSize(Number(e.target.value))\n setCurrentPage(1)\n }}\n >\n {pageSizeOptions.map(size => (\n <option key={size} value={size}>\n {size} per page\n </option>\n ))}\n </select>\n )}\n </div>\n )}\n </div>\n )\n}\n\n// Helper function to format values\nfunction formatValue(value: unknown): ReactNode {\n if (value === null || value === undefined) {\n return <span className={styles.nullValue}>—</span>\n }\n\n if (typeof value === 'boolean') {\n return (\n <span className={`${styles.badge} ${value ? styles.badgeSuccess : styles.badgeDanger}`}>\n {value ? '✓' : '✗'}\n </span>\n )\n }\n\n if (value instanceof Date) {\n return value.toLocaleDateString()\n }\n\n if (typeof value === 'object') {\n return <code className={styles.code}>{JSON.stringify(value, null, 2)}</code>\n }\n\n return String(value)\n}\n\n// Memoized Table component to prevent unnecessary re-renders\nexport const Table = memo(TableComponent) as <T extends object>(\n props: TableProps<T>\n) => JSX.Element\n","import React from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { Button } from '../../atoms/Button/Button';\nimport styles from './ConfirmationModal.module.css';\n\nexport interface ConfirmationModalProps {\n isOpen: boolean;\n onClose: () => void;\n onConfirm: () => void;\n title: string;\n message: string;\n confirmText?: string;\n cancelText?: string;\n isLoading?: boolean;\n variant?: 'danger' | 'warning' | 'info';\n}\n\n/**\n * ConfirmationModal Component\n *\n * A specialized modal for confirm/cancel flows with variant styling.\n *\n * @example\n * <ConfirmationModal\n * isOpen={showDelete}\n * onClose={() => setShowDelete(false)}\n * onConfirm={handleDelete}\n * title=\"Delete item?\"\n * message=\"This action cannot be undone.\"\n * variant=\"danger\"\n * confirmText=\"Delete\"\n * />\n */\nexport const ConfirmationModal: React.FC<ConfirmationModalProps> = ({\n isOpen,\n onClose,\n onConfirm,\n title,\n message,\n confirmText = 'Confirm',\n cancelText = 'Cancel',\n isLoading = false,\n variant = 'info',\n}) => {\n const handleConfirm = (e: React.MouseEvent) => {\n if (!isLoading) {\n e.preventDefault();\n e.stopPropagation();\n onConfirm();\n }\n };\n\n return (\n <AnimatePresence>\n {isOpen && (\n <>\n <motion.div\n className={styles.overlay}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n onClick={!isLoading ? onClose : undefined}\n />\n <div className={styles.positioner}>\n <motion.div\n className={styles.modal}\n initial={{ opacity: 0, scale: 0.9, y: 20 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.9, y: 20 }}\n transition={{ type: 'spring', stiffness: 300, damping: 30 }}\n >\n <div className={`${styles.header} ${styles[variant]}`}>\n <h2 className={styles.title}>{title}</h2>\n {!isLoading && (\n <button\n className={styles.closeButton}\n onClick={onClose}\n type=\"button\"\n aria-label=\"Close\"\n >\n ✕\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","ThemeProvider","_Fragment","Fragment"],"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/TimeInput.tsx","../src/components/organisms/ThemeProvider/ThemeProvider.tsx","../src/components/molecules/ThemeSwitcher/ThemeSwitcher.tsx","../src/components/molecules/Tabs/Tabs.tsx","../src/components/molecules/Toast/Toast.tsx","../src/components/molecules/Breadcrumb/Breadcrumb.tsx","../src/components/molecules/LiquidButton/LiquidButton.tsx","../src/components/molecules/StreamConsole/StreamConsole.tsx","../src/components/organisms/Calendar/DayEventCard.tsx","../src/components/organisms/Calendar/exportEvents.ts","../src/components/organisms/Calendar/Calendar.tsx","../src/components/organisms/Navbar/Navbar.tsx","../src/components/organisms/charts/MoodChart/MoodChart.tsx","../src/components/organisms/charts/QuantifiableHabitsChart/QuantifiableHabitsChart.tsx","../src/components/organisms/charts/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 { useMemo } from 'react';\nimport dayjs from 'dayjs';\nimport { MobileTimePicker } from '@mui/x-date-pickers/MobileTimePicker';\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';\nimport { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';\nimport { createTheme, ThemeProvider } from '@mui/material/styles';\nimport styles from './TimeInput.module.css';\n\nconst lightTheme = createTheme({\n palette: {\n mode: 'light',\n primary: { main: '#3b82f6' },\n background: {\n default: '#f8fafc',\n paper: '#ffffff',\n },\n text: {\n primary: '#0f172a',\n secondary: '#475569',\n },\n },\n});\n\nconst darkTheme = createTheme({\n palette: {\n mode: 'dark',\n primary: { main: '#f5b829' },\n background: {\n default: '#010907',\n paper: '#0e1a19',\n },\n text: {\n primary: '#f1f5f9',\n secondary: '#cbd5e1',\n },\n },\n});\n\nexport interface TimeInputProps {\n label: string;\n value: string;\n onChange: (newValue: string) => void;\n placeholder?: string;\n onFocus?: () => void;\n onBlur?: () => void;\n error?: boolean;\n success?: boolean;\n loading?: boolean;\n disabled?: boolean;\n required?: boolean;\n className?: string;\n}\n\nexport function TimeInput({\n label,\n value,\n onChange,\n error = false,\n success = false,\n loading = false,\n disabled = false,\n required = false,\n className = '',\n}: Readonly<TimeInputProps>) {\n const dayjsValue = value ? dayjs(`2000-01-01 ${value}`) : null;\n\n const isDark =\n typeof document !== 'undefined' &&\n !!document.documentElement.getAttribute('data-theme')?.includes('dark');\n const muiTheme = useMemo(() => (isDark ? darkTheme : lightTheme), [isDark]);\n\n const getContainerClassName = () => {\n const classes = [styles.timeInput];\n if (error) classes.push(styles.error);\n if (success) classes.push(styles.success);\n if (loading) classes.push(styles.loading);\n if (disabled) classes.push(styles.disabled);\n if (className) classes.push(className);\n return classes.join(' ');\n };\n\n return (\n <div className={getContainerClassName()}>\n {label && (\n <label className={styles.label}>\n {label}\n {required && <span className={styles.required}>*</span>}\n </label>\n )}\n <ThemeProvider theme={muiTheme}>\n <LocalizationProvider dateAdapter={AdapterDayjs}>\n <MobileTimePicker\n value={dayjsValue}\n onChange={(newValue) => {\n onChange(newValue ? newValue.format('HH:mm') : '');\n }}\n ampm={false}\n views={['hours', 'minutes']}\n disabled={disabled || loading}\n slotProps={{\n textField: {\n size: 'small',\n fullWidth: true,\n className: styles.picker,\n sx: {\n '& .MuiPickersOutlinedInput-root': {\n fontFamily:\n \"'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, monospace\",\n fontSize: 'var(--font-size-lg)',\n borderRadius: 'var(--radius-lg)',\n color: 'var(--color-text) !important',\n '& .MuiPickersOutlinedInput-notchedOutline': {\n borderWidth: '2px !important',\n borderColor: 'var(--color-border) !important',\n },\n '&:hover .MuiPickersOutlinedInput-notchedOutline': {\n borderColor: 'var(--color-border-hover) !important',\n },\n '&.Mui-focused .MuiPickersOutlinedInput-notchedOutline': {\n borderColor: 'var(--color-primary) !important',\n },\n },\n '& .MuiIconButton-root': {\n color: 'var(--color-text-secondary) !important',\n },\n },\n },\n }}\n />\n </LocalizationProvider>\n </ThemeProvider>\n </div>\n );\n}\n","import React, { createContext, useContext, useState, useEffect } from 'react';\n\nexport type Theme = 'light' | 'dark' | 'lossito' | 'lossito-dark' | 'dao' | 'dao-dark' | 'crt';\n\ninterface ThemeContextType {\n theme: Theme;\n setTheme: (theme: Theme) => void;\n toggleTheme: () => void;\n}\n\nconst ThemeContext = createContext<ThemeContextType | undefined>(undefined);\n\nexport const useTheme = () => {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within a ThemeProvider');\n }\n return context;\n};\n\n/** Safe version of useTheme that returns null when outside a ThemeProvider */\nexport const useThemeSafe = (): ThemeContextType | null => {\n return useContext(ThemeContext) ?? null;\n};\n\ninterface ThemeProviderProps {\n children: React.ReactNode;\n defaultTheme?: Theme;\n storageKey?: string;\n}\n\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({\n children,\n defaultTheme = 'light',\n storageKey = 'app-theme',\n}) => {\n const [theme, setThemeState] = useState<Theme>(() => {\n // Check localStorage first\n const stored = localStorage.getItem(storageKey);\n if (stored && ['light', 'dark', 'lossito', 'lossito-dark', 'dao', 'dao-dark', 'crt'].includes(stored)) {\n return stored as Theme;\n }\n // Check system preference\n if (window.matchMedia('(prefers-color-scheme: dark)').matches) {\n return 'dark';\n }\n return defaultTheme;\n });\n\n const setTheme = (newTheme: Theme) => {\n setThemeState(newTheme);\n localStorage.setItem(storageKey, newTheme);\n };\n\n const toggleTheme = () => {\n const themeOrder: Theme[] = ['light', 'dark', 'lossito', 'lossito-dark', 'dao', 'dao-dark', 'crt'];\n const currentIndex = themeOrder.indexOf(theme);\n const nextIndex = (currentIndex + 1) % themeOrder.length;\n setTheme(themeOrder[nextIndex]);\n };\n\n useEffect(() => {\n const root = document.documentElement;\n \n // Apply theme attribute\n root.setAttribute('data-theme', theme);\n \n // Apply dark class if needed\n if (theme.includes('dark')) {\n root.classList.add('dark');\n } else {\n root.classList.remove('dark');\n }\n }, [theme]);\n\n // Listen for system theme changes\n useEffect(() => {\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handleChange = (e: MediaQueryListEvent) => {\n const stored = localStorage.getItem(storageKey);\n if (!stored) {\n setThemeState(e.matches ? 'dark' : 'light');\n }\n };\n\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }, [storageKey]);\n\n return (\n <ThemeContext.Provider value={{ theme, setTheme, toggleTheme }}>\n {children}\n </ThemeContext.Provider>\n );\n};","import React from 'react';\nimport { motion } from 'framer-motion';\nimport { Sun, Moon } from 'lucide-react';\nimport { useThemeSafe, Theme } from '../../organisms/ThemeProvider/ThemeProvider';\nimport styles from './ThemeSwitcher.module.css';\n\nexport interface ThemeOption {\n value: Theme;\n label: string;\n icon: React.ReactNode;\n}\n\nexport interface ThemeSwitcherProps {\n variant?: 'button' | 'dropdown' | 'toggle';\n showLabel?: boolean;\n className?: string;\n currentTheme?: Theme;\n onThemeChange?: (theme: Theme) => void;\n themes?: ThemeOption[];\n}\n\nexport const ThemeSwitcher: React.FC<ThemeSwitcherProps> = ({\n variant = 'button',\n showLabel = false,\n className = '',\n currentTheme,\n onThemeChange,\n themes: customThemes,\n}) => {\n // Use safe version that returns null when outside a ThemeProvider\n const contextTheme = useThemeSafe();\n\n const theme = currentTheme ?? contextTheme?.theme ?? 'light';\n const setTheme = onThemeChange ?? contextTheme?.setTheme ?? (() => {});\n\n const defaultThemes: ThemeOption[] = [\n { value: 'light', label: 'Light', icon: <Sun /> },\n { value: 'dark', label: 'Dark', icon: <Moon /> },\n { value: 'lossito', label: 'Lossito Light', icon: '✨' },\n { value: 'lossito-dark', label: 'Lossito Dark', icon: '🌑' },\n { value: 'dao', label: 'Dao Light', icon: '⬜' },\n { value: 'dao-dark', label: 'Dao Dark', icon: '⬛' },\n ];\n\n const themes = customThemes ?? defaultThemes;\n\n const currentThemeIndex = themes.findIndex(t => t.value === theme);\n const currentThemeData = themes[currentThemeIndex] ?? themes[0];\n\n if (variant === 'toggle') {\n // Simple toggle between light and dark\n const isDark = theme.includes('dark');\n return (\n <motion.button\n className={`${styles.toggle} ${className}`}\n onClick={() => setTheme(isDark ? 'light' : 'dark')}\n whileTap={{ scale: 0.95 }}\n aria-label=\"Toggle theme\"\n >\n <motion.div\n className={styles.toggleTrack}\n animate={{ backgroundColor: isDark ? 'var(--color-primary)' : 'var(--color-border)' }}\n >\n <motion.div\n className={styles.toggleThumb}\n animate={{ x: isDark ? 24 : 0 }}\n transition={{ type: 'spring', stiffness: 500, damping: 30 }}\n >\n {isDark ? <Moon size={14} /> : <Sun size={14} />}\n </motion.div>\n </motion.div>\n {showLabel && <span className={styles.label}>{isDark ? 'Dark' : 'Light'}</span>}\n </motion.button>\n );\n }\n\n if (variant === 'dropdown') {\n return (\n <div className={`${styles.dropdown} ${className}`}>\n <motion.button\n className={styles.dropdownTrigger}\n whileTap={{ scale: 0.98 }}\n >\n {currentThemeData.icon}\n {showLabel && <span className={styles.label}>{currentThemeData.label}</span>}\n </motion.button>\n <motion.div\n className={styles.dropdownMenu}\n initial={{ opacity: 0, y: -10 }}\n animate={{ opacity: 1, y: 0 }}\n >\n {themes.map((t) => (\n <motion.button\n key={t.value}\n className={`${styles.dropdownItem} ${theme === t.value ? styles.active : ''}`}\n onClick={() => setTheme(t.value)}\n whileHover={{ x: 4 }}\n whileTap={{ scale: 0.98 }}\n >\n <span className={styles.icon}>{t.icon}</span>\n <span className={styles.text}>{t.label}</span>\n </motion.button>\n ))}\n </motion.div>\n </div>\n );\n }\n\n // Default button variant - cycles through themes\n return (\n <motion.button\n className={`${styles.button} ${className}`}\n onClick={() => {\n const nextIndex = (currentThemeIndex + 1) % themes.length;\n setTheme(themes[nextIndex].value);\n }}\n whileTap={{ scale: 0.95 }}\n whileHover={{ scale: 1.05 }}\n aria-label={`Current theme: ${currentThemeData.label}. Click to change.`}\n >\n <motion.div\n key={theme}\n initial={{ rotate: -180, opacity: 0 }}\n animate={{ rotate: 0, opacity: 1 }}\n exit={{ rotate: 180, opacity: 0 }}\n transition={{ duration: 0.3 }}\n className={styles.iconWrapper}\n >\n {currentThemeData.icon}\n </motion.div>\n {showLabel && <span className={styles.label}>{currentThemeData.label}</span>}\n </motion.button>\n );\n};","import React from 'react';\nimport { Info, Github, SquareKanban } from 'lucide-react';\nimport { motion } from 'framer-motion';\nimport styles from './Tabs.module.css';\n\nexport interface Tab {\n id: string;\n label: string;\n icon?: React.ComponentType<object> | React.ReactNode;\n}\n\nexport interface TabsProps {\n activeTab: string;\n onTabChange: (tab: string) => void;\n tabs?: Tab[];\n className?: string;\n /** Stretch each tab to share the available width equally */\n fullWidth?: boolean;\n}\n\n// Default tabs for backwards compatibility\nconst defaultTabs: Tab[] = [\n { id: 'details', icon: Info, label: 'Dettagli' },\n { id: 'github', icon: Github, label: 'GitHub' },\n { id: 'jira', icon: SquareKanban, label: 'Jira' },\n { id: 'functional', icon: Info, label: 'Analisi funzionale' }\n];\n\n// Legacy type for backwards compatibility\nexport type TabType = 'details' | 'github' | 'jira' | 'functional';\n\nexport const Tabs: React.FC<TabsProps> = ({\n activeTab,\n onTabChange,\n tabs: customTabs,\n className = '',\n fullWidth = false\n}) => {\n const tabs = customTabs ?? defaultTabs;\n\n return (\n <div className={`${styles.tabs} ${fullWidth ? styles.fullWidth : ''} ${className}`}>\n {tabs.map((tab) => {\n const isActive = activeTab === tab.id;\n \n return (\n <motion.button\n key={tab.id}\n className={styles.tab}\n data-active={isActive}\n onClick={() => onTabChange(tab.id)}\n style={{ position: 'relative' }}\n >\n <motion.div\n animate={{\n rotate: isActive ? [0, -10, 10, -5, 5, 0] : 0,\n }}\n transition={{\n rotate: {\n duration: 0.5,\n ease: 'easeInOut'\n }\n }}\n >\n {tab.icon && (\n React.isValidElement(tab.icon) ? (\n <span className={styles.tabIcon}>{tab.icon}</span>\n ) : (\n <span className={styles.tabIcon}>\n {React.createElement(tab.icon as React.ComponentType)}\n </span>\n )\n )}\n </motion.div>\n <span>{tab.label}</span>\n </motion.button>\n );\n })}\n </div>\n );\n};","import React, { useEffect, useState } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { createPortal } from 'react-dom';\nimport styles from './Toast.module.css';\n\nexport type ToastType = 'success' | 'error' | 'warning' | 'info';\n\nexport interface ToastData {\n id: string;\n type: ToastType;\n title?: string;\n message: string;\n duration?: number;\n}\n\ninterface ToastProps {\n toasts: ToastData[];\n removeToast: (id: string) => void;\n}\n\nconst getIcon = (type: ToastType) => {\n switch (type) {\n case 'success':\n return (\n <svg className={`${styles.icon} ${styles.iconSuccess}`} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n );\n case 'error':\n return (\n <svg className={`${styles.icon} ${styles.iconError}`} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n );\n case 'warning':\n return (\n <svg className={`${styles.icon} ${styles.iconWarning}`} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\" />\n </svg>\n );\n case 'info':\n return (\n <svg className={`${styles.icon} ${styles.iconInfo}`} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n );\n }\n};\n\nconst getToastStyle = (type: ToastType) => {\n switch (type) {\n case 'success': return styles.toastSuccess;\n case 'error': return styles.toastError;\n case 'warning': return styles.toastWarning;\n case 'info': return styles.toastInfo;\n default: return '';\n }\n};\n\nconst ToastItem: React.FC<{ toast: ToastData; removeToast: (id: string) => void }> = ({\n toast,\n removeToast,\n}) => {\n const [progress, setProgress] = useState(100);\n const duration = toast.duration || 5000;\n\n useEffect(() => {\n const timer = setTimeout(() => {\n removeToast(toast.id);\n }, duration);\n\n const interval = setInterval(() => {\n setProgress((prev) => {\n const newProgress = prev - 100 / (duration / 100);\n return newProgress <= 0 ? 0 : newProgress;\n });\n }, 100);\n\n return () => {\n clearTimeout(timer);\n clearInterval(interval);\n };\n }, [toast.id, duration, removeToast]);\n\n return (\n <motion.div\n className={`${styles.toast} ${getToastStyle(toast.type)}`}\n initial={{ opacity: 0, x: 100, scale: 0.9 }}\n animate={{ opacity: 1, x: 0, scale: 1 }}\n exit={{ opacity: 0, x: 100, scale: 0.9 }}\n transition={{ type: 'spring', stiffness: 500, damping: 40 }}\n layout\n >\n {getIcon(toast.type)}\n <div className={styles.content}>\n {toast.title && <p className={styles.title}>{toast.title}</p>}\n <p className={styles.message}>{toast.message}</p>\n </div>\n <button\n className={styles.closeButton}\n onClick={() => removeToast(toast.id)}\n aria-label=\"Close notification\"\n >\n <svg width=\"16\" height=\"16\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n <motion.div\n className={styles.progressBar}\n initial={{ width: '100%' }}\n animate={{ width: `${progress}%` }}\n style={{\n color: toast.type === 'success' ? '#10B981'\n : toast.type === 'error' ? '#EF4444'\n : toast.type === 'warning' ? '#F59E0B'\n : '#3B82F6',\n }}\n />\n </motion.div>\n );\n};\n\nexport const ToastContainer: React.FC<ToastProps> = ({ toasts, removeToast }) => {\n if (typeof document === 'undefined') return null;\n\n return createPortal(\n <div className={styles.toastContainer}>\n <AnimatePresence mode=\"sync\">\n {toasts.map((toast) => (\n <ToastItem key={toast.id} toast={toast} removeToast={removeToast} />\n ))}\n </AnimatePresence>\n </div>,\n document.body\n );\n};\n","import React from 'react';\nimport { ChevronRight } from 'lucide-react';\nimport styles from './Breadcrumb.module.css';\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n}\n\nexport interface BreadcrumbProps {\n items: BreadcrumbItem[];\n onNavigate?: (href: string) => void;\n className?: string;\n}\n\n/**\n * Breadcrumb Component\n *\n * Navigation breadcrumb trail. Router-agnostic: pass onNavigate to handle\n * clicks on breadcrumb links (e.g. with react-router's navigate function).\n *\n * @example\n * <Breadcrumb\n * items={[\n * { label: 'Home', href: '/' },\n * { label: 'Settings', href: '/settings' },\n * { label: 'Profile' },\n * ]}\n * onNavigate={(href) => navigate(href)}\n * />\n */\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({ items, onNavigate, className = '' }) => {\n return (\n <nav className={`${styles.breadcrumb} ${className}`} aria-label=\"Breadcrumb\">\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n\n return (\n <React.Fragment key={index}>\n {index > 0 && <ChevronRight size={14} className={styles.separator} />}\n {isLast || !item.href ? (\n <span className={`${styles.item} ${isLast ? styles.current : ''}`}>\n {item.label}\n </span>\n ) : (\n <button\n className={`${styles.item} ${styles.link}`}\n onClick={() => onNavigate?.(item.href!)}\n >\n {item.label}\n </button>\n )}\n </React.Fragment>\n );\n })}\n </nav>\n );\n};\n","import { useState, useCallback } from 'react';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { Plus, type LucideIcon } from 'lucide-react';\nimport styles from './LiquidButton.module.css';\n\nexport interface QuickAction {\n key: string;\n label: string;\n icon: LucideIcon;\n color?: string;\n onClick: () => void;\n}\n\nexport interface LiquidButtonProps {\n /** Array of quick actions to show when expanded */\n actions: QuickAction[];\n /** Custom icon for the main button (defaults to Plus) */\n icon?: LucideIcon;\n /** Custom class name for the container */\n className?: string;\n}\n\n/**\n * LiquidButton Component\n *\n * A floating action button that expands to reveal quick action options.\n * The main button rotates 45 degrees when expanded (Plus becomes X).\n * Actions fan out above the button with staggered animations.\n *\n * @example\n * <LiquidButton\n * actions={[\n * { key: 'add', label: 'Add Item', icon: Plus, color: '#2196F3', onClick: () => {} },\n * { key: 'edit', label: 'Edit', icon: Edit, color: '#FF9800', onClick: () => {} },\n * ]}\n * />\n */\nexport const LiquidButton: React.FC<LiquidButtonProps> = ({\n actions,\n icon: Icon = Plus,\n className = '',\n}) => {\n const [expanded, setExpanded] = useState(false);\n\n const handleToggle = useCallback(() => {\n setExpanded((prev) => !prev);\n }, []);\n\n const handleAction = useCallback((action: QuickAction) => {\n setExpanded(false);\n action.onClick();\n }, []);\n\n return (\n <>\n <AnimatePresence>\n {expanded && (\n <motion.div\n className={styles.overlay}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n onClick={handleToggle}\n />\n )}\n </AnimatePresence>\n <div className={`${styles.container} ${className}`}>\n <AnimatePresence>\n {expanded && (\n <div className={styles.actions}>\n {actions.map((action, index) => (\n <motion.button\n key={action.key}\n type=\"button\"\n className={styles.actionButton}\n initial={{ opacity: 0, scale: 0.8 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.8 }}\n transition={{\n duration: 0.15,\n delay: (actions.length - 1 - index) * 0.05,\n }}\n onClick={() => handleAction(action)}\n >\n <action.icon size={18} color={action.color} />\n <span className={styles.actionLabel}>{action.label}</span>\n </motion.button>\n ))}\n </div>\n )}\n </AnimatePresence>\n\n <motion.button\n type=\"button\"\n className={styles.button}\n onClick={handleToggle}\n animate={{ rotate: expanded ? 45 : 0 }}\n transition={{ duration: 0.2 }}\n aria-label={expanded ? 'Close actions' : 'Open actions'}\n >\n <Icon size={24} strokeWidth={2.5} />\n </motion.button>\n </div>\n </>\n );\n};\n","import { useEffect, useRef, type ComponentType } from 'react';\nimport { motion } from 'framer-motion';\nimport {\n\tCheck,\n\tX,\n\tLoader2,\n\tAlertTriangle,\n\tTerminal,\n\tFileText,\n\tPencil,\n\tFilePlus,\n\tSearch,\n\tFolderSearch,\n\tBrain,\n\tPlay,\n\ttype LucideProps,\n} from 'lucide-react';\nimport styles from './StreamConsole.module.css';\n\nexport type StreamEventType = 'step' | 'success' | 'warning' | 'error';\n\nexport interface StreamEvent {\n\ttype: StreamEventType;\n\tmessage: string;\n\tdata?: Record<string, unknown>;\n\ttimestamp?: string;\n}\n\nexport type StreamStatus = 'running' | 'success' | 'error';\n\nexport interface StreamState {\n\tid: string;\n\tlabel: string;\n\tstatus: StreamStatus;\n\tevents: StreamEvent[];\n\tstartedAt: number;\n\tendedAt?: number;\n\terrorMessage?: string;\n\tresult?: Record<string, unknown>;\n}\n\nexport interface StreamConsoleProps {\n\tstream: StreamState;\n\tonCancel?: (id: string) => void;\n\tonDismiss?: (id: string) => void;\n\thideDismiss?: boolean;\n\trunningLabel?: string;\n\tsuccessLabel?: string;\n\terrorLabel?: string;\n}\n\ntype StepSubtype =\n\t| 'bash'\n\t| 'read'\n\t| 'edit'\n\t| 'write'\n\t| 'grep'\n\t| 'glob'\n\t| 'thinking'\n\t| 'lifecycle';\n\ninterface ParsedStep {\n\tsubtype: StepSubtype | null;\n\tlabel: string;\n\tbody: string;\n}\n\n// Known prefixes produced by stream-json summarizers (DAO-style):\n// \"bash: ls -la\", \"read: path/to/file\", \"edit: path/to/file\",\n// \"write: path\", \"grep: pattern\", \"glob: pattern\", \"thinking: ...\"\n// Plus scaffold-specific lifecycle markers like \"spawning claude ...\" and\n// \"resuming session ...\". Anything else keeps the default `·` dot.\nfunction parseStep(message: string): ParsedStep {\n\tconst prefixMatch = /^([a-z]+):\\s*(.*)$/i.exec(message);\n\tif (prefixMatch) {\n\t\tconst key = prefixMatch[1].toLowerCase();\n\t\tconst body = prefixMatch[2];\n\t\tconst known: Record<string, StepSubtype> = {\n\t\t\tbash: 'bash',\n\t\t\tread: 'read',\n\t\t\tedit: 'edit',\n\t\t\twrite: 'write',\n\t\t\tgrep: 'grep',\n\t\t\tglob: 'glob',\n\t\t\tthinking: 'thinking',\n\t\t};\n\t\tif (known[key]) return { subtype: known[key], label: key, body };\n\t}\n\tif (/^(spawning|resuming|starting|launching)\\b/i.test(message)) {\n\t\treturn { subtype: 'lifecycle', label: '', body: message };\n\t}\n\treturn { subtype: null, label: '', body: message };\n}\n\nconst STEP_ICON: Record<StepSubtype, ComponentType<LucideProps>> = {\n\tbash: Terminal,\n\tread: FileText,\n\tedit: Pencil,\n\twrite: FilePlus,\n\tgrep: Search,\n\tglob: FolderSearch,\n\tthinking: Brain,\n\tlifecycle: Play,\n};\n\nexport function StreamConsole({\n\tstream,\n\tonCancel,\n\tonDismiss,\n\thideDismiss = false,\n\trunningLabel = 'Running',\n\tsuccessLabel = 'Done',\n\terrorLabel = 'Failed',\n}: StreamConsoleProps) {\n\tconst listRef = useRef<HTMLDivElement>(null);\n\tconst userScrolledUp = useRef(false);\n\n\tuseEffect(() => {\n\t\tconst el = listRef.current;\n\t\tif (!el) return;\n\t\tconst onScroll = () => {\n\t\t\tconst atBottom = el.scrollHeight - el.scrollTop - el.clientHeight < 40;\n\t\t\tuserScrolledUp.current = !atBottom;\n\t\t};\n\t\tel.addEventListener('scroll', onScroll);\n\t\treturn () => el.removeEventListener('scroll', onScroll);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tconst el = listRef.current;\n\t\tif (!el || userScrolledUp.current) return;\n\t\tel.scrollTop = el.scrollHeight;\n\t}, [stream.events.length]);\n\n\tconst Icon =\n\t\tstream.status === 'running' ? Loader2 : stream.status === 'success' ? Check : AlertTriangle;\n\tconst statusLabel =\n\t\tstream.status === 'running'\n\t\t\t? runningLabel\n\t\t\t: stream.status === 'success'\n\t\t\t\t? successLabel\n\t\t\t\t: errorLabel;\n\n\tconst canShowDismiss =\n\t\t!hideDismiss && (stream.status === 'running' ? !!onCancel : !!onDismiss);\n\n\treturn (\n\t\t<motion.div\n\t\t\tclassName={styles.wrap}\n\t\t\tdata-status={stream.status}\n\t\t\tinitial={{ opacity: 0, y: -8 }}\n\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\texit={{ opacity: 0, y: -8 }}\n\t\t\ttransition={{ duration: 0.18 }}\n\t\t>\n\t\t\t<header className={styles.header}>\n\t\t\t\t<div className={styles.headerLeft}>\n\t\t\t\t\t<span className={styles.statusDot} data-status={stream.status}>\n\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\tsize={12}\n\t\t\t\t\t\t\tclassName={stream.status === 'running' ? styles.spin : ''}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span className={styles.label}>{stream.label}</span>\n\t\t\t\t\t<span className={styles.statusText}>{statusLabel}</span>\n\t\t\t\t</div>\n\t\t\t\t{canShowDismiss && (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName={styles.dismiss}\n\t\t\t\t\t\taria-label={stream.status === 'running' ? 'Cancel' : 'Dismiss'}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tif (stream.status === 'running') onCancel?.(stream.id);\n\t\t\t\t\t\t\telse onDismiss?.(stream.id);\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<X size={14} />\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\t\t\t</header>\n\t\t\t<div className={styles.body} ref={listRef}>\n\t\t\t\t{stream.events.length === 0 && stream.status === 'running' && (\n\t\t\t\t\t<p className={styles.hint}>Waiting for output…</p>\n\t\t\t\t)}\n\t\t\t\t{stream.events.map((event, i) => {\n\t\t\t\t\tconst step = event.type === 'step' ? parseStep(event.message) : null;\n\t\t\t\t\tconst StepIcon = step?.subtype ? STEP_ICON[step.subtype] : null;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<p\n\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\tclassName={styles.line}\n\t\t\t\t\t\t\tdata-type={event.type}\n\t\t\t\t\t\t\tdata-subtype={step?.subtype ?? undefined}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span className={styles.linePrefix}>\n\t\t\t\t\t\t\t\t{StepIcon ? (\n\t\t\t\t\t\t\t\t\t<StepIcon size={11} />\n\t\t\t\t\t\t\t\t) : event.type === 'error' ? (\n\t\t\t\t\t\t\t\t\t'!'\n\t\t\t\t\t\t\t\t) : event.type === 'warning' ? (\n\t\t\t\t\t\t\t\t\t'⚠'\n\t\t\t\t\t\t\t\t) : event.type === 'success' ? (\n\t\t\t\t\t\t\t\t\t'✓'\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t'·'\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t{step?.label ? (\n\t\t\t\t\t\t\t\t<span className={styles.lineLabel}>{step.label}</span>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t<span className={styles.lineText}>\n\t\t\t\t\t\t\t\t{step ? step.body : event.message}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t\t{stream.status === 'error' && stream.errorMessage && (\n\t\t\t\t\t<p className={styles.line} data-type=\"error\">\n\t\t\t\t\t\t<span className={styles.linePrefix}>!</span>\n\t\t\t\t\t\t<span className={styles.lineText}>{stream.errorMessage}</span>\n\t\t\t\t\t</p>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</motion.div>\n\t);\n}\n","import { useRef, useState, PointerEvent as ReactPointerEvent } from 'react';\nimport { motion, useMotionValue, useTransform, animate, PanInfo } from 'framer-motion';\nimport { Trash2, Check, Pencil, GripVertical } from 'lucide-react';\nimport type { CalendarEvent } from './Calendar';\nimport styles from './DayEventCard.module.css';\n\ninterface DayEventCardProps {\n event: CalendarEvent;\n color: string;\n textColor: string;\n onComplete?: (event: CalendarEvent) => void;\n onEdit?: (event: CalendarEvent) => void;\n onDelete?: (event: CalendarEvent) => void;\n onDragEnd?: (clientY: number, clientX: number) => void;\n draggable?: boolean;\n}\n\nconst SWIPE_DELETE_THRESHOLD = -80;\n\nexport const DayEventCard: React.FC<DayEventCardProps> = ({\n event,\n color,\n textColor,\n onComplete,\n onEdit,\n onDelete,\n onDragEnd,\n draggable = true,\n}) => {\n const x = useMotionValue(0);\n const y = useMotionValue(0);\n const deleteOpacity = useTransform(x, [-80, 0], [1, 0]);\n const [verticalDragging, setVerticalDragging] = useState(false);\n const didSwipe = useRef(false);\n const dragStart = useRef<{ x: number; y: number; pointerId: number } | null>(null);\n const completed = event.status === 'completed';\n\n const handleSwipeEnd = (_: MouseEvent | TouchEvent | PointerEvent, info: PanInfo) => {\n if (onDelete && info.offset.x < SWIPE_DELETE_THRESHOLD) {\n animate(x, -1000, { duration: 0.2, onComplete: () => onDelete(event) });\n } else {\n animate(x, 0, { type: 'spring', stiffness: 400, damping: 30 });\n }\n };\n\n const handleCardClick = () => {\n if (didSwipe.current) {\n didSwipe.current = false;\n return;\n }\n if (verticalDragging) return;\n onComplete?.(event);\n };\n\n const handleGripPointerDown = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (!draggable || !onDragEnd) return;\n e.stopPropagation();\n e.preventDefault();\n dragStart.current = { x: e.clientX, y: e.clientY, pointerId: e.pointerId };\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n setVerticalDragging(true);\n };\n\n const handleGripPointerMove = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (!dragStart.current) return;\n x.set(e.clientX - dragStart.current.x);\n y.set(e.clientY - dragStart.current.y);\n };\n\n const handleGripPointerUp = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (!dragStart.current) return;\n const clientY = e.clientY;\n const clientX = e.clientX;\n try {\n (e.currentTarget as HTMLElement).releasePointerCapture(dragStart.current.pointerId);\n } catch {\n // ignore\n }\n dragStart.current = null;\n setVerticalDragging(false);\n animate(y, 0, { type: 'spring', stiffness: 400, damping: 30 });\n animate(x, 0, { type: 'spring', stiffness: 400, damping: 30 });\n onDragEnd?.(clientY, clientX);\n };\n\n const canSwipe = !!onDelete;\n const showGrip = draggable && !!onDragEnd;\n\n return (\n <div className={styles.wrapper}>\n {canSwipe && (\n <motion.div className={styles.deleteUnderlay} style={{ opacity: deleteOpacity }}>\n <Trash2 size={16} />\n <span>Delete</span>\n </motion.div>\n )}\n <motion.div\n className={`${styles.card} ${completed ? styles.completed : ''} ${verticalDragging ? styles.dragging : ''}`}\n style={{ x, y, background: color, color: textColor, borderLeftColor: color }}\n drag={canSwipe && !verticalDragging ? 'x' : false}\n dragConstraints={canSwipe ? { left: -200, right: 0 } : undefined}\n dragElastic={0.15}\n dragDirectionLock\n onDragStart={() => {\n didSwipe.current = true;\n }}\n onDragEnd={handleSwipeEnd}\n whileTap={verticalDragging ? undefined : { scale: 0.98 }}\n animate={verticalDragging ? { scale: 1.03 } : { scale: 1 }}\n onClick={handleCardClick}\n >\n {showGrip && (\n <div\n className={styles.grip}\n onPointerDown={handleGripPointerDown}\n onPointerMove={handleGripPointerMove}\n onPointerUp={handleGripPointerUp}\n onPointerCancel={handleGripPointerUp}\n onClick={(e) => e.stopPropagation()}\n >\n <GripVertical size={14} />\n </div>\n )}\n {completed && <Check size={14} className={styles.checkIcon} strokeWidth={3} />}\n <span className={styles.text}>{event.title}</span>\n {event.time && <span className={styles.time}>{event.time}</span>}\n {onEdit && (\n <button\n className={styles.editButton}\n onClick={(e) => {\n e.stopPropagation();\n onEdit(event);\n }}\n aria-label=\"Edit event\"\n >\n <Pencil size={13} />\n </button>\n )}\n </motion.div>\n </div>\n );\n};\n","import type { CalendarEvent } from './Calendar';\n\nexport type ExportFormat = 'csv' | 'json' | 'toon';\n\nconst EXPORT_FIELDS: Array<keyof CalendarEvent> = [\n 'id', 'title', 'date', 'time', 'endTime', 'allDay',\n 'type', 'status', 'priority', 'category',\n];\n\nconst toIsoDate = (d: Date | string) => {\n const date = typeof d === 'string' ? new Date(d) : d;\n return date.toISOString();\n};\n\nconst normalize = (event: CalendarEvent): Record<string, unknown> => {\n const row: Record<string, unknown> = {};\n for (const f of EXPORT_FIELDS) {\n const v = event[f];\n if (v === undefined) continue;\n row[f] = f === 'date' ? toIsoDate(v as Date | string) : v;\n }\n return row;\n};\n\nconst escCsv = (value: unknown): string => {\n if (value === undefined || value === null) return '';\n const s = String(value);\n if (/[\",\\n\\r]/.test(s)) return `\"${s.replace(/\"/g, '\"\"')}\"`;\n return s;\n};\n\nexport const toCsv = (events: CalendarEvent[]): string => {\n const header = EXPORT_FIELDS.join(',');\n const rows = events.map(e => {\n const n = normalize(e);\n return EXPORT_FIELDS.map(f => escCsv(n[f])).join(',');\n });\n return [header, ...rows].join('\\n');\n};\n\nexport const toJson = (events: CalendarEvent[]): string => {\n return JSON.stringify(events.map(normalize), null, 2);\n};\n\n// TOON (Token-Oriented Object Notation): compact tabular text for uniform arrays.\n// Format: `events[N]{field1,field2,...}:` then indented rows of comma-separated values.\n// Strings containing comma/quote/newline are wrapped in double quotes with \"\" escaping.\nconst escToon = (value: unknown): string => {\n if (value === undefined || value === null) return '';\n const s = String(value);\n if (/[\",\\n\\r]/.test(s)) return `\"${s.replace(/\"/g, '\"\"')}\"`;\n return s;\n};\n\nexport const toToon = (events: CalendarEvent[]): string => {\n const header = `events[${events.length}]{${EXPORT_FIELDS.join(',')}}:`;\n const rows = events.map(e => {\n const n = normalize(e);\n return ' ' + EXPORT_FIELDS.map(f => escToon(n[f])).join(',');\n });\n return [header, ...rows].join('\\n');\n};\n\nconst MIME: Record<ExportFormat, string> = {\n csv: 'text/csv;charset=utf-8;',\n json: 'application/json;charset=utf-8;',\n toon: 'text/plain;charset=utf-8;',\n};\n\nconst EXT: Record<ExportFormat, string> = {\n csv: 'csv',\n json: 'json',\n toon: 'toon',\n};\n\nexport const serializeEvents = (events: CalendarEvent[], format: ExportFormat): string => {\n if (format === 'csv') return toCsv(events);\n if (format === 'json') return toJson(events);\n return toToon(events);\n};\n\nexport const downloadEvents = (\n events: CalendarEvent[],\n format: ExportFormat,\n filename?: string,\n) => {\n const content = serializeEvents(events, format);\n const blob = new Blob([content], { type: MIME[format] });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename ?? `events-${new Date().toISOString().slice(0, 10)}.${EXT[format]}`;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n};\n","import { useMemo, useState, useEffect, useRef, Fragment } from 'react';\nimport { motion } from 'framer-motion';\nimport styles from './Calendar.module.css';\nimport { DayEventCard } from './DayEventCard';\nimport { Download, Moon, Sun } from 'lucide-react';\nimport { downloadEvents, type ExportFormat } from './exportEvents';\n\n/**\n * Generic calendar event interface - flexible for any use case\n * @interface CalendarEvent\n */\nexport interface CalendarEvent {\n /** Unique identifier for the event */\n id: string;\n /** Event title/name */\n title: string;\n /** Event date */\n date: Date | string;\n /** Optional start time string (e.g., \"14:30\") */\n time?: string;\n /** Optional end time string (e.g., \"15:30\") — used for duration-based height in day view */\n endTime?: string;\n /** If true, event is rendered in the all-day strip above the timeline */\n allDay?: boolean;\n /** Event type/category for styling and icons */\n type?: string;\n /** Event status (affects opacity and styling) */\n status?: 'pending' | 'completed' | 'cancelled' | string;\n /** Priority level for color coding */\n priority?: 'high' | 'medium' | 'low' | string;\n /** Category id used by the built-in category filter (see CalendarConfig.categories) */\n category?: string;\n /** Background color override */\n color?: string;\n /** Text color override */\n textColor?: string;\n /** Additional metadata */\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Configuration for calendar appearance and behavior\n * @interface CalendarConfig\n */\nexport interface CalendarConfig {\n /** Custom color scheme for event types */\n eventColors?: Record<string, string>;\n /** Custom icon renderer for event types */\n iconRenderer?: (event: CalendarEvent) => React.ReactNode;\n /** Maximum events to show per day before \"more\" indicator */\n maxEventsPerDay?: number;\n /** Week starts on Monday (true) or Sunday (false) */\n mondayStart?: boolean;\n /** Show week numbers */\n showWeekNumbers?: boolean;\n /** Day view: first hour to show (default 0) */\n startHour?: number;\n /** Day view: last hour to show, exclusive (default 24) */\n endHour?: number;\n /** Day view: pixel height per hour slot (default 60) */\n hourHeight?: number;\n /** Day view: split hour slots into two clickable halves with 30-minute precision (default false) */\n halfHourSlots?: boolean;\n /** Custom date format */\n dateFormat?: Intl.DateTimeFormatOptions;\n /** Custom locale */\n locale?: string;\n /** Custom day labels */\n dayLabels?: string[];\n /** Custom month names */\n monthNames?: string[];\n /** Categories for the built-in segmented filter. When provided, Calendar renders a pill row\n * below the header with an \"All\" toggle plus one pill per category. Events with a matching\n * `category` are filtered by selection; events with no `category` are always shown. */\n categories?: Array<{ id: string; label: string; color: string }>;\n}\n\n/** A category for the built-in filter */\nexport interface CalendarCategory {\n id: string;\n label: string;\n color: string;\n}\n\n/**\n * Props for the Calendar component\n * @interface CalendarProps\n */\nexport interface CalendarProps {\n /** Array of events to display */\n events: CalendarEvent[];\n /** Callback when an event is clicked */\n onEventClick?: (event: CalendarEvent) => void;\n /** Callback when a date is clicked */\n onDateClick?: (date: Date) => void;\n /** View-specific event click handlers */\n onEventClickByView?: {\n month?: (event: CalendarEvent) => void;\n week?: (event: CalendarEvent) => void;\n day?: (event: CalendarEvent) => void;\n };\n /** View-specific date click handlers */\n onDateClickByView?: {\n month?: (date: Date) => void;\n week?: (date: Date) => void;\n day?: (date: Date) => void;\n };\n /** Callback when a time slot is clicked in day view */\n onTimeSlotClick?: (date: Date, hour: number, time: string) => void;\n /** Callback when an event is dropped (drag-rescheduled) in day view */\n onEventDrop?: (event: CalendarEvent, newDate: Date) => void;\n /** Day view: callback when an event body is tapped to toggle complete */\n onEventComplete?: (event: CalendarEvent) => void;\n /** Day view: callback when an event is swiped left to delete */\n onEventDelete?: (event: CalendarEvent) => void;\n /** Day view: callback when an event's edit button is clicked */\n onEventEdit?: (event: CalendarEvent) => void;\n /** Initial view mode */\n viewMode?: 'month' | 'week' | 'day';\n /** Initial date to display */\n initialDate?: Date;\n /** Configuration options */\n config?: CalendarConfig;\n /** Custom CSS class */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Loading state */\n loading?: boolean;\n /** Custom empty state component */\n emptyState?: React.ReactNode;\n /** Hide the calendar header (navigation, title, view controls) */\n hideHeader?: boolean;\n /** Compact mode - renders colored dots instead of event blocks in month view */\n compact?: boolean;\n /** Externally controlled selected date highlight (distinct from initialDate which controls navigation) */\n selectedDate?: Date;\n /** Controlled category filter selection. `null` means \"All\". Omit for uncontrolled. */\n selectedCategoryId?: string | null;\n /** Called when the user picks a pill in the category filter. `null` = \"All\". */\n onCategoryChange?: (categoryId: string | null) => void;\n /** Offer an \"Export\" dropdown in the header with the given formats. Exports the currently\n * filtered events (respects category filter). Omit or pass `[]` to hide the button. */\n exportFormats?: ExportFormat[];\n}\n\n/**\n * Calendar component - A flexible, reusable calendar for displaying events\n * \n * @component\n * @description\n * A highly customizable calendar component that can display events in month or week view.\n * Supports custom event types, colors, icons, and localization. Perfect for scheduling,\n * project management, habit tracking, or any date-based data visualization.\n * \n * @example\n * // Basic usage\n * <Calendar\n * events={myEvents}\n * onEventClick={handleEventClick}\n * viewMode=\"month\"\n * />\n * \n * @example\n * // With custom configuration\n * <Calendar\n * events={projectEvents}\n * config={{\n * eventColors: { task: '#4A90E2', meeting: '#7ED321' },\n * maxEventsPerDay: 5,\n * mondayStart: true\n * }}\n * onEventClick={handleEventClick}\n * />\n */\nexport function Calendar({\n events,\n onEventClick,\n onDateClick,\n onEventClickByView,\n onDateClickByView,\n onTimeSlotClick,\n onEventDrop,\n onEventComplete,\n onEventDelete,\n onEventEdit,\n viewMode = 'month',\n initialDate = new Date(),\n config = {},\n className = '',\n style = {},\n loading = false,\n emptyState,\n hideHeader = false,\n compact = false,\n selectedDate,\n selectedCategoryId,\n onCategoryChange,\n exportFormats\n}: CalendarProps) {\n const [currentDate, setCurrentDate] = useState(initialDate);\n const [currentViewMode, setCurrentViewMode] = useState(viewMode);\n const [hideNightHours, setHideNightHours] = useState(false);\n const [internalCategoryId, setInternalCategoryId] = useState<string | null>(null);\n const isCategoryControlled = selectedCategoryId !== undefined;\n const activeCategoryId = isCategoryControlled ? selectedCategoryId ?? null : internalCategoryId;\n const handleCategoryPick = (id: string | null) => {\n if (!isCategoryControlled) setInternalCategoryId(id);\n onCategoryChange?.(id);\n };\n const dayViewScrollRef = useRef<HTMLDivElement>(null);\n const weekViewScrollRef = useRef<HTMLDivElement>(null);\n const [exportOpen, setExportOpen] = useState(false);\n const exportRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!exportOpen) return;\n const handler = (e: MouseEvent) => {\n if (exportRef.current && !exportRef.current.contains(e.target as Node)) {\n setExportOpen(false);\n }\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [exportOpen]);\n\n const {\n eventColors = {},\n iconRenderer,\n maxEventsPerDay = 3,\n mondayStart = false,\n showWeekNumbers = false,\n dateFormat = { month: 'long', year: 'numeric' },\n locale = 'en-US',\n dayLabels,\n monthNames,\n startHour: configStartHour = 0,\n endHour = 24,\n hourHeight = 60,\n halfHourSlots = false,\n categories\n } = config;\n\n // Effective start hour — when the user toggles \"hide night hours\", collapse\n // the pre-8am range in day/week timelines.\n const startHour = hideNightHours ? Math.max(configStartHour, 8) : configStartHour;\n\n const filteredEvents = useMemo(() => {\n if (!categories || categories.length === 0 || activeCategoryId === null) return events;\n return events.filter(e => !e.category || e.category === activeCategoryId);\n }, [events, categories, activeCategoryId]);\n \n const defaultDayLabels = mondayStart \n ? ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']\n : ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n \n const finalDayLabels = dayLabels || defaultDayLabels;\n\n const timelineHourHeight = config?.hourHeight ?? 60;\n const timelineStartHour = startHour;\n\n const calendarData = useMemo(() => {\n const year = currentDate.getFullYear();\n const month = currentDate.getMonth();\n \n let startDate: Date;\n let endDate: Date;\n let displayTitle: string;\n \n if (currentViewMode === 'week') {\n startDate = new Date(currentDate);\n const day = startDate.getDay();\n const diff = mondayStart \n ? startDate.getDate() - day + (day === 0 ? -6 : 1)\n : startDate.getDate() - day;\n startDate = new Date(startDate.setDate(diff));\n startDate.setHours(0, 0, 0, 0);\n \n endDate = new Date(startDate);\n endDate.setDate(endDate.getDate() + 6);\n \n const weekStart = startDate.toLocaleDateString(locale, { day: 'numeric', month: 'short' });\n const weekEnd = endDate.toLocaleDateString(locale, { day: 'numeric', month: 'short' });\n displayTitle = `${weekStart} - ${weekEnd}`;\n } else if (currentViewMode === 'day') {\n startDate = new Date(currentDate);\n startDate.setHours(0, 0, 0, 0);\n \n endDate = new Date(currentDate);\n endDate.setHours(23, 59, 59, 999);\n \n displayTitle = currentDate.toLocaleDateString(locale, { \n weekday: 'long', \n year: 'numeric', \n month: 'long', \n day: 'numeric' \n });\n } else {\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n \n startDate = new Date(firstDay);\n const firstDayWeek = mondayStart \n ? (firstDay.getDay() + 6) % 7 \n : firstDay.getDay();\n startDate.setDate(startDate.getDate() - firstDayWeek);\n \n endDate = new Date(lastDay);\n const lastDayWeek = mondayStart \n ? (lastDay.getDay() + 6) % 7 \n : lastDay.getDay();\n endDate.setDate(endDate.getDate() + (6 - lastDayWeek));\n \n if (monthNames && monthNames[month]) {\n displayTitle = `${monthNames[month]} ${year}`;\n } else {\n displayTitle = currentDate.toLocaleDateString(locale, dateFormat);\n }\n }\n \n const days = [];\n const current = new Date(startDate);\n \n while (current <= endDate) {\n days.push(new Date(current));\n current.setDate(current.getDate() + 1);\n }\n \n return { days, displayTitle };\n }, [currentDate, currentViewMode, mondayStart, locale, dateFormat, monthNames]);\n\n // Auto-scroll to current time in day/week views. Only re-fires when the\n // user changes view mode or navigates to a different date — not on every\n // re-render (e.g. after dropping an event), which would snap the scroll.\n const lastScrollKeyRef = useRef<string>('');\n useEffect(() => {\n if (currentViewMode !== 'day' && currentViewMode !== 'week') return;\n const targetRef = currentViewMode === 'day' ? dayViewScrollRef : weekViewScrollRef;\n if (!targetRef.current) return;\n\n const now = new Date();\n const isTodayOnScreen = (() => {\n if (currentViewMode === 'day') {\n return currentDate.toDateString() === now.toDateString();\n }\n const weekStart = new Date(currentDate);\n const day = weekStart.getDay();\n const offset = mondayStart ? (day === 0 ? -6 : 1 - day) : -day;\n weekStart.setDate(weekStart.getDate() + offset);\n weekStart.setHours(0, 0, 0, 0);\n const weekEnd = new Date(weekStart);\n weekEnd.setDate(weekStart.getDate() + 7);\n return now >= weekStart && now < weekEnd;\n })();\n if (!isTodayOnScreen) return;\n\n const key = `${currentViewMode}-${currentDate.toDateString()}`;\n if (lastScrollKeyRef.current === key) return;\n lastScrollKeyRef.current = key;\n\n const minutesFromStart = (now.getHours() - timelineStartHour) * 60 + now.getMinutes();\n const scrollPosition = Math.max(0, (minutesFromStart / 60) * timelineHourHeight - 100);\n setTimeout(() => {\n if (targetRef.current) targetRef.current.scrollTop = scrollPosition;\n }, 0);\n }, [currentViewMode, currentDate, timelineStartHour, timelineHourHeight, mondayStart]);\n \n const getDayEvents = (day: Date) => {\n const dayEvents = filteredEvents.filter(event => {\n const eventDate = new Date(event.date);\n return eventDate.toDateString() === day.toDateString();\n });\n \n return dayEvents.sort((a, b) => {\n const timeA = a.time ? convertTimeToMinutes(a.time) : 999999;\n const timeB = b.time ? convertTimeToMinutes(b.time) : 999999;\n return timeA - timeB;\n });\n };\n \n const convertTimeToMinutes = (time: string): number => {\n const [hours, minutes] = time.split(':').map(Number);\n return hours * 60 + minutes;\n };\n\n // Compute side-by-side column layout for events that overlap in time.\n // Returns a map: eventId -> { col, totalCols } where totalCols is the width\n // of the group (so a 3-way overlap yields totalCols=3 and col in {0,1,2}).\n const layoutOverlappingEvents = (\n events: CalendarEvent[]\n ): Map<string, { col: number; totalCols: number }> => {\n const result = new Map<string, { col: number; totalCols: number }>();\n const timed = events.filter(e => e.time).map(e => {\n const start = convertTimeToMinutes(e.time!);\n const end = e.endTime ? convertTimeToMinutes(e.endTime) : start + 30;\n return { event: e, start, end: Math.max(end, start + 1) };\n });\n timed.sort((a, b) => a.start - b.start || a.end - b.end);\n\n let cluster: typeof timed = [];\n let clusterEnd = -1;\n const flushCluster = () => {\n if (cluster.length === 0) return;\n const cols: number[] = []; // cols[i] = end time of last event in col i\n const assigned: { id: string; col: number }[] = [];\n for (const item of cluster) {\n let placed = false;\n for (let i = 0; i < cols.length; i++) {\n if (cols[i] <= item.start) {\n cols[i] = item.end;\n assigned.push({ id: item.event.id, col: i });\n placed = true;\n break;\n }\n }\n if (!placed) {\n cols.push(item.end);\n assigned.push({ id: item.event.id, col: cols.length - 1 });\n }\n }\n const totalCols = cols.length;\n for (const a of assigned) result.set(a.id, { col: a.col, totalCols });\n cluster = [];\n clusterEnd = -1;\n };\n for (const item of timed) {\n if (cluster.length === 0 || item.start < clusterEnd) {\n cluster.push(item);\n clusterEnd = Math.max(clusterEnd, item.end);\n } else {\n flushCluster();\n cluster.push(item);\n clusterEnd = item.end;\n }\n }\n flushCluster();\n return result;\n };\n \n const handlePrevious = () => {\n const newDate = new Date(currentDate);\n if (currentViewMode === 'week') {\n newDate.setDate(newDate.getDate() - 7);\n } else if (currentViewMode === 'day') {\n newDate.setDate(newDate.getDate() - 1);\n } else {\n newDate.setMonth(newDate.getMonth() - 1);\n }\n setCurrentDate(newDate);\n };\n \n const handleNext = () => {\n const newDate = new Date(currentDate);\n if (currentViewMode === 'week') {\n newDate.setDate(newDate.getDate() + 7);\n } else if (currentViewMode === 'day') {\n newDate.setDate(newDate.getDate() + 1);\n } else {\n newDate.setMonth(newDate.getMonth() + 1);\n }\n setCurrentDate(newDate);\n };\n \n const handleToday = () => {\n setCurrentDate(new Date());\n };\n \n const getEventColor = (event: CalendarEvent) => {\n if (event.color) return event.color;\n if (event.type && eventColors[event.type]) return eventColors[event.type];\n \n // Default color scheme based on priority\n const defaultColors = {\n high: '#FF4444',\n medium: '#FFA500',\n low: '#4A90E2'\n };\n \n if (event.priority && defaultColors[event.priority as keyof typeof defaultColors]) {\n return defaultColors[event.priority as keyof typeof defaultColors];\n }\n \n return '#4A90E2'; // Default blue\n };\n \n const getContrastColor = (bgColor: string): string => {\n // Convert hex to RGB\n const hex = bgColor.replace('#', '');\n const r = parseInt(hex.substring(0, 2), 16);\n const g = parseInt(hex.substring(2, 4), 16);\n const b = parseInt(hex.substring(4, 6), 16);\n \n // Calculate luminance\n const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;\n \n // Return black or white based on luminance\n return luminance > 0.5 ? '#000000' : '#FFFFFF';\n };\n \n const getEventTextColor = (event: CalendarEvent): string => {\n if (event.textColor) return event.textColor;\n const bgColor = getEventColor(event);\n return getContrastColor(bgColor);\n };\n \n const handleEventClick = (event: CalendarEvent) => {\n // Check for view-specific handler first\n if (onEventClickByView && onEventClickByView[currentViewMode]) {\n onEventClickByView[currentViewMode](event);\n } else if (onEventClick) {\n // Fall back to general handler\n onEventClick(event);\n }\n };\n\n const handleDateClick = (date: Date) => {\n // Check for view-specific handler first\n if (onDateClickByView && onDateClickByView[currentViewMode]) {\n onDateClickByView[currentViewMode](date);\n } else if (onDateClick) {\n // Fall back to general handler\n onDateClick(date);\n }\n };\n\n const isToday = (date: Date) => {\n const today = new Date();\n return date.toDateString() === today.toDateString();\n };\n \n const isCurrentMonth = (date: Date) => {\n return date.getMonth() === currentDate.getMonth();\n };\n \n const getWeekNumber = (date: Date) => {\n const start = new Date(date.getFullYear(), 0, 1);\n const diff = date.getTime() - start.getTime();\n const oneWeek = 1000 * 60 * 60 * 24 * 7;\n return Math.floor(diff / oneWeek) + 1;\n };\n \n if (loading) {\n return (\n <div className={`${styles.calendar} ${styles.loading} ${className}`} style={style}>\n <div className={styles.loadingSpinner}>Loading...</div>\n </div>\n );\n }\n \n return (\n <div className={`${styles.calendar} ${compact ? styles.compact : ''} ${className}`} style={style}>\n {!hideHeader && (\n <div className={styles.header}>\n <div className={styles.navigation}>\n <button onClick={handlePrevious} className={styles.navButton} aria-label=\"Previous\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n <polyline points=\"15,18 9,12 15,6\" />\n </svg>\n </button>\n <h3 className={styles.title}>{calendarData.displayTitle}</h3>\n <button onClick={handleNext} className={styles.navButton} aria-label=\"Next\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n <polyline points=\"9,6 15,12 9,18\" />\n </svg>\n </button>\n </div>\n\n {categories && categories.length > 0 && (\n <div className={styles.filterBar} role=\"tablist\" aria-label=\"Filter by category\">\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={activeCategoryId === null}\n className={`${styles.filterPill} ${activeCategoryId === null ? styles.filterPillActive : ''}`}\n onClick={() => handleCategoryPick(null)}\n >\n All\n </button>\n {categories.map(cat => {\n const active = activeCategoryId === cat.id;\n return (\n <button\n key={cat.id}\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n className={`${styles.filterPill} ${active ? styles.filterPillActive : ''}`}\n style={active ? { background: cat.color, borderColor: cat.color, color: '#ffffff' } : undefined}\n onClick={() => handleCategoryPick(cat.id)}\n >\n {!active && (\n <span className={styles.filterDot} style={{ background: cat.color }} />\n )}\n {cat.label}\n </button>\n );\n })}\n </div>\n )}\n\n <div className={styles.controls}>\n {exportFormats && exportFormats.length > 0 && (\n <div className={styles.exportDropdown} ref={exportRef}>\n <button\n type=\"button\"\n className={styles.exportButton}\n onClick={() => setExportOpen(v => !v)}\n aria-haspopup=\"menu\"\n aria-expanded={exportOpen}\n aria-label=\"Export events\"\n title=\"Export events\"\n >\n <Download size={16} />\n </button>\n {exportOpen && (\n <div className={styles.exportMenu} role=\"menu\">\n {exportFormats.map(format => (\n <button\n key={format}\n type=\"button\"\n role=\"menuitem\"\n className={styles.exportMenuItem}\n onClick={() => {\n downloadEvents(filteredEvents, format);\n setExportOpen(false);\n }}\n >\n {format.toUpperCase()}\n </button>\n ))}\n </div>\n )}\n </div>\n )}\n {(currentViewMode === 'day' || currentViewMode === 'week') && (\n <button\n type=\"button\"\n className={styles.nightToggle}\n onClick={() => setHideNightHours(v => !v)}\n aria-pressed={hideNightHours}\n title={hideNightHours ? 'Show night hours' : 'Hide night hours (00:00–08:00)'}\n aria-label={hideNightHours ? 'Show night hours' : 'Hide night hours'}\n >\n {hideNightHours ? <Sun size={16} /> : <Moon size={16} />}\n </button>\n )}\n <button onClick={handleToday} className={styles.todayButton}>\n Today\n </button>\n <div className={styles.viewToggle}>\n <button\n className={`${styles.viewButton} ${currentViewMode === 'month' ? styles.active : ''}`}\n onClick={() => setCurrentViewMode('month')}\n >\n Month\n </button>\n <button\n className={`${styles.viewButton} ${currentViewMode === 'week' ? styles.active : ''}`}\n onClick={() => setCurrentViewMode('week')}\n >\n Week\n </button>\n <button\n className={`${styles.viewButton} ${currentViewMode === 'day' ? styles.active : ''}`}\n onClick={() => setCurrentViewMode('day')}\n >\n Day\n </button>\n </div>\n </div>\n </div>\n )}\n\n {currentViewMode === 'month' && (\n <div className={`${styles.weekDays} ${showWeekNumbers ? styles.withWeekNumbers : ''}`}>\n {showWeekNumbers && <div className={styles.weekNumberHeader}>Wk</div>}\n {finalDayLabels.map((day) => (\n <div key={day} className={styles.weekDay}>\n {day}\n </div>\n ))}\n </div>\n )}\n \n {currentViewMode === 'day' ? (\n // Day view layout — positioned events with duration, all-day strip, now-line\n (() => {\n const dayEvents = getDayEvents(currentDate);\n const scheduled = dayEvents.filter(e => !e.allDay && e.time);\n const allDayEvents = dayEvents.filter(e => e.allDay || !e.time);\n\n const hours = Array.from({ length: endHour - startHour }, (_, i) => startHour + i);\n const timelineHeight = hours.length * hourHeight;\n\n const now = new Date();\n const dayIsToday = currentDate.toDateString() === now.toDateString();\n const nowMinutesFromStart = (now.getHours() - startHour) * 60 + now.getMinutes();\n const nowOffset = (nowMinutesFromStart / 60) * hourHeight;\n const showNow = dayIsToday && nowOffset >= 0 && nowOffset <= timelineHeight;\n\n const eventMinutes = (time: string) => {\n const [h, m] = time.split(':').map(Number);\n return h * 60 + m;\n };\n const eventDuration = (event: CalendarEvent) => {\n if (!event.time || !event.endTime) return 30;\n const d = eventMinutes(event.endTime) - eventMinutes(event.time);\n return d > 0 ? d : 30;\n };\n\n const dayLayout = layoutOverlappingEvents(scheduled);\n\n const handleSlotClick = (hour: number, minute: number) => {\n if (onTimeSlotClick) {\n const slotDate = new Date(currentDate);\n slotDate.setHours(hour, minute, 0, 0);\n const timeString = `${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}`;\n onTimeSlotClick(slotDate, hour, timeString);\n }\n };\n\n const handleEventDragEnd = (event: CalendarEvent, clientY: number) => {\n if (!onEventDrop) return;\n const gridEl = dayViewScrollRef.current?.querySelector(`.${styles.dayTimelineGrid}`) as HTMLElement | null;\n if (!gridEl) return;\n const rect = gridEl.getBoundingClientRect();\n const relativeY = clientY - rect.top;\n const slotSize = halfHourSlots ? hourHeight / 2 : hourHeight;\n const slotIndex = Math.max(0, Math.floor(relativeY / slotSize));\n const totalSlots = halfHourSlots ? hours.length * 2 : hours.length;\n const clamped = Math.min(totalSlots - 1, slotIndex);\n const newHour = startHour + Math.floor(halfHourSlots ? clamped / 2 : clamped);\n const newMinute = halfHourSlots && clamped % 2 === 1 ? 30 : 0;\n const newDate = new Date(currentDate);\n newDate.setHours(newHour, newMinute, 0, 0);\n onEventDrop(event, newDate);\n };\n\n return (\n <div className={styles.dayView}>\n <div className={styles.dayViewHeader}>\n <div className={styles.timeColumnHeader}></div>\n <div className={styles.dayColumnHeader}>\n {currentDate.toLocaleDateString(locale, { weekday: 'short', day: 'numeric' })}\n </div>\n </div>\n\n {allDayEvents.length > 0 && (\n <div className={styles.allDayStrip}>\n <span className={styles.allDayLabel}>All day</span>\n <div className={styles.allDayList}>\n {allDayEvents.map(event => (\n <DayEventCard\n key={event.id}\n event={event}\n color={getEventColor(event)}\n textColor={getEventTextColor(event)}\n onComplete={onEventComplete ?? (onEventClick ? handleEventClick : undefined)}\n onEdit={onEventEdit}\n onDelete={onEventDelete}\n draggable={false}\n />\n ))}\n </div>\n </div>\n )}\n\n <div className={styles.dayViewScrollContainer} ref={dayViewScrollRef}>\n <div className={styles.dayTimelineGrid} style={{ height: timelineHeight }}>\n {hours.map(hour => (\n <div\n key={hour}\n className={styles.hourRow}\n style={{ height: hourHeight }}\n >\n <span className={styles.hourLabel}>\n {hour.toString().padStart(2, '0')}:00\n </span>\n <div className={styles.hourSlots}>\n {halfHourSlots ? (\n <>\n <div\n className={styles.halfHourSlot}\n onClick={() => handleSlotClick(hour, 0)}\n />\n <div\n className={`${styles.halfHourSlot} ${styles.halfHourSlotBottom}`}\n onClick={() => handleSlotClick(hour, 30)}\n />\n </>\n ) : (\n <div\n className={styles.halfHourSlot}\n onClick={() => handleSlotClick(hour, 0)}\n />\n )}\n </div>\n </div>\n ))}\n\n {scheduled.map((event) => {\n const [h, m] = event.time!.split(':').map(Number);\n const top = (h - startHour) * hourHeight + (m / 60) * hourHeight;\n const duration = eventDuration(event);\n const height = Math.max(24, (duration / 60) * hourHeight - 2);\n const lane = dayLayout.get(event.id);\n const totalCols = lane?.totalCols ?? 1;\n const col = lane?.col ?? 0;\n return (\n <div\n key={event.id}\n className={styles.dayEventAnchor}\n style={{\n top,\n height,\n '--lane-col': col,\n '--lane-total': totalCols,\n } as React.CSSProperties}\n onClick={(e) => e.stopPropagation()}\n >\n <DayEventCard\n event={event}\n color={getEventColor(event)}\n textColor={getEventTextColor(event)}\n onComplete={onEventComplete ?? (onEventClick ? handleEventClick : undefined)}\n onEdit={onEventEdit}\n onDelete={onEventDelete}\n onDragEnd={onEventDrop ? (clientY) => handleEventDragEnd(event, clientY) : undefined}\n />\n </div>\n );\n })}\n\n {showNow && (\n <div\n className={styles.currentTimeIndicator}\n style={{ top: `${nowOffset}px` }}\n />\n )}\n </div>\n </div>\n </div>\n );\n })()\n ) : currentViewMode === 'week' ? (\n // Week view layout — 7 side-by-side day timelines. Drag events across\n // columns to reschedule to a different day + hour in one gesture.\n (() => {\n const days = calendarData.days;\n const hours = Array.from({ length: endHour - startHour }, (_, i) => startHour + i);\n const timelineHeight = hours.length * hourHeight;\n\n const now = new Date();\n const todayIdx = days.findIndex(d => d.toDateString() === now.toDateString());\n const nowMinutesFromStart = (now.getHours() - startHour) * 60 + now.getMinutes();\n const nowOffset = (nowMinutesFromStart / 60) * hourHeight;\n const showNow = todayIdx >= 0 && nowOffset >= 0 && nowOffset <= timelineHeight;\n\n const eventMinutes = (time: string) => {\n const [h, m] = time.split(':').map(Number);\n return h * 60 + m;\n };\n const eventDuration = (event: CalendarEvent) => {\n if (!event.time || !event.endTime) return 30;\n const d = eventMinutes(event.endTime) - eventMinutes(event.time);\n return d > 0 ? d : 30;\n };\n\n const handleWeekSlotClick = (day: Date, hour: number, minute: number) => {\n if (!onTimeSlotClick) return;\n const slotDate = new Date(day);\n slotDate.setHours(hour, minute, 0, 0);\n const timeString = `${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}`;\n onTimeSlotClick(slotDate, hour, timeString);\n };\n\n const handleWeekDragEnd = (event: CalendarEvent, clientY: number, clientX: number) => {\n if (!onEventDrop) return;\n const gridEl = weekViewScrollRef.current?.querySelector(`.${styles.weekDayColumns}`) as HTMLElement | null;\n if (!gridEl) return;\n const rect = gridEl.getBoundingClientRect();\n const relativeX = clientX - rect.left;\n const relativeY = clientY - rect.top;\n const columnWidth = rect.width / 7;\n const columnIndex = Math.min(6, Math.max(0, Math.floor(relativeX / columnWidth)));\n const targetDay = days[columnIndex];\n const slotSize = halfHourSlots ? hourHeight / 2 : hourHeight;\n const totalSlots = halfHourSlots ? hours.length * 2 : hours.length;\n const slotIndex = Math.min(totalSlots - 1, Math.max(0, Math.floor(relativeY / slotSize)));\n const newHour = startHour + Math.floor(halfHourSlots ? slotIndex / 2 : slotIndex);\n const newMinute = halfHourSlots && slotIndex % 2 === 1 ? 30 : 0;\n const newDate = new Date(targetDay);\n newDate.setHours(newHour, newMinute, 0, 0);\n onEventDrop(event, newDate);\n };\n\n return (\n <div className={styles.weekTimeline}>\n <div className={styles.weekTimelineHeader}>\n <div className={styles.timeColumnHeader} />\n {days.map(day => {\n const dayIsToday = day.toDateString() === now.toDateString();\n const dayIsSelected = selectedDate && day.toDateString() === selectedDate.toDateString();\n return (\n <button\n key={day.toISOString()}\n type=\"button\"\n className={`${styles.weekDayColumnHeader} ${dayIsToday ? styles.today : ''} ${dayIsSelected ? styles.selected : ''}`}\n onClick={() => handleDateClick(day)}\n >\n <span className={styles.weekDayLabel}>\n {day.toLocaleDateString(locale, { weekday: 'short' })}\n </span>\n <span className={styles.weekDayNumber}>{day.getDate()}</span>\n </button>\n );\n })}\n </div>\n\n <div className={styles.weekTimelineScroll} ref={weekViewScrollRef}>\n <div className={styles.weekTimelineGrid} style={{ height: timelineHeight }}>\n <div className={styles.weekTimeColumn}>\n {hours.map(hour => (\n <div\n key={hour}\n className={styles.weekTimeSlot}\n style={{ height: hourHeight }}\n >\n <span className={styles.weekHourLabel}>\n {hour.toString().padStart(2, '0')}:00\n </span>\n </div>\n ))}\n </div>\n\n <div className={styles.weekDayColumns}>\n {days.map(day => {\n const dayEvents = getDayEvents(day).filter(e => !e.allDay && e.time);\n const dayIsToday = day.toDateString() === now.toDateString();\n const dayLayout = layoutOverlappingEvents(dayEvents);\n return (\n <div key={day.toISOString()} className={styles.weekDayColumn}>\n {hours.map(hour => (\n <div\n key={hour}\n className={styles.weekHourRow}\n style={{ height: hourHeight }}\n >\n {halfHourSlots ? (\n <>\n <div\n className={styles.halfHourSlot}\n onClick={() => handleWeekSlotClick(day, hour, 0)}\n />\n <div\n className={`${styles.halfHourSlot} ${styles.halfHourSlotBottom}`}\n onClick={() => handleWeekSlotClick(day, hour, 30)}\n />\n </>\n ) : (\n <div\n className={styles.halfHourSlot}\n onClick={() => handleWeekSlotClick(day, hour, 0)}\n />\n )}\n </div>\n ))}\n\n {dayEvents.map(event => {\n const [h, m] = event.time!.split(':').map(Number);\n const top = (h - startHour) * hourHeight + (m / 60) * hourHeight;\n const duration = eventDuration(event);\n const height = Math.max(24, (duration / 60) * hourHeight - 2);\n const lane = dayLayout.get(event.id);\n const totalCols = lane?.totalCols ?? 1;\n const col = lane?.col ?? 0;\n return (\n <div\n key={event.id}\n className={styles.weekEventAnchor}\n style={{\n top,\n height,\n '--lane-col': col,\n '--lane-total': totalCols,\n } as React.CSSProperties}\n onClick={(e) => e.stopPropagation()}\n >\n <DayEventCard\n event={event}\n color={getEventColor(event)}\n textColor={getEventTextColor(event)}\n onComplete={onEventComplete ?? (onEventClick ? handleEventClick : undefined)}\n onEdit={onEventEdit}\n onDelete={onEventDelete}\n onDragEnd={onEventDrop ? (cy, cx) => handleWeekDragEnd(event, cy, cx) : undefined}\n />\n </div>\n );\n })}\n\n {dayIsToday && showNow && (\n <div\n className={styles.currentTimeIndicator}\n style={{ top: `${nowOffset}px`, left: 0 }}\n />\n )}\n </div>\n );\n })}\n </div>\n </div>\n </div>\n </div>\n );\n })()\n ) : (\n (() => {\n // Fixed month-view cell height derived from maxEventsPerDay.\n // Day number + padding ≈ 40px, each event row ≈ 24px.\n // Week and compact views keep their own CSS-driven sizing.\n const monthCellHeight = !compact ? 40 + maxEventsPerDay * 24 : undefined;\n return (\n <div className={`${styles.daysGrid} ${showWeekNumbers ? styles.withWeekNumbers : ''}`}>\n {calendarData.days.map((day, index) => {\n const dayEvents = getDayEvents(day);\n const dayIsToday = isToday(day);\n const isInCurrentMonth = isCurrentMonth(day);\n const isWeekStart = showWeekNumbers && (index % 7 === 0);\n const dayIsSelected = selectedDate && day.toDateString() === selectedDate.toDateString();\n\n return (\n <Fragment key={`${day.getFullYear()}-${day.getMonth()}-${day.getDate()}`}>\n {isWeekStart && (\n <div\n className={styles.weekNumberCell}\n style={monthCellHeight !== undefined ? { height: monthCellHeight, minHeight: monthCellHeight } : undefined}\n >\n {getWeekNumber(day)}\n </div>\n )}\n <motion.div\n className={`${styles.dayCell} ${dayIsToday ? styles.today : ''} ${!isInCurrentMonth ? styles.otherMonth : ''} ${dayIsSelected ? styles.selected : ''}`}\n style={monthCellHeight !== undefined ? { height: monthCellHeight, minHeight: monthCellHeight } : undefined}\n initial={{ opacity: 0, y: 20 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{\n duration: 0.3,\n delay: index * 0.02,\n ease: \"easeOut\"\n }}\n onClick={() => handleDateClick(day)}\n >\n <div className={styles.dayNumber}>\n {day.getDate()}\n </div>\n {dayEvents.length > 0 && compact && currentViewMode === 'month' ? (\n <div className={styles.dots}>\n {dayEvents.slice(0, maxEventsPerDay).map((event) => (\n <span\n key={event.id}\n className={styles.dot}\n style={{\n backgroundColor:\n event.status === 'completed'\n ? '#10b981'\n : getEventColor(event),\n }}\n />\n ))}\n {dayEvents.length > maxEventsPerDay && (\n <span className={styles.dotMore}>\n +{dayEvents.length - maxEventsPerDay}\n </span>\n )}\n </div>\n ) : dayEvents.length > 0 ? (\n <div className={styles.events}>\n {dayEvents.slice(0, maxEventsPerDay).map((event, eventIndex) => (\n <motion.div\n key={event.id}\n className={`${styles.event} ${event.status === 'completed' ? styles.completed : ''}`}\n style={{\n backgroundColor: getEventColor(event),\n color: getEventTextColor(event),\n opacity: event.status === 'completed' ? 0.7 : 1\n }}\n onClick={(e) => {\n e.stopPropagation();\n handleEventClick(event);\n }}\n initial={{ opacity: 0, x: -10 }}\n animate={{ opacity: 1, x: 0 }}\n transition={{\n duration: 0.2,\n delay: eventIndex * 0.05,\n ease: \"easeOut\"\n }}\n whileHover={{\n scale: 1.02,\n y: -1,\n transition: { duration: 0.1 }\n }}\n whileTap={{\n scale: 0.98,\n transition: { duration: 0.1 }\n }}\n >\n {iconRenderer && iconRenderer(event)}\n <span className={styles.eventTitle}>\n {event.time && (\n <span className={styles.eventTime}>\n {event.time}\n </span>\n )}\n {event.title}\n </span>\n {event.status === 'completed' && (\n <svg className={styles.completedIcon} width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n <polyline points=\"20,6 9,17 4,12\" />\n </svg>\n )}\n </motion.div>\n ))}\n {dayEvents.length > maxEventsPerDay && (\n <div className={styles.moreEvents}>\n +{dayEvents.length - maxEventsPerDay} more\n </div>\n )}\n </div>\n ) : emptyState ? (\n <div className={styles.emptyState}>\n {emptyState}\n </div>\n ) : null}\n </motion.div>\n </Fragment>\n );\n })}\n </div>\n );\n })()\n )}\n </div>\n );\n}","import React, { useState, useEffect, useMemo, useRef } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { Menu, X } from 'lucide-react';\nimport desktopStyles from './styles/Navbar.module.css';\nimport mobileStyles from './styles/Navbar.mobile.module.css';\nimport { useComponentSound, ComponentSoundConfig } from '../../../utils/useSound';\n\nexport interface NavItem {\n id: string;\n label: React.ReactNode;\n icon?: React.ComponentType<{ className?: string }>;\n href?: string;\n onClick?: () => void;\n isActive?: boolean;\n badge?: string | number;\n children?: NavItem[];\n}\n\nexport interface NavbarProps {\n items: NavItem[];\n logo?: {\n src?: string;\n alt?: string;\n text?: React.ReactNode;\n subtitle?: React.ReactNode;\n };\n onItemClick?: (item: NavItem) => void;\n variant?: 'sidebar' | 'top' | 'minimal';\n isMobile?: boolean;\n footer?: React.ReactNode;\n className?: string;\n soundConfig?: ComponentSoundConfig;\n colorfulIcons?: boolean;\n}\n\nexport const Navbar: React.FC<NavbarProps> = ({\n items,\n logo,\n onItemClick,\n variant = 'sidebar',\n isMobile = false,\n footer,\n className = '',\n soundConfig,\n colorfulIcons = false,\n}) => {\n const coloredIconsAttr = colorfulIcons ? 'true' : undefined;\n const styles = useMemo(() => (isMobile ? mobileStyles : desktopStyles), [isMobile]);\n const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);\n const [expandedItems, setExpandedItems] = useState<Set<string>>(new Set());\n const { handlers, playSound } = useComponentSound(soundConfig);\n\n // Close mobile menu when switching away from mobile\n useEffect(() => {\n if (!isMobile) {\n setIsMobileMenuOpen(false);\n }\n }, [isMobile]);\n\n // Swipe from left edge to open menu\n const touchStartRef = useRef<{ x: number; y: number } | null>(null);\n\n useEffect(() => {\n if (!isMobile) return;\n\n const handleTouchStart = (e: TouchEvent) => {\n const touch = e.touches[0];\n if (touch.clientX < 30) {\n touchStartRef.current = { x: touch.clientX, y: touch.clientY };\n }\n };\n\n const handleTouchEnd = (e: TouchEvent) => {\n if (!touchStartRef.current) return;\n const touch = e.changedTouches[0];\n const dx = touch.clientX - touchStartRef.current.x;\n const dy = Math.abs(touch.clientY - touchStartRef.current.y);\n touchStartRef.current = null;\n\n if (dx > 60 && dy < dx) {\n setIsMobileMenuOpen(true);\n playSound('toggle');\n }\n };\n\n document.addEventListener('touchstart', handleTouchStart, { passive: true });\n document.addEventListener('touchend', handleTouchEnd, { passive: true });\n\n return () => {\n document.removeEventListener('touchstart', handleTouchStart);\n document.removeEventListener('touchend', handleTouchEnd);\n };\n }, [isMobile, playSound]);\n\n // Lock body scroll when overlay is open (position: fixed is more reliable on mobile)\n useEffect(() => {\n if (isMobileMenuOpen) {\n const scrollY = window.scrollY;\n document.body.style.position = 'fixed';\n document.body.style.top = `-${scrollY}px`;\n document.body.style.left = '0';\n document.body.style.right = '0';\n document.body.style.overflow = 'hidden';\n } else {\n const scrollY = document.body.style.top;\n document.body.style.position = '';\n document.body.style.top = '';\n document.body.style.left = '';\n document.body.style.right = '';\n document.body.style.overflow = '';\n if (scrollY) {\n window.scrollTo(0, parseInt(scrollY, 10) * -1);\n }\n }\n return () => {\n document.body.style.position = '';\n document.body.style.top = '';\n document.body.style.left = '';\n document.body.style.right = '';\n document.body.style.overflow = '';\n };\n }, [isMobileMenuOpen]);\n\n const toggleMobileMenu = () => {\n playSound('toggle');\n setIsMobileMenuOpen(!isMobileMenuOpen);\n };\n\n const toggleExpanded = (itemId: string) => {\n setExpandedItems((prev) => {\n const newSet = new Set(prev);\n if (newSet.has(itemId)) {\n newSet.delete(itemId);\n } else {\n newSet.add(itemId);\n }\n return newSet;\n });\n };\n\n const handleItemClick = (item: NavItem) => {\n handlers.onClick?.();\n if (item.children && item.children.length > 0) {\n toggleExpanded(item.id);\n } else {\n if (item.onClick) {\n item.onClick();\n }\n if (onItemClick) {\n onItemClick(item);\n }\n if (isMobile || isMobileMenuOpen) {\n setIsMobileMenuOpen(false);\n }\n }\n };\n\n const renderNavItem = (item: NavItem, index: number, depth: number = 0) => {\n const Icon = item.icon;\n const isExpanded = expandedItems.has(item.id);\n const hasChildren = item.children && item.children.length > 0;\n\n return (\n <motion.li\n key={item.id}\n className={`${styles.navItem} ${depth > 0 ? styles.subNavItem : ''}`}\n initial={{ opacity: 0, x: -20 }}\n animate={{ opacity: 1, x: 0 }}\n transition={{ delay: index * 0.05 }}\n >\n <motion.button\n className={`${styles.navLink} ${item.isActive ? styles.active : ''}`}\n onClick={() => handleItemClick(item)}\n onMouseEnter={handlers.onMouseEnter}\n whileHover={{ x: 5 }}\n whileTap={{ scale: 0.98 }}\n >\n {item.isActive && (\n <motion.div\n className={styles.activeBackground}\n layoutId=\"activeNavBackground\"\n initial={false}\n transition={{\n type: 'spring',\n stiffness: 500,\n damping: 35,\n }}\n />\n )}\n\n {Icon && (\n <Icon\n className={`${styles.navIcon} ${item.isActive ? styles.activeIcon : ''}`}\n />\n )}\n\n <span className={`${styles.navText} ${item.isActive ? styles.activeText : ''}`}>\n {item.label}\n </span>\n\n {item.badge && <span className={styles.navBadge}>{item.badge}</span>}\n\n {hasChildren && (\n <motion.span\n className={styles.chevron}\n animate={{ rotate: isExpanded ? 180 : 0 }}\n transition={{ duration: 0.2 }}\n >\n ▼\n </motion.span>\n )}\n </motion.button>\n\n {hasChildren && (\n <AnimatePresence>\n {isExpanded && (\n <motion.ul\n className={styles.subNavList}\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n transition={{ duration: 0.2 }}\n >\n {item.children!.map((child, childIndex) =>\n renderNavItem(child, childIndex, depth + 1)\n )}\n </motion.ul>\n )}\n </AnimatePresence>\n )}\n </motion.li>\n );\n };\n\n const navContent = (\n <>\n {logo && (\n <motion.div\n className={styles.navLogo}\n initial={{ opacity: 0, y: -20 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: 0.1 }}\n >\n <div className={styles.logoContainer}>\n {logo.src ? (\n <motion.img\n src={logo.src}\n alt={logo.alt || 'Logo'}\n className={styles.logoImage}\n onMouseEnter={handlers.onMouseEnter}\n whileHover={{ scale: 1.05 }}\n transition={{ type: 'spring', stiffness: 400 }}\n />\n ) : (\n <div className={styles.logoPlaceholder}>\n {typeof logo.text === 'string'\n ? logo.text.charAt(0) || 'L'\n : 'L'}\n </div>\n )}\n\n {(logo.text || logo.subtitle) && (\n <div className={styles.logoContent}>\n {logo.text && <span className={styles.logoText}>{logo.text}</span>}\n {logo.subtitle && (\n <span className={styles.logoSubtitle}>{logo.subtitle}</span>\n )}\n </div>\n )}\n </div>\n </motion.div>\n )}\n\n <ul className={styles.navList}>\n {items.map((item, index) => renderNavItem(item, index))}\n </ul>\n\n {footer && (\n <motion.div\n className={styles.navFooter}\n initial={{ opacity: 0, y: 20 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: 0.3 }}\n >\n {footer}\n </motion.div>\n )}\n </>\n );\n\n if (variant === 'top') {\n return (\n <motion.nav\n className={`${styles.navbar} ${styles.navbarTop} ${className}`}\n data-colored-icons={coloredIconsAttr}\n initial={{ y: -100 }}\n animate={{ y: 0 }}\n transition={{ type: 'spring', stiffness: 300, damping: 30 }}\n >\n {navContent}\n </motion.nav>\n );\n }\n\n if (isMobile) {\n return (\n <>\n {/* Mobile top bar */}\n <nav className={`${styles.navbar} ${className}`} data-colored-icons={coloredIconsAttr}>\n {logo && (\n <div className={styles.navLogo}>\n <div className={styles.logoContainer}>\n {logo.src ? (\n <img\n src={logo.src}\n alt={logo.alt || 'Logo'}\n className={styles.logoImage}\n />\n ) : (\n <div className={styles.logoPlaceholder}>\n {typeof logo.text === 'string'\n ? logo.text.charAt(0) || 'L'\n : 'L'}\n </div>\n )}\n {logo.text && (\n <div className={styles.logoContent}>\n <span className={styles.logoText}>{logo.text}</span>\n </div>\n )}\n </div>\n </div>\n )}\n\n <div className={styles.navActions}>\n {footer && <div className={styles.navFooter}>{footer}</div>}\n\n <button\n className={`${styles.mobileMenuButton} ${isMobileMenuOpen ? styles.menuOpen : ''}`}\n onClick={toggleMobileMenu}\n aria-label=\"Toggle navigation menu\"\n >\n {isMobileMenuOpen ? <X /> : <Menu />}\n </button>\n </div>\n </nav>\n\n {/* Full-screen overlay */}\n <AnimatePresence>\n {isMobileMenuOpen && (\n <motion.div\n className={styles.mobileBackdrop}\n data-colored-icons={coloredIconsAttr}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.2 }}\n onClick={() => setIsMobileMenuOpen(false)}\n >\n <motion.div\n initial={{ y: -20, opacity: 0 }}\n animate={{ y: 0, opacity: 1 }}\n exit={{ y: -20, opacity: 0 }}\n transition={{ duration: 0.2 }}\n onClick={(e) => e.stopPropagation()}\n >\n <ul className={styles.navList}>\n {items.map((item, index) => renderNavItem(item, index))}\n </ul>\n </motion.div>\n </motion.div>\n )}\n </AnimatePresence>\n </>\n );\n }\n\n return (\n <>\n {/* Desktop Navbar */}\n <motion.nav\n className={`${styles.navbar} ${styles[`navbar${variant.charAt(0).toUpperCase() + variant.slice(1)}`]} ${className}`}\n data-colored-icons={coloredIconsAttr}\n initial={variant === 'sidebar' ? { x: -300 } : { opacity: 0 }}\n animate={variant === 'sidebar' ? { x: 0 } : { opacity: 1 }}\n transition={{ type: 'spring', stiffness: 300, damping: 30 }}\n >\n {navContent}\n </motion.nav>\n </>\n );\n};\n","import React, { useState, useEffect, useMemo, useRef } 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('%m-%d')\n case 'weekly':\n return (d: Date) => {\n const weekNum = getISOWeek(d)\n return `W${weekNum.toString().padStart(2, '0')}`\n }\n case 'monthly':\n return d3.timeFormat('%b')\n case 'quarterly':\n return (d: Date) => {\n const quarter = Math.floor(d.getMonth() / 3) + 1\n return `Q${quarter}`\n }\n default:\n return d3.timeFormat('%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 viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"xMidYMid meet\"\n className={styles.chart}\n />\n \n {tooltipData && (\n <div\n ref={tooltipRef}\n className={`${styles.tooltip} ${tooltipData ? styles.visible : ''}`}\n style={{\n left: `${tooltipData.x}px`,\n top: `${tooltipData.y - 80}px`\n }}\n >\n <div className={styles.tooltipHeader}>\n <span className={styles.tooltipEmoji}>\n {customHabitEmojis[tooltipData.habit] || '📊'}\n </span>\n <span \n className={styles.tooltipDot}\n style={{ backgroundColor: getColor(tooltipData.habit) }}\n />\n <span>{tooltipData.habit}</span>\n </div>\n <div className={styles.tooltipInfo}>\n <div className={styles.tooltipDate}>\n {formatTooltipDate(tooltipData.date, viewType)}\n </div>\n <div className={styles.tooltipValue}>\n <strong>{Math.round(tooltipData.value * 10) / 10}</strong>\n <span style={{ fontSize: '12px', fontWeight: 'normal', opacity: 0.6 }}>units</span>\n </div>\n </div>\n </div>\n )}\n </div>\n )\n}","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\tname: string;\n\tsize?: number;\n\tchildren?: SunBurstRecord[];\n}\n\ninterface SunburstChartProps {\n\tdata: SunBurstRecord;\n\twidth?: number;\n\theight?: number;\n\ttitle?: string;\n\ttagColors?: Record<string, string>;\n\tunit?: string;\n\tcenterLabel?: string;\n}\n\nconst COLOR_PALETTE = [\n\t'#6366f1',\n\t'#8b5cf6',\n\t'#06b6d4',\n\t'#10b981',\n\t'#f59e0b',\n\t'#ef4444',\n\t'#ec4899',\n\t'#84cc16',\n\t'#f97316',\n\t'#3b82f6',\n\t'#14b8a6',\n\t'#f59e0b',\n];\n\nexport const SunburstChart: React.FC<SunburstChartProps> = ({\n\tdata,\n\twidth = 500,\n\theight = 500,\n\ttitle = 'Sunburst Chart',\n\ttagColors = {},\n\tunit = 'items',\n\tcenterLabel,\n}) => {\n\tconst svgRef = useRef<SVGSVGElement>(null);\n\tconst colorMap = useRef(new Map<string, string>()).current;\n\tconst colorIndex = useRef(0);\n\tconst focusedNodeRef = useRef<d3.HierarchyRectangularNode<SunBurstRecord> | null>(null);\n\n\tconst radius = Math.min(width, height) / 2;\n\n\tconst getColor = useCallback(\n\t\t(name: string, depth: number): string => {\n\t\t\t// First check if we have a tag color for this name\n\t\t\tif (tagColors[name]) {\n\t\t\t\tconst color = d3.color(tagColors[name]);\n\t\t\t\tif (color) {\n\t\t\t\t\t// Darken for deeper levels\n\t\t\t\t\treturn depth > 1\n\t\t\t\t\t\t? color.darker((depth - 1) * 0.3).toString()\n\t\t\t\t\t\t: color.toString();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fallback to color palette\n\t\t\tif (!colorMap.has(name)) {\n\t\t\t\tcolorMap.set(name, COLOR_PALETTE[colorIndex.current % COLOR_PALETTE.length]);\n\t\t\t\tcolorIndex.current++;\n\t\t\t}\n\t\t\tconst baseColor = colorMap.get(name) || '#d4af37';\n\n\t\t\tconst color = d3.color(baseColor);\n\t\t\tif (color) {\n\t\t\t\treturn color.darker(depth * 0.3).toString();\n\t\t\t}\n\t\t\treturn baseColor;\n\t\t},\n\t\t[tagColors, colorMap]\n\t);\n\n\tuseEffect(() => {\n\t\tif (!svgRef.current || !data) return;\n\n\t\tconst svg = d3.select(svgRef.current);\n\t\tsvg.selectAll('*').remove();\n\n\t\tconst g = svg.append('g').attr('transform', `translate(${width / 2},${height / 2})`);\n\n\t\tconst root = d3\n\t\t\t.hierarchy(data)\n\t\t\t.sum((d) => d.size ?? 0)\n\t\t\t.sort((a, b) => (b.value ?? 0) - (a.value ?? 0));\n\n\t\tconst partition = d3.partition<SunBurstRecord>().size([2 * Math.PI, radius * radius]);\n\n\t\tconst nodes = partition(root).descendants();\n\n\t\t// Store original positions for reset\n\t\tinterface ExtendedNode extends d3.HierarchyRectangularNode<SunBurstRecord> {\n\t\t\tx0Original: number;\n\t\t\tx1Original: number;\n\t\t\ty0Original: number;\n\t\t\ty1Original: number;\n\t\t}\n\n\t\tnodes.forEach((d) => {\n\t\t\tconst node = d as ExtendedNode;\n\t\t\tnode.x0Original = d.x0;\n\t\t\tnode.x1Original = d.x1;\n\t\t\tnode.y0Original = d.y0;\n\t\t\tnode.y1Original = d.y1;\n\t\t});\n\n\t\tconst arc = d3\n\t\t\t.arc<d3.HierarchyRectangularNode<SunBurstRecord>>()\n\t\t\t.startAngle((d) => d.x0)\n\t\t\t.endAngle((d) => d.x1)\n\t\t\t.innerRadius((d) => Math.sqrt(d.y0))\n\t\t\t.outerRadius((d) => Math.sqrt(d.y1))\n\t\t\t.cornerRadius(3);\n\n\t\tconst tooltip = d3\n\t\t\t.select('body')\n\t\t\t.append('div')\n\t\t\t.attr('class', styles.tooltip)\n\t\t\t.style('opacity', 0)\n\t\t\t.style('position', 'absolute');\n\n\t\t// Function to reset to original view\n\t\tconst resetView = () => {\n\t\t\tfocusedNodeRef.current = null;\n\n\t\t\tconst transition = d3.transition().duration(750).ease(d3.easeCubicInOut);\n\n\t\t\t// First show all elements\n\t\t\tpaths.style('opacity', 1);\n\n\t\t\tpaths\n\t\t\t\t.transition(\n\t\t\t\t\ttransition as d3.Transition<\n\t\t\t\t\t\tany,\n\t\t\t\t\t\td3.HierarchyRectangularNode<SunBurstRecord>,\n\t\t\t\t\t\tany,\n\t\t\t\t\t\tany\n\t\t\t\t\t>\n\t\t\t\t)\n\t\t\t\t.attrTween('d', (d) => {\n\t\t\t\t\tconst node = d as ExtendedNode;\n\n\t\t\t\t\treturn (t: number) => {\n\t\t\t\t\t\t// Calculate interpolated positions\n\t\t\t\t\t\tconst currX0 = d3.interpolate(node.x0, node.x0Original)(t);\n\t\t\t\t\t\tconst currX1 = d3.interpolate(node.x1, node.x1Original)(t);\n\t\t\t\t\t\tconst currY0 = d3.interpolate(node.y0, node.y0Original)(t);\n\t\t\t\t\t\tconst currY1 = d3.interpolate(node.y1, node.y1Original)(t);\n\n\t\t\t\t\t\t// Update node positions continuously\n\t\t\t\t\t\tnode.x0 = currX0;\n\t\t\t\t\t\tnode.x1 = currX1;\n\t\t\t\t\t\tnode.y0 = currY0;\n\t\t\t\t\t\tnode.y1 = currY1;\n\n\t\t\t\t\t\tconst interpolatedArc = d3\n\t\t\t\t\t\t\t.arc<any>()\n\t\t\t\t\t\t\t.startAngle(() => currX0)\n\t\t\t\t\t\t\t.endAngle(() => currX1)\n\t\t\t\t\t\t\t.innerRadius(() => Math.min(radius, Math.sqrt(Math.max(0, currY0))))\n\t\t\t\t\t\t\t.outerRadius(() => Math.min(radius, Math.sqrt(Math.max(0, currY1))))\n\t\t\t\t\t\t\t.cornerRadius(3);\n\n\t\t\t\t\t\treturn interpolatedArc(node) || '';\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t// Restore cursor style based on whether nodes have children\n\t\t\tpaths.style('cursor', (d) =>\n\t\t\t\t!d.children || d.children.length === 0 ? 'default' : 'pointer'\n\t\t\t);\n\n\t\t\t// Reset center button cursor\n\t\t\tcenterResetButton.style('cursor', 'default');\n\n\t\t\t// Update labels\n\t\t\tupdateLabels(transition, nodes, true);\n\t\t};\n\n\t\t// Function to handle click and expand\n\t\tconst handleClick = (\n\t\t\tevent: MouseEvent,\n\t\t\tclickedNode: d3.HierarchyRectangularNode<SunBurstRecord>\n\t\t) => {\n\t\t\tevent.stopPropagation();\n\n\t\t\t// If already focused on a node, don't allow clicking on other segments\n\t\t\t// Only allow reset through the center button\n\t\t\tif (focusedNodeRef.current) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Don't allow clicking on leaf nodes (nodes without children)\n\t\t\tif (!clickedNode.children || clickedNode.children.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfocusedNodeRef.current = clickedNode;\n\n\t\t\tconst transition = d3.transition().duration(750).ease(d3.easeCubicInOut);\n\n\t\t\t// Zoom to clicked node - scale to fill the entire circle\n\t\t\tconst clickedOriginal = clickedNode as ExtendedNode;\n\n\t\t\t// Ensure we use the original x values for proper scaling\n\t\t\t// The x-scale maps the clicked node's angular extent to the full circle\n\t\t\tconst xScale = d3\n\t\t\t\t.scaleLinear()\n\t\t\t\t.domain([clickedOriginal.x0Original, clickedOriginal.x1Original])\n\t\t\t\t.range([0, 2 * Math.PI])\n\t\t\t\t.clamp(true); // Ensure values stay within bounds\n\n\t\t\t// For the radial scale, always use the full radius available\n\t\t\t// Find the deepest descendant to ensure all children fit\n\t\t\tconst descendants = nodes.filter((d) => isParentOf(clickedNode, d));\n\t\t\tconst maxChildRadius = Math.max(\n\t\t\t\t...descendants.map((d) => (d as ExtendedNode).y1Original)\n\t\t\t);\n\n\t\t\t// Always scale to use the full radius, regardless of original size\n\t\t\tconst yScale = d3\n\t\t\t\t.scaleLinear()\n\t\t\t\t.domain([clickedOriginal.y0Original, maxChildRadius])\n\t\t\t\t.range([0, radius * radius])\n\t\t\t\t.clamp(true); // Ensure values stay within bounds\n\n\t\t\t// First, immediately hide elements that shouldn't be visible\n\t\t\tpaths.style('opacity', (d) => (isParentOf(clickedNode, d) ? 1 : 0));\n\n\t\t\tpaths\n\t\t\t\t.transition(\n\t\t\t\t\ttransition as d3.Transition<\n\t\t\t\t\t\tany,\n\t\t\t\t\t\td3.HierarchyRectangularNode<SunBurstRecord>,\n\t\t\t\t\t\tany,\n\t\t\t\t\t\tany\n\t\t\t\t\t>\n\t\t\t\t)\n\t\t\t\t.attrTween('d', (d) => {\n\t\t\t\t\tconst node = d as ExtendedNode;\n\t\t\t\t\t// Only transform nodes that are descendants of the clicked node\n\t\t\t\t\tif (!isParentOf(clickedNode, d)) {\n\t\t\t\t\t\t// Keep them hidden\n\t\t\t\t\t\treturn () => '';\n\t\t\t\t\t}\n\n\t\t\t\t\t// Calculate new positions based on the original positions\n\t\t\t\t\t// ALWAYS scale to fill the full circle, no minimum size preservation\n\t\t\t\t\tlet newX0 = xScale(node.x0Original);\n\t\t\t\t\tlet newX1 = xScale(node.x1Original);\n\n\t\t\t\t\t// Ensure proper scaling even for very small segments\n\t\t\t\t\t// The clicked node's extent should always map to full circle\n\t\t\t\t\tif (newX1 <= newX0) {\n\t\t\t\t\t\t// Force proper angular extent based on proportion\n\t\t\t\t\t\tconst proportion =\n\t\t\t\t\t\t\t(node.x1Original - node.x0Original) /\n\t\t\t\t\t\t\t(clickedOriginal.x1Original - clickedOriginal.x0Original);\n\t\t\t\t\t\tnewX1 = newX0 + 2 * Math.PI * proportion;\n\t\t\t\t\t}\n\n\t\t\t\t\t// For radial positions, scale appropriately\n\t\t\t\t\tlet newY0, newY1;\n\t\t\t\t\tif (node === clickedNode) {\n\t\t\t\t\t\t// The clicked node itself should fill from center\n\t\t\t\t\t\tnewY0 = 0;\n\t\t\t\t\t\t// If it has children, leave room for them; otherwise fill to edge\n\t\t\t\t\t\tif (node.children && node.children.length > 0) {\n\t\t\t\t\t\t\tconst childrenY0 = Math.min(\n\t\t\t\t\t\t\t\t...node.children.map((c) => (c as ExtendedNode).y0Original)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tnewY1 = yScale(childrenY0) * 0.98; // Very slight gap for visual separation\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnewY1 = radius * radius * 0.98; // Fill almost to edge\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Child nodes should be scaled to fill the remaining space proportionally\n\t\t\t\t\t\t// NO minimum size enforcement - pure proportional scaling\n\t\t\t\t\t\tnewY0 = yScale(node.y0Original);\n\t\t\t\t\t\tnewY1 = yScale(node.y1Original);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Use current positions as start (they should be at original if not previously zoomed)\n\t\t\t\t\tconst startX0 = node.x0;\n\t\t\t\t\tconst startX1 = node.x1;\n\t\t\t\t\tconst startY0 = node.y0;\n\t\t\t\t\tconst startY1 = node.y1;\n\n\t\t\t\t\treturn (t: number) => {\n\t\t\t\t\t\t// Calculate interpolated positions\n\t\t\t\t\t\tconst currX0 = d3.interpolate(startX0, newX0)(t);\n\t\t\t\t\t\tconst currX1 = d3.interpolate(startX1, newX1)(t);\n\t\t\t\t\t\tconst currY0 = d3.interpolate(startY0, newY0)(t);\n\t\t\t\t\t\tconst currY1 = d3.interpolate(startY1, newY1)(t);\n\n\t\t\t\t\t\t// Update node positions continuously\n\t\t\t\t\t\tnode.x0 = currX0;\n\t\t\t\t\t\tnode.x1 = currX1;\n\t\t\t\t\t\tnode.y0 = currY0;\n\t\t\t\t\t\tnode.y1 = currY1;\n\n\t\t\t\t\t\tconst interpolatedArc = d3\n\t\t\t\t\t\t\t.arc<any>()\n\t\t\t\t\t\t\t.startAngle(() => currX0)\n\t\t\t\t\t\t\t.endAngle(() => currX1)\n\t\t\t\t\t\t\t.innerRadius(() => Math.min(radius, Math.sqrt(Math.max(0, currY0))))\n\t\t\t\t\t\t\t.outerRadius(() => Math.min(radius, Math.sqrt(Math.max(0, currY1))))\n\t\t\t\t\t\t\t.cornerRadius(3);\n\n\t\t\t\t\t\treturn interpolatedArc(node) || '';\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t// Update labels for zoomed view\n\t\t\tupdateLabels(\n\t\t\t\ttransition,\n\t\t\t\tnodes.filter((d) => isParentOf(clickedNode, d)),\n\t\t\t\tfalse\n\t\t\t);\n\n\t\t\t// Update cursor style to indicate segments are not clickable\n\t\t\tpaths.style('cursor', 'default');\n\n\t\t\t// Update center button to be clickable\n\t\t\tcenterResetButton.style('cursor', 'pointer');\n\t\t};\n\n\t\t// Helper function to check if a node is parent of another\n\t\tconst isParentOf = (\n\t\t\tparent: d3.HierarchyNode<SunBurstRecord>,\n\t\t\tdescendant: d3.HierarchyNode<SunBurstRecord>\n\t\t): boolean => {\n\t\t\tif (parent === descendant) return true;\n\t\t\tlet current = descendant.parent;\n\t\t\twhile (current) {\n\t\t\t\tif (current === parent) return true;\n\t\t\t\tcurrent = current.parent;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tconst paths = g\n\t\t\t.selectAll('path')\n\t\t\t.data(nodes.filter((d) => d.depth > 0 && d.value && d.value > 0))\n\t\t\t.enter()\n\t\t\t.append('path')\n\t\t\t.attr('d', arc as any)\n\t\t\t.attr('fill', (d) => {\n\t\t\t\tlet ancestor = d;\n\t\t\t\twhile (ancestor.depth > 1 && ancestor.parent) {\n\t\t\t\t\tancestor = ancestor.parent;\n\t\t\t\t}\n\t\t\t\treturn getColor(ancestor.data.name, d.depth);\n\t\t\t})\n\t\t\t.attr('stroke', () => {\n\t\t\t\t// Get computed border color from theme\n\t\t\t\tconst computedStyle = window.getComputedStyle(svgRef.current!);\n\t\t\t\treturn computedStyle.getPropertyValue('--color-border') || '#e2e8f0';\n\t\t\t})\n\t\t\t.attr('stroke-width', 2)\n\t\t\t.style('cursor', (d) =>\n\t\t\t\t!d.children || d.children.length === 0 ? 'default' : 'pointer'\n\t\t\t)\n\t\t\t.on('click', handleClick)\n\t\t\t.on('mouseover', function (event, d) {\n\t\t\t\t// Don't show hover effect if already focused\n\t\t\t\tif (focusedNodeRef.current) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst hoveredElement = this;\n\n\t\t\t\t// Show tooltip for all nodes\n\t\t\t\ttooltip.transition().duration(200).style('opacity', 1);\n\n\t\t\t\tconst value = d.value || 0;\n\t\t\t\tconst percentage = ((value / (root.value || 1)) * 100).toFixed(1);\n\n\t\t\t\ttooltip\n\t\t\t\t\t.html(\n\t\t\t\t\t\t`\n <div><strong>${d.data.name}</strong></div>\n <div>Value: ${value}</div>\n <div>${percentage}% of total</div>\n `\n\t\t\t\t\t)\n\t\t\t\t\t.style('left', (event as MouseEvent).pageX + 10 + 'px')\n\t\t\t\t\t.style('top', (event as MouseEvent).pageY - 28 + 'px');\n\n\t\t\t\t// Apply blur to all other segments\n\t\t\t\tpaths.each(function () {\n\t\t\t\t\tif (this !== hoveredElement) {\n\t\t\t\t\t\td3.select(this)\n\t\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t\t.duration(200)\n\t\t\t\t\t\t\t.style('opacity', 0.3)\n\t\t\t\t\t\t\t.style('filter', 'blur(1px)');\n\t\t\t\t\t} else {\n\t\t\t\t\t\td3.select(this)\n\t\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t\t.duration(200)\n\t\t\t\t\t\t\t.style('opacity', 1)\n\t\t\t\t\t\t\t.style('filter', 'none');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mouseout', function () {\n\t\t\t\t// Hide tooltip\n\t\t\t\ttooltip.transition().duration(500).style('opacity', 0);\n\n\t\t\t\t// Reset all segments\n\t\t\t\tpaths.transition().duration(200).style('opacity', 1).style('filter', 'none');\n\t\t\t})\n\t\t\t.on('mousemove', function (event) {\n\t\t\t\t// Update tooltip position on mouse move\n\t\t\t\ttooltip\n\t\t\t\t\t.style('left', (event as MouseEvent).pageX + 10 + 'px')\n\t\t\t\t\t.style('top', (event as MouseEvent).pageY - 28 + 'px');\n\t\t\t});\n\n\t\tconst shouldDisplayLabel = (d: d3.HierarchyRectangularNode<SunBurstRecord>) => {\n\t\t\tconst angle = d.x1 - d.x0;\n\t\t\t// When zoomed in, be more lenient with label display since segments are larger\n\t\t\tconst minAngle = focusedNodeRef.current ? 0.05 : 0.15;\n\t\t\treturn angle > minAngle && d.depth <= 2;\n\t\t};\n\n\t\t// Function to update labels after transitions\n\t\tconst updateLabels = (\n\t\t\ttransition: d3.Transition<d3.BaseType, unknown, d3.BaseType, unknown>,\n\t\t\tvisibleNodes: d3.HierarchyRectangularNode<SunBurstRecord>[],\n\t\t\t_isReset: boolean\n\t\t) => {\n\t\t\t// Remove old labels\n\t\t\tg.selectAll('text.segment-label').remove();\n\t\t\tg.selectAll('text.center-label').remove();\n\n\t\t\t// Wait for transition to complete before adding new labels\n\t\t\ttransition.on('end', () => {\n\t\t\t\t// Filter out the focused node itself when zoomed (it's shown in center)\n\t\t\t\tconst nodesToLabel = visibleNodes.filter((d) => {\n\t\t\t\t\tif (focusedNodeRef.current && d === focusedNodeRef.current) {\n\t\t\t\t\t\treturn false; // Don't show label for the zoomed parent node\n\t\t\t\t\t}\n\t\t\t\t\treturn d.depth > 0 && d.value && d.value > 0 && shouldDisplayLabel(d);\n\t\t\t\t});\n\n\t\t\t\tg.selectAll('text.segment-label')\n\t\t\t\t\t.data(nodesToLabel)\n\t\t\t\t\t.enter()\n\t\t\t\t\t.append('text')\n\t\t\t\t\t.attr('class', 'segment-label')\n\t\t\t\t\t.attr('transform', (d) => {\n\t\t\t\t\t\tconst angle = (d.x0 + d.x1) / 2;\n\t\t\t\t\t\tconst radiusVal = (Math.sqrt(d.y0) + Math.sqrt(d.y1)) / 2;\n\t\t\t\t\t\tconst x = Math.cos(angle - Math.PI / 2) * radiusVal;\n\t\t\t\t\t\tconst y = Math.sin(angle - Math.PI / 2) * radiusVal;\n\t\t\t\t\t\treturn `translate(${x},${y})`;\n\t\t\t\t\t})\n\t\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t\t.attr('alignment-baseline', 'middle')\n\t\t\t\t\t.attr('font-size', (d) => (d.depth === 1 ? '14px' : '12px'))\n\t\t\t\t\t.attr('fill', 'var(--color-text)')\n\t\t\t\t\t.attr('font-weight', '700')\n\t\t\t\t\t.style('pointer-events', 'none')\n\t\t\t\t\t.style('text-shadow', 'none')\n\t\t\t\t\t.text((d) => {\n\t\t\t\t\t\tconst maxLength = d.depth === 1 ? 12 : 8;\n\t\t\t\t\t\treturn d.data.name.substring(0, maxLength);\n\t\t\t\t\t})\n\t\t\t\t\t.style('opacity', 0)\n\t\t\t\t\t.transition()\n\t\t\t\t\t.duration(200)\n\t\t\t\t\t.style('opacity', 1);\n\n\t\t\t\t// Update center text\n\t\t\t\tconst currentNode = focusedNodeRef.current || root;\n\t\t\t\tconst computedStyle = window.getComputedStyle(svgRef.current!);\n\t\t\t\tconst centerTextColor =\n\t\t\t\t\tcomputedStyle.getPropertyValue('--text-primary') ||\n\t\t\t\t\t(computedStyle.getPropertyValue('--bg-primary') === '#000000' ||\n\t\t\t\t\tcomputedStyle.getPropertyValue('color-scheme') === 'dark'\n\t\t\t\t\t\t? '#ffffff'\n\t\t\t\t\t\t: '#000000');\n\n\t\t\t\tg.append('text')\n\t\t\t\t\t.attr('class', 'center-label')\n\t\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t\t.attr('alignment-baseline', 'middle')\n\t\t\t\t\t.attr('font-size', '18px')\n\t\t\t\t\t.attr('font-weight', 'bold')\n\t\t\t\t\t.attr('fill', centerTextColor)\n\t\t\t\t\t.style('pointer-events', 'none')\n\t\t\t\t\t.text(\n\t\t\t\t\t\tcurrentNode === root\n\t\t\t\t\t\t\t? centerLabel || data.name || 'Total'\n\t\t\t\t\t\t\t: currentNode.data.name\n\t\t\t\t\t)\n\t\t\t\t\t.style('opacity', 0)\n\t\t\t\t\t.transition()\n\t\t\t\t\t.duration(200)\n\t\t\t\t\t.style('opacity', 1);\n\n\t\t\t\tg.append('text')\n\t\t\t\t\t.attr('class', 'center-label')\n\t\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t\t.attr('alignment-baseline', 'middle')\n\t\t\t\t\t.attr('y', 20)\n\t\t\t\t\t.attr('font-size', '14px')\n\t\t\t\t\t.attr('font-weight', '500')\n\t\t\t\t\t.attr('fill', centerTextColor)\n\t\t\t\t\t.style('pointer-events', 'none')\n\t\t\t\t\t.text(`${(currentNode.value || 0).toLocaleString()} ${unit}`)\n\t\t\t\t\t.style('opacity', 0)\n\t\t\t\t\t.transition()\n\t\t\t\t\t.duration(200)\n\t\t\t\t\t.style('opacity', 1);\n\t\t\t});\n\t\t};\n\n\t\t// Add invisible center reset button (circle in the middle)\n\t\tconst centerRadius = Math.sqrt(nodes[0].y0) || radius * 0.3;\n\n\t\tconst centerResetButton = g\n\t\t\t.append('circle')\n\t\t\t.attr('class', 'center-reset-button')\n\t\t\t.attr('r', centerRadius)\n\t\t\t.attr('fill', 'transparent')\n\t\t\t.style('cursor', 'default')\n\t\t\t.on('click', () => {\n\t\t\t\tif (focusedNodeRef.current) {\n\t\t\t\t\tresetView();\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('mouseover', function () {\n\t\t\t\tif (focusedNodeRef.current) {\n\t\t\t\t\td3.select(this)\n\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t.duration(150)\n\t\t\t\t\t\t.attr('fill', 'rgba(100, 100, 100, 0.1)')\n\t\t\t\t\t\t.attr('stroke', 'rgba(100, 100, 100, 0.3)')\n\t\t\t\t\t\t.attr('stroke-width', 2);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('mouseout', function () {\n\t\t\t\tif (focusedNodeRef.current) {\n\t\t\t\t\td3.select(this)\n\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t.duration(150)\n\t\t\t\t\t\t.attr('fill', 'transparent')\n\t\t\t\t\t\t.attr('stroke', 'none');\n\t\t\t\t}\n\t\t\t});\n\n\t\t// Calculate center text color - get computed theme color\n\t\tconst computedStyle = window.getComputedStyle(svgRef.current!);\n\t\tconst centerTextColor =\n\t\t\tcomputedStyle.getPropertyValue('--text-primary') ||\n\t\t\t(computedStyle.getPropertyValue('--bg-primary') === '#000000' ||\n\t\t\tcomputedStyle.getPropertyValue('color-scheme') === 'dark'\n\t\t\t\t? '#ffffff'\n\t\t\t\t: '#000000');\n\n\t\t// Add center text\n\t\tg.append('text')\n\t\t\t.attr('class', 'center-label')\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.attr('alignment-baseline', 'middle')\n\t\t\t.attr('font-size', '18px')\n\t\t\t.attr('font-weight', 'bold')\n\t\t\t.attr('fill', centerTextColor)\n\t\t\t.style('pointer-events', 'none')\n\t\t\t.text(centerLabel || data.name || 'Total');\n\n\t\tg.append('text')\n\t\t\t.attr('class', 'center-label')\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.attr('alignment-baseline', 'middle')\n\t\t\t.attr('y', 20)\n\t\t\t.attr('font-size', '14px')\n\t\t\t.attr('font-weight', '500')\n\t\t\t.attr('fill', centerTextColor)\n\t\t\t.style('pointer-events', 'none')\n\t\t\t.text(`${(root.value || 0).toLocaleString()} ${unit}`);\n\n\t\tg.selectAll('text.segment-label')\n\t\t\t.data(\n\t\t\t\tnodes.filter((d) => d.depth > 0 && d.value && d.value > 0 && shouldDisplayLabel(d))\n\t\t\t)\n\t\t\t.enter()\n\t\t\t.append('text')\n\t\t\t.attr('class', 'segment-label')\n\t\t\t.attr('transform', (d) => {\n\t\t\t\tconst angle = (d.x0 + d.x1) / 2;\n\t\t\t\tconst radiusVal = (Math.sqrt(d.y0) + Math.sqrt(d.y1)) / 2;\n\t\t\t\tconst x = Math.cos(angle - Math.PI / 2) * radiusVal;\n\t\t\t\tconst y = Math.sin(angle - Math.PI / 2) * radiusVal;\n\t\t\t\treturn `translate(${x},${y})`;\n\t\t\t})\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.attr('alignment-baseline', 'middle')\n\t\t\t.attr('font-size', (d) => (d.depth === 1 ? '14px' : '12px'))\n\t\t\t.attr('fill', 'var(--color-text)')\n\t\t\t.attr('font-weight', '700')\n\t\t\t.style('pointer-events', 'none')\n\t\t\t.style('text-shadow', 'none')\n\t\t\t.text((d) => {\n\t\t\t\tconst maxLength = d.depth === 1 ? 12 : 8;\n\t\t\t\treturn d.data.name.substring(0, maxLength);\n\t\t\t});\n\n\t\treturn () => {\n\t\t\ttooltip.remove();\n\t\t};\n\t}, [data, width, height, colorMap, radius, tagColors, unit, centerLabel]);\n\n\treturn (\n\t\t<div className={styles.container}>\n\t\t\t<h3 className={styles.title}>{title}</h3>\n\t\t\t<svg ref={svgRef} viewBox={`0 0 ${width} ${height}`} className={styles.chart} />\n\t\t</div>\n\t);\n};\n","import React, { useRef, useEffect } from 'react'\nimport * as d3 from 'd3'\nimport styles from './PieChart.module.css'\n\ninterface PieDataPoint {\n name: string\n value: number\n color?: string\n}\n\ninterface PieChartProps {\n data: PieDataPoint[]\n width?: number\n height?: number\n title?: string\n showLegend?: boolean\n unit?: string\n centerLabel?: string\n}\n\nconst DEFAULT_COLORS = [\n '#6366f1', '#8b5cf6', '#06b6d4', '#10b981',\n '#f59e0b', '#ef4444', '#ec4899', '#84cc16',\n '#f97316', '#3b82f6', '#8b5cf6', '#14b8a6',\n '#f59e0b', '#ef4444', '#06b6d4', '#10b981'\n]\n\n// Calculate text color based on background luminance for optimal contrast\nconst getTextColor = (backgroundColor: string): string => {\n const color = d3.color(backgroundColor);\n if (!color) return '#ffffff';\n\n const rgb = color.rgb();\n // Calculate relative luminance using WCAG formula\n const luminance = (0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b) / 255;\n\n // Return white text for dark backgrounds, black for light backgrounds\n return luminance > 0.5 ? '#000000' : '#ffffff';\n}\n\nexport const PieChart: React.FC<PieChartProps> = ({\n data,\n width = 400,\n height = 400,\n title = 'Distribution',\n showLegend = true,\n unit = 'items',\n centerLabel\n}) => {\n const svgRef = useRef<SVGSVGElement>(null)\n const radius = Math.min(width, height) / 2 - 20\n\n useEffect(() => {\n if (!svgRef.current || !data.length) return\n\n const svg = d3.select(svgRef.current)\n svg.selectAll('*').remove()\n\n const g = svg.append('g')\n .attr('transform', `translate(${width / 2},${height / 2})`)\n\n const pie = d3.pie<PieDataPoint>()\n .value(d => d.value)\n .sort(null)\n\n const arc = d3.arc<d3.PieArcDatum<PieDataPoint>>()\n .innerRadius(radius * 0.4)\n .outerRadius(radius)\n .cornerRadius(4)\n\n const labelArc = d3.arc<d3.PieArcDatum<PieDataPoint>>()\n .innerRadius(radius * 0.7)\n .outerRadius(radius * 0.7)\n\n const tooltip = d3.select('body').append('div')\n .attr('class', styles.tooltip)\n .style('opacity', 0)\n .style('position', 'absolute')\n\n const pieData = pie(data)\n const total = d3.sum(data, d => d.value)\n\n const arcs = g.selectAll('.arc')\n .data(pieData)\n .enter().append('g')\n .attr('class', 'arc')\n\n arcs.append('path')\n .attr('d', d => arc(d))\n .attr('fill', (d, i) => d.data.color || DEFAULT_COLORS[i % DEFAULT_COLORS.length])\n .attr('stroke', 'var(--bg-primary)')\n .attr('stroke-width', 3)\n .style('cursor', 'pointer')\n .style('filter', 'drop-shadow(0 2px 8px rgba(0,0,0,0.15))')\n .on('mouseover', function(event, d) {\n const hoverArc = d3.arc<d3.PieArcDatum<PieDataPoint>>()\n .innerRadius(radius * 0.4)\n .outerRadius(radius * 1.05)\n .cornerRadius(4)\n\n d3.select(this)\n .transition()\n .duration(200)\n .attr('d', (d) => hoverArc(d as d3.PieArcDatum<PieDataPoint>))\n .style('filter', 'drop-shadow(0 4px 12px rgba(0,0,0,0.25))')\n\n tooltip.transition()\n .duration(200)\n .style('opacity', 1)\n\n const percentage = ((d.data.value / total) * 100).toFixed(1)\n\n tooltip.html(`\n <div><strong>${d.data.name}</strong></div>\n <div>Value: ${d.data.value.toLocaleString()}</div>\n <div>${percentage}% of total</div>\n `)\n .style('left', (event.pageX + 10) + 'px')\n .style('top', (event.pageY - 28) + 'px')\n })\n .on('mouseout', function(_event, _d) {\n d3.select(this)\n .transition()\n .duration(200)\n .attr('d', (d) => arc(d as d3.PieArcDatum<PieDataPoint>))\n .style('filter', 'drop-shadow(0 2px 8px rgba(0,0,0,0.15))')\n\n tooltip.transition()\n .duration(500)\n .style('opacity', 0)\n })\n\n // Calculate average background color for center text contrast\n const colors = data.map((d, i) => d.color || DEFAULT_COLORS[i % DEFAULT_COLORS.length])\n const avgColor = colors.length >= 2\n ? d3.interpolateRgb.gamma(2.2)(colors[0], colors[1])(0.5)\n : colors[0] || '#ffffff';\n const centerTextColor = getTextColor(avgColor);\n\n // Add center text for donut\n g.append('text')\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .attr('font-size', '20px')\n .attr('font-weight', 'bold')\n .attr('fill', centerTextColor)\n .style('text-shadow', centerTextColor === '#ffffff' ? '0 1px 3px rgba(0,0,0,0.5)' : '0 1px 3px rgba(255,255,255,0.5)')\n .text(centerLabel || 'Total')\n\n g.append('text')\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .attr('y', 22)\n .attr('font-size', '16px')\n .attr('font-weight', '600')\n .attr('fill', centerTextColor)\n .style('text-shadow', centerTextColor === '#ffffff' ? '0 1px 2px rgba(0,0,0,0.4)' : '0 1px 2px rgba(255,255,255,0.4)')\n .text(`${total.toLocaleString()} ${unit}`)\n\n arcs.filter(d => (d.endAngle - d.startAngle) > 0.2)\n .append('text')\n .attr('transform', d => `translate(${labelArc.centroid(d)})`)\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .attr('font-size', '13px')\n .attr('fill', (d, i) => {\n const segmentColor = d.data.color || DEFAULT_COLORS[i % DEFAULT_COLORS.length];\n return getTextColor(segmentColor);\n })\n .attr('font-weight', '600')\n .style('pointer-events', 'none')\n .style('text-shadow', (d, i) => {\n const segmentColor = d.data.color || DEFAULT_COLORS[i % DEFAULT_COLORS.length];\n const textColor = getTextColor(segmentColor);\n // Use contrasting shadow color\n const shadowColor = textColor === '#ffffff' ? 'rgba(0,0,0,0.4)' : 'rgba(255,255,255,0.4)';\n return `0 1px 2px ${shadowColor}`;\n })\n .text(d => {\n const percentage = ((d.data.value / total) * 100)\n return percentage > 8 ? `${percentage.toFixed(0)}%` : ''\n })\n\n return () => {\n tooltip.remove()\n }\n }, [data, width, height, radius, centerLabel, unit])\n\n return (\n <div className={styles.container}>\n <h3 className={styles.title}>{title}</h3>\n <div className={styles.chartContainer}>\n <svg\n ref={svgRef}\n width={width}\n height={height}\n className={styles.chart}\n />\n {showLegend && (\n <div className={styles.legend}>\n {data.map((item, index) => (\n <div key={item.name} className={styles.legendItem}>\n <span\n className={styles.legendColor}\n style={{\n backgroundColor: item.color || DEFAULT_COLORS[index % DEFAULT_COLORS.length]\n }}\n />\n <span className={styles.legendLabel}>\n {item.name}\n </span>\n <span className={styles.legendValue}>\n {item.value.toLocaleString()}\n </span>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n )\n}","import React, { useState, useCallback, useEffect, useRef } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { ChevronLeft, ChevronRight, Play, Pause, Maximize, Download, Share2 } from 'lucide-react';\nimport styles from './ImageSlideshow.module.css';\n\nexport interface SlideshowImage {\n id: string;\n src: string;\n alt: string;\n caption?: string;\n title?: string;\n srcSet?: string;\n sizes?: string;\n downloadUrl?: string;\n metadata?: {\n width?: number;\n height?: number;\n photographer?: string;\n location?: string;\n camera?: string;\n [key: string]: unknown;\n };\n}\n\nexport interface ImageSlideshowProps {\n images: SlideshowImage[];\n autoPlay?: boolean;\n autoPlayInterval?: number;\n showThumbnails?: boolean;\n showControls?: boolean;\n showIndicators?: boolean;\n showCaptions?: boolean;\n loop?: boolean;\n fadeTransition?: boolean;\n enableFullscreen?: boolean;\n enableDownload?: boolean;\n enableShare?: boolean;\n enableDragReorder?: boolean;\n lazyLoading?: boolean;\n preloadAdjacent?: boolean;\n className?: string;\n onImageChange?: (index: number, image: SlideshowImage) => void;\n onDownload?: (image: SlideshowImage) => void;\n onShare?: (image: SlideshowImage) => void;\n onImageReorder?: (newOrder: SlideshowImage[]) => void;\n initialIndex?: number;\n}\n\nexport const ImageSlideshow: React.FC<ImageSlideshowProps> = ({\n images,\n autoPlay = false,\n autoPlayInterval = 3000,\n showThumbnails = true,\n showControls = true,\n showIndicators = true,\n showCaptions = true,\n loop = true,\n fadeTransition = false,\n enableFullscreen = true,\n enableDownload = false,\n enableShare = false,\n enableDragReorder = false,\n lazyLoading = true,\n preloadAdjacent = true,\n className = '',\n onImageChange,\n onDownload,\n onShare,\n onImageReorder,\n initialIndex = 0,\n}) => {\n const [currentIndex, setCurrentIndex] = useState(initialIndex);\n const [isPlaying, setIsPlaying] = useState(autoPlay);\n const [touchStart, setTouchStart] = useState<number | null>(null);\n const [touchEnd, setTouchEnd] = useState<number | null>(null);\n const [isFullscreen, setIsFullscreen] = useState(false);\n const [loadedImages, setLoadedImages] = useState<Set<string>>(new Set());\n const [imageOrder, setImageOrder] = useState(images);\n const [isDragging, setIsDragging] = useState(false);\n const [draggedIndex, setDraggedIndex] = useState<number | null>(null);\n \n const slideshowRef = useRef<HTMLDivElement>(null);\n const imageRef = useRef<HTMLImageElement>(null);\n const observerRef = useRef<IntersectionObserver | null>(null);\n\n const minSwipeDistance = 50;\n\n const goToSlide = useCallback((index: number) => {\n const newIndex = Math.max(0, Math.min(index, imageOrder.length - 1));\n setCurrentIndex(newIndex);\n if (onImageChange) {\n onImageChange(newIndex, imageOrder[newIndex]);\n }\n }, [imageOrder, onImageChange]);\n\n const goToNext = useCallback(() => {\n if (currentIndex < imageOrder.length - 1) {\n goToSlide(currentIndex + 1);\n } else if (loop) {\n goToSlide(0);\n }\n }, [currentIndex, imageOrder.length, loop, goToSlide]);\n\n const goToPrevious = useCallback(() => {\n if (currentIndex > 0) {\n goToSlide(currentIndex - 1);\n } else if (loop) {\n goToSlide(imageOrder.length - 1);\n }\n }, [currentIndex, imageOrder.length, loop, goToSlide]);\n\n const togglePlayPause = useCallback(() => {\n setIsPlaying(prev => !prev);\n }, []);\n\n\n\n\n const toggleFullscreen = () => {\n if (!document.fullscreenElement) {\n slideshowRef.current?.requestFullscreen();\n setIsFullscreen(true);\n } else {\n document.exitFullscreen();\n setIsFullscreen(false);\n }\n };\n\n const handleImageLoad = (imageId: string) => {\n setLoadedImages(prev => new Set([...prev, imageId]));\n };\n\n const handleDownload = () => {\n const currentImage = imageOrder[currentIndex];\n if (onDownload) {\n onDownload(currentImage);\n } else if (currentImage.downloadUrl || currentImage.src) {\n const link = document.createElement('a');\n link.href = currentImage.downloadUrl || currentImage.src;\n link.download = currentImage.title || currentImage.alt || 'image';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n };\n\n const handleShare = async () => {\n const currentImage = imageOrder[currentIndex];\n if (onShare) {\n onShare(currentImage);\n } else if (navigator.share) {\n try {\n await navigator.share({\n title: currentImage.title || currentImage.alt,\n text: currentImage.caption,\n url: currentImage.src\n });\n } catch (error) {\n console.log('Error sharing:', error);\n }\n } else {\n navigator.clipboard.writeText(currentImage.src);\n }\n };\n\n const handleDragStart = (e: React.DragEvent, index: number) => {\n if (!enableDragReorder) return;\n setIsDragging(true);\n setDraggedIndex(index);\n e.dataTransfer.effectAllowed = 'move';\n };\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n };\n\n const handleDrop = (e: React.DragEvent, dropIndex: number) => {\n e.preventDefault();\n if (draggedIndex === null || draggedIndex === dropIndex) return;\n \n const newOrder = [...imageOrder];\n const draggedItem = newOrder[draggedIndex];\n newOrder.splice(draggedIndex, 1);\n newOrder.splice(dropIndex, 0, draggedItem);\n \n setImageOrder(newOrder);\n setIsDragging(false);\n setDraggedIndex(null);\n \n if (onImageReorder) {\n onImageReorder(newOrder);\n }\n };\n\n const preloadImage = (src: string) => {\n const img = new Image();\n img.src = src;\n };\n\n const onTouchStart = (e: React.TouchEvent) => {\n setTouchEnd(null);\n setTouchStart(e.targetTouches[0].clientX);\n };\n\n const onTouchMove = (e: React.TouchEvent) => {\n setTouchEnd(e.targetTouches[0].clientX);\n };\n\n const onTouchEnd = () => {\n if (!touchStart || !touchEnd) return;\n const distance = touchStart - touchEnd;\n const isLeftSwipe = distance > minSwipeDistance;\n const isRightSwipe = distance < -minSwipeDistance;\n\n if (isLeftSwipe) {\n goToNext();\n } else if (isRightSwipe) {\n goToPrevious();\n }\n };\n\n useEffect(() => {\n if (!isPlaying || imageOrder.length <= 1) return;\n\n const interval = setInterval(() => {\n goToNext();\n }, autoPlayInterval);\n\n return () => clearInterval(interval);\n }, [isPlaying, autoPlayInterval, goToNext, imageOrder.length]);\n\n useEffect(() => {\n setImageOrder(images);\n }, [images]);\n\n useEffect(() => {\n if (preloadAdjacent) {\n const preloadIndices = [\n currentIndex - 1,\n currentIndex + 1,\n loop && currentIndex === 0 ? imageOrder.length - 1 : -1,\n loop && currentIndex === imageOrder.length - 1 ? 0 : -1\n ].filter(i => i >= 0 && i < imageOrder.length);\n \n preloadIndices.forEach(index => {\n if (imageOrder[index]) {\n preloadImage(imageOrder[index].src);\n }\n });\n }\n }, [currentIndex, imageOrder, images, loop, preloadAdjacent]);\n\n useEffect(() => {\n const handleFullscreenChange = () => {\n setIsFullscreen(!!document.fullscreenElement);\n };\n \n document.addEventListener('fullscreenchange', handleFullscreenChange);\n return () => document.removeEventListener('fullscreenchange', handleFullscreenChange);\n }, []);\n\n useEffect(() => {\n if (lazyLoading) {\n observerRef.current = new IntersectionObserver(\n (entries) => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n const img = entry.target as HTMLImageElement;\n const src = img.dataset.src;\n if (src) {\n img.src = src;\n img.removeAttribute('data-src');\n observerRef.current?.unobserve(img);\n }\n }\n });\n },\n { threshold: 0.1 }\n );\n }\n \n return () => {\n observerRef.current?.disconnect();\n };\n }, [lazyLoading]);\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowLeft':\n goToPrevious();\n break;\n case 'ArrowRight':\n goToNext();\n break;\n case ' ':\n e.preventDefault();\n togglePlayPause();\n break;\n case 'f':\n case 'F':\n if (enableFullscreen) {\n toggleFullscreen();\n }\n break;\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [goToPrevious, goToNext, enableFullscreen, togglePlayPause]);\n\n if (!imageOrder || imageOrder.length === 0) {\n return (\n <div className={`${styles.slideshow} ${styles.empty} ${className}`}>\n <div className={styles.emptyState}>\n <span>No images to display</span>\n </div>\n </div>\n );\n }\n\n const slideVariants = {\n enter: (direction: number) => ({\n x: direction > 0 ? 1000 : -1000,\n opacity: fadeTransition ? 0 : 1,\n }),\n center: {\n zIndex: 1,\n x: 0,\n opacity: 1,\n },\n exit: (direction: number) => ({\n zIndex: 0,\n x: direction < 0 ? 1000 : -1000,\n opacity: fadeTransition ? 0 : 1,\n }),\n };\n\n const currentImage = imageOrder[currentIndex];\n const isImageLoaded = loadedImages.has(currentImage.id);\n\n return (\n <div \n ref={slideshowRef}\n className={`${styles.slideshow} ${isFullscreen ? styles.fullscreen : ''} ${showThumbnails && imageOrder.length > 1 ? styles.hasThumbnails : ''} ${className}`}\n >\n <div \n className={styles.mainContainer}\n onTouchStart={onTouchStart}\n onTouchMove={onTouchMove}\n onTouchEnd={onTouchEnd}\n >\n <AnimatePresence mode=\"wait\" custom={1}>\n <motion.div\n key={currentIndex}\n custom={1}\n variants={slideVariants}\n initial=\"enter\"\n animate=\"center\"\n exit=\"exit\"\n transition={{\n x: { type: \"spring\", stiffness: 300, damping: 30 },\n opacity: { duration: 0.3 }\n }}\n className={styles.slide}\n >\n <img\n ref={imageRef}\n src={lazyLoading && !isImageLoaded ? undefined : currentImage.src}\n data-src={lazyLoading ? currentImage.src : undefined}\n srcSet={currentImage.srcSet}\n sizes={currentImage.sizes}\n alt={currentImage.alt}\n className={styles.image}\n draggable={false}\n onLoad={() => handleImageLoad(currentImage.id)}\n style={{\n opacity: lazyLoading && !isImageLoaded ? 0 : 1,\n transition: 'opacity 0.3s ease'\n }}\n />\n {lazyLoading && !isImageLoaded && (\n <div className={styles.imageLoader}>\n <div className={styles.spinner} />\n </div>\n )}\n </motion.div>\n </AnimatePresence>\n\n {showControls && imageOrder.length > 1 && (\n <>\n <button\n className={`${styles.control} ${styles.controlPrev}`}\n onClick={goToPrevious}\n disabled={!loop && currentIndex === 0}\n aria-label=\"Previous image\"\n >\n <ChevronLeft />\n </button>\n\n <button\n className={`${styles.control} ${styles.controlNext}`}\n onClick={goToNext}\n disabled={!loop && currentIndex === imageOrder.length - 1}\n aria-label=\"Next image\"\n >\n <ChevronRight />\n </button>\n </>\n )}\n\n <div className={styles.topControls}>\n {enableFullscreen && (\n <button\n className={`${styles.control} ${styles.controlAction}`}\n onClick={toggleFullscreen}\n aria-label={isFullscreen ? 'Exit fullscreen' : 'Enter fullscreen'}\n title={isFullscreen ? 'Exit fullscreen (F)' : 'Enter fullscreen (F)'}\n >\n <span style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', width: '100%', height: '100%' }}>\n <Maximize />\n </span>\n </button>\n )}\n \n {enableDownload && (\n <button\n className={`${styles.control} ${styles.controlAction}`}\n onClick={handleDownload}\n aria-label=\"Download image\"\n title=\"Download image\"\n >\n <span style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', width: '100%', height: '100%' }}>\n <Download />\n </span>\n </button>\n )}\n \n {enableShare && (\n <button\n className={`${styles.control} ${styles.controlAction}`}\n onClick={handleShare}\n aria-label=\"Share image\"\n title=\"Share image\"\n >\n <span style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', width: '100%', height: '100%' }}>\n <Share2 />\n </span>\n </button>\n )}\n </div>\n\n {autoPlay && imageOrder.length > 1 && (\n <button\n className={`${styles.control} ${styles.controlPlay}`}\n onClick={togglePlayPause}\n aria-label={isPlaying ? 'Pause slideshow' : 'Play slideshow'}\n title={isPlaying ? 'Pause slideshow (Space)' : 'Play slideshow (Space)'}\n >\n {isPlaying ? <Pause /> : <Play />}\n </button>\n )}\n\n {showCaptions && (currentImage.caption || currentImage.title) && (\n <motion.div\n className={styles.caption}\n initial={{ opacity: 0, y: 20 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: 0.3 }}\n >\n {currentImage.title && (\n <h3 className={styles.captionTitle}>{currentImage.title}</h3>\n )}\n {currentImage.caption && (\n <p className={styles.captionText}>{currentImage.caption}</p>\n )}\n {currentImage.metadata && (\n <div className={styles.imageMetadata}>\n {currentImage.metadata.photographer && (\n <span className={styles.metadataItem}>\n 📷 {currentImage.metadata.photographer}\n </span>\n )}\n {currentImage.metadata.location && (\n <span className={styles.metadataItem}>\n 📍 {currentImage.metadata.location}\n </span>\n )}\n {currentImage.metadata.camera && (\n <span className={styles.metadataItem}>\n 📹 {currentImage.metadata.camera}\n </span>\n )}\n </div>\n )}\n </motion.div>\n )}\n </div>\n\n {showIndicators && imageOrder.length > 1 && (\n <div className={styles.indicators}>\n {imageOrder.map((_, index) => (\n <motion.button\n key={index}\n className={`${styles.indicator} ${index === currentIndex ? styles.indicatorActive : ''}`}\n onClick={() => goToSlide(index)}\n whileHover={{ scale: 1.2 }}\n whileTap={{ scale: 0.8 }}\n aria-label={`Go to slide ${index + 1}`}\n />\n ))}\n </div>\n )}\n\n {showThumbnails && imageOrder.length > 1 && (\n <div className={`${styles.thumbnails} ${isDragging ? styles.thumbnailsDragging : ''}`}>\n {imageOrder.map((image, index) => (\n <motion.button\n key={image.id}\n className={`${styles.thumbnail} ${index === currentIndex ? styles.thumbnailActive : ''} ${draggedIndex === index ? styles.thumbnailDragged : ''}`}\n onClick={() => goToSlide(index)}\n whileHover={{ scale: 1.05 }}\n whileTap={{ scale: 0.95 }}\n aria-label={`Go to ${image.alt}`}\n draggable={enableDragReorder}\n onDragStart={(e) => handleDragStart(e as unknown as React.DragEvent<HTMLButtonElement>, index)}\n onDragOver={handleDragOver}\n onDrop={(e) => handleDrop(e as unknown as React.DragEvent<HTMLButtonElement>, index)}\n title={image.title || image.alt}\n >\n <img\n src={image.src}\n alt={image.alt}\n className={styles.thumbnailImage}\n draggable={false}\n />\n </motion.button>\n ))}\n </div>\n )}\n </div>\n );\n};","import { useState, useMemo, useCallback, ReactNode, memo } from 'react'\nimport { motion, AnimatePresence, LayoutGroup } from 'framer-motion'\nimport styles from './Table.module.css'\n\n/**\n * Column configuration for the Table component\n * @template T - The type of data objects in the table\n */\nexport interface Column<T = object> {\n /** The key to access the data field in each row object */\n key: string\n /** The display text for the column header */\n header: string\n /** Whether this column can be sorted */\n sortable?: boolean\n /** Whether this column can be filtered */\n filterable?: boolean\n /** CSS width value for the column */\n width?: string\n /** Text alignment for the column content */\n align?: 'left' | 'center' | 'right'\n /** Custom renderer function for cell content */\n render?: (value: unknown, item: T, index: number) => ReactNode\n /** Additional CSS class for the column */\n className?: string\n}\n\n/**\n * Styling configuration for action buttons\n */\nexport interface ActionButtonStyles {\n /** Button size in pixels */\n size?: number\n /** Border radius (CSS value or number for px) */\n borderRadius?: string | number\n /** Button padding (CSS value) */\n padding?: string\n /** Font size (CSS value or number for px) */\n fontSize?: string | number\n /** Icon size (CSS value or number for px) */\n iconSize?: string | number\n /** Additional CSS class name */\n className?: string\n /** Inline styles object */\n style?: React.CSSProperties\n}\n\n/**\n * Configuration for row action buttons\n * @template T - The type of data objects in the table\n */\nexport interface RowAction<T = object> {\n /** Icon to display in the action button */\n icon: ReactNode\n /** Accessible label for the action button */\n label: string\n /** Function called when the action is clicked */\n onClick: (item: T, index: number) => void\n /** Visual variant of the action button */\n variant?: 'primary' | 'secondary' | 'danger' | 'warning' | 'success' | 'custom'\n /** Function to determine if action should be disabled for specific row */\n disabled?: (item: T) => boolean\n /** Custom CSS class for this specific action button */\n className?: string\n /** Custom inline styles for this specific action button */\n style?: React.CSSProperties\n /** Override button styling for this specific action */\n buttonStyles?: ActionButtonStyles\n}\n\n/**\n * Configuration for bulk action buttons that appear when rows are selected\n * @template T - The type of data objects in the table\n */\nexport interface BulkAction<T = object> {\n /** Icon to display in the bulk action button */\n icon: ReactNode\n /** Label for the bulk action button */\n label: string\n /** Function called when bulk action is clicked with selected items */\n onClick: (selectedItems: T[]) => void | Promise<void>\n /** Visual variant of the bulk action button */\n variant?: 'primary' | 'secondary' | 'danger' | 'warning' | 'success' | 'custom'\n /** Function to determine if bulk action should be disabled based on selected items */\n disabled?: (selectedItems: T[]) => boolean\n /** Minimum number of selected items required to enable this action */\n minSelection?: number\n /** Maximum number of selected items allowed for this action */\n maxSelection?: number\n /** Custom CSS class for this bulk action button */\n className?: string\n /** Custom inline styles for this bulk action button */\n style?: React.CSSProperties\n /** Confirm message before executing action (optional) */\n confirmMessage?: string | ((selectedItems: T[]) => string)\n}\n\n/**\n * Props for the Table component\n * @template T - The type of data objects in the table\n */\nexport interface TableProps<T = object> {\n /** Array of data objects to display in the table */\n data: T[]\n /** Column configuration defining how to display data fields */\n columns: Column<T>[]\n /** Field name to use as unique identifier for rows (defaults to 'id') */\n keyField?: string\n /** Optional title displayed above the table */\n title?: string\n /** Enable global search functionality */\n searchable?: boolean\n /** Enable row selection with checkboxes */\n selectable?: boolean\n /** Enable pagination (boolean for default settings or object for custom configuration) */\n pagination?: boolean | { pageSize?: number; pageSizeOptions?: number[] }\n /** Function called when a table row is clicked */\n onRowClick?: (item: T, index: number) => void\n /** Function called when row selection changes (only when selectable=true) */\n onSelectionChange?: (selectedItems: T[]) => void\n /** Array of bulk actions available when rows are selected */\n bulkActions?: BulkAction<T>[]\n /** @deprecated Use bulkActions instead. Function that returns action buttons for selected rows */\n actions?: (selectedItems: T[]) => ReactNode\n /** Configuration for action buttons displayed in each row */\n rowActions?: RowAction<T>[]\n /** Global styling configuration for all action buttons */\n actionButtonStyles?: ActionButtonStyles\n /** Message displayed when table is empty */\n emptyMessage?: string\n /** Show loading state */\n loading?: boolean\n /** Apply alternating row background colors */\n striped?: boolean\n /** Enable hover effects on table rows */\n hoverable?: boolean\n /** Use compact row spacing */\n compact?: boolean\n /** Make table header sticky when scrolling */\n stickyHeader?: boolean\n /** Enable Framer Motion animations (disable for better performance with large datasets) */\n animated?: boolean\n /** Enable horizontal scrolling for tables with many columns */\n horizontalScroll?: boolean\n /** Additional CSS class for the table container */\n className?: string\n}\n\ntype SortConfig = {\n key: string | null\n direction: 'asc' | 'desc'\n}\n\n/**\n * A comprehensive table component with sorting, filtering, pagination, selection, and row actions.\n *\n * Features:\n * - Sorting by clicking column headers\n * - Global search and per-column filtering\n * - Row selection with bulk actions\n * - Pagination with customizable page sizes\n * - Row-level action buttons\n * - Responsive design with sticky headers\n * - Framer Motion animations (can be disabled for performance)\n * - Full theme integration via CSS custom properties\n *\n * @template T - The type of data objects in the table\n * @param props - Table configuration and data\n * @returns React component\n *\n * @example\n * ```tsx\n * const users = [{ id: 1, name: 'John', email: 'john@example.com' }]\n * const columns = [\n * { key: 'name', header: 'Name', sortable: true },\n * { key: 'email', header: 'Email', filterable: true }\n * ]\n *\n * <Table\n * data={users}\n * columns={columns}\n * searchable\n * pagination\n * rowActions={[\n * {\n * icon: <EditIcon />,\n * label: 'Edit user',\n * onClick: (user) => editUser(user),\n * variant: 'primary'\n * }\n * ]}\n * />\n * ```\n */\nconst TableComponent = function Table<T extends object>({\n data,\n columns,\n keyField = 'id',\n title,\n searchable = false,\n selectable = false,\n pagination = false,\n onRowClick,\n onSelectionChange,\n actions,\n bulkActions,\n rowActions,\n actionButtonStyles,\n emptyMessage = 'No data available',\n loading = false,\n striped = false,\n hoverable = true,\n compact = false,\n stickyHeader = false,\n animated = true,\n horizontalScroll = false,\n className = ''\n}: TableProps<T>) {\n // State\n const [selectedRows, setSelectedRows] = useState<Set<unknown>>(new Set())\n const [searchQuery, setSearchQuery] = useState('')\n const [columnFilters, setColumnFilters] = useState<Record<string, string>>({})\n const [sortConfig, setSortConfig] = useState<SortConfig>({ key: null, direction: 'asc' })\n const [currentPage, setCurrentPage] = useState(1)\n const [pageSize, setPageSize] = useState(\n typeof pagination === 'object' && pagination.pageSize ? pagination.pageSize : 10\n )\n\n // Pagination options\n const pageSizeOptions = useMemo(() => {\n if (typeof pagination === 'object' && pagination.pageSizeOptions) {\n return pagination.pageSizeOptions\n }\n return [10, 25, 50, 100]\n }, [pagination])\n\n // Memoize search columns for performance\n const searchableColumns = useMemo(() =>\n columns.map(col => col.key),\n [columns]\n )\n\n // Filter data\n const filteredData = useMemo(() => {\n if (!searchQuery && Object.keys(columnFilters).length === 0) {\n return data\n }\n\n let filtered = data\n\n // Global search\n if (searchable && searchQuery) {\n const query = searchQuery.toLowerCase()\n filtered = filtered.filter(item => {\n return searchableColumns.some(key => {\n const value = item[key as keyof T]\n return value != null && String(value).toLowerCase().includes(query)\n })\n })\n }\n\n // Column filters\n for (const [key, filterValue] of Object.entries(columnFilters)) {\n if (filterValue) {\n const lowerFilterValue = filterValue.toLowerCase()\n filtered = filtered.filter(item => {\n const value = item[key as keyof T]\n return value != null && String(value).toLowerCase().includes(lowerFilterValue)\n })\n }\n }\n\n return filtered\n }, [data, searchableColumns, searchQuery, columnFilters, searchable])\n\n // Sort data\n const sortedData = useMemo(() => {\n if (!sortConfig.key) return filteredData\n\n return [...filteredData].sort((a, b) => {\n const aValue = a[sortConfig.key! as keyof T]\n const bValue = b[sortConfig.key! as keyof T]\n\n if (aValue === null || aValue === undefined) return 1\n if (bValue === null || bValue === undefined) return -1\n\n let comparison = 0\n if (typeof aValue === 'number' && typeof bValue === 'number') {\n comparison = aValue - bValue\n } else if (aValue instanceof Date && bValue instanceof Date) {\n comparison = aValue.getTime() - bValue.getTime()\n } else {\n comparison = String(aValue).localeCompare(String(bValue))\n }\n\n return sortConfig.direction === 'asc' ? comparison : -comparison\n })\n }, [filteredData, sortConfig])\n\n // Paginate data\n const paginatedData = useMemo(() => {\n if (!pagination) return sortedData\n\n const startIndex = (currentPage - 1) * pageSize\n const endIndex = startIndex + pageSize\n return sortedData.slice(startIndex, endIndex)\n }, [sortedData, pagination, currentPage, pageSize])\n\n const totalPages = useMemo(() => {\n if (!pagination) return 1\n return Math.ceil(sortedData.length / pageSize)\n }, [sortedData, pageSize, pagination])\n\n // Handlers\n const handleSort = useCallback((key: string) => {\n setSortConfig(prev => {\n if (prev.key !== key) {\n return { key, direction: 'asc' }\n }\n if (prev.direction === 'asc') {\n return { key, direction: 'desc' }\n }\n return { key: null, direction: 'asc' }\n })\n }, [])\n\n const handleSelectAll = useCallback(() => {\n const currentPageIds = paginatedData.map(item => item[keyField as keyof T])\n const allSelected = currentPageIds.every(id => selectedRows.has(id))\n\n const newSelected = new Set(selectedRows)\n if (allSelected) {\n currentPageIds.forEach(id => newSelected.delete(id))\n } else {\n currentPageIds.forEach(id => newSelected.add(id))\n }\n\n setSelectedRows(newSelected)\n if (onSelectionChange) {\n const selectedItems = data.filter(item => newSelected.has(item[keyField as keyof T]))\n onSelectionChange(selectedItems)\n }\n }, [paginatedData, selectedRows, keyField, data, onSelectionChange])\n\n const handleSelectRow = useCallback((itemId: unknown) => {\n const newSelected = new Set(selectedRows)\n if (newSelected.has(itemId)) {\n newSelected.delete(itemId)\n } else {\n newSelected.add(itemId)\n }\n\n setSelectedRows(newSelected)\n if (onSelectionChange) {\n const selectedItems = data.filter(item => newSelected.has(item[keyField as keyof T]))\n onSelectionChange(selectedItems)\n }\n }, [selectedRows, data, keyField, onSelectionChange])\n\n const handleColumnFilter = useCallback((key: string, value: string) => {\n setColumnFilters(prev => ({ ...prev, [key]: value }))\n setCurrentPage(1)\n }, [])\n\n const clearFilters = useCallback(() => {\n setSearchQuery('')\n setColumnFilters({})\n setSortConfig({ key: null, direction: 'asc' })\n setCurrentPage(1)\n }, [])\n\n // Computed values\n const hasActiveFilters = searchQuery || Object.values(columnFilters).some(v => v)\n const currentPageIds = paginatedData.map(item => item[keyField as keyof T])\n const allCurrentPageSelected = selectable && currentPageIds.length > 0 &&\n currentPageIds.every(id => selectedRows.has(id))\n const someCurrentPageSelected = selectable &&\n currentPageIds.some(id => selectedRows.has(id))\n\n const selectedItems = useMemo(() => {\n return data.filter(item => selectedRows.has(item[keyField as keyof T]))\n }, [data, selectedRows, keyField])\n\n // Helper function to merge button styles\n const getButtonStyles = useCallback((action: RowAction<T>) => {\n const defaultSize = actionButtonStyles?.size || 36\n const actionSize = action.buttonStyles?.size || defaultSize\n\n const baseStyles: React.CSSProperties & Record<string, unknown> = {\n width: actionSize,\n height: actionSize,\n borderRadius: action.buttonStyles?.borderRadius || actionButtonStyles?.borderRadius || '50%',\n fontSize: action.buttonStyles?.fontSize || actionButtonStyles?.fontSize,\n padding: action.buttonStyles?.padding || actionButtonStyles?.padding,\n ...actionButtonStyles?.style,\n ...action.style,\n ...action.buttonStyles?.style\n }\n\n // Handle icon size - set CSS custom property\n if (action.buttonStyles?.iconSize || actionButtonStyles?.iconSize) {\n baseStyles['--icon-size'] = typeof (action.buttonStyles?.iconSize || actionButtonStyles?.iconSize) === 'number'\n ? `${action.buttonStyles?.iconSize || actionButtonStyles?.iconSize}px`\n : action.buttonStyles?.iconSize || actionButtonStyles?.iconSize\n }\n\n return baseStyles as React.CSSProperties\n }, [actionButtonStyles])\n\n const getButtonClassName = useCallback((action: RowAction<T>) => {\n const baseClass = styles.actionButton\n const variantClass = action.variant === 'primary' ? styles.actionButtonPrimary :\n action.variant === 'danger' ? styles.actionButtonDanger :\n action.variant === 'warning' ? styles.actionButtonWarning :\n action.variant === 'success' ? styles.actionButtonSuccess :\n action.variant === 'custom' ? '' :\n styles.actionButtonSecondary\n\n const globalCustomClass = actionButtonStyles?.className || ''\n const actionCustomClass = action.className || ''\n const buttonCustomClass = action.buttonStyles?.className || ''\n\n return `${baseClass} ${variantClass} ${globalCustomClass} ${actionCustomClass} ${buttonCustomClass}`.trim()\n }, [actionButtonStyles])\n\n // Loading state\n if (loading) {\n return (\n <div className={`${styles.container} ${className}`}>\n <div className={styles.loading}>\n <div className={styles.spinner} />\n <span>Loading...</span>\n </div>\n </div>\n )\n }\n\n // Empty state\n if (data.length === 0) {\n return (\n <div className={`${styles.container} ${className}`}>\n {title && <h2 className={styles.title}>{title}</h2>}\n <div className={styles.empty}>\n <span className={styles.emptyIcon}>📊</span>\n <p>{emptyMessage}</p>\n </div>\n </div>\n )\n }\n\n return (\n <div className={`${styles.container} ${className}`}>\n {/* Header */}\n {(title || actions || bulkActions) && (\n <div className={styles.header}>\n {title && <h2 className={styles.title}>{title}</h2>}\n {(actions || bulkActions) && (\n <div className={styles.bulkActions}>\n {/* Legacy actions support */}\n {actions && selectedItems.length > 0 && (\n <div className={styles.actions}>\n {actions(selectedItems)}\n </div>\n )}\n {/* New bulk actions */}\n {bulkActions && bulkActions.length > 0 && selectedItems.length > 0 && (\n <div className={styles.bulkActionButtons}>\n {bulkActions.map((bulkAction, index) => {\n const isDisabled =\n (bulkAction.disabled && bulkAction.disabled(selectedItems)) ||\n (bulkAction.minSelection && selectedItems.length < bulkAction.minSelection) ||\n (bulkAction.maxSelection && selectedItems.length > bulkAction.maxSelection)\n\n return (\n <button\n key={index}\n className={`${styles.bulkActionButton} ${\n bulkAction.variant === 'primary' ? styles.bulkPrimary :\n bulkAction.variant === 'secondary' ? styles.bulkSecondary :\n bulkAction.variant === 'danger' ? styles.bulkDanger :\n bulkAction.variant === 'warning' ? styles.bulkWarning :\n bulkAction.variant === 'success' ? styles.bulkSuccess :\n bulkAction.variant === 'custom' ? styles.bulkCustom :\n styles.bulkPrimary\n } ${bulkAction.className || ''}`}\n style={bulkAction.style}\n disabled={!!isDisabled}\n onClick={async () => {\n if (bulkAction.confirmMessage) {\n const message = typeof bulkAction.confirmMessage === 'function'\n ? bulkAction.confirmMessage(selectedItems)\n : bulkAction.confirmMessage\n if (!confirm(message)) return\n }\n await bulkAction.onClick(selectedItems)\n }}\n title={bulkAction.label}\n aria-label={bulkAction.label}\n >\n {bulkAction.icon}\n <span>{bulkAction.label}</span>\n <span className={styles.selectionCount}>({selectedItems.length})</span>\n </button>\n )\n })}\n </div>\n )}\n </div>\n )}\n </div>\n )}\n\n {/* Controls */}\n {(searchable || hasActiveFilters) && (\n <div className={styles.controls}>\n {searchable && (\n <div className={styles.searchBox}>\n <span className={styles.searchIcon}>🔍</span>\n <input\n type=\"text\"\n placeholder=\"Search...\"\n value={searchQuery}\n onChange={e => {\n setSearchQuery(e.target.value)\n setCurrentPage(1)\n }}\n className={styles.searchInput}\n />\n {searchQuery && (\n <button\n className={styles.clearButton}\n onClick={() => setSearchQuery('')}\n >\n ✕\n </button>\n )}\n </div>\n )}\n {hasActiveFilters && (\n <button\n className={styles.clearFiltersButton}\n onClick={clearFilters}\n >\n Clear All Filters\n </button>\n )}\n <div className={styles.resultCount}>\n {filteredData.length} {filteredData.length === 1 ? 'result' : 'results'}\n </div>\n </div>\n )}\n\n {/* Table */}\n <div className={`${styles.tableWrapper} ${stickyHeader ? styles.stickyHeader : ''} ${horizontalScroll ? styles.horizontalScroll : ''}`}>\n <table\n className={`\n ${styles.table}\n ${striped ? styles.striped : ''}\n ${hoverable ? styles.hoverable : ''}\n ${compact ? styles.compact : ''}\n `}\n role=\"table\"\n aria-label={title || 'Data table'}\n aria-rowcount={sortedData.length}\n aria-describedby={title ? `${title.replace(/\\s+/g, '-').toLowerCase()}-summary` : undefined}\n >\n <thead>\n <tr>\n {selectable && (\n <th className={styles.checkboxColumn} scope=\"col\">\n <input\n type=\"checkbox\"\n checked={allCurrentPageSelected}\n ref={input => {\n if (input) {\n input.indeterminate = !allCurrentPageSelected && someCurrentPageSelected\n }\n }}\n onChange={handleSelectAll}\n className={styles.checkbox}\n aria-label=\"Select all rows\"\n />\n </th>\n )}\n {columns.map(column => (\n <th\n key={column.key}\n className={`${styles.th} ${column.className || ''}`}\n style={{\n width: column.width,\n textAlign: column.align || 'left'\n }}\n scope=\"col\"\n role=\"columnheader\"\n aria-sort={\n sortConfig.key === column.key\n ? sortConfig.direction === 'asc' ? 'ascending' : 'descending'\n : column.sortable ? 'none' : undefined\n }\n >\n <div className={styles.headerCell}>\n {column.sortable ? (\n <button\n className={styles.sortButton}\n onClick={() => handleSort(column.key)}\n aria-label={`Sort by ${column.header} ${\n sortConfig.key === column.key\n ? sortConfig.direction === 'asc' ? '(descending)' : '(ascending)'\n : '(ascending)'\n }`}\n >\n <span>{column.header}</span>\n <span className={styles.sortIcon} aria-hidden=\"true\">\n {sortConfig.key === column.key ? (\n sortConfig.direction === 'asc' ? '↑' : '↓'\n ) : '↕'}\n </span>\n </button>\n ) : (\n <span className={styles.headerText}>{column.header}</span>\n )}\n {column.filterable && (\n <input\n type=\"text\"\n placeholder=\"Filter...\"\n value={columnFilters[column.key] || ''}\n onChange={e => handleColumnFilter(column.key, e.target.value)}\n onClick={e => e.stopPropagation()}\n className={styles.columnFilter}\n aria-label={`Filter ${column.header}`}\n />\n )}\n </div>\n </th>\n ))}\n {rowActions && rowActions.length > 0 && (\n <th className={styles.actionsColumn} scope=\"col\">\n <span className={styles.headerText}>Actions</span>\n </th>\n )}\n </tr>\n </thead>\n <tbody>\n {animated ? (\n <LayoutGroup>\n <AnimatePresence mode=\"popLayout\">\n {paginatedData.map((item, index) => (\n <motion.tr\n key={`${String(item[keyField as keyof T])}-${currentPage}`}\n layout=\"position\"\n initial={{ opacity: 0, scale: 0.98 }}\n animate={{\n opacity: 1,\n scale: 1,\n transition: {\n duration: 0.12,\n delay: Math.min(index * 0.005, 0.08),\n ease: [0.25, 0.46, 0.45, 0.94]\n }\n }}\n exit={{\n opacity: 0,\n scale: 0.98,\n transition: { duration: 0.08 }\n }}\n className={`\n ${styles.tr}\n ${selectedRows.has(item[keyField as keyof T]) ? styles.selected : ''}\n ${onRowClick ? styles.clickable : ''}\n `}\n onClick={() => onRowClick?.(item, index)}\n >\n {selectable && (\n <td className={styles.checkboxColumn}>\n <input\n type=\"checkbox\"\n checked={selectedRows.has(item[keyField as keyof T])}\n onChange={() => handleSelectRow(item[keyField as keyof T])}\n onClick={e => e.stopPropagation()}\n className={styles.checkbox}\n />\n </td>\n )}\n {columns.map(column => (\n <td\n key={column.key}\n className={`${styles.td} ${column.className || ''}`}\n style={{ textAlign: column.align || 'left' }}\n >\n {column.render\n ? column.render(item[column.key as keyof T], item, index)\n : formatValue(item[column.key as keyof T])\n }\n </td>\n ))}\n {rowActions && rowActions.length > 0 && (\n <td\n className={styles.actionsColumn}\n onClick={e => e.stopPropagation()}\n >\n <div className={styles.actionButtons}>\n {rowActions.map((action, actionIndex) => (\n <button\n key={actionIndex}\n className={getButtonClassName(action)}\n style={getButtonStyles(action)}\n onClick={() => action.onClick(item, index)}\n disabled={action.disabled ? action.disabled(item) : false}\n title={action.label}\n aria-label={action.label}\n >\n {action.icon}\n </button>\n ))}\n </div>\n </td>\n )}\n </motion.tr>\n ))}\n </AnimatePresence>\n </LayoutGroup>\n ) : (\n paginatedData.map((item, index) => (\n <tr\n key={String(item[keyField as keyof T])}\n className={`\n ${styles.tr}\n ${selectedRows.has(item[keyField as keyof T]) ? styles.selected : ''}\n ${onRowClick ? styles.clickable : ''}\n `}\n onClick={() => onRowClick?.(item, index)}\n >\n {selectable && (\n <td className={styles.checkboxColumn}>\n <input\n type=\"checkbox\"\n checked={selectedRows.has(item[keyField as keyof T])}\n onChange={() => handleSelectRow(item[keyField as keyof T])}\n onClick={e => e.stopPropagation()}\n className={styles.checkbox}\n />\n </td>\n )}\n {columns.map(column => (\n <td\n key={column.key}\n className={`${styles.td} ${column.className || ''}`}\n style={{ textAlign: column.align || 'left' }}\n >\n {column.render\n ? column.render(item[column.key as keyof T], item, index)\n : formatValue(item[column.key as keyof T])\n }\n </td>\n ))}\n {rowActions && rowActions.length > 0 && (\n <td\n className={styles.actionsColumn}\n onClick={e => e.stopPropagation()}\n >\n <div className={styles.actionButtons}>\n {rowActions.map((action, actionIndex) => (\n <button\n key={actionIndex}\n className={getButtonClassName(action)}\n style={getButtonStyles(action)}\n onClick={() => action.onClick(item, index)}\n disabled={action.disabled ? action.disabled(item) : false}\n title={action.label}\n aria-label={action.label}\n >\n {action.icon}\n </button>\n ))}\n </div>\n </td>\n )}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n\n {/* Pagination */}\n {pagination && totalPages > 1 && (\n <div className={styles.pagination}>\n <div className={styles.pageInfo}>\n Showing {((currentPage - 1) * pageSize) + 1}-\n {Math.min(currentPage * pageSize, sortedData.length)} of {sortedData.length}\n </div>\n\n <div className={styles.pageControls}>\n <button\n className={styles.pageButton}\n onClick={() => setCurrentPage(1)}\n disabled={currentPage === 1}\n >\n ⟨⟨\n </button>\n <button\n className={styles.pageButton}\n onClick={() => setCurrentPage(prev => Math.max(1, prev - 1))}\n disabled={currentPage === 1}\n >\n ⟨\n </button>\n\n <span className={styles.pageNumber}>\n Page {currentPage} of {totalPages}\n </span>\n\n <button\n className={styles.pageButton}\n onClick={() => setCurrentPage(prev => Math.min(totalPages, prev + 1))}\n disabled={currentPage === totalPages}\n >\n ⟩\n </button>\n <button\n className={styles.pageButton}\n onClick={() => setCurrentPage(totalPages)}\n disabled={currentPage === totalPages}\n >\n ⟩⟩\n </button>\n </div>\n\n {typeof pagination === 'object' && (\n <select\n className={styles.pageSizeSelect}\n value={pageSize}\n onChange={e => {\n setPageSize(Number(e.target.value))\n setCurrentPage(1)\n }}\n >\n {pageSizeOptions.map(size => (\n <option key={size} value={size}>\n {size} per page\n </option>\n ))}\n </select>\n )}\n </div>\n )}\n </div>\n )\n}\n\n// Helper function to format values\nfunction formatValue(value: unknown): ReactNode {\n if (value === null || value === undefined) {\n return <span className={styles.nullValue}>—</span>\n }\n\n if (typeof value === 'boolean') {\n return (\n <span className={`${styles.badge} ${value ? styles.badgeSuccess : styles.badgeDanger}`}>\n {value ? '✓' : '✗'}\n </span>\n )\n }\n\n if (value instanceof Date) {\n return value.toLocaleDateString()\n }\n\n if (typeof value === 'object') {\n return <code className={styles.code}>{JSON.stringify(value, null, 2)}</code>\n }\n\n return String(value)\n}\n\n// Memoized Table component to prevent unnecessary re-renders\nexport const Table = memo(TableComponent) as <T extends object>(\n props: TableProps<T>\n) => JSX.Element\n","import React from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { Button } from '../../atoms/Button/Button';\nimport styles from './ConfirmationModal.module.css';\n\nexport interface ConfirmationModalProps {\n isOpen: boolean;\n onClose: () => void;\n onConfirm: () => void;\n title: string;\n message: string;\n confirmText?: string;\n cancelText?: string;\n isLoading?: boolean;\n variant?: 'danger' | 'warning' | 'info';\n}\n\n/**\n * ConfirmationModal Component\n *\n * A specialized modal for confirm/cancel flows with variant styling.\n *\n * @example\n * <ConfirmationModal\n * isOpen={showDelete}\n * onClose={() => setShowDelete(false)}\n * onConfirm={handleDelete}\n * title=\"Delete item?\"\n * message=\"This action cannot be undone.\"\n * variant=\"danger\"\n * confirmText=\"Delete\"\n * />\n */\nexport const ConfirmationModal: React.FC<ConfirmationModalProps> = ({\n isOpen,\n onClose,\n onConfirm,\n title,\n message,\n confirmText = 'Confirm',\n cancelText = 'Cancel',\n isLoading = false,\n variant = 'info',\n}) => {\n const handleConfirm = (e: React.MouseEvent) => {\n if (!isLoading) {\n e.preventDefault();\n e.stopPropagation();\n onConfirm();\n }\n };\n\n return (\n <AnimatePresence>\n {isOpen && (\n <>\n <motion.div\n className={styles.overlay}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n onClick={!isLoading ? onClose : undefined}\n />\n <div className={styles.positioner}>\n <motion.div\n className={styles.modal}\n initial={{ opacity: 0, scale: 0.9, y: 20 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.9, y: 20 }}\n transition={{ type: 'spring', stiffness: 300, damping: 30 }}\n >\n <div className={`${styles.header} ${styles[variant]}`}>\n <h2 className={styles.title}>{title}</h2>\n {!isLoading && (\n <button\n className={styles.closeButton}\n onClick={onClose}\n type=\"button\"\n aria-label=\"Close\"\n >\n ✕\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","ThemeProvider","_Fragment","Fragment"],"mappings":"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"}
|