{"version":3,"file":"static/chunks/857-a25dff29f0a92ec1.js","mappings":"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","sources":["webpack://_N_E/./src/lib/foundations/layouts/bottom-nav-bar/bottom-nav-bar.tsx","webpack://_N_E/./src/lib/foundations/layouts/bottom-nav-bar/index.ts","webpack://_N_E/./src/lib/primitives/shadcn/drawer.tsx","webpack://_N_E/./src/lib/foundations/layouts/drawer/drawer.tsx","webpack://_N_E/./src/lib/foundations/layouts/drawer/index.ts","webpack://_N_E/./src/api/hooks/use-interactive-player/use-interactive-player.ts","webpack://_N_E/./src/api/hooks/use-interactive-player/@enums/genre.enum.ts","webpack://_N_E/./src/api/hooks/use-interactive-player/@enums/instrument.enum.ts","webpack://_N_E/./src/api/hooks/use-interactive-player/@enums/tempo.enum.ts","webpack://_N_E/./src/api/hooks/use-interactive-player/@enums/density.enum.ts","webpack://_N_E/./src/api/hooks/use-interactive-player/@enums/soundscape.enum.ts","webpack://_N_E/./src/lib/foundations/disclosures/progress-bar/progress-bar.tsx","webpack://_N_E/./src/lib/foundations/disclosures/progress-bar/index.ts","webpack://_N_E/./src/components/elements/url-audio-player/url-audio-player.tsx","webpack://_N_E/./src/components/elements/url-audio-player/index.ts","webpack://_N_E/./src/components/foundations/parameter-select-button/parameter-select-button.tsx","webpack://_N_E/./src/components/foundations/parameter-select-button/index.ts","webpack://_N_E/./src/components/elements/interactive-player-parameters-menu/interactive-player-parameters-menu.tsx","webpack://_N_E/./src/components/elements/interactive-player-parameters-menu/index.ts","webpack://_N_E/./src/lib/helpers/local-storage/local-storage.ts","webpack://_N_E/./src/lib/hooks/use-navigation/use-navigation.ts","webpack://_N_E/./src/lib/hooks/use-navigation/index.ts"],"sourcesContent":["'use-client';\n\nimport { TNavigateToParams, useNavigation } from '@/lib/hooks/use-navigation';\nimport classNames from 'classnames';\nimport React, {\n useEffect,\n useRef,\n useState,\n cloneElement,\n ReactElement,\n} from 'react';\n\n/* ================================== TYPES ================================= */\n\nexport type TBottomNavBarProps = {\n items: {\n label: string;\n subLabel?: string;\n icon: ReactElement;\n navigateToParams?: TNavigateToParams;\n action: () => Promise | void;\n showDividerAfter?: boolean;\n }[];\n iconSize?: 'sm' | 'md' | 'lg' | 'xl';\n theme?: 'dark' | 'light';\n blurBackground?: boolean;\n glowEffect?: boolean;\n};\n\n/* ========================================================================== */\n/* COMPONENT */\n/* ========================================================================== */\nexport function BottomNavBar({\n items,\n iconSize = 'md',\n theme = 'light',\n blurBackground = true,\n glowEffect = true,\n}: TBottomNavBarProps) {\n const [selectedIndex, setSelectedIndex] = useState(null);\n const { navigateTo } = useNavigation();\n const [isOverflowing, setIsOverflowing] = useState(false);\n\n const navRef = useRef(null);\n\n const checkOverflow = () => {\n if (navRef.current) {\n const { clientWidth, scrollWidth } = navRef.current;\n setIsOverflowing(scrollWidth > clientWidth);\n }\n };\n\n useEffect(() => {\n checkOverflow();\n window.addEventListener('resize', checkOverflow);\n\n return () => window.removeEventListener('resize', checkOverflow);\n }, [items]);\n\n const handleItemClick = async (\n index: number,\n navigateToParams?: TBottomNavBarProps['items'][number]['navigateToParams'],\n action?: TBottomNavBarProps['items'][number]['action'],\n ) => {\n setSelectedIndex(index);\n\n if (navigateToParams) {\n navigateTo(navigateToParams);\n } else if (action) {\n await action();\n }\n };\n\n const navWrapperClasses = classNames(\n 'w-full',\n 'overflow-x-auto',\n 'scrollbar-hide',\n );\n\n const itemsWrapperClasses = classNames(\n 'flex',\n isOverflowing ? 'justify-start' : 'justify-center',\n 'gap-4 px-4 py-4',\n blurBackground && 'backdrop-blur-md',\n theme === 'dark'\n ? 'bg-gray-900 text-white'\n : 'bg-infinityLight text-gray-900',\n 'bg-opacity-60',\n 'border-t-2',\n 'border-infinityLight',\n );\n\n // Smooth horizontal scrolling\n const itemsWrapperStyles = {\n scrollSnapType: 'x mandatory',\n boxShadow: glowEffect ? 'rgba(255, 255, 255, 0.8) 0px 0px 30px' : 'none',\n };\n\n const buttonClasses = (index: number, showDividerAfter = false) =>\n classNames(\n 'flex flex-col items-center',\n theme === 'dark' ? 'text-infinityLight' : 'text-infinity',\n 'transition-colors duration-200 ease-in-out',\n 'scroll-snap-align: start',\n showDividerAfter && 'border-r-2',\n showDividerAfter && theme === 'dark' && 'border-gray-400',\n showDividerAfter && theme === 'light' && 'border-gray-500',\n showDividerAfter && 'pr-4',\n showDividerAfter && 'mr-2',\n );\n\n const iconWrapperClasses = classNames(\n iconSize === 'sm' && 'h-6 w-6',\n iconSize === 'md' && 'h-10 w-10',\n iconSize === 'lg' && 'h-12 w-12',\n iconSize === 'xl' && 'h-14 w-14',\n 'mb-1',\n );\n\n const iconClasses = classNames('h-full', 'w-full', 'text-4xl');\n\n const labelClasses = classNames('text-md', 'font-meyer');\n\n const subLabelClasses = classNames('text-xs', 'font-meyer');\n\n return (\n
\n \n {items.map((item, index) => (\n \n \n void handleItemClick(index, item.navigateToParams, item.action)\n }\n className={buttonClasses(index, item.showDividerAfter)}\n >\n
\n {cloneElement(item.icon, { className: iconClasses })}\n
\n\n {item.label}\n\n {item.subLabel && (\n {item.subLabel}\n )}\n \n
\n ))}\n
\n \n );\n}\n","import {\n BottomNavBar,\n TBottomNavBarProps,\n} from './bottom-nav-bar';\n\nexport { BottomNavBar, type TBottomNavBarProps };\n","'use client';\n\nimport * as React from 'react';\nimport { Drawer as DrawerPrimitive } from 'vaul';\n\nimport { cn } from '@/lib/primitives/shadcn/utils';\n\n/**\n * Customizations:\n * - 2024-09-30 Customized the component by exposing the container prop\n */\nconst Drawer = ({\n shouldScaleBackground = true,\n container,\n ...props\n}: React.ComponentProps) => (\n \n);\nDrawer.displayName = 'Drawer';\n\nconst DrawerTrigger = DrawerPrimitive.Trigger;\n\nconst DrawerPortal = DrawerPrimitive.Portal;\n\nconst DrawerClose = DrawerPrimitive.Close;\n\nconst DrawerOverlay = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n));\nDrawerOverlay.displayName = DrawerPrimitive.Overlay.displayName;\n\nconst DrawerContent = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, children, ...props }, ref) => (\n \n \n \n
\n {children}\n \n \n));\nDrawerContent.displayName = 'DrawerContent';\n\nconst DrawerHeader = ({\n className,\n ...props\n}: React.HTMLAttributes) => (\n \n);\nDrawerHeader.displayName = 'DrawerHeader';\n\nconst DrawerFooter = ({\n className,\n ...props\n}: React.HTMLAttributes) => (\n \n);\nDrawerFooter.displayName = 'DrawerFooter';\n\nconst DrawerTitle = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n));\nDrawerTitle.displayName = DrawerPrimitive.Title.displayName;\n\nconst DrawerDescription = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n));\nDrawerDescription.displayName = DrawerPrimitive.Description.displayName;\n\nexport {\n Drawer,\n DrawerPortal,\n DrawerOverlay,\n DrawerTrigger,\n DrawerClose,\n DrawerContent,\n DrawerHeader,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n};\n","'use-client';\n\nimport React from 'react';\nimport {\n Drawer as ShadcnDrawer,\n DrawerContent as ShadcnDrawerContent,\n DrawerDescription as ShadcnDrawerDescription,\n DrawerFooter as ShadcnDrawerFooter,\n DrawerHeader as ShadcnDrawerHeader,\n DrawerTitle as ShadcnDrawerTitle,\n} from '@/lib/primitives/shadcn/drawer';\nimport classNames from 'classnames';\n\n/* ================================== TYPES ================================= */\n\nexport type TDrawerProps = {\n title?: string;\n description?: string;\n isOpen?: boolean;\n footer?: React.ReactNode;\n children?: React.ReactNode;\n onClose: () => void;\n container?: HTMLElement;\n backgroundColor?: string;\n isTransparent?: boolean;\n useBoxShadow?: boolean;\n className?: {\n title?: string;\n description?: string;\n };\n};\n\n/* ========================================================================== */\n/* COMPONENT */\n/* ========================================================================== */\nexport function Drawer(props: TDrawerProps) {\n const {\n title,\n description,\n isOpen = false,\n footer,\n onClose,\n container,\n children,\n backgroundColor = 'white',\n isTransparent = false,\n useBoxShadow = false,\n className,\n } = props;\n\n const isUsingHeader = title || description;\n\n const drawerContentClasses = classNames(\n isTransparent && 'bg-opacity-30',\n isTransparent && 'backdrop-blur-md',\n backgroundColor === 'infinity' ? 'bg-infinity' : `bg-${backgroundColor}`,\n );\n\n return (\n \n \n {isUsingHeader && (\n \n {title && (\n \n {title}\n \n )}\n {description && (\n \n {description}\n \n )}\n \n )}\n {children &&
{children}
}\n {footer && {footer}}\n \n \n );\n}\n","import {\n Drawer,\n TDrawerProps,\n} from './drawer';\n\nexport { Drawer, type TDrawerProps };\n","import { useEffect, useState, useMemo } from 'react';\nimport axios, { AxiosResponse } from 'axios';\nimport { Genre } from './@enums/genre.enum';\nimport { Instrument } from './@enums/instrument.enum';\nimport { Tempo } from './@enums/tempo.enum';\nimport { Density } from './@enums/density.enum';\nimport { Soundscape } from './@enums/soundscape.enum';\nimport { LocalStorage } from '@/lib/helpers/local-storage/local-storage';\n\n/* ================================== TYPES ================================= */\n\nexport type TFetchSessionResponse = {\n id: string;\n totalDurationMs: number;\n trackUrl: string;\n shareCode: string;\n} | null;\n\nexport type TUseInteractivePlayer = {\n genre: {\n get?: Genre | undefined;\n set: (value?: Genre) => void;\n };\n instrument: {\n get?: Instrument | undefined;\n set: (value?: Instrument) => void;\n };\n tempo: {\n get?: Tempo | undefined;\n set: (value?: Tempo) => void;\n };\n density: {\n get?: Density | undefined;\n set: (value?: Density) => void;\n };\n soundscape: {\n get?: Soundscape | undefined;\n set: (value?: Soundscape) => void;\n };\n session: {\n fetch: () => Promise;\n fetchByShareCode: (shareCode: string) => Promise;\n get: TFetchSessionResponse;\n isLoading: boolean;\n };\n};\n\n// const API_URL = 'http://localhost:7002/session/get';\nconst API_URL = process.env.NEXT_PUBLIC_API_URL || ''; // 'https://ehbz9kqaxh.us-east-2.awsapprunner.com/session/get';\n\n/* ========================================================================== */\n/* HOOK */\n/* ========================================================================== */\nexport function useInteractivePlayer(): TUseInteractivePlayer {\n const [genre, setGenre] = useState(undefined);\n const [instrument, setInstrument] = useState(\n undefined,\n );\n const [tempo, setTempo] = useState(undefined);\n const [density, setDensity] = useState(undefined);\n const [soundscape, setSoundscape] = useState(\n undefined,\n );\n\n const [isLoading, setIsLoading] = useState(false);\n\n const [session, setSession] = useState(null);\n\n const localStorage = useMemo(() => new LocalStorage(), []);\n\n const [userId, setUserId] = useState(() => {\n const storedUserId = localStorage.getString('userId', '');\n if (storedUserId) {\n return storedUserId;\n } else {\n const newUserId = crypto.randomUUID();\n localStorage.setString('userId', newUserId);\n return newUserId;\n }\n });\n\n useEffect(() => {\n if (!userId) {\n const newUserId = crypto.randomUUID();\n setUserId(newUserId);\n localStorage.setString('userId', newUserId);\n }\n }, [userId, localStorage]);\n\n const fetchSessionByShareCode = async (shareCode: string) => {\n console.log('fetchSessionByShareCode', API_URL, shareCode);\n setIsLoading(true);\n\n try {\n const response: AxiosResponse = await axios.get(\n `${API_URL}/${shareCode}`,\n );\n console.log('response', response);\n if (response.data) {\n setSession(response.data);\n\n // Update the state with the fetched session data\n setGenre(response.data.genre);\n setInstrument(response.data.instrument);\n setTempo(response.data.tempo);\n setDensity(response.data.density);\n setSoundscape(response.data.soundscape);\n }\n } catch (error) {\n console.error('Error fetching session by share code:', error);\n // Handle error appropriately\n } finally {\n setIsLoading(false);\n }\n };\n\n const fetchSession = async () => {\n console.log('fetchSession', API_URL);\n setIsLoading(true);\n\n const startTime = Date.now();\n const minLoadingTime = 3000; // 3 seconds\n\n try {\n const response: AxiosResponse = await axios.post(\n API_URL,\n {\n genre,\n instrument,\n tempo,\n density,\n soundscape,\n userId,\n },\n );\n\n const elapsedTime = Date.now() - startTime;\n const remainingTime = Math.max(0, minLoadingTime - elapsedTime);\n\n // Wait for the remaining time if the request was faster than minLoadingTime\n await new Promise((resolve) => setTimeout(resolve, remainingTime));\n\n setSession(response.data);\n } catch (error) {\n console.error('Error fetching session:', error);\n // Handle error appropriately\n } finally {\n setIsLoading(false);\n }\n };\n\n return {\n genre: {\n get: genre,\n set: setGenre,\n },\n instrument: {\n get: instrument,\n set: setInstrument,\n },\n tempo: {\n get: tempo,\n set: setTempo,\n },\n density: {\n get: density,\n set: setDensity,\n },\n soundscape: {\n get: soundscape,\n set: setSoundscape,\n },\n session: {\n fetch: fetchSession,\n fetchByShareCode: fetchSessionByShareCode,\n get: session,\n isLoading: isLoading,\n },\n };\n}\n","export enum Genre {\n Downbeat = 'Dwnbt',\n Ambient = 'Amb',\n}\n","export enum Instrument {\n None = 'None',\n DrumAC = 'DrumAC',\n DrumElec = 'DrumElec',\n DrumLofiA = 'DrumLofiA',\n DrumLofiB = 'DrumLofiB',\n}\n","export enum Tempo {\n Normal = 'Normal',\n SlowDown = 'Slow',\n SpeedUp = 'Speed',\n}\n","export enum Density {\n Standard = 'Standard',\n Sparse = 'Sparse',\n Dense = 'Dense',\n}\n","export enum Soundscape {\n None = 'None',\n Rain = 'Rain',\n Sea = 'Sea',\n Fire = 'Fire',\n JapaneseGarden = 'JapaneseGarden',\n Thunderstorm = 'Thunderstorm',\n}\n","'use-client';\n\nimport React from 'react';\nimport {\n Progress as NextUIProgress,\n ProgressProps as TNextUIProgressProps,\n} from '@nextui-org/react';\n\n/* ================================== TYPES ================================= */\n\nexport type TProgressBarProps = TNextUIProgressProps;\n\n/* ========================================================================== */\n/* COMPONENT */\n/* ========================================================================== */\nexport function ProgressBar(props: TProgressBarProps) {\n return ;\n}\n","import {\n ProgressBar,\n TProgressBarProps,\n} from './progress-bar';\n\nexport { ProgressBar, type TProgressBarProps };\n","'use-client';\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { Button } from '@/lib/foundations/controls/button';\nimport { ProgressBar } from '@/lib/foundations/disclosures/progress-bar';\nimport { IoPauseSharp, IoPlaySharp } from 'react-icons/io5';\nimport { PrimaryButton } from '@/components/foundations/primary-button';\nimport { TxmyIcon } from '@/components/foundations/txmy-icon';\nimport Link from 'next/link';\n\n/* ================================== TYPES ================================= */\n\nexport type TUrlAudioPlayerProps = {\n url?: string; // S3 URL for the .wav file\n albumArt?: string; // URL for album art\n trackTitle?: string; // Track title\n subtitle?: string; // Subtitle\n tags?: string[]; // Array of tags\n shareCode?: string; // Share code\n};\n\n/* ========================================================================== */\n/* COMPONENT */\n/* ========================================================================== */\nexport function UrlAudioPlayer(props: TUrlAudioPlayerProps) {\n const { url, albumArt, trackTitle, subtitle, tags, shareCode } = props;\n\n const audioRef = useRef(null); // Reference to the audio element\n const [isPlaying, setIsPlaying] = useState(false); // To track play/pause state\n const [duration, setDuration] = useState(null); // Total duration of the audio\n const [currentTime, setCurrentTime] = useState(0); // Current playback time\n const [copyMessage, setCopyMessage] = useState(null); // New state for copy message\n\n // Toggle play/pause state\n const togglePlayPause = () => {\n if (audioRef.current) {\n if (isPlaying) {\n audioRef.current.pause();\n } else {\n audioRef.current.play();\n }\n setIsPlaying(!isPlaying);\n }\n };\n\n const fileExtension = url?.split('?')[0].split('.').pop();\n const downloadName = `${trackTitle || 'Unknown Title'}.${fileExtension}`;\n\n // Update currentTime when audio plays\n const handleTimeUpdate = () => {\n if (audioRef.current) {\n setCurrentTime(audioRef.current.currentTime);\n }\n };\n\n // Set duration when metadata is loaded\n const handleLoadedMetadata = () => {\n if (audioRef.current) {\n setDuration(audioRef.current.duration);\n }\n };\n\n // Reset when playback ends\n const handleAudioEnded = () => {\n setIsPlaying(false);\n setCurrentTime(0);\n };\n\n useEffect(() => {\n const audio = audioRef.current;\n if (audio) {\n const handlePlay = () => setIsPlaying(true);\n const handlePause = () => setIsPlaying(false);\n\n audio.addEventListener('play', handlePlay);\n audio.addEventListener('pause', handlePause);\n\n return () => {\n audio.removeEventListener('play', handlePlay);\n audio.removeEventListener('pause', handlePause);\n };\n }\n }, [url]);\n\n // Auto-play when a new URL is available\n useEffect(() => {\n if (audioRef.current && url) {\n audioRef.current.play();\n }\n }, [url]);\n\n const handleCopyUrl = async () => {\n try {\n await navigator.clipboard.writeText(\n `https://infinity.lifescoremusic.com/txmy/ethereal/${shareCode}` || '',\n );\n setCopyMessage('URL copied to clipboard!');\n setTimeout(() => setCopyMessage(null), 3000); // Hide message after 3 seconds\n } catch (error) {\n setCopyMessage('Failed to copy URL.');\n setTimeout(() => setCopyMessage(null), 3000);\n }\n };\n\n // Function to download the file using fetch and Blob\n const handleDownload = async () => {\n if (!url) return;\n\n try {\n const response = await fetch(url);\n console.log('fetching file', url);\n if (!response.ok) throw new Error('Network response was not ok');\n\n const blob = await response.blob();\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = downloadName;\n document.body.appendChild(link); // Append to body to make it work in Firefox\n link.click();\n document.body.removeChild(link); // Remove the link after triggering download\n URL.revokeObjectURL(link.href); // Clean up\n } catch (error) {\n console.error('Failed to download file:', error);\n }\n };\n\n return (\n \n \n \n \n \n {isPlaying ? : }\n \n \n
\n \n\n {/* Audio Element */}\n {url && (\n \n )}\n\n {/* Progress Bar */}\n {duration && (\n \n )}\n\n {/* Audio Info */}\n
\n
\n {trackTitle || 'Unknown Title'}\n
\n
\n {subtitle || 'Unknown Artist'}\n
\n
\n {tags && tags.length > 0 ? tags.join(' / ') : 'No Tags'}\n
\n
\n Download your remix, submit it by using the audio in a short-form post\n on either TikTok or Instagram Reels, tag @lifescore_infinity, and\n write your [unique remix code] in the post caption.\n
\n
\n \n \n {copyMessage && (\n
{copyMessage}
\n )}\n
\n
\n \n );\n}\n","import {\n UrlAudioPlayer,\n TUrlAudioPlayerProps,\n} from './url-audio-player';\n\nexport { UrlAudioPlayer, type TUrlAudioPlayerProps };\n","'use-client';\n\nimport classNames from 'classnames';\nimport React from 'react';\n\n/* ================================== TYPES ================================= */\n\nexport type TParameterSelectButtonProps = {\n icon: React.ReactNode; // Icon to display\n label: string; // Button label\n onPress: () => void; // Callback for button press\n isSelected: boolean; // State to determine if the button is selected\n useMargin?: boolean; // Whether to use margin\n};\n\n/* ========================================================================== */\n/* COMPONENT */\n/* ========================================================================== */\nexport function ParameterSelectButton({\n icon,\n label,\n onPress,\n isSelected,\n useMargin = true,\n}: TParameterSelectButtonProps) {\n const buttonClasses = classNames(\n 'flex',\n 'flex-col',\n 'items-start',\n 'justify-between',\n 'p-3',\n 'md:p-5',\n 'border',\n 'rounded-lg',\n 'focus:outline-none',\n 'focus:ring-2',\n 'transition-all',\n 'duration-300',\n 'md:w-[160px]',\n 'md:h-[170px]',\n 'w-[120px]',\n 'h-[130px]',\n {\n 'bg-white text-blue-500 border-transparent shadow-lg': isSelected,\n 'bg-transparent text-white border-white hover:bg-white hover:bg-opacity-20 hover:shadow-lg':\n !isSelected,\n 'm-2': useMargin,\n },\n );\n\n const labelClasses = classNames(\n 'mt-2',\n 'font-meyer',\n 'text-lg',\n 'md:text-xl',\n 'lg:text-2xl',\n 'text-left',\n );\n\n const iconClasses = classNames(\n 'w-[40px]',\n 'h-[40px]',\n 'md:w-[60px]',\n 'md:h-[60px]',\n 'text-xl',\n 'md:text-2xl',\n );\n\n return (\n \n
\n {icon &&\n React.cloneElement(icon, { className: 'text-2xl md:text-5xl' })}\n
\n
{label}
\n \n );\n}\n","import {\n ParameterSelectButton,\n TParameterSelectButtonProps,\n} from './parameter-select-button';\n\nexport { ParameterSelectButton, type TParameterSelectButtonProps };\n","'use-client';\n\nimport {\n BottomNavBar,\n TBottomNavBarProps,\n} from '@/lib/foundations/layouts/bottom-nav-bar';\nimport { Panel } from '@/lib/foundations/layouts/panel';\nimport { Drawer } from '@/lib/foundations/layouts/drawer';\nimport React, { ReactNode, useEffect, useState, useRef } from 'react';\nimport { Button } from '@/lib/foundations/controls/button';\nimport {\n TUseInteractivePlayer,\n useInteractivePlayer,\n} from '@/api/hooks/use-interactive-player/use-interactive-player';\nimport { Genre } from '@/api/hooks/use-interactive-player/@enums/genre.enum';\nimport { Instrument } from '@/api/hooks/use-interactive-player/@enums/instrument.enum';\nimport { Tempo } from '@/api/hooks/use-interactive-player/@enums/tempo.enum';\nimport { Density } from '@/api/hooks/use-interactive-player/@enums/density.enum';\nimport { Soundscape } from '@/api/hooks/use-interactive-player/@enums/soundscape.enum';\nimport classNames from 'classnames';\nimport { Toolbar } from '@/lib/foundations/layouts/toolbar';\nimport { UrlAudioPlayer } from '../url-audio-player';\n\nimport { RxHamburgerMenu } from 'react-icons/rx';\n\nimport {\n InteractivePlayerBackground,\n TInteractivePlayerBackgroundRef,\n} from '../interactive-player-background';\nimport { ParameterSelectButton } from '@/components/foundations/parameter-select-button';\nimport { InfinitySlidingMenu } from '../infinity-sliding-menu';\nimport { TxmyIcon } from '@/components/foundations/txmy-icon';\n\n/* ================================== TYPES ================================= */\n\ntype TMusicParameters =\n | 'Instrument'\n | 'Genre'\n | 'Tempo'\n | 'Density'\n | 'Soundscape';\n\nexport type TInteractivePlayerParametersMenuProps = {\n shareCode?: string;\n};\n\n/* ========================================================================== */\n/* COMPONENT */\n/* ========================================================================== */\nexport function InteractivePlayerParametersMenu(\n props: TInteractivePlayerParametersMenuProps,\n) {\n const { shareCode } = props;\n\n const [activeParameter, setActiveParameter] = useState<\n TMusicParameters | undefined\n >(!shareCode ? 'Genre' : undefined);\n const [originalState, setOriginalState] = useState();\n const [isSlidingMenuOpen, setIsSlidingMenuOpen] = useState(false);\n\n const state = useInteractivePlayer();\n const backgroundRef = useRef(null);\n\n const handleParameterButtonPress = (parameter: TMusicParameters) => {\n setActiveParameter(parameter);\n setOriginalState({ ...state });\n };\n\n const handlePressGenerateButton = async () => {\n await state.session.fetch();\n };\n\n const handleApplyEffects = () => {\n if (activeParameter === 'Genre') {\n // Reset all other parameters to unknown for Ambient genre\n state.instrument.set(undefined);\n state.tempo.set(undefined);\n state.density.set(undefined);\n state.soundscape.set(undefined);\n }\n setActiveParameter(undefined);\n };\n\n const handleCancel = () => {\n if (originalState) {\n Object.keys(originalState).forEach((key) => {\n const stateKey = key as keyof TUseInteractivePlayer;\n if (stateKey !== 'session' && state[stateKey]) {\n state[stateKey].set(originalState[stateKey].get);\n }\n });\n }\n\n setActiveParameter(undefined);\n };\n\n const handleOpenSlidingMenu = () => {\n setIsSlidingMenuOpen(true);\n };\n\n const handleSlidingMenuClose = (isOpen: boolean) => {\n setIsSlidingMenuOpen(isOpen);\n };\n\n useEffect(() => {\n if (shareCode) {\n void state.session.fetchByShareCode(shareCode);\n }\n }, [shareCode]);\n\n const [defaultContainer, setDefaultContainer] = useState();\n\n const isDrawerOpen = activeParameter !== undefined;\n\n useEffect(() => {\n if (!defaultContainer) {\n const mainElement = window.document.getElementById(\n 'interactive-player-parameters-menu',\n );\n setDefaultContainer(mainElement || undefined);\n }\n }, []);\n\n const paramControlsWrapperClasses = classNames(\n 'flex',\n 'flex-wrap',\n 'gap-[20px]', // Consistent gap between items\n 'justify-center',\n 'items-center',\n 'w-full',\n 'p-4',\n );\n\n /* ========================= AVAILABLE PARAMETERS ========================= */\n\n const genreActiveParams = Object.values(Genre);\n const tempoActiveParams = Object.values(Tempo);\n const densityActiveParams = Object.values(Density);\n\n let instrumentActiveParams = Object.values(Instrument);\n let soundscapeActiveParams = Object.values(Soundscape);\n\n /**\n * Downbeat doesn't support all soundscapes.\n */\n if (state.genre.get === Genre.Downbeat) {\n soundscapeActiveParams = Object.values(Soundscape).filter(\n (soundscape) =>\n soundscape !== Soundscape.JapaneseGarden &&\n soundscape !== Soundscape.Thunderstorm,\n );\n instrumentActiveParams = Object.values(Instrument).filter(\n (instrument) => instrument !== Instrument.None,\n );\n }\n\n /**\n * Ambient doesn't support instruments.\n */\n if (state.genre.get === Genre.Ambient) {\n instrumentActiveParams = [];\n }\n\n /* =========================== PARAMETER LABELS =========================== */\n\n const genreVisibleLabelMap = {\n [Genre.Ambient]: 'Ambient',\n [Genre.Downbeat]: 'Downbeat',\n };\n\n const densityVisibleLabelMap = {\n [Density.Dense]: 'Dense',\n [Density.Sparse]: 'Sparse',\n [Density.Standard]: 'Standard',\n };\n\n const soundscapeVisibleLabelMap = {\n [Soundscape.None]: 'None',\n [Soundscape.JapaneseGarden]: 'Japanese Garden',\n [Soundscape.Thunderstorm]: 'Thunderstorm',\n [Soundscape.Rain]: 'Rain',\n [Soundscape.Sea]: 'Sea',\n [Soundscape.Fire]: 'Fire',\n };\n\n const tempoVisibleLabelMap = {\n [Tempo.SlowDown]: 'Slow Down',\n [Tempo.Normal]: 'Normal',\n [Tempo.SpeedUp]: 'Speed Up',\n };\n\n const instrumentVisibleLabelMap = {\n [Instrument.None]: 'None',\n [Instrument.DrumAC]: 'Acoustic Drum',\n [Instrument.DrumElec]: 'Electric Drum',\n [Instrument.DrumLofiA]: 'Lo-Fi Drum A',\n [Instrument.DrumLofiB]: 'Lo-Fi Drum B',\n };\n\n const handleSetParameter = (\n property: T,\n value: NonNullable,\n ) => {\n if ('set' in state[property]) {\n (state[property] as { set: (value: any) => void }).set(value);\n } else {\n console.error(`Property ${property} does not have a 'set' method`);\n }\n };\n\n const renderButton = (\n property: T,\n value: NonNullable,\n ) => {\n const label: string =\n property === 'genre'\n ? genreVisibleLabelMap[value as Genre]\n : property === 'tempo'\n ? tempoVisibleLabelMap[value as Tempo]\n : property === 'density'\n ? densityVisibleLabelMap[value as Density]\n : property === 'soundscape'\n ? soundscapeVisibleLabelMap[value as Soundscape]\n : instrumentVisibleLabelMap[value as Instrument];\n\n const getIcon = (property: string, value: any) => {\n switch (property) {\n case 'genre':\n switch (value) {\n case Genre.Ambient:\n return null;\n case Genre.Downbeat:\n return null;\n default:\n return null;\n }\n case 'tempo':\n switch (value) {\n case Tempo.SlowDown:\n return ;\n case Tempo.Normal:\n return ;\n case Tempo.SpeedUp:\n return ;\n default:\n return null;\n }\n case 'density':\n switch (value) {\n case Density.Sparse:\n return ;\n case Density.Standard:\n return ;\n case Density.Dense:\n return ;\n default:\n return null;\n }\n case 'soundscape':\n switch (value) {\n case Soundscape.None:\n return null;\n case Soundscape.JapaneseGarden:\n return ;\n case Soundscape.Thunderstorm:\n return ;\n case Soundscape.Rain:\n return ;\n case Soundscape.Sea:\n return ;\n case Soundscape.Fire:\n return ;\n default:\n return null;\n }\n case 'instrument':\n switch (value) {\n case Instrument.None:\n return null;\n case Instrument.DrumAC:\n return ;\n case Instrument.DrumElec:\n return ;\n case Instrument.DrumLofiA:\n return ;\n case Instrument.DrumLofiB:\n return ;\n default:\n return null;\n }\n default:\n return null;\n }\n };\n\n const icon = getIcon(property, value);\n\n return (\n handleSetParameter(property, value)}\n isSelected={state[property].get === value}\n />\n );\n };\n\n /* ========================== PARAMETER CONTROLS ========================== */\n\n let title = '';\n let description = '';\n let controls: ReactNode = null;\n\n const descriptionMap: { [param: TMusicParameters]: string } = {\n Genre: '',\n Instrument: 'Types of rhythmic groove for downbeat',\n Tempo: 'How fast or slow the music moves',\n Density: 'How rich or spacious the music feels',\n Soundscape: 'Background sounds from nature or environments',\n };\n\n switch (activeParameter) {\n case 'Genre':\n title = 'Genre';\n description = descriptionMap['Genre'];\n controls = (\n
\n {genreActiveParams.map((genre) => renderButton('genre', genre))}\n
\n );\n break;\n case 'Instrument':\n title = 'Instrument';\n description = descriptionMap['Instrument'];\n controls = (\n
\n {instrumentActiveParams.map((instrument) =>\n renderButton('instrument', instrument),\n )}\n
\n );\n break;\n case 'Tempo':\n title = 'Tempo';\n description = descriptionMap['Tempo'];\n controls = (\n
\n {tempoActiveParams.map((tempo) => renderButton('tempo', tempo))}\n
\n );\n break;\n case 'Density':\n title = 'Density';\n description = descriptionMap['Density'];\n controls = (\n
\n {densityActiveParams.map((density) =>\n renderButton('density', density),\n )}\n
\n );\n break;\n case 'Soundscape':\n title = 'Soundscape';\n description = descriptionMap['Soundscape'];\n controls = (\n
\n {soundscapeActiveParams.map((soundscape) =>\n renderButton('soundscape', soundscape),\n )}\n
\n );\n }\n\n /* ============================ BOTTOM NAV BAR ============================ */\n\n const bottomNavBarProps: TBottomNavBarProps = {\n items: [\n {\n label: 'Genre',\n subLabel: state.genre.get\n ? `(${genreVisibleLabelMap[state.genre.get]})`\n : undefined,\n icon: ,\n action: () => handleParameterButtonPress('Genre'),\n showDividerAfter: true,\n },\n state.genre.get === Genre.Ambient\n ? null\n : {\n label: 'Drums',\n subLabel: state.instrument.get\n ? `(${instrumentVisibleLabelMap[state.instrument.get]})`\n : undefined,\n icon: ,\n action: () => handleParameterButtonPress('Instrument'),\n },\n {\n label: 'Tempo',\n subLabel: state.tempo.get\n ? `(${tempoVisibleLabelMap[state.tempo.get]})`\n : undefined,\n icon: ,\n action: () => handleParameterButtonPress('Tempo'),\n },\n {\n label: 'Density',\n subLabel: state.density.get\n ? `(${densityVisibleLabelMap[state.density.get]})`\n : undefined,\n icon: ,\n action: () => handleParameterButtonPress('Density'),\n },\n {\n label: 'Soundscape',\n subLabel: state.soundscape.get\n ? `(${soundscapeVisibleLabelMap[state.soundscape.get]})`\n : undefined,\n icon: ,\n action: () => handleParameterButtonPress('Soundscape'),\n },\n ].filter(Boolean) as TBottomNavBarProps['items'],\n };\n\n /* =========================== BACKGROUND ASSETS ========================== */\n\n const mediaMap: Record = {\n [Soundscape.Rain]: [\n '/backgrounds/txmy-ethereal/mp4/rainy-day.mp4',\n '/backgrounds/txmy-ethereal/mp4/rainy-night.mp4',\n ],\n [Soundscape.Thunderstorm]: [\n '/backgrounds/txmy-ethereal/mp4/rainy-day.mp4',\n '/backgrounds/txmy-ethereal/mp4/rainy-night.mp4',\n ],\n [Soundscape.JapaneseGarden]: [\n '/backgrounds/txmy-ethereal/mp4/autumn-day.mp4',\n '/backgrounds/txmy-ethereal/mp4/autumn-night.mp4',\n '/backgrounds/txmy-ethereal/mp4/spring-day.mp4',\n '/backgrounds/txmy-ethereal/mp4/spring-night.mp4',\n ],\n [Soundscape.Sea]: [\n '/backgrounds/txmy-ethereal/mp4/summer-day.mp4',\n '/backgrounds/txmy-ethereal/mp4/summer-night.mp4',\n ],\n [Soundscape.Fire]: [\n '/backgrounds/txmy-ethereal/mp4/winter-day.mp4',\n '/backgrounds/txmy-ethereal/mp4/winter-night.mp4',\n ],\n [Soundscape.None]: [\n '/backgrounds/txmy-ethereal/mp4/autumn-day.mp4',\n '/backgrounds/txmy-ethereal/mp4/autumn-night.mp4',\n '/backgrounds/txmy-ethereal/mp4/spring-day.mp4',\n '/backgrounds/txmy-ethereal/mp4/spring-night.mp4',\n '/backgrounds/txmy-ethereal/mp4/summer-day.mp4',\n '/backgrounds/txmy-ethereal/mp4/summer-night.mp4',\n '/backgrounds/txmy-ethereal/mp4/winter-day.mp4',\n '/backgrounds/txmy-ethereal/mp4/winter-night.mp4',\n ],\n };\n\n useEffect(() => {\n if (state.session.get?.trackUrl) {\n const soundscape = state.soundscape.get;\n const availableMedia = mediaMap[soundscape] || mediaMap[Soundscape.None];\n const randomMedia =\n availableMedia[Math.floor(Math.random() * availableMedia.length)];\n\n if (soundscape && soundscape !== Soundscape.None) {\n backgroundRef.current?.selectSpecificBackground(randomMedia);\n } else {\n backgroundRef.current?.selectRandomBackground();\n }\n }\n }, [state.session.get?.trackUrl, state.soundscape.get]);\n\n const interactiveBackground = (\n
\n \n
\n );\n\n /* =============================== RENDERING ============================== */\n\n const generationTriggerWrapperClasses = classNames(\n 'relative',\n 'inset-x-0',\n 'bottom-0',\n 'flex',\n 'flex-col',\n 'items-center',\n 'justify-end',\n );\n\n const generationTriggerClasses = classNames(\n 'w-10/12',\n 'bg-infinity',\n 'rounded-t-lg',\n 'text-white',\n 'text-center',\n 'text-2xl',\n 'font-meyer',\n 'p-6',\n 'border-t-2',\n 'border-x-2',\n 'border-white',\n 'transition-all',\n 'duration-300',\n 'ease-in-out',\n 'bg-opacity-70',\n 'border-opacity-70',\n 'hover:bg-opacity-90',\n 'hover:border-opacity-90',\n );\n\n const generationTriggerStyles = {\n boxShadow: 'rgba(255, 255, 255, 0.8) 0px 0px 30px',\n };\n\n const animatedText = 'Generating Awesomeness'\n .split('')\n .map((char, index) => (\n {char === ' ' ? '\\u00A0' : char}\n ));\n\n const appliedParameters = [\n state.genre.get ? genreVisibleLabelMap[state.genre.get] : undefined,\n state.instrument.get\n ? instrumentVisibleLabelMap[state.instrument.get]\n : undefined,\n state.tempo.get ? tempoVisibleLabelMap[state.tempo.get] : undefined,\n state.density.get ? densityVisibleLabelMap[state.density.get] : undefined,\n state.soundscape.get\n ? soundscapeVisibleLabelMap[state.soundscape.get]\n : undefined,\n ].filter(Boolean);\n\n const showAudioPlayer =\n !state.session.isLoading && state.session.get?.trackUrl;\n\n const audioPlayerWrapperClasses = classNames(\n 'absolute',\n 'inset-0',\n 'flex',\n 'items-center',\n 'justify-center',\n 'fade',\n showAudioPlayer && 'show',\n );\n\n const drawerControlButtonWrapperClasses = classNames(\n 'flex',\n 'justify-between',\n 'gap-2',\n 'p-1',\n 'absolute',\n 'inset-x-2',\n 'top-2',\n );\n\n return (\n
\n
{interactiveBackground}
\n
\n \n \n \n \n
\n }\n />\n }\n footer={\n <>\n {state.session.isLoading && (\n
\n \n {animatedText}\n
\n
\n )}\n {!state.session.isLoading && (\n
\n void handlePressGenerateButton()}\n className={generationTriggerClasses}\n style={generationTriggerStyles}\n >\n {state.session.get?.trackUrl && <>Generate Another Remix}\n {!state.session.get?.trackUrl && <>Generate Remix}\n \n
\n )}\n \n \n }\n isScrollable\n bodyElementId=\"interactive-player-parameters-menu\"\n >\n
\n \n
\n \n \n {isDrawerOpen && (\n
\n {controls}\n
\n \n \n \n \n \n \n
\n
\n )}\n \n \n \n \n );\n}\n","import {\n InteractivePlayerParametersMenu,\n TInteractivePlayerParametersMenuProps,\n} from './interactive-player-parameters-menu';\n\nexport { InteractivePlayerParametersMenu, type TInteractivePlayerParametersMenuProps };\n","'use client';\n\ntype TObject = { [key: string]: any } | any[];\n\nexport class LocalStorage {\n private localStorage: Storage | undefined;\n\n constructor() {\n if (typeof window !== 'undefined') {\n this.localStorage = window.localStorage;\n }\n }\n\n setString(key: string, value: string) {\n console.info(`Saved to local storage key: ${key} with value: ${value}`);\n this.localStorage?.setItem(key, value);\n }\n\n setObject(key: string, value: TObject) {\n const jsonValue = JSON.stringify(value);\n console.info(`Saved to local storage key: ${key} with value: ${jsonValue}`);\n this.localStorage?.setItem(key, jsonValue);\n }\n\n getString(key: string, defaultValue: string): string {\n return (\n (this.localStorage && this.localStorage.getItem(key)) || defaultValue\n );\n }\n\n getObject(key: string, defaultValue: T): T {\n try {\n const rawJson = this.localStorage?.getItem(key);\n if (!rawJson) {\n return defaultValue;\n }\n return JSON.parse(rawJson) as T;\n } catch (err) {\n console.error('Error parsing JSON from LocalStorage', err);\n return defaultValue;\n }\n }\n\n removeItem(key: string) {\n this.localStorage?.removeItem(key);\n }\n}\n","'use client';\n\nimport {\n useRouter,\n useSearchParams,\n useParams,\n usePathname,\n} from 'next/navigation';\nimport { camelCase } from 'lodash';\nimport { useEffect, useState } from 'react';\n\n/* ================================== TYPES ================================= */\n\nexport type TUrlParams = { [key: string]: string | undefined };\n\nexport type TSearchQueryParams = { [key: string]: string };\n\nexport type TNavigateToParams = {\n url?: string;\n queryParams?: TSearchQueryParams;\n forceNavigation?: boolean; // If true, the page will be reloaded if the URL / params are the same\n};\n\ntype TNavigationHook = {\n urlParams: { [key: string]: string | undefined };\n queryParams: { [key: string]: string | undefined };\n navigateTo: (params: TNavigateToParams) => void;\n currentUrl: string;\n};\n\n/* ========================================================================== */\n/* HOOK */\n/* ========================================================================== */\nexport const useNavigation = (): TNavigationHook => {\n const router = useRouter();\n const pathname = usePathname();\n const params = useParams();\n const searchParams = useSearchParams();\n\n const [currentUrl, setCurrentUrl] = useState(() => {\n // Ensure window is available before using it\n if (typeof window !== 'undefined') {\n return `${window.location.origin}${pathname}${searchParams.toString() ? `?${searchParams.toString()}` : ''}`;\n }\n return '';\n });\n\n const urlParams: { [key: string]: string | undefined } = {};\n const queryParams: TSearchQueryParams = {};\n\n // Add URL parameters\n if (typeof params === 'object') {\n const originalParams = params as TUrlParams;\n\n Object.keys(originalParams).forEach((key) => {\n const camelCaseKey = camelCase(key);\n urlParams[camelCaseKey] = String(originalParams[key]);\n });\n }\n\n // Add search query parameters\n if (typeof searchParams === 'object') {\n searchParams.forEach((value, key) => {\n const camelCaseKey = camelCase(key);\n queryParams[camelCaseKey] = value;\n });\n }\n\n const navigateTo = ({\n url,\n queryParams: newQueryParams,\n forceNavigation = false, // Default to false\n }: TNavigateToParams) => {\n // Get the current URL\n const currentUrlString = `${window.location.origin}${pathname}${\n searchParams.toString() ? `?${searchParams.toString()}` : ''\n }`;\n const currentUrlObject = new URL(currentUrlString);\n\n // Determine the target URL\n const targetUrlString = url ? url : currentUrlString;\n const targetUrlObject = new URL(targetUrlString, window.location.origin);\n\n // Clear existing query params from target URL\n targetUrlObject.search = '';\n\n // Add new query params to target URL\n if (newQueryParams) {\n for (const [key, value] of Object.entries(newQueryParams)) {\n targetUrlObject.searchParams.set(key, value);\n }\n }\n\n // Compare the current URL and target URL (including query params)\n const currentFullUrl = currentUrlObject.toString();\n const targetFullUrl = targetUrlObject.toString();\n\n // Navigate if URLs differ or if forceNavigation is true\n if (forceNavigation || currentFullUrl !== targetFullUrl) {\n // Use push or replace based on whether a new URL is provided\n if (url) {\n router.push(targetUrlObject.href, { scroll: false });\n } else {\n router.replace(targetUrlObject.href, { scroll: false });\n }\n }\n };\n\n useEffect(() => {\n setCurrentUrl(\n `${window.location.origin}${pathname}${searchParams.toString() ? `?${searchParams.toString()}` : ''}`,\n );\n }, [pathname, searchParams]);\n\n return { urlParams, queryParams, navigateTo, currentUrl };\n};\n","'use client';\n\nimport { useNavigation, TNavigateToParams } from './use-navigation';\n\nexport { useNavigation, type TNavigateToParams };\n"],"names":["Genre","Instrument","Tempo","Density","Soundscape","BottomNavBar","param","items","iconSize","theme","blurBackground","glowEffect","selectedIndex","setSelectedIndex","useState","navigateTo","useNavigation","isOverflowing","setIsOverflowing","navRef","useRef","checkOverflow","current","clientWidth","scrollWidth","useEffect","window","addEventListener","removeEventListener","handleItemClick","index","navigateToParams","action","navWrapperClasses","classNames","itemsWrapperClasses","buttonClasses","showDividerAfter","iconWrapperClasses","iconClasses","labelClasses","subLabelClasses","jsx_runtime","jsx","div","className","style","overflow","ref","scrollSnapType","boxShadow","map","item","React","jsxs","button","onClick","cloneElement","icon","span","label","subLabel","Drawer","shouldScaleBackground","container","props","DrawerPrimitive","Root","displayName","Trigger","DrawerPortal","Portal","Close","DrawerOverlay","Overlay","cn","DrawerContent","children","Content","DrawerHeader","DrawerFooter","DrawerTitle","Title","DrawerDescription","Description","title","description","isOpen","footer","onClose","backgroundColor","isTransparent","useBoxShadow","isUsingHeader","drawerContentClasses","concat","ShadcnDrawer","dismissible","open","ShadcnDrawerContent","ShadcnDrawerHeader","ShadcnDrawerTitle","ShadcnDrawerDescription","ShadcnDrawerFooter","API_URL","process","ProgressBar","NextUIProgress","UrlAudioPlayer","url","albumArt","trackTitle","subtitle","tags","shareCode","audioRef","isPlaying","setIsPlaying","duration","setDuration","currentTime","setCurrentTime","copyMessage","setCopyMessage","fileExtension","split","pop","downloadName","audio","handlePlay","handlePause","play","handleCopyUrl","navigator","clipboard","writeText","setTimeout","error","handleDownload","response","fetch","console","log","ok","blob","link","document","createElement","href","URL","createObjectURL","download","body","appendChild","click","removeChild","revokeObjectURL","width","borderRadius","position","height","background","bottom","left","Button","size","radius","onPress","pause","isIconOnly","isDisabled","undefined","color","variant","IoPauseSharp","IoPlaySharp","src","onLoadedMetadata","onTimeUpdate","onEnded","value","aria-label","padding","length","join","TxmyIcon","type","ParameterSelectButton","isSelected","useMargin","userSelect","InteractivePlayerParametersMenu","state","activeParameter","setActiveParameter","originalState","setOriginalState","isSlidingMenuOpen","setIsSlidingMenuOpen","useInteractivePlayer","genre","setGenre","instrument","setInstrument","tempo","setTempo","density","setDensity","soundscape","setSoundscape","isLoading","setIsLoading","session","setSession","localStorage","useMemo","LocalStorage","userId","setUserId","storedUserId","getString","newUserId","crypto","randomUUID","setString","fetchSessionByShareCode","axios","get","data","fetchSession","startTime","Date","now","post","elapsedTime","remainingTime","Math","max","minLoadingTime","Promise","resolve","set","fetchByShareCode","backgroundRef","handleParameterButtonPress","parameter","handlePressGenerateButton","handleCancel","Object","keys","forEach","key","defaultContainer","setDefaultContainer","isDrawerOpen","mainElement","getElementById","paramControlsWrapperClasses","genreActiveParams","values","tempoActiveParams","densityActiveParams","instrumentActiveParams","soundscapeActiveParams","Downbeat","filter","JapaneseGarden","Thunderstorm","None","Ambient","genreVisibleLabelMap","densityVisibleLabelMap","Dense","Sparse","Standard","soundscapeVisibleLabelMap","Rain","Sea","Fire","tempoVisibleLabelMap","SlowDown","Normal","SpeedUp","instrumentVisibleLabelMap","DrumAC","DrumElec","DrumLofiA","DrumLofiB","handleSetParameter","property","renderButton","getIcon","controls","descriptionMap","bottomNavBarProps","Boolean","mediaMap","trackUrl","availableMedia","randomMedia","floor","random","selectSpecificBackground","selectRandomBackground","interactiveBackground","InteractivePlayerBackground","media","generationTriggerWrapperClasses","generationTriggerClasses","generationTriggerStyles","animatedText","char","appliedParameters","showAudioPlayer","audioPlayerWrapperClasses","drawerControlButtonWrapperClasses","Panel","contentWidth","useStyledBackground","useStyledBody","useStyledFooter","useStyledHeader","header","Toolbar","RxHamburgerMenu","Fragment","isScrollable","bodyElementId","InfinitySlidingMenu","onOpenChange","_this_localStorage","info","setItem","setObject","jsonValue","JSON","stringify","defaultValue","getItem","getObject","rawJson","parse","err","removeItem","constructor","router","useRouter","pathname","usePathname","params","useParams","searchParams","useSearchParams","currentUrl","setCurrentUrl","location","origin","toString","urlParams","queryParams","camelCase","String","originalParams","newQueryParams","forceNavigation","currentUrlString","currentUrlObject","targetUrlObject","search","entries","currentFullUrl","targetFullUrl","push","scroll","replace"],"sourceRoot":""}