@djangocfg/ui-tools 2.1.110 → 2.1.112

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/README.md +242 -49
  2. package/dist/JsonSchemaForm-65NLLK56.mjs +4 -0
  3. package/dist/JsonSchemaForm-65NLLK56.mjs.map +1 -0
  4. package/dist/JsonSchemaForm-PY6DH3HE.cjs +13 -0
  5. package/dist/JsonSchemaForm-PY6DH3HE.cjs.map +1 -0
  6. package/dist/JsonTree-6RYAOPSS.mjs +4 -0
  7. package/dist/JsonTree-6RYAOPSS.mjs.map +1 -0
  8. package/dist/JsonTree-7OH6CIHT.cjs +10 -0
  9. package/dist/JsonTree-7OH6CIHT.cjs.map +1 -0
  10. package/dist/MapContainer-GXQLP5WY.mjs +214 -0
  11. package/dist/MapContainer-GXQLP5WY.mjs.map +1 -0
  12. package/dist/MapContainer-RYG4HPH4.cjs +221 -0
  13. package/dist/MapContainer-RYG4HPH4.cjs.map +1 -0
  14. package/dist/{Mermaid.client-4OCKJ6QD.mjs → Mermaid.client-OKACITCW.mjs} +16 -7
  15. package/dist/Mermaid.client-OKACITCW.mjs.map +1 -0
  16. package/dist/{Mermaid.client-ZP6OE46Z.cjs → Mermaid.client-PNXEC6YL.cjs} +16 -7
  17. package/dist/Mermaid.client-PNXEC6YL.cjs.map +1 -0
  18. package/dist/{PlaygroundLayout-XXVBU4WZ.cjs → PlaygroundLayout-SYMEAG3J.cjs} +25 -24
  19. package/dist/PlaygroundLayout-SYMEAG3J.cjs.map +1 -0
  20. package/dist/{PlaygroundLayout-LMQTVXSP.mjs → PlaygroundLayout-UQRBU5RH.mjs} +4 -3
  21. package/dist/PlaygroundLayout-UQRBU5RH.mjs.map +1 -0
  22. package/dist/{PrettyCode.client-2CLSV2VD.cjs → PrettyCode.client-DANYYQYO.cjs} +11 -4
  23. package/dist/PrettyCode.client-DANYYQYO.cjs.map +1 -0
  24. package/dist/{PrettyCode.client-Y2BVON7R.mjs → PrettyCode.client-RS5ZTNBT.mjs} +11 -4
  25. package/dist/PrettyCode.client-RS5ZTNBT.mjs.map +1 -0
  26. package/dist/chunk-2DSR7V2L.mjs +561 -0
  27. package/dist/chunk-2DSR7V2L.mjs.map +1 -0
  28. package/dist/chunk-47T5ECYV.cjs +1357 -0
  29. package/dist/chunk-47T5ECYV.cjs.map +1 -0
  30. package/dist/chunk-5QT3QYFZ.cjs +189 -0
  31. package/dist/chunk-5QT3QYFZ.cjs.map +1 -0
  32. package/dist/chunk-7IIRYG4S.mjs +1057 -0
  33. package/dist/chunk-7IIRYG4S.mjs.map +1 -0
  34. package/dist/{chunk-FB5QBSI3.cjs → chunk-DI3HUXHK.cjs} +15 -195
  35. package/dist/chunk-DI3HUXHK.cjs.map +1 -0
  36. package/dist/chunk-EVGWYASL.cjs +1528 -0
  37. package/dist/chunk-EVGWYASL.cjs.map +1 -0
  38. package/dist/chunk-F2N7P5XU.cjs +30 -0
  39. package/dist/chunk-F2N7P5XU.cjs.map +1 -0
  40. package/dist/{chunk-L6UHASYQ.mjs → chunk-G6PRZP5I.mjs} +7 -186
  41. package/dist/chunk-G6PRZP5I.mjs.map +1 -0
  42. package/dist/chunk-JWB2EWQO.mjs +5 -0
  43. package/dist/chunk-JWB2EWQO.mjs.map +1 -0
  44. package/dist/chunk-LTJX2JXE.mjs +338 -0
  45. package/dist/chunk-LTJX2JXE.mjs.map +1 -0
  46. package/dist/chunk-OVNC4KW6.mjs +1494 -0
  47. package/dist/chunk-OVNC4KW6.mjs.map +1 -0
  48. package/dist/chunk-PNZSJN6T.cjs +1086 -0
  49. package/dist/chunk-PNZSJN6T.cjs.map +1 -0
  50. package/dist/chunk-TEFRA7GW.cjs +565 -0
  51. package/dist/chunk-TEFRA7GW.cjs.map +1 -0
  52. package/dist/chunk-UOMPPIED.mjs +1343 -0
  53. package/dist/chunk-UOMPPIED.mjs.map +1 -0
  54. package/dist/chunk-W6YHQI4F.mjs +187 -0
  55. package/dist/chunk-W6YHQI4F.mjs.map +1 -0
  56. package/dist/chunk-XTBRWVIV.cjs +346 -0
  57. package/dist/chunk-XTBRWVIV.cjs.map +1 -0
  58. package/dist/components-C7ZL7OMY.mjs +5 -0
  59. package/dist/components-C7ZL7OMY.mjs.map +1 -0
  60. package/dist/components-CJ2IB65O.cjs +27 -0
  61. package/dist/components-CJ2IB65O.cjs.map +1 -0
  62. package/dist/components-EASJYK45.mjs +6 -0
  63. package/dist/components-EASJYK45.mjs.map +1 -0
  64. package/dist/components-LDRFDV4A.cjs +22 -0
  65. package/dist/components-LDRFDV4A.cjs.map +1 -0
  66. package/dist/components-VZKUTDJK.mjs +5 -0
  67. package/dist/components-VZKUTDJK.mjs.map +1 -0
  68. package/dist/components-Y64GTIMQ.cjs +42 -0
  69. package/dist/components-Y64GTIMQ.cjs.map +1 -0
  70. package/dist/index.cjs +701 -4813
  71. package/dist/index.cjs.map +1 -1
  72. package/dist/index.d.cts +1274 -1026
  73. package/dist/index.d.ts +1274 -1026
  74. package/dist/index.mjs +358 -4730
  75. package/dist/index.mjs.map +1 -1
  76. package/package.json +27 -4
  77. package/src/components/index.ts +17 -0
  78. package/src/components/lazy-wrapper.tsx +281 -0
  79. package/src/index.ts +92 -7
  80. package/src/tools/AudioPlayer/components/HybridAudioPlayer.tsx +14 -5
  81. package/src/tools/AudioPlayer/lazy.tsx +85 -0
  82. package/src/tools/Gallery/components/Gallery.tsx +182 -0
  83. package/src/tools/Gallery/components/GalleryCarousel.tsx +251 -0
  84. package/src/tools/Gallery/components/GalleryCompact.tsx +173 -0
  85. package/src/tools/Gallery/components/GalleryGrid.tsx +493 -0
  86. package/src/tools/Gallery/components/GalleryImage.tsx +66 -0
  87. package/src/tools/Gallery/components/GalleryLightbox.tsx +331 -0
  88. package/src/tools/Gallery/components/GalleryMedia.tsx +66 -0
  89. package/src/tools/Gallery/components/GalleryThumbnails.tsx +173 -0
  90. package/src/tools/Gallery/components/GalleryThumbnailsVirtual.tsx +138 -0
  91. package/src/tools/Gallery/components/GalleryVideo.tsx +222 -0
  92. package/src/tools/Gallery/components/index.ts +13 -0
  93. package/src/tools/Gallery/hooks/index.ts +23 -0
  94. package/src/tools/Gallery/hooks/useGallery.ts +137 -0
  95. package/src/tools/Gallery/hooks/useImageDimensions.ts +223 -0
  96. package/src/tools/Gallery/hooks/usePinchZoom.ts +234 -0
  97. package/src/tools/Gallery/hooks/usePreloadImages.ts +71 -0
  98. package/src/tools/Gallery/hooks/useSwipe.ts +86 -0
  99. package/src/tools/Gallery/hooks/useVirtualList.ts +129 -0
  100. package/src/tools/Gallery/hooks/useZoom.ts +316 -0
  101. package/src/tools/Gallery/index.ts +66 -0
  102. package/src/tools/Gallery/types.ts +183 -0
  103. package/src/tools/Gallery/utils/imageAnalysis.ts +52 -0
  104. package/src/tools/Gallery/utils/index.ts +11 -0
  105. package/src/tools/ImageViewer/components/ImageToolbar.tsx +20 -8
  106. package/src/tools/ImageViewer/components/ImageViewer.tsx +12 -4
  107. package/src/tools/ImageViewer/lazy.tsx +37 -0
  108. package/src/tools/JsonForm/lazy.tsx +43 -0
  109. package/src/tools/JsonForm/widgets/ColorWidget.tsx +4 -1
  110. package/src/tools/JsonTree/lazy.tsx +45 -0
  111. package/src/tools/LottiePlayer/lazy.tsx +57 -0
  112. package/src/tools/Map/components/CustomOverlay.tsx +54 -0
  113. package/src/tools/Map/components/DrawControl.tsx +36 -0
  114. package/src/tools/Map/components/GeocoderControl.tsx +70 -0
  115. package/src/tools/Map/components/LayerSwitcher.tsx +225 -0
  116. package/src/tools/Map/components/MapCluster.tsx +273 -0
  117. package/src/tools/Map/components/MapContainer.tsx +191 -0
  118. package/src/tools/Map/components/MapControls.tsx +44 -0
  119. package/src/tools/Map/components/MapLegend.tsx +161 -0
  120. package/src/tools/Map/components/MapMarker.tsx +102 -0
  121. package/src/tools/Map/components/MapPopup.tsx +46 -0
  122. package/src/tools/Map/components/MapSource.tsx +30 -0
  123. package/src/tools/Map/components/index.ts +20 -0
  124. package/src/tools/Map/context/MapContext.tsx +89 -0
  125. package/src/tools/Map/context/index.ts +2 -0
  126. package/src/tools/Map/hooks/index.ts +9 -0
  127. package/src/tools/Map/hooks/useMap.ts +11 -0
  128. package/src/tools/Map/hooks/useMapControl.ts +99 -0
  129. package/src/tools/Map/hooks/useMapEvents.ts +147 -0
  130. package/src/tools/Map/hooks/useMapLayers.ts +83 -0
  131. package/src/tools/Map/hooks/useMapViewport.ts +62 -0
  132. package/src/tools/Map/hooks/useMarkers.ts +85 -0
  133. package/src/tools/Map/index.ts +116 -0
  134. package/src/tools/Map/layers/cluster.ts +94 -0
  135. package/src/tools/Map/layers/index.ts +15 -0
  136. package/src/tools/Map/layers/line.ts +93 -0
  137. package/src/tools/Map/layers/point.ts +61 -0
  138. package/src/tools/Map/layers/polygon.ts +73 -0
  139. package/src/tools/Map/lazy.tsx +56 -0
  140. package/src/tools/Map/styles/index.ts +15 -0
  141. package/src/tools/Map/types.ts +259 -0
  142. package/src/tools/Map/utils/geo.ts +88 -0
  143. package/src/tools/Map/utils/index.ts +16 -0
  144. package/src/tools/Map/utils/transform.ts +107 -0
  145. package/src/tools/Mermaid/Mermaid.client.tsx +12 -4
  146. package/src/tools/Mermaid/components/MermaidFullscreenModal.tsx +6 -2
  147. package/src/tools/Mermaid/lazy.tsx +46 -0
  148. package/src/tools/OpenapiViewer/lazy.tsx +72 -0
  149. package/src/tools/PrettyCode/PrettyCode.client.tsx +10 -3
  150. package/src/tools/PrettyCode/lazy.tsx +64 -0
  151. package/src/tools/VideoPlayer/lazy.tsx +63 -0
  152. package/dist/Mermaid.client-4OCKJ6QD.mjs.map +0 -1
  153. package/dist/Mermaid.client-ZP6OE46Z.cjs.map +0 -1
  154. package/dist/PlaygroundLayout-LMQTVXSP.mjs.map +0 -1
  155. package/dist/PlaygroundLayout-XXVBU4WZ.cjs.map +0 -1
  156. package/dist/PrettyCode.client-2CLSV2VD.cjs.map +0 -1
  157. package/dist/PrettyCode.client-Y2BVON7R.mjs.map +0 -1
  158. package/dist/chunk-FB5QBSI3.cjs.map +0 -1
  159. package/dist/chunk-L6UHASYQ.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tools/AudioPlayer/hooks/useHybridAudio.ts","../src/tools/AudioPlayer/hooks/useHybridAudioAnalysis.ts","../src/tools/AudioPlayer/hooks/useVisualization.tsx","../src/tools/AudioPlayer/context/HybridAudioProvider.tsx","../src/tools/AudioPlayer/components/HybridWaveform.tsx","../src/tools/AudioPlayer/utils/formatTime.ts","../src/tools/AudioPlayer/utils/debug.ts","../src/tools/AudioPlayer/components/HybridAudioPlayer.tsx","../src/tools/AudioPlayer/effects/index.ts","../src/tools/AudioPlayer/components/ReactiveCover/effects/GlowEffect.tsx","../src/tools/AudioPlayer/components/ReactiveCover/effects/OrbsEffect.tsx","../src/tools/AudioPlayer/components/ReactiveCover/effects/SpotlightEffect.tsx","../src/tools/AudioPlayer/components/ReactiveCover/effects/MeshEffect.tsx","../src/tools/AudioPlayer/components/ReactiveCover/AudioReactiveCover.tsx","../src/tools/AudioPlayer/components/HybridSimplePlayer.tsx"],"names":["useState","useRef","useCallback","useEffect","createContext","useMemo","jsx","useContext","HybridWaveform","cn","memo","HybridAudioPlayer","COLOR_SCHEMES","jsxs","Fragment"],"mappings":"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","file":"chunk-OVNC4KW6.mjs","sourcesContent":["'use client';\n\n/**\n * useHybridAudio - Hybrid audio hook combining HTML5 audio + Web Audio API\n *\n * Uses native HTML5 <audio> for playback (no crackling, native streaming)\n * and Web Audio API only for visualization (AnalyserNode).\n *\n * Audio routing:\n * source -> destination (single path for playback)\n * source -> analyser (parallel path for visualization only, no output)\n */\n\nimport { useRef, useState, useCallback, useEffect } from 'react';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface UseHybridAudioOptions {\n src: string;\n autoPlay?: boolean;\n initialVolume?: number;\n loop?: boolean;\n crossOrigin?: 'anonymous' | 'use-credentials';\n onPlay?: () => void;\n onPause?: () => void;\n onEnded?: () => void;\n onTimeUpdate?: (time: number) => void;\n onError?: (error: Error) => void;\n onReady?: () => void;\n}\n\nexport interface HybridAudioState {\n isReady: boolean;\n isPlaying: boolean;\n currentTime: number;\n duration: number;\n volume: number;\n isMuted: boolean;\n isLooping: boolean;\n buffered: TimeRanges | null;\n error: Error | null;\n}\n\nexport interface HybridAudioControls {\n play: () => Promise<void>;\n pause: () => void;\n togglePlay: () => void;\n seek: (time: number) => void;\n seekTo: (progress: number) => void;\n skip: (seconds: number) => void;\n setVolume: (vol: number) => void;\n toggleMute: () => void;\n toggleLoop: () => void;\n setLoop: (enabled: boolean) => void;\n restart: () => void;\n}\n\nexport interface HybridWebAudioAPI {\n context: AudioContext | null;\n analyser: AnalyserNode | null;\n sourceNode: MediaElementAudioSourceNode | null;\n}\n\nexport interface UseHybridAudioReturn {\n audioRef: React.RefObject<HTMLAudioElement | null>;\n state: HybridAudioState;\n controls: HybridAudioControls;\n webAudio: HybridWebAudioAPI;\n}\n\n// =============================================================================\n// HOOK\n// =============================================================================\n\nexport function useHybridAudio(options: UseHybridAudioOptions): UseHybridAudioReturn {\n const {\n src,\n autoPlay = false,\n initialVolume = 1,\n loop = false,\n crossOrigin = 'anonymous',\n onPlay,\n onPause,\n onEnded,\n onTimeUpdate,\n onError,\n onReady,\n } = options;\n\n // Refs\n const audioRef = useRef<HTMLAudioElement | null>(null);\n const audioContextRef = useRef<AudioContext | null>(null);\n const sourceNodeRef = useRef<MediaElementAudioSourceNode | null>(null);\n const analyserRef = useRef<AnalyserNode | null>(null);\n const connectedElementRef = useRef<HTMLMediaElement | null>(null);\n\n // State\n const [state, setState] = useState<HybridAudioState>({\n isReady: false,\n isPlaying: false,\n currentTime: 0,\n duration: 0,\n volume: initialVolume,\n isMuted: false,\n isLooping: loop,\n buffered: null,\n error: null,\n });\n\n // Initialize Web Audio for visualization (lazy, on first play)\n const initWebAudio = useCallback(() => {\n const audio = audioRef.current;\n if (!audio) return;\n\n // Already connected to this element\n if (connectedElementRef.current === audio && audioContextRef.current) {\n return;\n }\n\n try {\n // Create AudioContext if needed\n if (!audioContextRef.current) {\n const AudioContextClass =\n window.AudioContext ||\n (window as unknown as { webkitAudioContext: typeof AudioContext }).webkitAudioContext;\n audioContextRef.current = new AudioContextClass();\n }\n\n const ctx = audioContextRef.current;\n\n // Disconnect old source if any\n if (sourceNodeRef.current) {\n try {\n sourceNodeRef.current.disconnect();\n } catch {\n /* ignore */\n }\n }\n\n // Create source from audio element\n const source = ctx.createMediaElementSource(audio);\n sourceNodeRef.current = source;\n\n // Create analyser for visualization\n const analyser = ctx.createAnalyser();\n analyser.fftSize = 256;\n analyser.smoothingTimeConstant = 0.85;\n analyserRef.current = analyser;\n\n // Audio routing:\n // 1. source -> destination (for playback)\n // 2. source -> analyser (for visualization only - NO output!)\n source.connect(ctx.destination);\n source.connect(analyser);\n // NOTE: analyser does NOT connect to destination - prevents double audio!\n\n connectedElementRef.current = audio;\n } catch (error) {\n console.warn('[useHybridAudio] Web Audio init failed:', error);\n }\n }, []);\n\n // Resume AudioContext on user interaction\n const resumeAudioContext = useCallback(async () => {\n const ctx = audioContextRef.current;\n if (ctx && ctx.state === 'suspended') {\n await ctx.resume();\n }\n }, []);\n\n // Controls\n const play = useCallback(async () => {\n const audio = audioRef.current;\n if (!audio) return;\n\n try {\n initWebAudio();\n await resumeAudioContext();\n await audio.play();\n } catch (error) {\n console.error('[useHybridAudio] Play failed:', error);\n onError?.(error as Error);\n }\n }, [initWebAudio, resumeAudioContext, onError]);\n\n const pause = useCallback(() => {\n audioRef.current?.pause();\n }, []);\n\n const togglePlay = useCallback(() => {\n if (state.isPlaying) {\n pause();\n } else {\n play();\n }\n }, [state.isPlaying, play, pause]);\n\n const seek = useCallback(\n (time: number) => {\n const audio = audioRef.current;\n if (audio && isFinite(time)) {\n audio.currentTime = Math.max(0, Math.min(time, state.duration || audio.duration || 0));\n }\n },\n [state.duration]\n );\n\n const seekTo = useCallback(\n (progress: number) => {\n const duration = state.duration || audioRef.current?.duration || 0;\n seek(duration * Math.max(0, Math.min(1, progress)));\n },\n [state.duration, seek]\n );\n\n const skip = useCallback(\n (seconds: number) => {\n seek(state.currentTime + seconds);\n },\n [state.currentTime, seek]\n );\n\n const setVolume = useCallback((vol: number) => {\n const audio = audioRef.current;\n if (audio) {\n const clampedVol = Math.max(0, Math.min(1, vol));\n audio.volume = clampedVol;\n setState((prev) => ({ ...prev, volume: clampedVol }));\n }\n }, []);\n\n const toggleMute = useCallback(() => {\n const audio = audioRef.current;\n if (audio) {\n audio.muted = !audio.muted;\n setState((prev) => ({ ...prev, isMuted: audio.muted }));\n }\n }, []);\n\n const toggleLoop = useCallback(() => {\n const audio = audioRef.current;\n if (audio) {\n audio.loop = !audio.loop;\n setState((prev) => ({ ...prev, isLooping: audio.loop }));\n }\n }, []);\n\n const setLoop = useCallback((enabled: boolean) => {\n const audio = audioRef.current;\n if (audio) {\n audio.loop = enabled;\n setState((prev) => ({ ...prev, isLooping: enabled }));\n }\n }, []);\n\n const restart = useCallback(() => {\n seek(0);\n play();\n }, [seek, play]);\n\n const controls: HybridAudioControls = {\n play,\n pause,\n togglePlay,\n seek,\n seekTo,\n skip,\n setVolume,\n toggleMute,\n toggleLoop,\n setLoop,\n restart,\n };\n\n // Create audio element on mount\n useEffect(() => {\n const audio = document.createElement('audio');\n audio.preload = 'metadata';\n audio.crossOrigin = crossOrigin;\n audio.volume = initialVolume;\n audio.loop = loop;\n audioRef.current = audio;\n\n return () => {\n audio.pause();\n audio.src = '';\n if (audioContextRef.current) {\n audioContextRef.current.close().catch(() => {});\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Event handlers\n useEffect(() => {\n const audio = audioRef.current;\n if (!audio) return;\n\n const handlers = {\n loadedmetadata: () => {\n setState((prev) => ({\n ...prev,\n duration: audio.duration,\n isReady: true,\n }));\n onReady?.();\n },\n canplay: () => {\n setState((prev) => ({ ...prev, isReady: true }));\n if (autoPlay) {\n play();\n }\n },\n play: () => {\n setState((prev) => ({ ...prev, isPlaying: true }));\n onPlay?.();\n },\n pause: () => {\n setState((prev) => ({ ...prev, isPlaying: false }));\n onPause?.();\n },\n ended: () => {\n setState((prev) => ({ ...prev, isPlaying: false }));\n onEnded?.();\n },\n timeupdate: () => {\n setState((prev) => ({ ...prev, currentTime: audio.currentTime }));\n onTimeUpdate?.(audio.currentTime);\n },\n progress: () => {\n setState((prev) => ({ ...prev, buffered: audio.buffered }));\n },\n error: () => {\n const error = new Error(audio.error?.message || 'Audio error');\n setState((prev) => ({ ...prev, error }));\n onError?.(error);\n },\n volumechange: () => {\n setState((prev) => ({\n ...prev,\n volume: audio.volume,\n isMuted: audio.muted,\n }));\n },\n };\n\n Object.entries(handlers).forEach(([event, handler]) => {\n audio.addEventListener(event, handler);\n });\n\n return () => {\n Object.entries(handlers).forEach(([event, handler]) => {\n audio.removeEventListener(event, handler);\n });\n };\n }, [autoPlay, onPlay, onPause, onEnded, onTimeUpdate, onError, onReady, play]);\n\n // Load new source\n useEffect(() => {\n const audio = audioRef.current;\n if (!audio || !src) return;\n\n setState((prev) => ({\n ...prev,\n isReady: false,\n currentTime: 0,\n duration: 0,\n error: null,\n }));\n\n audio.src = src;\n audio.load();\n }, [src]);\n\n return {\n audioRef,\n state,\n controls,\n webAudio: {\n context: audioContextRef.current,\n analyser: analyserRef.current,\n sourceNode: sourceNodeRef.current,\n },\n };\n}\n","'use client';\n\n/**\n * useHybridAudioAnalysis - Audio frequency analysis for hybrid player.\n *\n * Simplified version of useAudioAnalysis that works directly with AnalyserNode\n * instead of SharedWebAudioContext.\n */\n\nimport { useState, useRef, useEffect, useCallback } from 'react';\nimport type { AudioLevels } from '../effects';\n\nexport function useHybridAudioAnalysis(\n analyser: AnalyserNode | null,\n isPlaying: boolean\n): AudioLevels {\n const [levels, setLevels] = useState<AudioLevels>({ bass: 0, mid: 0, high: 0, overall: 0 });\n const animationRef = useRef<number | null>(null);\n const dataArrayRef = useRef<Uint8Array<ArrayBuffer> | null>(null);\n\n const cleanup = useCallback(() => {\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current);\n animationRef.current = null;\n }\n }, []);\n\n // Initialize data array when analyser is available\n useEffect(() => {\n if (analyser && !dataArrayRef.current) {\n dataArrayRef.current = new Uint8Array(analyser.frequencyBinCount) as Uint8Array<ArrayBuffer>;\n }\n }, [analyser]);\n\n // Animation loop\n useEffect(() => {\n if (!isPlaying || !analyser || !dataArrayRef.current) {\n cleanup();\n // Smooth fade out when stopped\n setLevels((prev) => ({\n bass: prev.bass * 0.95 < 0.01 ? 0 : prev.bass * 0.95,\n mid: prev.mid * 0.95 < 0.01 ? 0 : prev.mid * 0.95,\n high: prev.high * 0.95 < 0.01 ? 0 : prev.high * 0.95,\n overall: prev.overall * 0.95 < 0.01 ? 0 : prev.overall * 0.95,\n }));\n return;\n }\n\n const dataArray = dataArrayRef.current;\n\n const animate = () => {\n analyser.getByteFrequencyData(dataArray);\n const binCount = dataArray.length;\n\n // Bass (0-15% of frequency range)\n const bassEnd = Math.floor(binCount * 0.15);\n let bassSum = 0;\n for (let i = 0; i < bassEnd; i++) bassSum += dataArray[i];\n const bass = bassSum / bassEnd / 255;\n\n // Mids (15-50% of frequency range)\n const midStart = bassEnd;\n const midEnd = Math.floor(binCount * 0.5);\n let midSum = 0;\n for (let i = midStart; i < midEnd; i++) midSum += dataArray[i];\n const mid = midSum / (midEnd - midStart) / 255;\n\n // Highs (50-100% of frequency range)\n const highStart = midEnd;\n let highSum = 0;\n for (let i = highStart; i < binCount; i++) highSum += dataArray[i];\n const high = highSum / (binCount - highStart) / 255;\n\n // Overall\n let totalSum = 0;\n for (let i = 0; i < binCount; i++) totalSum += dataArray[i];\n const overall = totalSum / binCount / 255;\n\n // Smooth with lerp for natural feel\n setLevels((prev) => ({\n bass: prev.bass * 0.7 + bass * 0.3,\n mid: prev.mid * 0.7 + mid * 0.3,\n high: prev.high * 0.7 + high * 0.3,\n overall: prev.overall * 0.7 + overall * 0.3,\n }));\n\n animationRef.current = requestAnimationFrame(animate);\n };\n\n animationRef.current = requestAnimationFrame(animate);\n return cleanup;\n }, [analyser, isPlaying, cleanup]);\n\n return levels;\n}\n","'use client';\n\n/**\n * useVisualization - Hook for managing audio visualization settings\n *\n * Persists settings in localStorage for user preferences\n * Uses React Context for shared state between components\n */\n\nimport { createContext, useContext, useCallback, useMemo, type ReactNode } from 'react';\nimport { useLocalStorage } from '../../_shared';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type VisualizationVariant = 'glow' | 'orbs' | 'spotlight' | 'mesh' | 'none';\nexport type VisualizationIntensity = 'subtle' | 'medium' | 'strong';\nexport type VisualizationColorScheme = 'primary' | 'vibrant' | 'cool' | 'warm';\n\nexport interface VisualizationSettings {\n /** Enable reactive cover animation */\n enabled: boolean;\n /** Visual effect variant */\n variant: VisualizationVariant;\n /** Effect intensity */\n intensity: VisualizationIntensity;\n /** Color scheme */\n colorScheme: VisualizationColorScheme;\n /** Playback volume (0-1) */\n volume: number;\n /** Loop playback */\n isLooping: boolean;\n}\n\nexport interface UseVisualizationReturn {\n /** Current settings */\n settings: VisualizationSettings;\n /** Toggle visualization on/off */\n toggle: () => void;\n /** Set specific setting */\n setSetting: <K extends keyof VisualizationSettings>(\n key: K,\n value: VisualizationSettings[K]\n ) => void;\n /** Cycle to next variant */\n nextVariant: () => void;\n /** Cycle to next intensity */\n nextIntensity: () => void;\n /** Cycle to next color scheme */\n nextColorScheme: () => void;\n /** Reset to defaults */\n reset: () => void;\n}\n\n// Backward compatibility alias\nexport type UseAudioVisualizationReturn = UseVisualizationReturn;\n\n// =============================================================================\n// CONSTANTS\n// =============================================================================\n\nconst STORAGE_KEY = 'audio-player-settings';\n\nconst DEFAULT_SETTINGS: VisualizationSettings = {\n enabled: true,\n variant: 'spotlight',\n intensity: 'medium',\n colorScheme: 'primary',\n volume: 1,\n isLooping: false,\n};\n\nconst VARIANTS: VisualizationVariant[] = ['spotlight', 'glow', 'orbs', 'mesh', 'none'];\nconst INTENSITIES: VisualizationIntensity[] = ['subtle', 'medium', 'strong'];\nconst COLOR_SCHEMES: VisualizationColorScheme[] = ['primary', 'vibrant', 'cool', 'warm'];\n\n// =============================================================================\n// CONTEXT\n// =============================================================================\n\nconst VisualizationContext = createContext<UseVisualizationReturn | null>(null);\n\n// =============================================================================\n// PROVIDER\n// =============================================================================\n\nexport interface VisualizationProviderProps {\n children: ReactNode;\n}\n\nexport function VisualizationProvider({ children }: VisualizationProviderProps) {\n const value = useVisualizationState();\n return (\n <VisualizationContext.Provider value={value}>\n {children}\n </VisualizationContext.Provider>\n );\n}\n\n// =============================================================================\n// INTERNAL HOOK (creates the actual state)\n// =============================================================================\n\nfunction useVisualizationState(): UseVisualizationReturn {\n const [settings, setSettings] = useLocalStorage<VisualizationSettings>(\n STORAGE_KEY,\n DEFAULT_SETTINGS\n );\n\n const toggle = useCallback(() => {\n setSettings((prev) => ({ ...prev, enabled: !prev.enabled }));\n }, [setSettings]);\n\n const setSetting = useCallback(\n <K extends keyof VisualizationSettings>(\n key: K,\n value: VisualizationSettings[K]\n ) => {\n setSettings((prev) => ({ ...prev, [key]: value }));\n },\n [setSettings]\n );\n\n const nextVariant = useCallback(() => {\n setSettings((prev) => {\n const currentIndex = VARIANTS.indexOf(prev.variant);\n const nextIndex = (currentIndex + 1) % VARIANTS.length;\n return { ...prev, variant: VARIANTS[nextIndex] };\n });\n }, [setSettings]);\n\n const nextIntensity = useCallback(() => {\n setSettings((prev) => {\n const currentIndex = INTENSITIES.indexOf(prev.intensity);\n const nextIndex = (currentIndex + 1) % INTENSITIES.length;\n return { ...prev, intensity: INTENSITIES[nextIndex] };\n });\n }, [setSettings]);\n\n const nextColorScheme = useCallback(() => {\n setSettings((prev) => {\n const currentIndex = COLOR_SCHEMES.indexOf(prev.colorScheme);\n const nextIndex = (currentIndex + 1) % COLOR_SCHEMES.length;\n return { ...prev, colorScheme: COLOR_SCHEMES[nextIndex] };\n });\n }, [setSettings]);\n\n const reset = useCallback(() => {\n setSettings(DEFAULT_SETTINGS);\n }, [setSettings]);\n\n return useMemo(\n () => ({\n settings,\n toggle,\n setSetting,\n nextVariant,\n nextIntensity,\n nextColorScheme,\n reset,\n }),\n [settings, toggle, setSetting, nextVariant, nextIntensity, nextColorScheme, reset]\n );\n}\n\n// =============================================================================\n// HOOK (uses context when available)\n// =============================================================================\n\nexport function useVisualization(): UseVisualizationReturn {\n const context = useContext(VisualizationContext);\n\n // Always call the fallback hooks (React hooks rules require consistent calls)\n const fallbackState = useVisualizationState();\n\n // If inside a provider, use shared context; otherwise use fallback\n return context ?? fallbackState;\n}\n\n// Backward compatibility alias\nexport const useAudioVisualization = useVisualization;\n\n// =============================================================================\n// VARIANT INFO\n// =============================================================================\n\nexport const VARIANT_INFO: Record<VisualizationVariant, { label: string; icon: string }> = {\n spotlight: { label: 'Spotlight', icon: '💫' },\n glow: { label: 'Glow', icon: '✨' },\n orbs: { label: 'Orbs', icon: '🔮' },\n mesh: { label: 'Mesh', icon: '🌈' },\n none: { label: 'Off', icon: '⭕' },\n};\n\nexport const INTENSITY_INFO: Record<VisualizationIntensity, { label: string }> = {\n subtle: { label: 'Subtle' },\n medium: { label: 'Medium' },\n strong: { label: 'Strong' },\n};\n\nexport const COLOR_SCHEME_INFO: Record<VisualizationColorScheme, { label: string; preview: string }> = {\n primary: { label: 'Primary', preview: '🔵' },\n vibrant: { label: 'Vibrant', preview: '🌈' },\n cool: { label: 'Cool', preview: '💙' },\n warm: { label: 'Warm', preview: '🔥' },\n};\n","'use client';\n\n/**\n * HybridAudioProvider - Context provider for hybrid audio player.\n *\n * Provides audio state, controls, and analysis data to child components.\n * Uses native HTML5 audio for playback with Web Audio API for visualization only.\n */\n\nimport { createContext, useContext, useMemo, useEffect, useRef, type ReactNode } from 'react';\nimport {\n useHybridAudio,\n type UseHybridAudioOptions,\n type HybridAudioState,\n type HybridAudioControls,\n type HybridWebAudioAPI,\n} from '../hooks/useHybridAudio';\nimport { useHybridAudioAnalysis } from '../hooks/useHybridAudioAnalysis';\nimport { useVisualization } from '../hooks/useVisualization';\nimport type { AudioLevels } from '../effects';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface HybridAudioContextValue {\n // Audio state\n state: HybridAudioState;\n\n // Controls\n controls: HybridAudioControls;\n\n // Web Audio (for visualizations)\n webAudio: HybridWebAudioAPI;\n\n // Audio levels (for reactive effects)\n audioLevels: AudioLevels;\n\n // Audio element ref (for custom integrations)\n audioRef: React.RefObject<HTMLAudioElement | null>;\n}\n\n// =============================================================================\n// CONTEXT\n// =============================================================================\n\nconst HybridAudioContext = createContext<HybridAudioContextValue | null>(null);\n\n// =============================================================================\n// PROVIDER\n// =============================================================================\n\nexport interface HybridAudioProviderProps extends UseHybridAudioOptions {\n children: ReactNode;\n}\n\nexport function HybridAudioProvider({ children, ...options }: HybridAudioProviderProps) {\n // Load persisted settings (shared with visualization)\n const { settings: savedSettings, setSetting } = useVisualization();\n\n // Use saved settings as initial values\n const effectiveOptions = {\n ...options,\n initialVolume: savedSettings.volume,\n loop: savedSettings.isLooping,\n };\n\n const { audioRef, state, controls, webAudio } = useHybridAudio(effectiveOptions);\n\n // Track if we've applied initial settings\n const hasAppliedInitialSettings = useRef(false);\n\n // Apply saved settings after audio is ready (for hydration timing)\n useEffect(() => {\n if (!state.isReady || hasAppliedInitialSettings.current) return;\n hasAppliedInitialSettings.current = true;\n\n // Apply saved volume and loop settings\n controls.setVolume(savedSettings.volume);\n controls.setLoop(savedSettings.isLooping);\n }, [state.isReady, savedSettings, controls]);\n\n // Persist settings when they change\n useEffect(() => {\n if (!state.isReady) return;\n\n // Only save if values actually changed\n if (state.volume !== savedSettings.volume) {\n setSetting('volume', state.volume);\n }\n if (state.isLooping !== savedSettings.isLooping) {\n setSetting('isLooping', state.isLooping);\n }\n }, [state.isReady, state.volume, state.isLooping, savedSettings, setSetting]);\n\n // Audio analysis for reactive effects\n const audioLevels = useHybridAudioAnalysis(webAudio.analyser, state.isPlaying);\n\n const value = useMemo<HybridAudioContextValue>(\n () => ({\n state,\n controls,\n webAudio,\n audioLevels,\n audioRef,\n }),\n [state, controls, webAudio, audioLevels, audioRef]\n );\n\n return <HybridAudioContext.Provider value={value}>{children}</HybridAudioContext.Provider>;\n}\n\n// =============================================================================\n// HOOKS\n// =============================================================================\n\n/**\n * Access full hybrid audio context\n */\nexport function useHybridAudioContext(): HybridAudioContextValue {\n const context = useContext(HybridAudioContext);\n if (!context) {\n throw new Error('useHybridAudioContext must be used within HybridAudioProvider');\n }\n return context;\n}\n\n/**\n * Access audio state only (read-only)\n */\nexport function useHybridAudioState(): HybridAudioState {\n const { state } = useHybridAudioContext();\n return state;\n}\n\n/**\n * Access audio controls only (no state re-renders)\n */\nexport function useHybridAudioControls(): HybridAudioControls {\n const { controls } = useHybridAudioContext();\n return controls;\n}\n\n/**\n * Access audio levels for reactive effects\n */\nexport function useHybridAudioLevels(): AudioLevels {\n const { audioLevels } = useHybridAudioContext();\n return audioLevels;\n}\n\n/**\n * Access Web Audio API for custom visualizations\n */\nexport function useHybridWebAudio(): HybridWebAudioAPI {\n const { webAudio } = useHybridAudioContext();\n return webAudio;\n}\n","'use client';\n\n/**\n * HybridWaveform - Real-time frequency visualization for hybrid player.\n *\n * Two modes:\n * - 'frequency': Real-time frequency bars (default, requires playing audio)\n * - 'static': Static progress bar (for when no analyser is available)\n *\n * Features:\n * - Shows buffered regions\n * - Click to seek\n * - Responsive width\n */\n\nimport { useRef, useEffect, useCallback, memo } from 'react';\nimport { useHybridAudioContext } from '../context/HybridAudioProvider';\nimport { cn } from '@djangocfg/ui-core/lib';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface HybridWaveformProps {\n /** Visualization mode */\n mode?: 'frequency' | 'static';\n /** Canvas height in pixels */\n height?: number;\n /** Bar width in pixels */\n barWidth?: number;\n /** Gap between bars in pixels */\n barGap?: number;\n /** Bar border radius */\n barRadius?: number;\n /** Color for played portion */\n progressColor?: string;\n /** Color for unplayed portion */\n waveColor?: string;\n /** Color for buffered regions indicator */\n bufferedColor?: string;\n /** Additional CSS class */\n className?: string;\n /** Callback when user seeks */\n onSeek?: (time: number) => void;\n}\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\nexport const HybridWaveform = memo(function HybridWaveform({\n mode = 'frequency',\n height = 64,\n barWidth = 3,\n barGap = 2,\n barRadius = 2,\n progressColor = 'hsl(217 91% 60%)',\n waveColor = 'hsl(217 91% 60% / 0.3)',\n bufferedColor = 'hsl(217 91% 60% / 0.15)',\n className,\n onSeek,\n}: HybridWaveformProps) {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const animationRef = useRef<number | null>(null);\n const { state, controls, webAudio } = useHybridAudioContext();\n\n // Handle click to seek\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLCanvasElement>) => {\n const canvas = canvasRef.current;\n if (!canvas || !state.duration) return;\n\n const rect = canvas.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const progress = x / rect.width;\n const time = state.duration * progress;\n\n controls.seek(time);\n onSeek?.(time);\n },\n [state.duration, controls, onSeek]\n );\n\n // Render frequency bars (real-time visualization)\n const renderFrequency = useCallback(() => {\n const canvas = canvasRef.current;\n const analyser = webAudio.analyser;\n if (!canvas) return;\n\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n const { width, height: canvasHeight } = canvas;\n const dpr = window.devicePixelRatio || 1;\n const displayWidth = width / dpr;\n\n // Get frequency data if analyser is available\n let dataArray: Uint8Array<ArrayBuffer> | null = null;\n if (analyser) {\n dataArray = new Uint8Array(analyser.frequencyBinCount) as Uint8Array<ArrayBuffer>;\n analyser.getByteFrequencyData(dataArray);\n }\n\n ctx.clearRect(0, 0, width, canvasHeight);\n\n // Draw buffered regions at bottom\n if (state.buffered && state.duration > 0) {\n ctx.fillStyle = bufferedColor;\n for (let i = 0; i < state.buffered.length; i++) {\n const start = (state.buffered.start(i) / state.duration) * width;\n const end = (state.buffered.end(i) / state.duration) * width;\n ctx.fillRect(start, canvasHeight - 3 * dpr, end - start, 3 * dpr);\n }\n }\n\n // Calculate bar count based on available width\n const barCount = Math.floor(displayWidth / (barWidth + barGap));\n const progress = state.duration > 0 ? state.currentTime / state.duration : 0;\n const progressX = width * progress;\n\n // Draw bars\n for (let i = 0; i < barCount; i++) {\n let barHeight: number;\n\n if (dataArray && state.isPlaying) {\n // Real-time frequency data\n const step = Math.floor(dataArray.length / barCount);\n const value = dataArray[i * step] / 255;\n barHeight = Math.max(4 * dpr, value * (canvasHeight - 6 * dpr) * 0.9);\n } else {\n // Static fallback - small bars\n barHeight = 8 * dpr;\n }\n\n const x = i * (barWidth + barGap) * dpr;\n const y = (canvasHeight - barHeight) / 2;\n\n ctx.fillStyle = x < progressX ? progressColor : waveColor;\n\n // Draw rounded rect\n const radius = barRadius * dpr;\n const rectWidth = barWidth * dpr;\n ctx.beginPath();\n ctx.roundRect(x, y, rectWidth, barHeight, radius);\n ctx.fill();\n }\n\n // Continue animation if playing\n if (state.isPlaying) {\n animationRef.current = requestAnimationFrame(renderFrequency);\n }\n }, [\n webAudio.analyser,\n state.buffered,\n state.duration,\n state.currentTime,\n state.isPlaying,\n barWidth,\n barGap,\n barRadius,\n progressColor,\n waveColor,\n bufferedColor,\n ]);\n\n // Render static progress bar\n const renderStatic = useCallback(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n const { width, height: canvasHeight } = canvas;\n const dpr = window.devicePixelRatio || 1;\n\n ctx.clearRect(0, 0, width, canvasHeight);\n\n // Draw buffered regions\n if (state.buffered && state.duration > 0) {\n ctx.fillStyle = bufferedColor;\n for (let i = 0; i < state.buffered.length; i++) {\n const start = (state.buffered.start(i) / state.duration) * width;\n const end = (state.buffered.end(i) / state.duration) * width;\n ctx.fillRect(start, 0, end - start, canvasHeight);\n }\n }\n\n // Draw progress bar\n const progress = state.duration > 0 ? state.currentTime / state.duration : 0;\n const progressWidth = width * progress;\n\n // Background\n ctx.fillStyle = waveColor;\n ctx.fillRect(0, canvasHeight / 2 - 2 * dpr, width, 4 * dpr);\n\n // Progress\n ctx.fillStyle = progressColor;\n ctx.fillRect(0, canvasHeight / 2 - 2 * dpr, progressWidth, 4 * dpr);\n\n // Handle\n if (progress > 0) {\n ctx.beginPath();\n ctx.arc(progressWidth, canvasHeight / 2, 6 * dpr, 0, Math.PI * 2);\n ctx.fill();\n }\n }, [state.buffered, state.duration, state.currentTime, progressColor, waveColor, bufferedColor]);\n\n // Resize canvas to match container\n useEffect(() => {\n const container = containerRef.current;\n const canvas = canvasRef.current;\n if (!container || !canvas) return;\n\n const resizeObserver = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (!entry) return;\n\n const dpr = window.devicePixelRatio || 1;\n const displayWidth = entry.contentRect.width;\n const displayHeight = height;\n\n canvas.width = displayWidth * dpr;\n canvas.height = displayHeight * dpr;\n canvas.style.width = `${displayWidth}px`;\n canvas.style.height = `${displayHeight}px`;\n\n // Re-render after resize\n if (mode === 'frequency') {\n renderFrequency();\n } else {\n renderStatic();\n }\n });\n\n resizeObserver.observe(container);\n return () => resizeObserver.disconnect();\n }, [height, mode, renderFrequency, renderStatic]);\n\n // Animation loop for frequency mode\n useEffect(() => {\n if (mode === 'frequency') {\n renderFrequency();\n }\n\n return () => {\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current);\n }\n };\n }, [mode, renderFrequency]);\n\n // Re-render on time change for static mode\n useEffect(() => {\n if (mode === 'static') {\n renderStatic();\n }\n }, [mode, state.currentTime, renderStatic]);\n\n // Re-render frequency when playback state changes\n useEffect(() => {\n if (mode === 'frequency' && !state.isPlaying) {\n // One final render when stopped\n renderFrequency();\n }\n }, [mode, state.isPlaying, renderFrequency]);\n\n return (\n <div ref={containerRef} className={cn('w-full', className)}>\n <canvas\n ref={canvasRef}\n onClick={handleClick}\n className=\"cursor-pointer\"\n style={{ width: '100%', height }}\n />\n </div>\n );\n});\n","/**\n * formatTime - Format seconds to mm:ss string\n */\n\nexport function formatTime(seconds: number): string {\n if (!seconds || !isFinite(seconds) || seconds < 0) return '0:00';\n const mins = Math.floor(seconds / 60);\n const secs = Math.floor(seconds % 60);\n return `${mins}:${secs.toString().padStart(2, '0')}`;\n}\n","'use client';\n\n/**\n * AudioPlayer Debug Logger\n *\n * Uses universal logger with media-specific helpers.\n * Logs go to both console (dev) and zustand store (for Console panel).\n */\n\nimport { createMediaLogger } from '@djangocfg/ui-core/lib';\n\nexport const audioDebug = createMediaLogger('AudioPlayer');\n\nexport default audioDebug;\n","'use client';\n\n/**\n * HybridAudioPlayer - Audio playback controls with frequency visualization\n *\n * Uses HybridAudioContext for state management.\n * Native HTML5 audio for playback, Web Audio API for visualization only.\n *\n * Features:\n * - Real-time frequency visualization\n * - Playback controls (play, pause, skip, restart)\n * - Volume control with mute\n * - Loop toggle\n * - Keyboard shortcuts\n * - Timer display\n */\n\nimport { memo, useMemo } from 'react';\nimport {\n Play,\n Pause,\n RotateCcw,\n SkipBack,\n SkipForward,\n Volume2,\n VolumeX,\n Loader2,\n Repeat,\n} from 'lucide-react';\nimport { useTypedT, type I18nTranslations } from '@djangocfg/i18n';\nimport { Button, Slider, cn } from '../../_shared';\nimport { useHybridAudioContext } from '../context/HybridAudioProvider';\nimport { HybridWaveform } from './HybridWaveform';\nimport { formatTime } from '../utils';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface HybridAudioPlayerProps {\n /** Show playback controls */\n showControls?: boolean;\n /** Show frequency waveform */\n showWaveform?: boolean;\n /** Waveform visualization mode */\n waveformMode?: 'frequency' | 'static';\n /** Waveform height in pixels */\n waveformHeight?: number;\n /** Show time display */\n showTimer?: boolean;\n /** Show volume control */\n showVolume?: boolean;\n /** Show loop button */\n showLoop?: boolean;\n /** Additional CSS class */\n className?: string;\n /** Inline styles */\n style?: React.CSSProperties;\n}\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\nexport const HybridAudioPlayer = memo(function HybridAudioPlayer({\n showControls = true,\n showWaveform = true,\n waveformMode = 'frequency',\n waveformHeight = 64,\n showTimer = true,\n showVolume = true,\n showLoop = true,\n className,\n style,\n}: HybridAudioPlayerProps) {\n const t = useTypedT<I18nTranslations>();\n const { state, controls } = useHybridAudioContext();\n\n const labels = useMemo(() => ({\n restart: t('tools.audio.restart'),\n back: t('tools.audio.back'),\n forward: t('tools.audio.forward'),\n volume: t('tools.audio.volume'),\n }), [t]);\n\n const isLoading = !state.isReady;\n\n const handleVolumeChange = (value: number[]) => {\n controls.setVolume(value[0] / 100);\n };\n\n return (\n <div\n className={cn('flex flex-col gap-3 p-4 rounded-lg bg-card border', className)}\n style={style}\n >\n {/* Frequency Waveform */}\n {showWaveform && (\n <div className=\"relative\">\n <HybridWaveform\n mode={waveformMode}\n height={waveformHeight}\n className={cn(isLoading && 'opacity-50')}\n />\n {isLoading && (\n <div className=\"absolute inset-0 flex items-center justify-center\">\n <Loader2 className=\"h-6 w-6 animate-spin text-primary\" />\n </div>\n )}\n </div>\n )}\n\n {/* Timer */}\n {showTimer && (\n <div className=\"flex justify-between text-xs text-muted-foreground tabular-nums px-1\">\n <span>{formatTime(state.currentTime)}</span>\n <span>{formatTime(state.duration)}</span>\n </div>\n )}\n\n {/* Controls */}\n {showControls && (\n <div className=\"flex items-center justify-center gap-1\">\n {/* Restart */}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-9 w-9\"\n onClick={controls.restart}\n disabled={!state.isReady}\n title={labels.restart}\n >\n <RotateCcw className=\"h-4 w-4\" />\n </Button>\n\n {/* Skip back 5s */}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-9 w-9\"\n onClick={() => controls.skip(-5)}\n disabled={!state.isReady}\n title={labels.back}\n >\n <SkipBack className=\"h-4 w-4\" />\n </Button>\n\n {/* Play/Pause */}\n <Button\n variant=\"default\"\n size=\"icon\"\n className=\"h-12 w-12 rounded-full\"\n onClick={controls.togglePlay}\n disabled={!state.isReady && !isLoading}\n title={state.isPlaying ? 'Pause' : 'Play'}\n >\n {isLoading ? (\n <Loader2 className=\"h-5 w-5 animate-spin\" />\n ) : state.isPlaying ? (\n <Pause className=\"h-5 w-5\" />\n ) : (\n <Play className=\"h-5 w-5 ml-0.5\" />\n )}\n </Button>\n\n {/* Skip forward 5s */}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-9 w-9\"\n onClick={() => controls.skip(5)}\n disabled={!state.isReady}\n title={labels.forward}\n >\n <SkipForward className=\"h-4 w-4\" />\n </Button>\n\n {/* Volume */}\n {showVolume && (\n <>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-9 w-9\"\n onClick={controls.toggleMute}\n title={state.isMuted ? 'Unmute' : 'Mute'}\n >\n {state.isMuted || state.volume === 0 ? (\n <VolumeX className=\"h-4 w-4\" />\n ) : (\n <Volume2 className=\"h-4 w-4\" />\n )}\n </Button>\n\n <Slider\n value={[state.isMuted ? 0 : state.volume * 100]}\n max={100}\n step={1}\n onValueChange={handleVolumeChange}\n className=\"w-20\"\n aria-label={labels.volume}\n />\n </>\n )}\n\n {/* Loop/Repeat */}\n {showLoop && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn('h-9 w-9', state.isLooping && 'text-primary')}\n onClick={controls.toggleLoop}\n disabled={!state.isReady}\n title={state.isLooping ? 'Disable loop' : 'Enable loop'}\n >\n <Repeat className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n )}\n </div>\n );\n});\n\nexport default HybridAudioPlayer;\n","/**\n * Audio Reactive Effects - Common utilities and types\n *\n * Provides reusable effect calculations and configurations\n */\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type EffectVariant = 'glow' | 'orbs' | 'spotlight' | 'mesh';\nexport type EffectIntensity = 'subtle' | 'medium' | 'strong';\nexport type EffectColorScheme = 'primary' | 'vibrant' | 'cool' | 'warm';\n\nexport interface AudioLevels {\n bass: number;\n mid: number;\n high: number;\n overall: number;\n}\n\nexport interface EffectConfig {\n opacity: number;\n scale: number;\n blur: string;\n}\n\nexport interface EffectColors {\n colors: string[];\n hueShift: number;\n}\n\nexport interface EffectLayer {\n inset: number;\n opacity: number;\n scale: number;\n background: string;\n blur: string;\n animation?: string;\n}\n\n// =============================================================================\n// CONSTANTS\n// =============================================================================\n\nexport const INTENSITY_CONFIG: Record<EffectIntensity, EffectConfig> = {\n subtle: { opacity: 0.3, scale: 0.02, blur: 'blur-2xl' },\n medium: { opacity: 0.5, scale: 0.04, blur: 'blur-xl' },\n strong: { opacity: 0.7, scale: 0.06, blur: 'blur-lg' },\n};\n\nexport const COLOR_SCHEMES: Record<EffectColorScheme, string[]> = {\n primary: ['217 91% 60%'],\n vibrant: ['217 91% 60%', '142 76% 36%', '262 83% 58%', '25 95% 53%'],\n cool: ['217 91% 60%', '262 83% 58%', '199 89% 48%'],\n warm: ['25 95% 53%', '0 84% 60%', '38 92% 50%'],\n};\n\n// Default multi-color palette when single color provided\nconst DEFAULT_GLOW_COLORS = [\n '217 91% 60%', // Blue\n '262 83% 58%', // Purple\n '330 81% 60%', // Pink\n '25 95% 53%', // Orange\n];\n\n// =============================================================================\n// UTILITIES\n// =============================================================================\n\n/**\n * Get effect configuration from intensity setting\n */\nexport function getEffectConfig(intensity: EffectIntensity): EffectConfig {\n return INTENSITY_CONFIG[intensity];\n}\n\n/**\n * Get color array from color scheme\n */\nexport function getColors(colorScheme: EffectColorScheme): string[] {\n return COLOR_SCHEMES[colorScheme];\n}\n\n/**\n * Prepare colors with hue shift based on audio levels\n */\nexport function prepareEffectColors(\n colorScheme: EffectColorScheme,\n levels: AudioLevels\n): EffectColors {\n const baseColors = COLOR_SCHEMES[colorScheme];\n const colors = baseColors.length > 1 ? baseColors : DEFAULT_GLOW_COLORS;\n const hueShift = Math.floor(\n (levels.bass * 30) + (levels.mid * 20) + (levels.high * 10)\n );\n\n return { colors, hueShift };\n}\n\n/**\n * Calculate glow layer properties\n */\nexport function calculateGlowLayers(\n levels: AudioLevels,\n config: EffectConfig,\n colors: string[]\n): EffectLayer[] {\n const { bass, mid, high } = levels;\n\n return [\n // Layer 1: Bass glow - bottom\n {\n inset: 60 + bass * 90,\n opacity: 1,\n scale: 1 + bass * 0.5,\n background: `radial-gradient(ellipse 80% 60% at 50% 100%, hsl(${colors[0]} / ${0.4 + bass * 0.4}) 0%, transparent 70%)`,\n blur: 'blur-3xl',\n },\n // Layer 2: Mid glow - top\n {\n inset: 45 + mid * 75,\n opacity: 1,\n scale: 1 + mid * 0.4,\n background: `radial-gradient(ellipse 70% 50% at 50% 0%, hsl(${colors[1] || colors[0]} / ${0.3 + mid * 0.5}) 0%, transparent 70%)`,\n blur: 'blur-2xl',\n },\n // Layer 3: High glow - left\n {\n inset: 30 + high * 60,\n opacity: 1,\n scale: 1 + high * 0.3,\n background: `radial-gradient(ellipse 50% 80% at 0% 50%, hsl(${colors[2] || colors[0]} / ${0.3 + high * 0.4}) 0%, transparent 60%)`,\n blur: 'blur-2xl',\n },\n // Layer 4: High glow - right\n {\n inset: 30 + high * 60,\n opacity: 1,\n scale: 1 + high * 0.3,\n background: `radial-gradient(ellipse 50% 80% at 100% 50%, hsl(${colors[3] || colors[0]} / ${0.3 + high * 0.4}) 0%, transparent 60%)`,\n blur: 'blur-2xl',\n },\n // Layer 5: Center pulsing glow\n {\n inset: 24 + bass * 45,\n opacity: 1,\n scale: 1 + bass * 0.2,\n background: `radial-gradient(circle at 50% 50%, hsl(${colors[0]} / ${0.2 + bass * 0.3}) 0%, hsl(${colors[1] || colors[0]} / ${0.1 + mid * 0.2}) 40%, transparent 70%)`,\n blur: 'blur-xl',\n animation: 'glow-breathe 2s ease-in-out infinite',\n },\n ];\n}\n\n/**\n * Calculate orb positions and properties - highly reactive\n */\nexport function calculateOrbs(\n levels: AudioLevels,\n config: EffectConfig,\n colors: string[],\n baseSize: number = 50\n) {\n const { bass, mid, high, overall } = levels;\n const size = baseSize * 3;\n\n // Dynamic position offsets\n const bassMove = bass * 30;\n const midMove = mid * 25;\n const highMove = high * 20;\n\n return [\n // Bass orb - top left, big pulses\n {\n x: -40 + bassMove,\n y: -40 - bassMove * 0.5,\n size: size * (1 + bass * 1.2),\n color: colors[0],\n opacity: 0.5 + bass * 0.5,\n scale: 1 + bass * 0.6,\n },\n // Mid orb - top right\n {\n x: 130 - midMove * 0.5,\n y: -30 + midMove,\n size: size * (0.9 + mid * 1.0),\n color: colors[1] || colors[0],\n opacity: 0.5 + mid * 0.5,\n scale: 1 + mid * 0.5,\n },\n // High orb - bottom right\n {\n x: 140 + highMove * 0.3,\n y: 120 - highMove,\n size: size * (0.8 + high * 0.8),\n color: colors[2] || colors[0],\n opacity: 0.4 + high * 0.6,\n scale: 1 + high * 0.45,\n },\n // Mid orb 2 - bottom left\n {\n x: -30 - midMove * 0.4,\n y: 130 + midMove * 0.3,\n size: size * (0.9 + mid * 0.9),\n color: colors[3] || colors[0],\n opacity: 0.45 + mid * 0.55,\n scale: 1 + mid * 0.5,\n },\n // Center overall orb\n {\n x: 50,\n y: 50,\n size: size * (0.6 + overall * 1.5),\n color: colors[0],\n opacity: 0.3 + overall * 0.5,\n scale: 1 + overall * 0.7,\n },\n ];\n}\n\n/**\n * Calculate mesh gradient positions - dynamic and reactive\n */\nexport function calculateMeshGradients(\n levels: AudioLevels,\n config: EffectConfig,\n colors: string[]\n) {\n const { bass, mid, high, overall } = levels;\n\n // More aggressive offsets for visible movement\n const bassOffset = bass * 40;\n const midOffset = mid * 30;\n const highOffset = high * 25;\n\n return [\n // Large bass blob - top right, pulses hard\n {\n width: `${200 + bass * 150}%`,\n height: `${200 + bass * 150}%`,\n top: `${-80 + bassOffset}%`,\n right: `${-80 - bassOffset}%`,\n color: colors[0],\n opacity: 0.4 + bass * 0.6,\n scale: 1 + bass * 0.5,\n rotation: bass * 45,\n blur: 'blur-2xl',\n },\n // Mid blob - bottom left\n {\n width: `${180 + mid * 120}%`,\n height: `${180 + mid * 120}%`,\n bottom: `${-60 + midOffset}%`,\n left: `${-60 - midOffset}%`,\n color: colors[1] || colors[0],\n opacity: 0.4 + mid * 0.6,\n scale: 1 + mid * 0.4,\n rotation: -mid * 40,\n blur: 'blur-2xl',\n },\n // High blob - bottom right\n {\n width: `${140 + high * 100}%`,\n height: `${140 + high * 100}%`,\n top: `${70 - highOffset}%`,\n right: `${-50 + highOffset}%`,\n color: colors[2] || colors[0],\n opacity: 0.35 + high * 0.65,\n scale: 1 + high * 0.35,\n rotation: high * 35,\n blur: 'blur-xl',\n },\n // Extra bass reactive blob - top left\n {\n width: `${160 + bass * 140}%`,\n height: `${160 + bass * 140}%`,\n top: `${-60 - bassOffset * 0.8}%`,\n left: `${-60 + bassOffset * 0.8}%`,\n color: colors[3] || colors[1] || colors[0],\n opacity: 0.35 + bass * 0.65,\n scale: 1 + bass * 0.55,\n rotation: -bass * 50,\n blur: 'blur-2xl',\n },\n // Center glow - pulses with overall\n {\n width: `${80 + overall * 150}%`,\n height: `${80 + overall * 150}%`,\n top: '50%',\n left: '50%',\n color: colors[0],\n opacity: 0.3 + overall * 0.5,\n scale: 1 + overall * 0.4,\n rotation: 0,\n isCenter: true,\n blur: 'blur-3xl',\n },\n ];\n}\n\n/**\n * Calculate spotlight effect properties - highly reactive\n */\nexport function calculateSpotlight(\n levels: AudioLevels,\n config: EffectConfig,\n colors: string[],\n rotation: number\n) {\n const { bass, mid, high, overall } = levels;\n\n return {\n // Rotation speed increases with mid frequencies\n rotation: rotation + mid * 180,\n // Border expands with bass\n inset: 12 + bass * 30,\n // Color intensities react to different frequencies\n colors: colors.map((c, i) => ({\n color: c,\n opacity: i === 0\n ? 0.3 + bass * 0.7\n : i === 1\n ? 0.3 + mid * 0.7\n : 0.3 + high * 0.7,\n })),\n // Pulse glow - big and reactive\n pulseInset: 24 + bass * 50,\n pulseOpacity: 0.3 + bass * 0.7,\n pulseScale: 1 + bass * 0.4,\n // Extra glow ring\n ringOpacity: 0.2 + overall * 0.6,\n ringScale: 1 + overall * 0.3,\n };\n}\n\n/**\n * CSS for effect animations - can be injected once\n */\nexport const EFFECT_ANIMATIONS = `\n @keyframes spotlight-spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n\n @keyframes orb-float-1 {\n 0%, 100% { transform: translate(-50%, -50%) translateY(0); }\n 50% { transform: translate(-50%, -50%) translateY(-15px); }\n }\n\n @keyframes orb-float-2 {\n 0%, 100% { transform: translate(-50%, -50%) translateX(0); }\n 50% { transform: translate(-50%, -50%) translateX(15px); }\n }\n\n @keyframes orb-float-3 {\n 0%, 100% { transform: translate(-50%, -50%) translate(0, 0); }\n 33% { transform: translate(-50%, -50%) translate(10px, -10px); }\n 66% { transform: translate(-50%, -50%) translate(-10px, 10px); }\n }\n\n @keyframes orb-float-4 {\n 0%, 100% { transform: translate(-50%, -50%) translate(0, 0); }\n 50% { transform: translate(-50%, -50%) translate(-15px, -10px); }\n }\n\n @keyframes mesh-float-1 {\n 0%, 100% { transform: translate(0, 0) scale(1); }\n 25% { transform: translate(-5%, 10%) scale(1.05); }\n 50% { transform: translate(5%, 5%) scale(0.95); }\n 75% { transform: translate(-3%, -5%) scale(1.02); }\n }\n\n @keyframes mesh-float-2 {\n 0%, 100% { transform: translate(0, 0) scale(1); }\n 33% { transform: translate(8%, -8%) scale(1.08); }\n 66% { transform: translate(-6%, 6%) scale(0.92); }\n }\n\n @keyframes mesh-float-3 {\n 0%, 100% { transform: translate(0, 0) scale(1); }\n 50% { transform: translate(10%, 10%) scale(1.1); }\n }\n\n @keyframes mesh-float-4 {\n 0%, 100% { transform: translate(0, 0) scale(1) rotate(0deg); }\n 25% { transform: translate(10%, -5%) scale(1.1) rotate(5deg); }\n 50% { transform: translate(-5%, 10%) scale(0.95) rotate(-5deg); }\n 75% { transform: translate(-10%, -10%) scale(1.05) rotate(3deg); }\n }\n\n @keyframes mesh-pulse {\n 0%, 100% { transform: translate(-50%, -50%) scale(1); opacity: 0.3; }\n 50% { transform: translate(-50%, -50%) scale(1.2); opacity: 0.5; }\n }\n\n @keyframes glow-breathe {\n 0%, 100% { opacity: 0.6; transform: scale(1); }\n 50% { opacity: 1; transform: scale(1.05); }\n }\n\n @keyframes glow-rotate {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n\n @keyframes sparkle-move {\n 0% { opacity: 0; transform: scale(0.8); }\n 50% { opacity: 1; }\n 100% { opacity: 0; transform: scale(1.2); }\n }\n`;\n","'use client';\n\n/**\n * GlowEffect - Multi-layer glow effect with pulse rings\n */\n\nimport { cn } from '../../../../_shared';\nimport type { calculateGlowLayers } from '../../../effects';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface GlowEffectData {\n layers: ReturnType<typeof calculateGlowLayers>;\n hueShift: number;\n showPulseRings: boolean;\n showSparkle: boolean;\n}\n\ninterface GlowEffectProps {\n data: GlowEffectData;\n colors: string[];\n isPlaying: boolean;\n}\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\nexport function GlowEffect({ data, colors, isPlaying }: GlowEffectProps) {\n const { layers, hueShift, showPulseRings, showSparkle } = data;\n\n return (\n <>\n {/* Main glow layers */}\n {layers.map((layer, i) => (\n <div\n key={i}\n className={cn('absolute rounded-2xl -z-10', layer.blur)}\n style={{\n inset: `-${layer.inset}px`,\n background: layer.background,\n opacity: isPlaying ? layer.opacity : 0,\n transform: i < 2 ? `scaleY(${layer.scale})` : `scale(${layer.scale})`,\n animation: isPlaying && layer.animation ? layer.animation : 'none',\n transition: 'opacity 0.3s',\n }}\n />\n ))}\n\n {/* Rotating color sweep */}\n <div\n className=\"absolute rounded-2xl blur-xl overflow-hidden -z-10\"\n style={{\n inset: '-75px',\n opacity: isPlaying ? 0.6 : 0,\n transition: 'opacity 0.5s',\n }}\n >\n <div\n className=\"absolute inset-0\"\n style={{\n background: `conic-gradient(\n from ${hueShift}deg at 50% 50%,\n hsl(${colors[0]} / 0.4) 0deg,\n hsl(${colors[1] || colors[0]} / 0.3) 90deg,\n hsl(${colors[2] || colors[0]} / 0.3) 180deg,\n hsl(${colors[3] || colors[0]} / 0.3) 270deg,\n hsl(${colors[0]} / 0.4) 360deg\n )`,\n animation: isPlaying ? 'glow-rotate 6s linear infinite' : 'none',\n }}\n />\n </div>\n\n {/* Pulse rings on bass hits */}\n {showPulseRings && (\n <>\n <div\n className=\"absolute -inset-6 rounded-xl border-2 animate-ping -z-10\"\n style={{\n borderColor: `hsl(${colors[0]} / 0.4)`,\n animationDuration: '1s',\n }}\n />\n <div\n className=\"absolute -inset-12 rounded-2xl border animate-ping -z-10\"\n style={{\n borderColor: `hsl(${colors[1] || colors[0]} / 0.3)`,\n animationDuration: '1.5s',\n animationDelay: '0.2s',\n }}\n />\n </>\n )}\n\n {/* Sparkle on high frequencies */}\n {showSparkle && (\n <div\n className=\"absolute -inset-18 rounded-3xl -z-10\"\n style={{\n background: `radial-gradient(circle at 50% 30%, hsl(${colors[2] || colors[0]} / 0.5) 0%, transparent 30%)`,\n animation: 'sparkle-move 0.5s ease-out',\n }}\n />\n )}\n </>\n );\n}\n","'use client';\n\n/**\n * OrbsEffect - Floating orb particles that react to audio\n */\n\nimport { cn } from '../../../../_shared';\nimport type { calculateOrbs } from '../../../effects';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\ninterface OrbsEffectProps {\n orbs: ReturnType<typeof calculateOrbs>;\n blur: string;\n isPlaying: boolean;\n}\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\nexport function OrbsEffect({ orbs, blur, isPlaying }: OrbsEffectProps) {\n return (\n <>\n {orbs.map((orb, i) => (\n <div\n key={i}\n className={cn('absolute rounded-full -z-10', blur)}\n style={{\n width: orb.size,\n height: orb.size,\n left: `${orb.x}%`,\n top: `${orb.y}%`,\n background: `radial-gradient(circle at 30% 30%, hsl(${orb.color}) 0%, hsl(${orb.color} / 0.5) 40%, transparent 70%)`,\n opacity: isPlaying ? orb.opacity : 0,\n transform: `translate(-50%, -50%) scale(${orb.scale})`,\n transition: 'all 0.08s ease-out',\n }}\n />\n ))}\n </>\n );\n}\n","'use client';\n\n/**\n * SpotlightEffect - Rotating spotlight with conic gradients\n */\n\nimport { cn } from '../../../../_shared';\nimport type { calculateSpotlight } from '../../../effects';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\ninterface SpotlightEffectProps {\n data: ReturnType<typeof calculateSpotlight>;\n colors: string[];\n blur: string;\n isPlaying: boolean;\n}\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\nexport function SpotlightEffect({ data, colors, blur, isPlaying }: SpotlightEffectProps) {\n const inset = 'inset' in data ? data.inset : 12;\n const pulseInset = 'pulseInset' in data ? data.pulseInset : 24;\n const ringOpacity = 'ringOpacity' in data ? data.ringOpacity : 0.3;\n const ringScale = 'ringScale' in data ? data.ringScale : 1;\n\n return (\n <>\n {/* Rotating conic gradient - reactive size */}\n <div\n className={cn('absolute rounded-xl -z-10', blur)}\n style={{\n inset: `-${inset}px`,\n background: `conic-gradient(\n from ${data.rotation}deg,\n hsl(${colors[0]} / ${data.colors[0]?.opacity || 0.5}),\n hsl(${colors[1] || colors[0]} / ${data.colors[1]?.opacity || 0.7}),\n hsl(${colors[2] || colors[0]} / ${data.colors[2]?.opacity || 0.5}),\n hsl(${colors[0]} / ${data.colors[1]?.opacity || 0.7}),\n hsl(${colors[0]} / ${data.colors[0]?.opacity || 0.5})\n )`,\n opacity: isPlaying ? 1 : 0,\n transition: 'all 0.08s ease-out',\n }}\n />\n\n {/* Inner border */}\n <div\n className=\"absolute -inset-1 rounded-lg bg-background -z-10\"\n style={{ opacity: isPlaying ? 1 : 0, transition: 'opacity 0.1s' }}\n />\n\n {/* Bass pulse glow - reactive size */}\n <div\n className={cn('absolute rounded-2xl -z-10', blur)}\n style={{\n inset: `-${pulseInset}px`,\n background: `radial-gradient(circle, hsl(${colors[0]} / 0.7) 0%, hsl(${colors[0]} / 0.3) 50%, transparent 70%)`,\n opacity: isPlaying ? data.pulseOpacity : 0,\n transform: `scale(${data.pulseScale})`,\n transition: 'all 0.08s ease-out',\n }}\n />\n\n {/* Outer ring glow */}\n <div\n className=\"absolute rounded-3xl -z-10 blur-2xl\"\n style={{\n inset: `-${pulseInset + 30}px`,\n background: `radial-gradient(circle, hsl(${colors[1] || colors[0]} / 0.4) 0%, transparent 60%)`,\n opacity: isPlaying ? ringOpacity : 0,\n transform: `scale(${ringScale})`,\n transition: 'all 0.08s ease-out',\n }}\n />\n </>\n );\n}\n","'use client';\n\n/**\n * MeshEffect - Mesh gradient blobs that react to audio\n */\n\nimport { cn } from '../../../../_shared';\nimport type { calculateMeshGradients } from '../../../effects';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\ninterface MeshEffectProps {\n gradients: ReturnType<typeof calculateMeshGradients>;\n blur: string;\n isPlaying: boolean;\n}\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\nexport function MeshEffect({ gradients, isPlaying }: MeshEffectProps) {\n return (\n <>\n {gradients.map((g, i) => {\n const isCenter = 'isCenter' in g && g.isCenter;\n const scale = 'scale' in g ? g.scale : 1;\n const rotation = 'rotation' in g ? g.rotation : 0;\n const itemBlur = 'blur' in g ? g.blur : 'blur-2xl';\n\n return (\n <div\n key={i}\n className={cn('absolute rounded-full -z-10', itemBlur)}\n style={{\n width: g.width,\n height: g.height,\n top: 'top' in g ? g.top : undefined,\n bottom: 'bottom' in g ? g.bottom : undefined,\n left: 'left' in g ? g.left : undefined,\n right: 'right' in g ? g.right : undefined,\n background: isCenter\n ? `radial-gradient(circle, hsl(${g.color} / 0.6) 0%, hsl(${g.color} / 0.3) 30%, transparent 60%)`\n : `radial-gradient(circle, hsl(${g.color}) 0%, hsl(${g.color} / 0.5) 30%, transparent 65%)`,\n opacity: isPlaying ? g.opacity : 0,\n transform: isCenter\n ? `translate(-50%, -50%) scale(${scale})`\n : `scale(${scale}) rotate(${rotation}deg)`,\n transition: 'all 0.08s ease-out',\n }}\n />\n );\n })}\n </>\n );\n}\n","'use client';\n\n/**\n * AudioReactiveCover - Album art with audio-reactive animations\n *\n * Uses effects utilities for clean data preparation before render.\n * Click on cover to switch between effect variants.\n *\n * Must be used within HybridAudioProvider context.\n */\n\nimport { type ReactNode } from 'react';\nimport { cn } from '../../../_shared';\nimport { useHybridAudioLevels, useHybridAudioState } from '../../context/HybridAudioProvider';\nimport {\n type EffectVariant,\n type EffectIntensity,\n type EffectColorScheme,\n getEffectConfig,\n prepareEffectColors,\n calculateGlowLayers,\n calculateOrbs,\n calculateMeshGradients,\n calculateSpotlight,\n EFFECT_ANIMATIONS,\n} from '../../effects';\nimport { GlowEffect, OrbsEffect, SpotlightEffect, MeshEffect, type GlowEffectData } from './effects';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface AudioReactiveCoverProps {\n children: ReactNode;\n size?: 'sm' | 'md' | 'lg';\n variant?: EffectVariant;\n intensity?: EffectIntensity;\n colorScheme?: EffectColorScheme;\n onClick?: () => void;\n className?: string;\n}\n\n// =============================================================================\n// CONSTANTS\n// =============================================================================\n\nconst SIZES = {\n sm: { container: 'w-32 h-32', orbBase: 40 },\n md: { container: 'w-40 h-40', orbBase: 50 },\n lg: { container: 'w-48 h-48', orbBase: 60 },\n};\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\nexport function AudioReactiveCover({\n children,\n size = 'lg',\n variant = 'spotlight',\n intensity = 'medium',\n colorScheme = 'primary',\n onClick,\n className,\n}: AudioReactiveCoverProps) {\n // Get audio state from HybridAudioProvider context\n const { isPlaying } = useHybridAudioState();\n const levels = useHybridAudioLevels();\n\n // =========================================================================\n // PREPARE DATA BEFORE RENDER\n // =========================================================================\n\n const sizeConfig = SIZES[size];\n const effectConfig = getEffectConfig(intensity);\n const { colors, hueShift } = prepareEffectColors(colorScheme, levels);\n\n // Calculate scale based on overall level\n const containerScale = 1 + levels.overall * effectConfig.scale;\n\n // Prepare effect-specific data - NO memoization for real-time reactivity\n const glowData: GlowEffectData | null = variant === 'glow' ? {\n layers: calculateGlowLayers(levels, effectConfig, colors),\n hueShift,\n showPulseRings: levels.bass > 0.5,\n showSparkle: levels.high > 0.4,\n } : null;\n\n const orbsData = variant === 'orbs'\n ? calculateOrbs(levels, effectConfig, colors, sizeConfig.orbBase)\n : null;\n\n const meshData = variant === 'mesh'\n ? calculateMeshGradients(levels, effectConfig, colors)\n : null;\n\n const spotlightData = variant === 'spotlight'\n ? calculateSpotlight(levels, effectConfig, colors, levels.mid * 360)\n : null;\n\n // =========================================================================\n // RENDER\n // =========================================================================\n\n return (\n <div\n className={cn('relative', sizeConfig.container, className)}\n style={{\n transform: `scale(${containerScale})`,\n transition: 'transform 0.1s ease-out',\n }}\n >\n {/* Effect layers container - under cover, non-interactive */}\n <div className=\"absolute inset-0 z-0 pointer-events-none overflow-visible\">\n {glowData && (\n <GlowEffect data={glowData} colors={colors} isPlaying={isPlaying} />\n )}\n\n {orbsData && (\n <OrbsEffect orbs={orbsData} blur={effectConfig.blur} isPlaying={isPlaying} />\n )}\n\n {spotlightData && (\n <SpotlightEffect data={spotlightData} colors={colors} blur={effectConfig.blur} isPlaying={isPlaying} />\n )}\n\n {meshData && (\n <MeshEffect gradients={meshData} blur={effectConfig.blur} isPlaying={isPlaying} />\n )}\n </div>\n\n {/* Content (cover art) */}\n <div\n className=\"relative w-full h-full rounded-lg overflow-hidden shadow-2xl z-10 bg-background cursor-pointer\"\n onClick={onClick}\n role={onClick ? 'button' : undefined}\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={onClick ? (e) => e.key === 'Enter' && onClick() : undefined}\n >\n {children}\n </div>\n\n {/* Inject animations once */}\n <style dangerouslySetInnerHTML={{ __html: EFFECT_ANIMATIONS }} />\n </div>\n );\n}\n\nexport default AudioReactiveCover;\n","'use client';\n\n/**\n * HybridSimplePlayer - Easy-to-use hybrid audio player wrapper\n *\n * Combines HybridAudioProvider + HybridAudioPlayer + optional reactive cover\n * in a single component with sensible defaults.\n *\n * Uses native HTML5 audio for playback (no crackling) with Web Audio API\n * for visualization only.\n *\n * @example\n * // Minimal usage\n * <HybridSimplePlayer src=\"https://example.com/audio.mp3\" />\n *\n * @example\n * // With cover art and reactive effects\n * <HybridSimplePlayer\n * src={audioUrl}\n * title=\"Track Title\"\n * artist=\"Artist Name\"\n * coverArt=\"/path/to/cover.jpg\"\n * reactiveCover\n * variant=\"spotlight\"\n * />\n */\n\nimport { type ReactNode } from 'react';\nimport { Music } from 'lucide-react';\nimport { cn } from '@djangocfg/ui-core';\n\nimport { HybridAudioProvider } from '../context/HybridAudioProvider';\nimport { HybridAudioPlayer } from './HybridAudioPlayer';\nimport { AudioReactiveCover } from './ReactiveCover';\nimport { VisualizationProvider, useVisualization } from '../hooks';\nimport type { EffectIntensity, EffectColorScheme } from '../effects';\nimport type { VisualizationVariant } from '../hooks';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface HybridSimplePlayerProps {\n /** Audio source URL */\n src: string;\n\n /** Track title */\n title?: string;\n\n /** Artist name */\n artist?: string;\n\n /** Cover art URL or ReactNode */\n coverArt?: string | ReactNode;\n\n /** Cover art size */\n coverSize?: 'sm' | 'md' | 'lg';\n\n /** Show frequency waveform */\n showWaveform?: boolean;\n\n /** Waveform visualization mode */\n waveformMode?: 'frequency' | 'static';\n\n /** Waveform height in pixels */\n waveformHeight?: number;\n\n /** Show timer */\n showTimer?: boolean;\n\n /** Show volume control */\n showVolume?: boolean;\n\n /** Show loop/repeat button */\n showLoop?: boolean;\n\n /** Enable audio-reactive cover effects */\n reactiveCover?: boolean;\n\n /** Reactive effect variant */\n variant?: VisualizationVariant;\n\n /** Reactive effect intensity */\n intensity?: EffectIntensity;\n\n /** Reactive effect color scheme */\n colorScheme?: EffectColorScheme;\n\n /** Auto-play on load */\n autoPlay?: boolean;\n\n /** Loop playback */\n loop?: boolean;\n\n /** Initial volume (0-1) */\n initialVolume?: number;\n\n /** Layout direction */\n layout?: 'vertical' | 'horizontal';\n\n /** Additional class name */\n className?: string;\n\n /** Callbacks */\n onPlay?: () => void;\n onPause?: () => void;\n onEnded?: () => void;\n onError?: (error: Error) => void;\n}\n\n// =============================================================================\n// CONSTANTS\n// =============================================================================\n\nconst COVER_SIZES = {\n sm: 'w-24 h-24',\n md: 'w-32 h-32',\n lg: 'w-48 h-48',\n};\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\nexport function HybridSimplePlayer(props: HybridSimplePlayerProps) {\n return (\n <VisualizationProvider>\n <HybridSimplePlayerContent {...props} />\n </VisualizationProvider>\n );\n}\n\nfunction HybridSimplePlayerContent({\n src,\n title,\n artist,\n coverArt,\n coverSize = 'md',\n showWaveform = true,\n waveformMode = 'frequency',\n waveformHeight = 64,\n showTimer = true,\n showVolume = true,\n showLoop = true,\n reactiveCover = true,\n variant,\n intensity,\n colorScheme,\n autoPlay = false,\n loop = false,\n initialVolume = 1,\n layout = 'vertical',\n className,\n onPlay,\n onPause,\n onEnded,\n onError,\n}: HybridSimplePlayerProps) {\n const { settings: vizSettings, nextVariant } = useVisualization();\n\n // Determine effective variant (from props or localStorage settings)\n const effectiveVariant =\n variant ?? (vizSettings.variant !== 'none' ? vizSettings.variant : 'spotlight');\n const effectiveIntensity = intensity ?? vizSettings.intensity;\n const effectiveColorScheme = colorScheme ?? vizSettings.colorScheme;\n\n // Show reactive cover if enabled and variant is not 'none'\n const showReactiveCover = reactiveCover && effectiveVariant !== 'none';\n\n // Render cover art content\n const renderCoverContent = () => {\n if (typeof coverArt === 'string') {\n return (\n <img src={coverArt} alt={title || 'Album cover'} className=\"w-full h-full object-cover\" />\n );\n }\n\n if (coverArt) {\n return coverArt;\n }\n\n // Default placeholder\n return (\n <div className=\"w-full h-full bg-muted/30 flex items-center justify-center\">\n <Music className=\"w-1/3 h-1/3 text-muted-foreground/50\" />\n </div>\n );\n };\n\n const isHorizontal = layout === 'horizontal';\n\n return (\n <HybridAudioProvider\n src={src}\n autoPlay={autoPlay}\n loop={loop}\n initialVolume={initialVolume}\n onPlay={onPlay}\n onPause={onPause}\n onEnded={onEnded}\n onError={onError}\n >\n <div\n className={cn(\n 'flex gap-4',\n isHorizontal ? 'flex-row items-center' : 'flex-col items-center',\n className\n )}\n >\n {/* Cover Art */}\n {(coverArt || reactiveCover) && (\n <div className=\"flex flex-col items-center gap-2 shrink-0\">\n {showReactiveCover ? (\n <AudioReactiveCover\n size={coverSize}\n variant={effectiveVariant as 'glow' | 'orbs' | 'spotlight' | 'mesh'}\n intensity={effectiveIntensity}\n colorScheme={effectiveColorScheme}\n onClick={nextVariant}\n >\n <div className={cn('rounded-lg overflow-hidden', COVER_SIZES[coverSize])}>\n {renderCoverContent()}\n </div>\n </AudioReactiveCover>\n ) : (\n <div\n className={cn(\n 'rounded-lg overflow-hidden shadow-lg cursor-pointer',\n COVER_SIZES[coverSize]\n )}\n onClick={nextVariant}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => e.key === 'Enter' && nextVariant()}\n >\n {renderCoverContent()}\n </div>\n )}\n\n {/* Effect indicator */}\n {reactiveCover && (\n <span className=\"text-[10px] uppercase tracking-wider text-muted-foreground/50 select-none\">\n {vizSettings.variant === 'none' ? 'off' : vizSettings.variant}\n </span>\n )}\n </div>\n )}\n\n {/* Track Info + Player */}\n <div\n className={cn('flex flex-col gap-3', isHorizontal ? 'flex-1 min-w-0' : 'w-full max-w-md')}\n >\n {/* Track Info */}\n {(title || artist) && (\n <div className={cn('text-center', isHorizontal && 'text-left')}>\n {title && (\n <h3 className=\"text-base font-medium text-foreground truncate\">{title}</h3>\n )}\n {artist && <p className=\"text-sm text-muted-foreground truncate\">{artist}</p>}\n </div>\n )}\n\n {/* Audio Player */}\n <HybridAudioPlayer\n showControls\n showWaveform={showWaveform}\n waveformMode={waveformMode}\n waveformHeight={waveformHeight}\n showTimer={showTimer}\n showVolume={showVolume}\n showLoop={showLoop}\n className=\"border-0 bg-transparent\"\n />\n </div>\n </div>\n </HybridAudioProvider>\n );\n}\n\nexport default HybridSimplePlayer;\n"]}