@gentomiyano/optimized-web-audio-player 0.2.3 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +237 -216
- package/dist/config/index.d.ts +2 -2
- package/dist/config/index.js.map +1 -1
- package/dist/config-Bhyo_y05.d.ts +14 -0
- package/dist/consumer/index.d.ts +19 -2
- package/dist/consumer/index.js +113 -1
- package/dist/consumer/index.js.map +1 -1
- package/dist/content-CVe0cm0y.d.ts +60 -0
- package/dist/contracts/index.d.ts +3 -15
- package/dist/index.d.ts +4 -3
- package/dist/index.js.map +1 -1
- package/dist/media-delivery/index.d.ts +1 -1
- package/dist/media-delivery/index.js.map +1 -1
- package/dist/{media-element-vFtmw4mQ.d.ts → media-element-BBgNBpqF.d.ts} +1 -1
- package/dist/{player-CE714iU_.d.ts → player-DRQO7SLs.d.ts} +20 -2
- package/dist/ports/index.d.ts +2 -2
- package/dist/react/index.d.ts +2 -2
- package/dist/react/index.js +42 -9
- package/dist/react/index.js.map +1 -1
- package/dist/testing/index.d.ts +1 -1
- package/dist/testing/index.js.map +1 -1
- package/dist/ui/index.d.ts +18 -2
- package/dist/ui/index.js +757 -5
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/player-tokens.css +572 -572
- package/dist/ui/player-views.css +1337 -691
- package/dist/ui/styles.css +2 -2
- package/package.json +1 -1
package/dist/ui/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/icons/player-icons.tsx","../../src/ui/player-utils.ts","../../src/ui/player-primitives.tsx","../../src/ui/waveform.tsx","../../src/ui/compact-player-layout.tsx","../../src/ui/seek-bar.tsx","../../src/ui/compact-player.tsx","../../src/ui/bound-compact-player-view.tsx","../../src/ui/detailed-player.tsx","../../src/ui/mini-player.tsx","../../src/ui/podcast-player.tsx","../../src/ui/queue-panel.tsx","../../src/ui/wide-player.tsx"],"names":["jsx","jsxs","useId","useState","useRef","useEffect"],"mappings":"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","file":"index.js","sourcesContent":["import type { ReactNode, SVGProps } from \"react\";\r\n\r\nexport interface PlayerIconProps\r\n extends Omit<SVGProps<SVGSVGElement>, \"children\"> {\r\n readonly size?: number;\r\n}\r\n\r\ninterface IconFrameProps extends PlayerIconProps {\r\n readonly children: ReactNode;\r\n}\r\n\r\nfunction IconFrame({\r\n children,\r\n size = 20,\r\n ...props\r\n}: IconFrameProps) {\r\n return (\r\n <svg\r\n aria-hidden=\"true\"\r\n focusable=\"false\"\r\n viewBox=\"0 0 24 24\"\r\n width={size}\r\n height={size}\r\n fill=\"currentColor\"\r\n {...props}\r\n >\r\n {children}\r\n </svg>\r\n );\r\n}\r\n\r\nexport function PlayIcon(props: PlayerIconProps) {\r\n return (\r\n <IconFrame {...props}>\r\n <path d=\"M7 4.8c0-1.05 1.16-1.68 2.04-1.1l11 7.2a1.3 1.3 0 0 1 0 2.2l-11 7.2A1.31 1.31 0 0 1 7 19.2V4.8Z\" />\r\n </IconFrame>\r\n );\r\n}\r\n\r\nexport function PauseIcon(props: PlayerIconProps) {\r\n return (\r\n <IconFrame {...props}>\r\n <rect x=\"5\" y=\"4\" width=\"5\" height=\"16\" rx=\"0.8\" />\r\n <rect x=\"14\" y=\"4\" width=\"5\" height=\"16\" rx=\"0.8\" />\r\n </IconFrame>\r\n );\r\n}\r\n\r\nexport function PreviousIcon(props: PlayerIconProps) {\r\n return (\r\n <IconFrame {...props}>\r\n <rect x=\"4\" y=\"5\" width=\"3\" height=\"14\" rx=\"0.6\" />\r\n <path d=\"M19 5.3v13.4c0 .93-1.02 1.5-1.82 1.02l-9.7-6.7a1.2 1.2 0 0 1 0-2.04l9.7-6.7A1.19 1.19 0 0 1 19 5.3Z\" />\r\n </IconFrame>\r\n );\r\n}\r\n\r\nexport function NextIcon(props: PlayerIconProps) {\r\n return (\r\n <IconFrame {...props}>\r\n <rect x=\"17\" y=\"5\" width=\"3\" height=\"14\" rx=\"0.6\" />\r\n <path d=\"M5 5.3v13.4c0 .93 1.02 1.5 1.82 1.02l9.7-6.7a1.2 1.2 0 0 0 0-2.04l-9.7-6.7A1.19 1.19 0 0 0 5 5.3Z\" />\r\n </IconFrame>\r\n );\r\n}\r\n\r\nexport function ShuffleIcon(props: PlayerIconProps) {\r\n return (\r\n <IconFrame {...props}>\r\n <path d=\"M17.2 3.7 22 7.5l-4.8 3.8V8.8h-1.9c-1.5 0-2.4.5-3.2 1.6l-3.3 4.5c-1.35 1.84-3.1 2.8-5.8 2.8H2v-3h1c1.7 0 2.55-.43 3.36-1.53l3.32-4.52C11.02 6.82 12.8 5.8 15.3 5.8h1.9V3.7ZM2 6.3h1c2.7 0 4.43.94 5.8 2.8l1.05 1.43-1.87 2.55-1.62-2.25C5.55 9.73 4.7 9.3 3 9.3H2v-3Zm12.08 5.17c.35-.13.75-.2 1.22-.2h1.9V8.7l4.8 3.8-4.8 3.8v-2.03h-1.9c-1.24 0-2.05.34-2.73 1.04l1.51-3.84Z\" />\r\n </IconFrame>\r\n );\r\n}\r\n\r\nexport function RepeatIcon(props: PlayerIconProps) {\r\n return (\r\n <IconFrame {...props}>\r\n <path d=\"M7.3 4h9.2A4.5 4.5 0 0 1 21 8.5V10h-3V8.5A1.5 1.5 0 0 0 16.5 7H7.3v3.1L2 5.55 7.3 1v3Zm9.4 16H7.5A4.5 4.5 0 0 1 3 15.5V14h3v1.5A1.5 1.5 0 0 0 7.5 17h9.2v-3.1l5.3 4.55L16.7 23v-3Z\" />\r\n </IconFrame>\r\n );\r\n}\r\n\r\nexport function RepeatOneIcon(props: PlayerIconProps) {\r\n return (\r\n <IconFrame {...props}>\r\n <path d=\"M7.3 3h9.2A4.5 4.5 0 0 1 21 7.5V9h-3V7.5A1.5 1.5 0 0 0 16.5 6H7.3v2.6L2 4.55 7.3.5V3Zm9.4 18H7.5A4.5 4.5 0 0 1 3 16.5V15h3v1.5A1.5 1.5 0 0 0 7.5 18h9.2v-2.6l5.3 4.05-5.3 4.05V21Z\" />\r\n <path d=\"M10.25 9h3.35v7h-2.35v-4.8h-1V9Z\" />\r\n </IconFrame>\r\n );\r\n}\r\n\r\nexport function QueueIcon(props: PlayerIconProps) {\r\n return (\r\n <IconFrame {...props}>\r\n <circle cx=\"4\" cy=\"6\" r=\"2\" />\r\n <circle cx=\"4\" cy=\"12\" r=\"2\" />\r\n <circle cx=\"4\" cy=\"18\" r=\"2\" />\r\n <rect x=\"8\" y=\"4.5\" width=\"14\" height=\"3\" rx=\"0.7\" />\r\n <rect x=\"8\" y=\"10.5\" width=\"14\" height=\"3\" rx=\"0.7\" />\r\n <rect x=\"8\" y=\"16.5\" width=\"14\" height=\"3\" rx=\"0.7\" />\r\n </IconFrame>\r\n );\r\n}\r\n\r\nexport function VolumeIcon(props: PlayerIconProps) {\r\n return (\r\n <IconFrame {...props}>\r\n <path d=\"M3 9h4l5-4.4c.78-.68 2-.13 2 .9v13c0 1.03-1.22 1.58-2 .9L7 15H3V9Zm14.3-1.8a1.5 1.5 0 0 1 2.1.25A7.4 7.4 0 0 1 21 12a7.4 7.4 0 0 1-1.6 4.55 1.5 1.5 0 1 1-2.35-1.86A4.4 4.4 0 0 0 18 12c0-1-.33-1.93-.95-2.69a1.5 1.5 0 0 1 .25-2.11Z\" />\r\n </IconFrame>\r\n );\r\n}\r\n\r\nexport function MuteIcon(props: PlayerIconProps) {\r\n return (\r\n <IconFrame {...props}>\r\n <path d=\"M2 9h4l5-4.4c.78-.68 2-.13 2 .9v13c0 1.03-1.22 1.58-2 .9L6 15H2V9Zm13.9-.9L18 10.2l2.1-2.1L22 10l-2.1 2.1L22 14l-1.9 1.9-2.1-2.1-2.1 2.1L14 14l2.1-1.9L14 10l1.9-1.9Z\" />\r\n </IconFrame>\r\n );\r\n}\r\n\r\nexport function PodcastSkipBackIcon(props: PlayerIconProps) {\r\n return (\r\n <IconFrame {...props}>\r\n <path d=\"M8.2 3.2 3 7.4l5.2 4.2V9a7 7 0 1 1-1.55 8.5l-2.73 1.25A10 10 0 1 0 8.2 6V3.2Z\" />\r\n <rect x=\"8.5\" y=\"10\" width=\"2.2\" height=\"6\" rx=\"0.4\" />\r\n <rect x=\"12.2\" y=\"10\" width=\"3.3\" height=\"2\" rx=\"0.4\" />\r\n <rect x=\"13.3\" y=\"11\" width=\"2.2\" height=\"5\" rx=\"0.4\" />\r\n <rect x=\"12.2\" y=\"14\" width=\"3.3\" height=\"2\" rx=\"0.4\" />\r\n </IconFrame>\r\n );\r\n}\r\n\r\nexport function PodcastSkipForwardIcon(props: PlayerIconProps) {\r\n return (\r\n <IconFrame {...props}>\r\n <path d=\"m15.8 3.2 5.2 4.2-5.2 4.2V9a7 7 0 1 0 1.55 8.5l2.73 1.25A10 10 0 1 1 15.8 6V3.2Z\" />\r\n <path d=\"M7.5 10h3.2v2H9.5v1h1.2v3H7.5v-2h1.2v-2H7.5v-2Zm4.3 0H15v6h-3.2v-6Zm2 2h-.8v2h.8v-2Z\" />\r\n </IconFrame>\r\n );\r\n}\r\n\r\nexport function CloseIcon(props: PlayerIconProps) {\r\n return (\r\n <IconFrame {...props}>\r\n <path d=\"m5.05 3 6.95 6.95L18.95 3 21 5.05 14.05 12 21 18.95 18.95 21 12 14.05 5.05 21 3 18.95 9.95 12 3 5.05 5.05 3Z\" />\r\n </IconFrame>\r\n );\r\n}\r\n\r\nexport function DragHandleIcon(props: PlayerIconProps) {\r\n return (\r\n <IconFrame {...props}>\r\n {[5, 12, 19].flatMap((cx) =>\r\n [7, 17].map((cy) => (\r\n <circle\r\n key={`${String(cx)}-${String(cy)}`}\r\n cx={cx}\r\n cy={cy}\r\n r=\"2\"\r\n />\r\n )),\r\n )}\r\n </IconFrame>\r\n );\r\n}\r\n\r\nexport function RemoveIcon(props: PlayerIconProps) {\r\n return (\r\n <IconFrame {...props}>\r\n <path\r\n fillRule=\"evenodd\"\r\n d=\"M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20ZM6 10.5h12v3H6v-3Z\"\r\n clipRule=\"evenodd\"\r\n />\r\n </IconFrame>\r\n );\r\n}\r\n\r\nexport function RetryIcon(props: PlayerIconProps) {\r\n return (\r\n <IconFrame {...props}>\r\n <path d=\"M19.7 4.3V1L15.5 5.2 19.7 9V7.3A8 8 0 1 1 12 4a1.5 1.5 0 0 0 0-3 11 11 0 1 0 10.7 8.5l-2.88.84A8 8 0 0 1 19.7 4.3Z\" />\r\n </IconFrame>\r\n );\r\n}\r\n\r\nexport function ChevronIcon(props: PlayerIconProps) {\r\n return (\r\n <IconFrame {...props}>\r\n <path d=\"m4 9 8 8 8-8-2.2-2.2L12 12.6 6.2 6.8 4 9Z\" />\r\n </IconFrame>\r\n );\r\n}\r\n","import type {\r\n PlayerError,\r\n PlayerState,\r\n RepeatMode,\r\n} from \"../contracts/player\";\r\n\r\nexport function clamp(value: number, min: number, max: number): number {\r\n return Math.min(Math.max(value, min), max);\r\n}\r\n\r\nexport function formatTime(seconds: number | null): string {\r\n if (seconds === null || !Number.isFinite(seconds) || seconds < 0) {\r\n return \"--:--\";\r\n }\r\n\r\n const wholeSeconds = Math.floor(seconds);\r\n const hours = Math.floor(wholeSeconds / 3600);\r\n const minutes = Math.floor((wholeSeconds % 3600) / 60);\r\n const remainder = wholeSeconds % 60;\r\n\r\n if (hours > 0) {\r\n return `${String(hours)}:${String(minutes).padStart(2, \"0\")}:${String(remainder).padStart(2, \"0\")}`;\r\n }\r\n\r\n return `${String(minutes).padStart(2, \"0\")}:${String(remainder).padStart(2, \"0\")}`;\r\n}\r\n\r\nexport function formatTimeAria(seconds: number): string {\r\n const safeSeconds = Math.max(0, Math.floor(seconds));\r\n const hours = Math.floor(safeSeconds / 3600);\r\n const minutes = Math.floor((safeSeconds % 3600) / 60);\r\n const remainder = safeSeconds % 60;\r\n const parts = [\r\n hours > 0 ? `${String(hours)} hour${hours === 1 ? \"\" : \"s\"}` : \"\",\r\n minutes > 0 ? `${String(minutes)} minute${minutes === 1 ? \"\" : \"s\"}` : \"\",\r\n `${String(remainder)} second${remainder === 1 ? \"\" : \"s\"}`,\r\n ].filter(Boolean);\r\n return parts.join(\" \");\r\n}\r\n\r\nexport function getRepeatLabel(mode: RepeatMode): string {\r\n switch (mode) {\r\n case \"off\":\r\n return \"Repeat off\";\r\n case \"all\":\r\n return \"Repeat all\";\r\n case \"one\":\r\n return \"Repeat one\";\r\n }\r\n}\r\n\r\nexport function getNextRepeatMode(mode: RepeatMode): RepeatMode {\r\n switch (mode) {\r\n case \"off\":\r\n return \"all\";\r\n case \"all\":\r\n return \"one\";\r\n case \"one\":\r\n return \"off\";\r\n }\r\n}\r\n\r\nexport function getStatusLabel(state: Readonly<PlayerState>): string {\r\n if (state.needsUserGesture) {\r\n return \"Ready to play\";\r\n }\r\n\r\n switch (state.status) {\r\n case \"idle\":\r\n return \"Idle\";\r\n case \"loading\":\r\n return \"Loading\";\r\n case \"playing\":\r\n return \"Playing\";\r\n case \"paused\":\r\n return \"Paused\";\r\n case \"seeking\":\r\n return \"Seeking\";\r\n case \"ended\":\r\n return \"Ended\";\r\n case \"error\":\r\n return \"Playback unavailable\";\r\n }\r\n}\r\n\r\nexport function getErrorMessage(error: PlayerError): string {\r\n switch (error.code) {\r\n case \"autoplay-blocked\":\r\n return \"Playback needs a direct action.\";\r\n case \"network\":\r\n return \"The media could not be reached.\";\r\n case \"cors\":\r\n return \"The media source is not available.\";\r\n case \"decode\":\r\n return \"This media could not be decoded.\";\r\n case \"unsupported\":\r\n return \"This media format is not supported.\";\r\n case \"audio-context\":\r\n return \"Audio output is not available.\";\r\n case \"unknown\":\r\n return \"Playback is currently unavailable.\";\r\n }\r\n}\r\n","import {\r\n useEffect,\r\n useId,\r\n useRef,\r\n useState,\r\n type CSSProperties,\r\n type FocusEvent,\r\n type ReactNode,\r\n} from \"react\";\r\nimport type {\r\n PlayerAppearance,\r\n PlayerCommands,\r\n PlayerMediaItem,\r\n PlayerState,\r\n} from \"../contracts/player\";\r\nimport {\r\n MuteIcon,\r\n NextIcon,\r\n PauseIcon,\r\n PlayIcon,\r\n PreviousIcon,\r\n QueueIcon,\r\n RepeatIcon,\r\n RepeatOneIcon,\r\n RetryIcon,\r\n ShuffleIcon,\r\n VolumeIcon,\r\n} from \"../icons\";\r\nimport {\r\n formatTime,\r\n getErrorMessage,\r\n getNextRepeatMode,\r\n getRepeatLabel,\r\n getStatusLabel,\r\n} from \"./player-utils\";\r\n\r\nexport interface PlayerSurfaceProps {\r\n readonly appearance: PlayerAppearance;\r\n readonly children: ReactNode;\r\n readonly className?: string;\r\n readonly label: string;\r\n}\r\n\r\nexport function PlayerSurface({\r\n appearance,\r\n children,\r\n className,\r\n label,\r\n}: PlayerSurfaceProps) {\r\n return (\r\n <section\r\n aria-label={label}\r\n className={[\"player-surface\", className].filter(Boolean).join(\" \")}\r\n data-appearance={appearance}\r\n >\r\n {children}\r\n </section>\r\n );\r\n}\r\n\r\nexport interface ArtworkProps {\r\n readonly item: PlayerMediaItem | null;\r\n readonly className?: string;\r\n}\r\n\r\nexport function Artwork({ className, item }: ArtworkProps) {\r\n const classes = [\"player-artwork\", className].filter(Boolean).join(\" \");\r\n\r\n if (item?.artwork !== undefined) {\r\n return (\r\n <span className={`${classes} player-artwork--image`}>\r\n <img\r\n alt={item.artwork.alt}\r\n className=\"player-artwork__image\"\r\n decoding=\"async\"\r\n src={item.artwork.url}\r\n />\r\n </span>\r\n );\r\n }\r\n\r\n return (\r\n <div\r\n aria-label=\"Artwork unavailable\"\r\n className={`${classes} player-artwork--fallback`}\r\n role=\"img\"\r\n >\r\n <span aria-hidden=\"true\" />\r\n </div>\r\n );\r\n}\r\n\r\nexport interface TrackMetadataProps {\r\n readonly item: PlayerMediaItem | null;\r\n readonly status?: string;\r\n readonly className?: string;\r\n readonly scrollTitle?: boolean;\r\n}\r\n\r\nfunction ScrollingTitle({\r\n enabled,\r\n title,\r\n}: {\r\n readonly enabled: boolean;\r\n readonly title: string;\r\n}) {\r\n const containsJapanese = /[\\u3040-\\u30ff\\u3400-\\u9fff]/u.test(title);\r\n const viewportRef = useRef<HTMLElement>(null);\r\n const contentRef = useRef<HTMLSpanElement>(null);\r\n const [marquee, setMarquee] = useState({\r\n distance: 0,\r\n duration: 10,\r\n overflow: false,\r\n });\r\n\r\n useEffect(() => {\r\n const viewport = viewportRef.current;\r\n const content = contentRef.current;\r\n\r\n if (viewport === null || content === null) {\r\n return;\r\n }\r\n const viewportElement = viewport;\r\n const contentElement = content;\r\n\r\n function measure() {\r\n const viewportWidth = Math.max(\r\n viewportElement.getBoundingClientRect().width,\r\n viewportElement.clientWidth,\r\n );\r\n const contentWidth = Math.max(\r\n contentElement.getBoundingClientRect().width,\r\n contentElement.scrollWidth,\r\n );\r\n const overflow = contentWidth - viewportWidth > 1;\r\n const distance = enabled ? contentWidth + 12 : 0;\r\n setMarquee({\r\n distance,\r\n duration: Math.max(10, distance / 22 + 4),\r\n overflow,\r\n });\r\n }\r\n\r\n measure();\r\n\r\n if (typeof ResizeObserver === \"undefined\") {\r\n window.addEventListener(\"resize\", measure);\r\n return () => {\r\n window.removeEventListener(\"resize\", measure);\r\n };\r\n }\r\n\r\n const observer = new ResizeObserver(measure);\r\n observer.observe(viewportElement);\r\n observer.observe(contentElement);\r\n return () => {\r\n observer.disconnect();\r\n };\r\n }, [enabled, title]);\r\n\r\n const style = {\r\n \"--player-title-scroll-offset\": `${String(-marquee.distance)}px`,\r\n \"--player-title-scroll-duration\": `${String(marquee.duration)}s`,\r\n } as CSSProperties;\r\n\r\n return (\r\n <strong\r\n className=\"player-title\"\r\n data-overflow={marquee.overflow ? \"true\" : \"false\"}\r\n data-scroll={enabled ? \"true\" : \"false\"}\r\n data-script={containsJapanese ? \"japanese\" : \"latin\"}\r\n ref={viewportRef}\r\n style={style}\r\n >\r\n <span className=\"player-title__text\" ref={contentRef}>\r\n {title}\r\n </span>\r\n </strong>\r\n );\r\n}\r\n\r\nexport function TrackMetadata({\r\n className,\r\n item,\r\n scrollTitle = false,\r\n status,\r\n}: TrackMetadataProps) {\r\n return (\r\n <div\r\n className={[\"player-metadata\", className].filter(Boolean).join(\" \")}\r\n >\r\n {status === undefined ? null : (\r\n <span className=\"player-kicker\">{status}</span>\r\n )}\r\n <ScrollingTitle\r\n enabled={item !== null && scrollTitle}\r\n key={item?.title ?? \"No media selected\"}\r\n title={item?.title ?? \"No media selected\"}\r\n />\r\n <span className=\"player-creator\">\r\n {item === null\r\n ? \"Select media to begin\"\r\n : item.creatorName ?? \"Artist unavailable\"}\r\n </span>\r\n {item?.collectionTitle === undefined ? null : (\r\n <span className=\"player-collection\">{item.collectionTitle}</span>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport interface TimeReadoutProps {\r\n readonly currentTimeSec: number;\r\n readonly durationSec: number | null;\r\n readonly className?: string;\r\n}\r\n\r\nexport function TimeReadout({\r\n className,\r\n currentTimeSec,\r\n durationSec,\r\n}: TimeReadoutProps) {\r\n return (\r\n <div\r\n aria-label={`${formatTime(currentTimeSec)} of ${formatTime(durationSec)}`}\r\n className={[\"player-time\", className].filter(Boolean).join(\" \")}\r\n >\r\n <time>{formatTime(currentTimeSec)}</time>\r\n <span aria-hidden=\"true\">/</span>\r\n <time>{formatTime(durationSec)}</time>\r\n </div>\r\n );\r\n}\r\n\r\nexport interface IconButtonProps {\r\n readonly label: string;\r\n readonly children: ReactNode;\r\n readonly onClick: () => void;\r\n readonly disabled?: boolean;\r\n readonly pressed?: boolean;\r\n readonly className?: string;\r\n}\r\n\r\nexport function IconButton({\r\n children,\r\n className,\r\n disabled = false,\r\n label,\r\n onClick,\r\n pressed,\r\n}: IconButtonProps) {\r\n return (\r\n <button\r\n aria-label={label}\r\n {...(pressed === undefined ? {} : { \"aria-pressed\": pressed })}\r\n className={[\"player-icon-button\", className].filter(Boolean).join(\" \")}\r\n disabled={disabled}\r\n onClick={onClick}\r\n title={label}\r\n type=\"button\"\r\n >\r\n {children}\r\n </button>\r\n );\r\n}\r\n\r\nexport interface PrimaryPlaybackButtonProps {\r\n readonly state: Readonly<PlayerState>;\r\n readonly commands: PlayerCommands;\r\n readonly className?: string;\r\n}\r\n\r\nexport function PrimaryPlaybackButton({\r\n className,\r\n commands,\r\n state,\r\n}: PrimaryPlaybackButtonProps) {\r\n const isPlaying = state.status === \"playing\";\r\n const label = isPlaying ? \"Pause\" : \"Play\";\r\n\r\n return (\r\n <IconButton\r\n className={[\r\n \"player-play-button\",\r\n isPlaying ? \"player-play-button--active\" : \"\",\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \")}\r\n disabled={state.currentItem === null || state.status === \"loading\"}\r\n label={label}\r\n onClick={() => {\r\n void commands.togglePlayback();\r\n }}\r\n >\r\n {isPlaying ? <PauseIcon size={22} /> : <PlayIcon size={22} />}\r\n </IconButton>\r\n );\r\n}\r\n\r\nexport interface TransportControlsProps {\r\n readonly state: Readonly<PlayerState>;\r\n readonly commands: PlayerCommands;\r\n readonly compact?: boolean;\r\n readonly showModes?: boolean;\r\n readonly className?: string;\r\n}\r\n\r\nexport function TransportControls({\r\n className,\r\n commands,\r\n compact = false,\r\n showModes = true,\r\n state,\r\n}: TransportControlsProps) {\r\n const RepeatModeIcon =\r\n state.repeatMode === \"one\" ? RepeatOneIcon : RepeatIcon;\r\n\r\n return (\r\n <div\r\n aria-label=\"Playback controls\"\r\n className={[\r\n \"player-transport\",\r\n compact ? \"player-transport--compact\" : \"\",\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \")}\r\n role=\"group\"\r\n >\r\n {showModes ? (\r\n <IconButton\r\n disabled={state.activeContext?.mode === \"manual-history\"}\r\n label={state.shuffleEnabled ? \"Shuffle on\" : \"Shuffle off\"}\r\n onClick={() => {\r\n commands.setShuffle(!state.shuffleEnabled);\r\n }}\r\n pressed={state.shuffleEnabled}\r\n >\r\n <ShuffleIcon />\r\n </IconButton>\r\n ) : null}\r\n <IconButton\r\n disabled={!state.canGoPrevious}\r\n label=\"Previous\"\r\n onClick={() => {\r\n void commands.previous();\r\n }}\r\n >\r\n <PreviousIcon />\r\n </IconButton>\r\n <PrimaryPlaybackButton commands={commands} state={state} />\r\n <IconButton\r\n disabled={!state.canGoNext}\r\n label=\"Next\"\r\n onClick={() => {\r\n void commands.next();\r\n }}\r\n >\r\n <NextIcon />\r\n </IconButton>\r\n {showModes ? (\r\n <IconButton\r\n label={getRepeatLabel(state.repeatMode)}\r\n onClick={() => {\r\n commands.setRepeatMode(\r\n state.activeContext?.mode === \"manual-history\"\r\n ? state.repeatMode === \"one\"\r\n ? \"off\"\r\n : \"one\"\r\n : getNextRepeatMode(state.repeatMode),\r\n );\r\n }}\r\n pressed={state.repeatMode !== \"off\"}\r\n >\r\n <RepeatModeIcon />\r\n </IconButton>\r\n ) : null}\r\n </div>\r\n );\r\n}\r\n\r\nexport interface VolumeControlProps {\r\n readonly state: Readonly<PlayerState>;\r\n readonly commands: PlayerCommands;\r\n readonly className?: string;\r\n}\r\n\r\nexport function VolumeControl({\r\n className,\r\n commands,\r\n state,\r\n}: VolumeControlProps) {\r\n const isMuted = state.muted || state.volume === 0;\r\n return (\r\n <div\r\n className={[\"player-volume\", className].filter(Boolean).join(\" \")}\r\n >\r\n <IconButton\r\n label={isMuted ? \"Unmute\" : \"Mute\"}\r\n onClick={() => {\r\n commands.toggleMute();\r\n }}\r\n pressed={state.muted}\r\n >\r\n {isMuted ? <MuteIcon /> : <VolumeIcon />}\r\n </IconButton>\r\n <label>\r\n <span className=\"player-visually-hidden\">Volume</span>\r\n <input\r\n aria-label=\"Volume\"\r\n max={1}\r\n min={0}\r\n onChange={(event) => {\r\n commands.setVolume(Number(event.currentTarget.value));\r\n }}\r\n step={0.01}\r\n type=\"range\"\r\n value={state.volume}\r\n />\r\n </label>\r\n </div>\r\n );\r\n}\r\n\r\nexport interface PopoverVolumeControlProps {\r\n readonly state: Readonly<PlayerState>;\r\n readonly commands: PlayerCommands;\r\n readonly label: string;\r\n readonly className?: string;\r\n}\r\n\r\nexport function PopoverVolumeControl({\r\n className,\r\n commands,\r\n label,\r\n state,\r\n}: PopoverVolumeControlProps) {\r\n const [open, setOpen] = useState(false);\r\n const buttonRef = useRef<HTMLButtonElement>(null);\r\n const rootRef = useRef<HTMLDivElement>(null);\r\n const sliderRef = useRef<HTMLInputElement>(null);\r\n const panelId = useId();\r\n const isMuted = state.muted || state.volume === 0;\r\n\r\n useEffect(() => {\r\n if (!open) {\r\n return;\r\n }\r\n\r\n sliderRef.current?.focus();\r\n const closeOnOutsidePointer = (event: PointerEvent) => {\r\n if (\r\n event.target instanceof Node &&\r\n !rootRef.current?.contains(event.target)\r\n ) {\r\n setOpen(false);\r\n }\r\n };\r\n document.addEventListener(\"pointerdown\", closeOnOutsidePointer);\r\n return () => {\r\n document.removeEventListener(\"pointerdown\", closeOnOutsidePointer);\r\n };\r\n }, [open]);\r\n\r\n function closeWhenFocusLeaves(event: FocusEvent<HTMLDivElement>) {\r\n if (\r\n event.relatedTarget instanceof Node &&\r\n rootRef.current?.contains(event.relatedTarget)\r\n ) {\r\n return;\r\n }\r\n setOpen(false);\r\n }\r\n\r\n return (\r\n <div\r\n className={[\"player-volume-popover\", className]\r\n .filter(Boolean)\r\n .join(\" \")}\r\n onBlur={closeWhenFocusLeaves}\r\n onKeyDown={(event) => {\r\n if (event.key === \"Escape\") {\r\n setOpen(false);\r\n buttonRef.current?.focus();\r\n }\r\n }}\r\n ref={rootRef}\r\n >\r\n <button\r\n aria-controls={panelId}\r\n aria-expanded={open}\r\n aria-label={`${open ? \"Close\" : \"Open\"} ${label}`}\r\n className=\"player-icon-button\"\r\n onClick={() => {\r\n setOpen((current) => !current);\r\n }}\r\n ref={buttonRef}\r\n title={`${open ? \"Close\" : \"Open\"} ${label}`}\r\n type=\"button\"\r\n >\r\n {isMuted ? <MuteIcon /> : <VolumeIcon />}\r\n </button>\r\n {open ? (\r\n <div\r\n aria-label={label}\r\n className=\"player-volume-popover__panel\"\r\n id={panelId}\r\n role=\"group\"\r\n >\r\n <label>\r\n <span className=\"player-visually-hidden\">{label}</span>\r\n <input\r\n aria-label={label}\r\n max={1}\r\n min={0}\r\n onChange={(event) => {\r\n commands.setVolume(Number(event.currentTarget.value));\r\n }}\r\n ref={sliderRef}\r\n step={0.01}\r\n type=\"range\"\r\n value={state.volume}\r\n />\r\n </label>\r\n <output>{Math.round(state.volume * 100)}</output>\r\n </div>\r\n ) : null}\r\n </div>\r\n );\r\n}\r\n\r\nexport interface QueueToggleProps {\r\n readonly onClick: () => void;\r\n readonly expanded?: boolean;\r\n}\r\n\r\nexport function QueueToggle({\r\n expanded = false,\r\n onClick,\r\n}: QueueToggleProps) {\r\n return (\r\n <IconButton\r\n label={expanded ? \"Close queue\" : \"Open queue\"}\r\n onClick={onClick}\r\n pressed={expanded}\r\n >\r\n <QueueIcon />\r\n </IconButton>\r\n );\r\n}\r\n\r\nexport interface PlayerStatusProps {\r\n readonly state: Readonly<PlayerState>;\r\n}\r\n\r\nexport function PlayerStatus({ state }: PlayerStatusProps) {\r\n return (\r\n <span className=\"player-status\" data-status={state.status}>\r\n {getStatusLabel(state)}\r\n </span>\r\n );\r\n}\r\n\r\nexport interface PlayerErrorNoticeProps {\r\n readonly state: Readonly<PlayerState>;\r\n readonly commands: PlayerCommands;\r\n}\r\n\r\nexport function PlayerErrorNotice({\r\n commands,\r\n state,\r\n}: PlayerErrorNoticeProps) {\r\n if (state.error === null) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div className=\"player-error\" role=\"alert\">\r\n <span>{getErrorMessage(state.error)}</span>\r\n {state.error.recoverable ? (\r\n <button\r\n onClick={() => {\r\n void commands.retry();\r\n }}\r\n type=\"button\"\r\n >\r\n <RetryIcon size={16} />\r\n Retry\r\n </button>\r\n ) : null}\r\n </div>\r\n );\r\n}\r\n","import { useId } from \"react\";\r\nimport type { PlayerWaveform } from \"../contracts/player\";\r\nimport { clamp } from \"./player-utils\";\r\n\r\nconst FALLBACK_PEAKS = [\r\n 0.16, 0.24, 0.42, 0.3, 0.58, 0.76, 0.48, 0.34, 0.66, 0.88, 0.62, 0.4,\r\n 0.52, 0.72, 0.44, 0.28, 0.56, 0.82, 0.68, 0.38, 0.24, 0.46, 0.32, 0.18,\r\n] as const;\r\nconst BAR_COUNT = 512;\r\nconst VIEWBOX_WIDTH = BAR_COUNT;\r\n\r\nexport interface WaveformProps {\r\n readonly waveform?: PlayerWaveform | undefined;\r\n readonly progress?: number;\r\n readonly playedStateEnabled?: boolean;\r\n readonly opacity?: number;\r\n readonly className?: string;\r\n}\r\n\r\nfunction createWaveformBars(peaks: readonly number[]): readonly number[] {\r\n const source = peaks.length > 1 ? peaks : FALLBACK_PEAKS;\r\n return Array.from({ length: BAR_COUNT }, (_, index) => {\r\n const sourcePosition =\r\n (index / Math.max(BAR_COUNT - 1, 1)) * (source.length - 1);\r\n const leftIndex = Math.floor(sourcePosition);\r\n const rightIndex = Math.min(leftIndex + 1, source.length - 1);\r\n const mix = sourcePosition - leftIndex;\r\n const leftPeak = Math.abs(source[leftIndex] ?? 0);\r\n const rightPeak = Math.abs(source[rightIndex] ?? leftPeak);\r\n const interpolated = leftPeak + (rightPeak - leftPeak) * mix;\r\n\r\n if (source.length >= BAR_COUNT) {\r\n return clamp(Math.pow(interpolated, 1.18), 0.04, 1);\r\n }\r\n\r\n const noiseSeed =\r\n Math.sin((index + 1) * 12.9898 + source.length * 78.233) *\r\n 43_758.5453;\r\n const noise = noiseSeed - Math.floor(noiseSeed);\r\n const fineDetail = 0.76 + noise * 0.34;\r\n const transient = noise > 0.975 ? 3.2 : noise > 0.91 ? 1.75 : 1;\r\n\r\n return clamp(\r\n Math.pow(interpolated, 1.22) * fineDetail * transient,\r\n 0.04,\r\n 1,\r\n );\r\n });\r\n}\r\n\r\nexport function Waveform({\r\n className,\r\n opacity = 1,\r\n playedStateEnabled = true,\r\n progress = 0,\r\n waveform,\r\n}: WaveformProps) {\r\n const clipId = useId().replaceAll(\":\", \"\");\r\n const bars = createWaveformBars(waveform?.peaks ?? FALLBACK_PEAKS);\r\n const progressWidth = clamp(progress, 0, 1) * VIEWBOX_WIDTH;\r\n const classes = [\"player-waveform\", className].filter(Boolean).join(\" \");\r\n const barPath = bars\r\n .map((peak, index) => {\r\n const halfHeight = peak * 47;\r\n const x = index + 0.5;\r\n return `M ${String(x)} ${String(50 - halfHeight)} V ${String(\r\n 50 + halfHeight,\r\n )}`;\r\n })\r\n .join(\" \");\r\n\r\n return (\r\n <svg\r\n aria-hidden=\"true\"\r\n className={classes}\r\n focusable=\"false\"\r\n preserveAspectRatio=\"none\"\r\n style={{ opacity: clamp(opacity, 0, 1), pointerEvents: \"none\" }}\r\n viewBox={`0 0 ${String(VIEWBOX_WIDTH)} 100`}\r\n >\r\n <path className=\"player-waveform__base\" d={barPath} />\r\n {playedStateEnabled ? (\r\n <>\r\n <clipPath id={clipId}>\r\n <rect width={progressWidth} height=\"100\" />\r\n </clipPath>\r\n <path\r\n className=\"player-waveform__played\"\r\n clipPath={`url(#${clipId})`}\r\n d={barPath}\r\n />\r\n </>\r\n ) : null}\r\n </svg>\r\n );\r\n}\r\n","import type { ReactNode } from \"react\";\r\nimport type {\r\n PlaybackContextMode,\r\n PlayerAppearance,\r\n PlayerMediaItem,\r\n PlayerRuntimeStatus,\r\n} from \"../contracts/player\";\r\nimport {\r\n Artwork,\r\n PlayerSurface,\r\n TimeReadout,\r\n TrackMetadata,\r\n} from \"./player-primitives\";\r\nimport { Waveform } from \"./waveform\";\r\n\r\ninterface CompactPlayerLayoutProps {\r\n readonly appearance: PlayerAppearance;\r\n readonly className?: string;\r\n readonly label: string;\r\n readonly item: PlayerMediaItem | null;\r\n readonly isPlaying: boolean;\r\n readonly currentTimeSec: number;\r\n readonly durationSec: number | null;\r\n readonly waveformOpacity: number;\r\n readonly waveformPlayedStateEnabled: boolean;\r\n readonly primaryControl: ReactNode;\r\n readonly status?: ReactNode;\r\n readonly seekControl?: ReactNode;\r\n readonly trailingControl?: ReactNode;\r\n readonly errorNotice?: ReactNode;\r\n readonly isActive?: boolean;\r\n readonly contextId?: string;\r\n readonly contextMode?: PlaybackContextMode;\r\n readonly runtimeStatus?: PlayerRuntimeStatus;\r\n readonly queueItemId?: string;\r\n}\r\n\r\nexport function CompactPlayerLayout({\r\n appearance,\r\n className,\r\n contextId,\r\n contextMode,\r\n currentTimeSec,\r\n durationSec,\r\n errorNotice,\r\n isActive,\r\n isPlaying,\r\n item,\r\n label,\r\n primaryControl,\r\n queueItemId,\r\n runtimeStatus,\r\n seekControl,\r\n status,\r\n trailingControl,\r\n waveformOpacity,\r\n waveformPlayedStateEnabled,\r\n}: CompactPlayerLayoutProps) {\r\n const progress =\r\n durationSec === null || durationSec <= 0\r\n ? 0\r\n : currentTimeSec / durationSec;\r\n\r\n return (\r\n <PlayerSurface\r\n appearance={appearance}\r\n className={[\"player-compact\", className].filter(Boolean).join(\" \")}\r\n label={label}\r\n >\r\n <div\r\n className=\"player-compact__main\"\r\n {...(isActive === undefined\r\n ? {}\r\n : { \"data-active\": isActive ? \"true\" : \"false\" })}\r\n data-has-status={status === undefined ? \"false\" : \"true\"}\r\n data-has-trailing-control={\r\n trailingControl === undefined ? \"false\" : \"true\"\r\n }\r\n data-playback-context-id={contextId}\r\n data-playback-context-mode={contextMode}\r\n data-player-runtime-status={runtimeStatus}\r\n data-queue-item-id={queueItemId}\r\n >\r\n {primaryControl}\r\n <Artwork className=\"player-compact__artwork\" item={item} />\r\n <TrackMetadata item={item} scrollTitle={isPlaying} />\r\n <div className=\"player-compact__signal\">\r\n {status}\r\n <div\r\n className=\"player-compact__scrubber\"\r\n data-seek-enabled={seekControl === undefined ? \"false\" : \"true\"}\r\n >\r\n <Waveform\r\n opacity={waveformOpacity}\r\n playedStateEnabled={waveformPlayedStateEnabled}\r\n progress={progress}\r\n waveform={item?.waveform}\r\n />\r\n {seekControl}\r\n </div>\r\n <TimeReadout\r\n currentTimeSec={currentTimeSec}\r\n durationSec={durationSec}\r\n />\r\n </div>\r\n {trailingControl}\r\n </div>\r\n {errorNotice}\r\n </PlayerSurface>\r\n );\r\n}\r\n","import { useEffect, useRef, useState } from \"react\";\r\nimport type {\r\n PlaybackStatus,\r\n SeekCommitMode,\r\n} from \"../contracts/player\";\r\nimport { clamp, formatTimeAria } from \"./player-utils\";\r\n\r\nexport interface SeekBarProps {\r\n readonly currentTimeSec: number;\r\n readonly durationSec: number | null;\r\n readonly canSeek: boolean;\r\n readonly status: PlaybackStatus;\r\n readonly commitMode: SeekCommitMode;\r\n readonly onSeek: (seconds: number) => void;\r\n readonly label?: string;\r\n readonly className?: string;\r\n}\r\n\r\nexport function SeekBar({\r\n canSeek,\r\n className,\r\n commitMode,\r\n currentTimeSec,\r\n durationSec,\r\n label = \"Seek\",\r\n onSeek,\r\n status,\r\n}: SeekBarProps) {\r\n const duration =\r\n durationSec !== null && Number.isFinite(durationSec) && durationSec > 0\r\n ? durationSec\r\n : 0;\r\n const disabled = !canSeek || duration === 0 || status === \"loading\";\r\n const safeCurrentTime = clamp(currentTimeSec, 0, duration);\r\n const [previewTime, setPreviewTime] = useState(safeCurrentTime);\r\n const previewProgress =\r\n duration === 0 ? 0 : clamp(previewTime / duration, 0, 1) * 100;\r\n const isAdjusting = useRef(false);\r\n const lastCommitted = useRef<number | null>(null);\r\n\r\n useEffect(() => {\r\n if (!isAdjusting.current) {\r\n setPreviewTime(safeCurrentTime);\r\n }\r\n }, [safeCurrentTime]);\r\n\r\n function updatePreview(value: number) {\r\n const nextValue = clamp(value, 0, duration);\r\n isAdjusting.current = true;\r\n setPreviewTime(nextValue);\r\n\r\n if (commitMode === \"live\") {\r\n onSeek(nextValue);\r\n lastCommitted.current = nextValue;\r\n }\r\n }\r\n\r\n function commitPreview(value = previewTime) {\r\n const nextValue = clamp(value, 0, duration);\r\n\r\n if (\r\n disabled ||\r\n !isAdjusting.current ||\r\n (commitMode === \"live\" && lastCommitted.current === nextValue)\r\n ) {\r\n isAdjusting.current = false;\r\n return;\r\n }\r\n\r\n onSeek(nextValue);\r\n lastCommitted.current = nextValue;\r\n isAdjusting.current = false;\r\n }\r\n\r\n function cancelPreview() {\r\n isAdjusting.current = false;\r\n lastCommitted.current = null;\r\n setPreviewTime(safeCurrentTime);\r\n }\r\n\r\n return (\r\n <label\r\n className={[\"player-seek\", className].filter(Boolean).join(\" \")}\r\n data-disabled={disabled ? \"true\" : \"false\"}\r\n >\r\n <span className=\"player-visually-hidden\">{label}</span>\r\n <span\r\n aria-hidden=\"true\"\r\n className=\"player-seek__progress\"\r\n style={{ width: `${String(disabled ? 0 : previewProgress)}%` }}\r\n />\r\n <input\r\n aria-label={label}\r\n aria-valuetext={formatTimeAria(previewTime)}\r\n disabled={disabled}\r\n max={duration || 1}\r\n min={0}\r\n onBlur={(event) => {\r\n commitPreview(Number(event.currentTarget.value));\r\n }}\r\n onChange={(event) => {\r\n updatePreview(Number(event.currentTarget.value));\r\n }}\r\n onKeyUp={(event) => {\r\n commitPreview(Number(event.currentTarget.value));\r\n }}\r\n onPointerDown={() => {\r\n isAdjusting.current = true;\r\n }}\r\n onPointerCancel={cancelPreview}\r\n onPointerUp={(event) => {\r\n commitPreview(Number(event.currentTarget.value));\r\n }}\r\n step={0.1}\r\n type=\"range\"\r\n value={disabled ? 0 : previewTime}\r\n />\r\n </label>\r\n );\r\n}\r\n","import type { PlayerViewProps } from \"../contracts/player\";\r\nimport {\r\n PlayerErrorNotice,\r\n PlayerStatus,\r\n PopoverVolumeControl,\r\n PrimaryPlaybackButton,\r\n} from \"./player-primitives\";\r\nimport { CompactPlayerLayout } from \"./compact-player-layout\";\r\nimport { SeekBar } from \"./seek-bar\";\r\n\r\nexport interface CompactPlayerProps extends PlayerViewProps {\r\n readonly className?: string;\r\n}\r\n\r\nexport function CompactPlayer({\r\n appearance,\r\n className,\r\n commands,\r\n state,\r\n}: CompactPlayerProps) {\r\n return (\r\n <CompactPlayerLayout\r\n appearance={appearance}\r\n {...(className === undefined ? {} : { className })}\r\n currentTimeSec={state.currentTimeSec}\r\n durationSec={state.durationSec}\r\n errorNotice={<PlayerErrorNotice commands={commands} state={state} />}\r\n isPlaying={state.status === \"playing\"}\r\n item={state.currentItem}\r\n label=\"Compact music player\"\r\n primaryControl={\r\n <PrimaryPlaybackButton commands={commands} state={state} />\r\n }\r\n seekControl={\r\n <SeekBar\r\n canSeek={state.canSeek}\r\n commitMode={state.experienceConfig.seekCommitMode}\r\n currentTimeSec={state.currentTimeSec}\r\n durationSec={state.durationSec}\r\n label={`Seek in ${state.currentItem?.title ?? \"current media\"}`}\r\n onSeek={(seconds) => {\r\n commands.seekTo(seconds);\r\n }}\r\n status={state.status}\r\n />\r\n }\r\n status={<PlayerStatus state={state} />}\r\n trailingControl={\r\n <PopoverVolumeControl\r\n commands={commands}\r\n label=\"Compact volume\"\r\n state={state}\r\n />\r\n }\r\n waveformOpacity={state.experienceConfig.waveformOpacity}\r\n waveformPlayedStateEnabled={\r\n state.experienceConfig.waveformPlayedStateEnabled\r\n }\r\n />\r\n );\r\n}\r\n","import type {\r\n BoundPlayerCommands,\r\n BoundPlayerViewState,\r\n PlaybackContextMode,\r\n PlayerAppearance,\r\n PlayerRuntimeStatus,\r\n SeekCommitMode,\r\n} from \"../contracts/player\";\r\nimport { PauseIcon, PlayIcon } from \"../icons\";\r\nimport { CompactPlayerLayout } from \"./compact-player-layout\";\r\nimport { IconButton } from \"./player-primitives\";\r\nimport { SeekBar } from \"./seek-bar\";\r\n\r\nexport interface BoundCompactPlayerViewOptions {\r\n readonly seekCommitMode: SeekCommitMode;\r\n readonly waveformOpacity: number;\r\n readonly waveformPlayedStateEnabled: boolean;\r\n}\r\n\r\nexport interface BoundCompactPlayerViewProps {\r\n readonly appearance: PlayerAppearance;\r\n readonly commands: BoundPlayerCommands;\r\n readonly state: Readonly<BoundPlayerViewState>;\r\n readonly options: Readonly<BoundCompactPlayerViewOptions>;\r\n readonly className?: string;\r\n readonly contextId?: string;\r\n readonly contextMode?: PlaybackContextMode;\r\n readonly runtimeStatus?: PlayerRuntimeStatus;\r\n}\r\n\r\nexport function BoundCompactPlayerView({\r\n appearance,\r\n className,\r\n commands,\r\n contextId,\r\n contextMode,\r\n options,\r\n runtimeStatus,\r\n state,\r\n}: BoundCompactPlayerViewProps) {\r\n return (\r\n <CompactPlayerLayout\r\n appearance={appearance}\r\n {...(className === undefined ? {} : { className })}\r\n {...(contextId === undefined ? {} : { contextId })}\r\n {...(contextMode === undefined ? {} : { contextMode })}\r\n currentTimeSec={state.currentTimeSec}\r\n durationSec={state.durationSec}\r\n isActive={state.isActive}\r\n isPlaying={state.isPlaying}\r\n item={state.item}\r\n label={`Inline player: ${state.item.title}`}\r\n primaryControl={\r\n <IconButton\r\n className=\"player-play-button\"\r\n label={state.isPlaying ? \"Pause\" : \"Play\"}\r\n onClick={() => {\r\n void commands.togglePlayback();\r\n }}\r\n >\r\n {state.isPlaying ? (\r\n <PauseIcon size={22} />\r\n ) : (\r\n <PlayIcon size={22} />\r\n )}\r\n </IconButton>\r\n }\r\n queueItemId={state.queueItemId}\r\n {...(runtimeStatus === undefined ? {} : { runtimeStatus })}\r\n seekControl={\r\n <SeekBar\r\n canSeek={state.canSeek}\r\n commitMode={options.seekCommitMode}\r\n currentTimeSec={state.currentTimeSec}\r\n durationSec={state.durationSec}\r\n label={`Seek in ${state.item.title}`}\r\n onSeek={(seconds) => {\r\n commands.seekTo(seconds);\r\n }}\r\n status={state.status}\r\n />\r\n }\r\n waveformOpacity={options.waveformOpacity}\r\n waveformPlayedStateEnabled={options.waveformPlayedStateEnabled}\r\n />\r\n );\r\n}\r\n","import type { PlayerViewProps, QueueItem } from \"../contracts/player\";\r\nimport {\r\n Artwork,\r\n PlayerErrorNotice,\r\n PlayerStatus,\r\n PlayerSurface,\r\n TrackMetadata,\r\n TransportControls,\r\n} from \"./player-primitives\";\r\nimport { formatTime } from \"./player-utils\";\r\nimport { SeekBar } from \"./seek-bar\";\r\nimport { Waveform } from \"./waveform\";\r\n\r\nexport interface DetailedPlayerProps extends PlayerViewProps {\r\n readonly className?: string;\r\n readonly queueLimit?: number;\r\n}\r\n\r\nfunction QueueRow({\r\n commands,\r\n index,\r\n isCurrent,\r\n queue,\r\n queueItem,\r\n}: {\r\n readonly commands: PlayerViewProps[\"commands\"];\r\n readonly index: number;\r\n readonly isCurrent: boolean;\r\n readonly queue: readonly QueueItem[];\r\n readonly queueItem: QueueItem;\r\n}) {\r\n return (\r\n <li data-current={isCurrent ? \"true\" : \"false\"}>\r\n <button\r\n aria-current={isCurrent ? \"true\" : undefined}\r\n aria-label={`Play ${queueItem.item.title}`}\r\n onClick={() => {\r\n void commands.setQueue(queue, {\r\n autoplay: true,\r\n startQueueItemId: queueItem.queueItemId,\r\n });\r\n }}\r\n type=\"button\"\r\n >\r\n <span className=\"player-queue-number\">\r\n {String(index + 1).padStart(2, \"0\")}\r\n </span>\r\n <span className=\"player-queue-title\">{queueItem.item.title}</span>\r\n <time>\r\n {formatTime(queueItem.item.durationHintSec ?? null)}\r\n </time>\r\n </button>\r\n </li>\r\n );\r\n}\r\n\r\nexport function DetailedPlayer({\r\n appearance,\r\n className,\r\n commands,\r\n queueLimit = 8,\r\n state,\r\n}: DetailedPlayerProps) {\r\n const safeQueueLimit = Math.max(1, Math.floor(queueLimit));\r\n const visibleQueue = state.queue.slice(0, safeQueueLimit);\r\n const progress =\r\n state.durationSec === null || state.durationSec <= 0\r\n ? 0\r\n : state.currentTimeSec / state.durationSec;\r\n\r\n return (\r\n <PlayerSurface\r\n appearance={appearance}\r\n className={[\"player-detailed\", className].filter(Boolean).join(\" \")}\r\n label=\"Detailed music player\"\r\n >\r\n <div className=\"player-detailed__display\">\r\n <Artwork\r\n className=\"player-detailed__artwork\"\r\n item={state.currentItem}\r\n />\r\n <div className=\"player-detailed__primary\">\r\n <TrackMetadata\r\n item={state.currentItem}\r\n scrollTitle={state.status === \"playing\"}\r\n status=\"Now playing\"\r\n />\r\n <Waveform\r\n opacity={state.experienceConfig.waveformOpacity}\r\n playedStateEnabled={\r\n state.experienceConfig.waveformPlayedStateEnabled\r\n }\r\n progress={progress}\r\n waveform={state.currentItem?.waveform}\r\n />\r\n <SeekBar\r\n canSeek={state.canSeek}\r\n commitMode={state.experienceConfig.seekCommitMode}\r\n currentTimeSec={state.currentTimeSec}\r\n durationSec={state.durationSec}\r\n onSeek={(seconds) => {\r\n commands.seekTo(seconds);\r\n }}\r\n status={state.status}\r\n />\r\n </div>\r\n <div className=\"player-detailed__numbers\">\r\n <div className=\"player-detailed__metric\">\r\n <span className=\"player-detailed__metric-label\">Track</span>\r\n <span className=\"player-queue-count\">\r\n {state.currentQueueIndex === null\r\n ? \"--\"\r\n : String(state.currentQueueIndex + 1).padStart(2, \"0\")}\r\n {\" / \"}\r\n {String(state.queue.length).padStart(2, \"0\")}\r\n </span>\r\n </div>\r\n <div className=\"player-detailed__metric\">\r\n <span className=\"player-detailed__metric-label\">Current</span>\r\n <time className=\"player-detailed__metric-value\">\r\n {formatTime(state.currentTimeSec)}\r\n </time>\r\n </div>\r\n <div className=\"player-detailed__metric\">\r\n <span className=\"player-detailed__metric-label\">Total</span>\r\n <time className=\"player-detailed__metric-value\">\r\n {formatTime(state.durationSec)}\r\n </time>\r\n </div>\r\n <div className=\"player-detailed__metric\">\r\n <span className=\"player-detailed__metric-label\">Status</span>\r\n <PlayerStatus state={state} />\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"player-detailed__transport\">\r\n <TransportControls commands={commands} state={state} />\r\n </div>\r\n <div className=\"player-detailed__queue\">\r\n <div className=\"player-section-heading\">\r\n <span>Queue</span>\r\n <span className=\"player-queue-count\">\r\n {String(state.queue.length)} items\r\n </span>\r\n </div>\r\n {visibleQueue.length === 0 ? (\r\n <p className=\"player-empty\">Queue is empty.</p>\r\n ) : (\r\n <ol>\r\n {visibleQueue.map((queueItem, index) => (\r\n <QueueRow\r\n commands={commands}\r\n index={index}\r\n isCurrent={\r\n queueItem.queueItemId === state.currentQueueItemId\r\n }\r\n key={queueItem.queueItemId}\r\n queue={state.queue}\r\n queueItem={queueItem}\r\n />\r\n ))}\r\n </ol>\r\n )}\r\n </div>\r\n <PlayerErrorNotice commands={commands} state={state} />\r\n </PlayerSurface>\r\n );\r\n}\r\n","import type { PlayerViewProps } from \"../contracts/player\";\r\nimport {\r\n Artwork,\r\n PlayerErrorNotice,\r\n PlayerStatus,\r\n PlayerSurface,\r\n PopoverVolumeControl,\r\n TimeReadout,\r\n TrackMetadata,\r\n TransportControls,\r\n} from \"./player-primitives\";\r\nimport { SeekBar } from \"./seek-bar\";\r\n\r\nexport interface MiniPlayerProps extends PlayerViewProps {\r\n readonly className?: string;\r\n}\r\n\r\nexport function MiniPlayer({\r\n appearance,\r\n className,\r\n commands,\r\n state,\r\n}: MiniPlayerProps) {\r\n if (state.currentItem === null) {\r\n return null;\r\n }\r\n\r\n return (\r\n <PlayerSurface\r\n appearance={appearance}\r\n className={[\"player-mini\", className].filter(Boolean).join(\" \")}\r\n label=\"Mini music player\"\r\n >\r\n <div\r\n className=\"player-mini__main\"\r\n data-playback-context-id={state.activeContext?.id}\r\n data-playback-context-mode={state.activeContext?.mode}\r\n >\r\n <Artwork className=\"player-mini__artwork\" item={state.currentItem} />\r\n <TrackMetadata\r\n item={state.currentItem}\r\n scrollTitle={state.status === \"playing\"}\r\n />\r\n <PlayerStatus state={state} />\r\n <div className=\"player-mini__controls\">\r\n <TransportControls\r\n commands={commands}\r\n compact\r\n showModes={false}\r\n state={state}\r\n />\r\n <PopoverVolumeControl\r\n commands={commands}\r\n label=\"Mini volume\"\r\n state={state}\r\n />\r\n </div>\r\n <div className=\"player-mini__timeline\">\r\n <SeekBar\r\n canSeek={state.canSeek}\r\n commitMode={state.experienceConfig.seekCommitMode}\r\n currentTimeSec={state.currentTimeSec}\r\n durationSec={state.durationSec}\r\n label=\"Seek in mini player\"\r\n onSeek={(seconds) => {\r\n commands.seekTo(seconds);\r\n }}\r\n status={state.status}\r\n />\r\n <TimeReadout\r\n currentTimeSec={state.currentTimeSec}\r\n durationSec={state.durationSec}\r\n />\r\n </div>\r\n </div>\r\n <PlayerErrorNotice commands={commands} state={state} />\r\n </PlayerSurface>\r\n );\r\n}\r\n","import type { PlayerViewProps } from \"../contracts/player\";\r\nimport {\r\n NextIcon,\r\n PodcastSkipBackIcon,\r\n PodcastSkipForwardIcon,\r\n PreviousIcon,\r\n} from \"../icons\";\r\nimport {\r\n Artwork,\r\n IconButton,\r\n PlayerErrorNotice,\r\n PlayerStatus,\r\n PlayerSurface,\r\n PrimaryPlaybackButton,\r\n TimeReadout,\r\n TrackMetadata,\r\n} from \"./player-primitives\";\r\nimport { SeekBar } from \"./seek-bar\";\r\nimport { Waveform } from \"./waveform\";\r\n\r\nexport interface PodcastPlayerProps extends PlayerViewProps {\r\n readonly className?: string;\r\n}\r\n\r\nexport function PodcastPlayer({\r\n appearance,\r\n className,\r\n commands,\r\n state,\r\n}: PodcastPlayerProps) {\r\n const progress =\r\n state.durationSec === null || state.durationSec <= 0\r\n ? 0\r\n : state.currentTimeSec / state.durationSec;\r\n const backSeconds = state.experienceConfig.podcastBackSec;\r\n const forwardSeconds = state.experienceConfig.podcastForwardSec;\r\n\r\n return (\r\n <PlayerSurface\r\n appearance={appearance}\r\n className={[\"player-podcast\", className].filter(Boolean).join(\" \")}\r\n label=\"Podcast player\"\r\n >\r\n <div className=\"player-podcast__header\">\r\n <Artwork\r\n className=\"player-podcast__artwork\"\r\n item={state.currentItem}\r\n />\r\n <TrackMetadata\r\n item={state.currentItem}\r\n scrollTitle={state.status === \"playing\"}\r\n status=\"Now playing\"\r\n />\r\n <PlayerStatus state={state} />\r\n </div>\r\n <div className=\"player-podcast__timeline\">\r\n <Waveform\r\n opacity={state.experienceConfig.waveformOpacity}\r\n playedStateEnabled={\r\n state.experienceConfig.waveformPlayedStateEnabled\r\n }\r\n progress={progress}\r\n waveform={state.currentItem?.waveform}\r\n />\r\n <SeekBar\r\n canSeek={state.canSeek}\r\n commitMode={state.experienceConfig.seekCommitMode}\r\n currentTimeSec={state.currentTimeSec}\r\n durationSec={state.durationSec}\r\n onSeek={(seconds) => {\r\n commands.seekTo(seconds);\r\n }}\r\n status={state.status}\r\n />\r\n <TimeReadout\r\n currentTimeSec={state.currentTimeSec}\r\n durationSec={state.durationSec}\r\n />\r\n </div>\r\n <div\r\n aria-label=\"Podcast playback controls\"\r\n className=\"player-podcast__transport\"\r\n role=\"group\"\r\n >\r\n <IconButton\r\n disabled={!state.canGoPrevious}\r\n label=\"Previous episode\"\r\n onClick={() => {\r\n void commands.previous();\r\n }}\r\n >\r\n <PreviousIcon />\r\n </IconButton>\r\n <IconButton\r\n disabled={!state.canSeek}\r\n label={`Skip back ${String(backSeconds)} seconds`}\r\n onClick={() => {\r\n commands.seekBy(-backSeconds);\r\n }}\r\n >\r\n <PodcastSkipBackIcon size={28} />\r\n </IconButton>\r\n <PrimaryPlaybackButton commands={commands} state={state} />\r\n <IconButton\r\n disabled={!state.canSeek}\r\n label={`Skip forward ${String(forwardSeconds)} seconds`}\r\n onClick={() => {\r\n commands.seekBy(forwardSeconds);\r\n }}\r\n >\r\n <PodcastSkipForwardIcon size={28} />\r\n </IconButton>\r\n <IconButton\r\n disabled={!state.canGoNext}\r\n label=\"Next episode\"\r\n onClick={() => {\r\n void commands.next();\r\n }}\r\n >\r\n <NextIcon />\r\n </IconButton>\r\n </div>\r\n <PlayerErrorNotice commands={commands} state={state} />\r\n </PlayerSurface>\r\n );\r\n}\r\n","import type { PlayerViewProps } from \"../contracts/player\";\r\nimport { CloseIcon } from \"../icons\";\r\nimport {\r\n IconButton,\r\n PlayerSurface,\r\n} from \"./player-primitives\";\r\nimport { formatTime } from \"./player-utils\";\r\n\r\nexport interface QueuePanelProps extends PlayerViewProps {\r\n readonly className?: string;\r\n readonly label?: string;\r\n readonly onClose?: () => void;\r\n}\r\n\r\nexport function QueuePanel({\r\n appearance,\r\n className,\r\n commands,\r\n label = \"Queue\",\r\n onClose,\r\n state,\r\n}: QueuePanelProps) {\r\n return (\r\n <PlayerSurface\r\n appearance={appearance}\r\n className={[\"player-queue-panel\", className].filter(Boolean).join(\" \")}\r\n label=\"Queue panel\"\r\n >\r\n <header>\r\n <div>\r\n <span className=\"player-kicker\">Playlist</span>\r\n <h2>{label}</h2>\r\n </div>\r\n <span className=\"player-queue-count\">\r\n {String(state.queue.length)} items\r\n </span>\r\n {onClose === undefined ? null : (\r\n <IconButton label=\"Close queue\" onClick={onClose}>\r\n <CloseIcon />\r\n </IconButton>\r\n )}\r\n </header>\r\n {state.queue.length === 0 ? (\r\n <p className=\"player-empty\">Queue is empty.</p>\r\n ) : (\r\n <ol>\r\n {state.queue.map((queueItem, index) => {\r\n const isCurrent =\r\n queueItem.queueItemId === state.currentQueueItemId;\r\n return (\r\n <li\r\n data-current={isCurrent ? \"true\" : \"false\"}\r\n key={queueItem.queueItemId}\r\n >\r\n <button\r\n aria-current={isCurrent ? \"true\" : undefined}\r\n aria-label={`Play ${queueItem.item.title}`}\r\n onClick={() => {\r\n void commands.setQueue(state.queue, {\r\n autoplay: true,\r\n startQueueItemId: queueItem.queueItemId,\r\n });\r\n }}\r\n type=\"button\"\r\n >\r\n <span className=\"player-queue-number\">\r\n {String(index + 1).padStart(2, \"0\")}\r\n </span>\r\n <span className=\"player-queue-copy\">\r\n <strong>{queueItem.item.title}</strong>\r\n <small>\r\n {queueItem.item.creatorName ?? \"Creator unavailable\"}\r\n </small>\r\n </span>\r\n <time>\r\n {formatTime(queueItem.item.durationHintSec ?? null)}\r\n </time>\r\n </button>\r\n </li>\r\n );\r\n })}\r\n </ol>\r\n )}\r\n </PlayerSurface>\r\n );\r\n}\r\n","import type { PlayerViewProps } from \"../contracts/player\";\r\nimport {\r\n Artwork,\r\n PlayerErrorNotice,\r\n PlayerStatus,\r\n PlayerSurface,\r\n TimeReadout,\r\n TrackMetadata,\r\n TransportControls,\r\n VolumeControl,\r\n} from \"./player-primitives\";\r\nimport { SeekBar } from \"./seek-bar\";\r\nimport { Waveform } from \"./waveform\";\r\n\r\nexport interface WidePlayerProps extends PlayerViewProps {\r\n readonly className?: string;\r\n}\r\n\r\nexport function WidePlayer({\r\n appearance,\r\n className,\r\n commands,\r\n state,\r\n}: WidePlayerProps) {\r\n const progress =\r\n state.durationSec === null || state.durationSec <= 0\r\n ? 0\r\n : state.currentTimeSec / state.durationSec;\r\n\r\n return (\r\n <PlayerSurface\r\n appearance={appearance}\r\n className={[\"player-wide\", className].filter(Boolean).join(\" \")}\r\n label=\"Wide music player\"\r\n >\r\n <div className=\"player-wide__grid\">\r\n <div className=\"player-wide__header\">\r\n <Artwork className=\"player-wide__artwork\" item={state.currentItem} />\r\n <div className=\"player-wide__identity\">\r\n <TrackMetadata\r\n item={state.currentItem}\r\n scrollTitle={state.status === \"playing\"}\r\n status=\"Now playing\"\r\n />\r\n <PlayerStatus state={state} />\r\n </div>\r\n </div>\r\n <div className=\"player-wide__content\">\r\n <div className=\"player-timeline\">\r\n <Waveform\r\n opacity={state.experienceConfig.waveformOpacity}\r\n playedStateEnabled={\r\n state.experienceConfig.waveformPlayedStateEnabled\r\n }\r\n progress={progress}\r\n waveform={state.currentItem?.waveform}\r\n />\r\n <SeekBar\r\n canSeek={state.canSeek}\r\n commitMode={state.experienceConfig.seekCommitMode}\r\n currentTimeSec={state.currentTimeSec}\r\n durationSec={state.durationSec}\r\n onSeek={(seconds) => {\r\n commands.seekTo(seconds);\r\n }}\r\n status={state.status}\r\n />\r\n <div className=\"player-wide__timeline-footer\">\r\n <TimeReadout\r\n currentTimeSec={state.currentTimeSec}\r\n durationSec={state.durationSec}\r\n />\r\n <VolumeControl commands={commands} state={state} />\r\n </div>\r\n </div>\r\n <TransportControls commands={commands} state={state} />\r\n </div>\r\n </div>\r\n <PlayerErrorNotice commands={commands} state={state} />\r\n </PlayerSurface>\r\n );\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/icons/player-icons.tsx","../../src/ui/player-utils.ts","../../src/ui/player-primitives.tsx","../../src/ui/waveform.tsx","../../src/ui/compact-player-layout.tsx","../../src/ui/seek-bar.tsx","../../src/ui/compact-player.tsx","../../src/ui/bound-compact-player-view.tsx","../../src/ui/detailed-player.tsx","../../src/consumer/content-context.ts","../../src/ui/intrinsic-content-players.tsx","../../src/ui/mini-player.tsx","../../src/ui/podcast-player.tsx","../../src/ui/queue-panel.tsx","../../src/ui/wide-player.tsx"],"names":["jsx","jsxs","useId","useState","useRef","useEffect"],"mappings":"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","file":"index.js","sourcesContent":["import type { ReactNode, SVGProps } from \"react\";\n\nexport interface PlayerIconProps\n extends Omit<SVGProps<SVGSVGElement>, \"children\"> {\n readonly size?: number;\n}\n\ninterface IconFrameProps extends PlayerIconProps {\n readonly children: ReactNode;\n}\n\nfunction IconFrame({\n children,\n size = 20,\n ...props\n}: IconFrameProps) {\n return (\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n fill=\"currentColor\"\n {...props}\n >\n {children}\n </svg>\n );\n}\n\nexport function PlayIcon(props: PlayerIconProps) {\n return (\n <IconFrame {...props}>\n <path d=\"M7 4.8c0-1.05 1.16-1.68 2.04-1.1l11 7.2a1.3 1.3 0 0 1 0 2.2l-11 7.2A1.31 1.31 0 0 1 7 19.2V4.8Z\" />\n </IconFrame>\n );\n}\n\nexport function PauseIcon(props: PlayerIconProps) {\n return (\n <IconFrame {...props}>\n <rect x=\"5\" y=\"4\" width=\"5\" height=\"16\" rx=\"0.8\" />\n <rect x=\"14\" y=\"4\" width=\"5\" height=\"16\" rx=\"0.8\" />\n </IconFrame>\n );\n}\n\nexport function PreviousIcon(props: PlayerIconProps) {\n return (\n <IconFrame {...props}>\n <rect x=\"4\" y=\"5\" width=\"3\" height=\"14\" rx=\"0.6\" />\n <path d=\"M19 5.3v13.4c0 .93-1.02 1.5-1.82 1.02l-9.7-6.7a1.2 1.2 0 0 1 0-2.04l9.7-6.7A1.19 1.19 0 0 1 19 5.3Z\" />\n </IconFrame>\n );\n}\n\nexport function NextIcon(props: PlayerIconProps) {\n return (\n <IconFrame {...props}>\n <rect x=\"17\" y=\"5\" width=\"3\" height=\"14\" rx=\"0.6\" />\n <path d=\"M5 5.3v13.4c0 .93 1.02 1.5 1.82 1.02l9.7-6.7a1.2 1.2 0 0 0 0-2.04l-9.7-6.7A1.19 1.19 0 0 0 5 5.3Z\" />\n </IconFrame>\n );\n}\n\nexport function ShuffleIcon(props: PlayerIconProps) {\n return (\n <IconFrame {...props}>\n <path d=\"M17.2 3.7 22 7.5l-4.8 3.8V8.8h-1.9c-1.5 0-2.4.5-3.2 1.6l-3.3 4.5c-1.35 1.84-3.1 2.8-5.8 2.8H2v-3h1c1.7 0 2.55-.43 3.36-1.53l3.32-4.52C11.02 6.82 12.8 5.8 15.3 5.8h1.9V3.7ZM2 6.3h1c2.7 0 4.43.94 5.8 2.8l1.05 1.43-1.87 2.55-1.62-2.25C5.55 9.73 4.7 9.3 3 9.3H2v-3Zm12.08 5.17c.35-.13.75-.2 1.22-.2h1.9V8.7l4.8 3.8-4.8 3.8v-2.03h-1.9c-1.24 0-2.05.34-2.73 1.04l1.51-3.84Z\" />\n </IconFrame>\n );\n}\n\nexport function RepeatIcon(props: PlayerIconProps) {\n return (\n <IconFrame {...props}>\n <path d=\"M7.3 4h9.2A4.5 4.5 0 0 1 21 8.5V10h-3V8.5A1.5 1.5 0 0 0 16.5 7H7.3v3.1L2 5.55 7.3 1v3Zm9.4 16H7.5A4.5 4.5 0 0 1 3 15.5V14h3v1.5A1.5 1.5 0 0 0 7.5 17h9.2v-3.1l5.3 4.55L16.7 23v-3Z\" />\n </IconFrame>\n );\n}\n\nexport function RepeatOneIcon(props: PlayerIconProps) {\n return (\n <IconFrame {...props}>\n <path d=\"M7.3 3h9.2A4.5 4.5 0 0 1 21 7.5V9h-3V7.5A1.5 1.5 0 0 0 16.5 6H7.3v2.6L2 4.55 7.3.5V3Zm9.4 18H7.5A4.5 4.5 0 0 1 3 16.5V15h3v1.5A1.5 1.5 0 0 0 7.5 18h9.2v-2.6l5.3 4.05-5.3 4.05V21Z\" />\n <path d=\"M10.25 9h3.35v7h-2.35v-4.8h-1V9Z\" />\n </IconFrame>\n );\n}\n\nexport function QueueIcon(props: PlayerIconProps) {\n return (\n <IconFrame {...props}>\n <circle cx=\"4\" cy=\"6\" r=\"2\" />\n <circle cx=\"4\" cy=\"12\" r=\"2\" />\n <circle cx=\"4\" cy=\"18\" r=\"2\" />\n <rect x=\"8\" y=\"4.5\" width=\"14\" height=\"3\" rx=\"0.7\" />\n <rect x=\"8\" y=\"10.5\" width=\"14\" height=\"3\" rx=\"0.7\" />\n <rect x=\"8\" y=\"16.5\" width=\"14\" height=\"3\" rx=\"0.7\" />\n </IconFrame>\n );\n}\n\nexport function VolumeIcon(props: PlayerIconProps) {\n return (\n <IconFrame {...props}>\n <path d=\"M3 9h4l5-4.4c.78-.68 2-.13 2 .9v13c0 1.03-1.22 1.58-2 .9L7 15H3V9Zm14.3-1.8a1.5 1.5 0 0 1 2.1.25A7.4 7.4 0 0 1 21 12a7.4 7.4 0 0 1-1.6 4.55 1.5 1.5 0 1 1-2.35-1.86A4.4 4.4 0 0 0 18 12c0-1-.33-1.93-.95-2.69a1.5 1.5 0 0 1 .25-2.11Z\" />\n </IconFrame>\n );\n}\n\nexport function MuteIcon(props: PlayerIconProps) {\n return (\n <IconFrame {...props}>\n <path d=\"M2 9h4l5-4.4c.78-.68 2-.13 2 .9v13c0 1.03-1.22 1.58-2 .9L6 15H2V9Zm13.9-.9L18 10.2l2.1-2.1L22 10l-2.1 2.1L22 14l-1.9 1.9-2.1-2.1-2.1 2.1L14 14l2.1-1.9L14 10l1.9-1.9Z\" />\n </IconFrame>\n );\n}\n\nexport function PodcastSkipBackIcon(props: PlayerIconProps) {\n return (\n <IconFrame {...props}>\n <path d=\"M8.2 3.2 3 7.4l5.2 4.2V9a7 7 0 1 1-1.55 8.5l-2.73 1.25A10 10 0 1 0 8.2 6V3.2Z\" />\n <rect x=\"8.5\" y=\"10\" width=\"2.2\" height=\"6\" rx=\"0.4\" />\n <rect x=\"12.2\" y=\"10\" width=\"3.3\" height=\"2\" rx=\"0.4\" />\n <rect x=\"13.3\" y=\"11\" width=\"2.2\" height=\"5\" rx=\"0.4\" />\n <rect x=\"12.2\" y=\"14\" width=\"3.3\" height=\"2\" rx=\"0.4\" />\n </IconFrame>\n );\n}\n\nexport function PodcastSkipForwardIcon(props: PlayerIconProps) {\n return (\n <IconFrame {...props}>\n <path d=\"m15.8 3.2 5.2 4.2-5.2 4.2V9a7 7 0 1 0 1.55 8.5l2.73 1.25A10 10 0 1 1 15.8 6V3.2Z\" />\n <path d=\"M7.5 10h3.2v2H9.5v1h1.2v3H7.5v-2h1.2v-2H7.5v-2Zm4.3 0H15v6h-3.2v-6Zm2 2h-.8v2h.8v-2Z\" />\n </IconFrame>\n );\n}\n\nexport function CloseIcon(props: PlayerIconProps) {\n return (\n <IconFrame {...props}>\n <path d=\"m5.05 3 6.95 6.95L18.95 3 21 5.05 14.05 12 21 18.95 18.95 21 12 14.05 5.05 21 3 18.95 9.95 12 3 5.05 5.05 3Z\" />\n </IconFrame>\n );\n}\n\nexport function DragHandleIcon(props: PlayerIconProps) {\n return (\n <IconFrame {...props}>\n {[5, 12, 19].flatMap((cx) =>\n [7, 17].map((cy) => (\n <circle\n key={`${String(cx)}-${String(cy)}`}\n cx={cx}\n cy={cy}\n r=\"2\"\n />\n )),\n )}\n </IconFrame>\n );\n}\n\nexport function RemoveIcon(props: PlayerIconProps) {\n return (\n <IconFrame {...props}>\n <path\n fillRule=\"evenodd\"\n d=\"M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20ZM6 10.5h12v3H6v-3Z\"\n clipRule=\"evenodd\"\n />\n </IconFrame>\n );\n}\n\nexport function RetryIcon(props: PlayerIconProps) {\n return (\n <IconFrame {...props}>\n <path d=\"M19.7 4.3V1L15.5 5.2 19.7 9V7.3A8 8 0 1 1 12 4a1.5 1.5 0 0 0 0-3 11 11 0 1 0 10.7 8.5l-2.88.84A8 8 0 0 1 19.7 4.3Z\" />\n </IconFrame>\n );\n}\n\nexport function ChevronIcon(props: PlayerIconProps) {\n return (\n <IconFrame {...props}>\n <path d=\"m4 9 8 8 8-8-2.2-2.2L12 12.6 6.2 6.8 4 9Z\" />\n </IconFrame>\n );\n}\n","import type {\n PlayerError,\n PlayerState,\n RepeatMode,\n} from \"../contracts/player\";\n\nexport function clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\nexport function formatTime(seconds: number | null): string {\n if (seconds === null || !Number.isFinite(seconds) || seconds < 0) {\n return \"--:--\";\n }\n\n const wholeSeconds = Math.floor(seconds);\n const hours = Math.floor(wholeSeconds / 3600);\n const minutes = Math.floor((wholeSeconds % 3600) / 60);\n const remainder = wholeSeconds % 60;\n\n if (hours > 0) {\n return `${String(hours)}:${String(minutes).padStart(2, \"0\")}:${String(remainder).padStart(2, \"0\")}`;\n }\n\n return `${String(minutes).padStart(2, \"0\")}:${String(remainder).padStart(2, \"0\")}`;\n}\n\nexport function formatTimeAria(seconds: number): string {\n const safeSeconds = Math.max(0, Math.floor(seconds));\n const hours = Math.floor(safeSeconds / 3600);\n const minutes = Math.floor((safeSeconds % 3600) / 60);\n const remainder = safeSeconds % 60;\n const parts = [\n hours > 0 ? `${String(hours)} hour${hours === 1 ? \"\" : \"s\"}` : \"\",\n minutes > 0 ? `${String(minutes)} minute${minutes === 1 ? \"\" : \"s\"}` : \"\",\n `${String(remainder)} second${remainder === 1 ? \"\" : \"s\"}`,\n ].filter(Boolean);\n return parts.join(\" \");\n}\n\nexport function getRepeatLabel(mode: RepeatMode): string {\n switch (mode) {\n case \"off\":\n return \"Repeat off\";\n case \"all\":\n return \"Repeat all\";\n case \"one\":\n return \"Repeat one\";\n }\n}\n\nexport function getNextRepeatMode(mode: RepeatMode): RepeatMode {\n switch (mode) {\n case \"off\":\n return \"all\";\n case \"all\":\n return \"one\";\n case \"one\":\n return \"off\";\n }\n}\n\nexport function getStatusLabel(state: Readonly<PlayerState>): string {\n if (state.needsUserGesture) {\n return \"Ready to play\";\n }\n\n switch (state.status) {\n case \"idle\":\n return \"Idle\";\n case \"loading\":\n return \"Loading\";\n case \"playing\":\n return \"Playing\";\n case \"paused\":\n return \"Paused\";\n case \"seeking\":\n return \"Seeking\";\n case \"ended\":\n return \"Ended\";\n case \"error\":\n return \"Playback unavailable\";\n }\n}\n\nexport function getErrorMessage(error: PlayerError): string {\n switch (error.code) {\n case \"autoplay-blocked\":\n return \"Playback needs a direct action.\";\n case \"network\":\n return \"The media could not be reached.\";\n case \"cors\":\n return \"The media source is not available.\";\n case \"decode\":\n return \"This media could not be decoded.\";\n case \"unsupported\":\n return \"This media format is not supported.\";\n case \"seek\":\n return \"Seeking failed. Try again.\";\n case \"audio-context\":\n return \"Audio output is not available.\";\n case \"unknown\":\n return \"Playback is currently unavailable.\";\n }\n}\n","import {\n useEffect,\n useId,\n useRef,\n useState,\n type CSSProperties,\n type FocusEvent,\n type ReactNode,\n} from \"react\";\nimport type {\n PlayerAppearance,\n PlayerCommands,\n PlayerMediaItem,\n PlayerState,\n} from \"../contracts/player\";\nimport {\n MuteIcon,\n NextIcon,\n PauseIcon,\n PlayIcon,\n PreviousIcon,\n QueueIcon,\n RepeatIcon,\n RepeatOneIcon,\n RetryIcon,\n ShuffleIcon,\n VolumeIcon,\n} from \"../icons\";\nimport {\n formatTime,\n getErrorMessage,\n getNextRepeatMode,\n getRepeatLabel,\n getStatusLabel,\n} from \"./player-utils\";\n\nexport interface PlayerSurfaceProps {\n readonly appearance: PlayerAppearance;\n readonly children: ReactNode;\n readonly className?: string;\n readonly label: string;\n}\n\nexport function PlayerSurface({\n appearance,\n children,\n className,\n label,\n}: PlayerSurfaceProps) {\n return (\n <section\n aria-label={label}\n className={[\"player-surface\", className].filter(Boolean).join(\" \")}\n data-appearance={appearance}\n >\n {children}\n </section>\n );\n}\n\nexport interface ArtworkProps {\n readonly item: PlayerMediaItem | null;\n readonly className?: string;\n}\n\nexport function Artwork({ className, item }: ArtworkProps) {\n const classes = [\"player-artwork\", className].filter(Boolean).join(\" \");\n\n if (item?.artwork !== undefined) {\n return (\n <span className={`${classes} player-artwork--image`}>\n <img\n alt={item.artwork.alt}\n className=\"player-artwork__image\"\n decoding=\"async\"\n src={item.artwork.url}\n />\n </span>\n );\n }\n\n return (\n <div\n aria-label=\"Artwork unavailable\"\n className={`${classes} player-artwork--fallback`}\n role=\"img\"\n >\n <span aria-hidden=\"true\" />\n </div>\n );\n}\n\nexport interface TrackMetadataProps {\n readonly item: PlayerMediaItem | null;\n readonly status?: string;\n readonly className?: string;\n readonly scrollTitle?: boolean;\n}\n\nfunction ScrollingTitle({\n enabled,\n title,\n}: {\n readonly enabled: boolean;\n readonly title: string;\n}) {\n const containsJapanese = /[\\u3040-\\u30ff\\u3400-\\u9fff]/u.test(title);\n const viewportRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLSpanElement>(null);\n const [marquee, setMarquee] = useState({\n distance: 0,\n duration: 10,\n overflow: false,\n });\n\n useEffect(() => {\n const viewport = viewportRef.current;\n const content = contentRef.current;\n\n if (viewport === null || content === null) {\n return;\n }\n const viewportElement = viewport;\n const contentElement = content;\n\n function measure() {\n const viewportWidth = Math.max(\n viewportElement.getBoundingClientRect().width,\n viewportElement.clientWidth,\n );\n const contentWidth = Math.max(\n contentElement.getBoundingClientRect().width,\n contentElement.scrollWidth,\n );\n const overflow = contentWidth - viewportWidth > 1;\n const distance = enabled ? contentWidth + 12 : 0;\n setMarquee({\n distance,\n duration: Math.max(10, distance / 22 + 4),\n overflow,\n });\n }\n\n measure();\n\n if (typeof ResizeObserver === \"undefined\") {\n window.addEventListener(\"resize\", measure);\n return () => {\n window.removeEventListener(\"resize\", measure);\n };\n }\n\n const observer = new ResizeObserver(measure);\n observer.observe(viewportElement);\n observer.observe(contentElement);\n return () => {\n observer.disconnect();\n };\n }, [enabled, title]);\n\n const style = {\n \"--player-title-scroll-offset\": `${String(-marquee.distance)}px`,\n \"--player-title-scroll-duration\": `${String(marquee.duration)}s`,\n } as CSSProperties;\n\n return (\n <strong\n className=\"player-title\"\n data-overflow={marquee.overflow ? \"true\" : \"false\"}\n data-scroll={enabled ? \"true\" : \"false\"}\n data-script={containsJapanese ? \"japanese\" : \"latin\"}\n ref={viewportRef}\n style={style}\n >\n <span className=\"player-title__text\" ref={contentRef}>\n {title}\n </span>\n </strong>\n );\n}\n\nexport function TrackMetadata({\n className,\n item,\n scrollTitle = false,\n status,\n}: TrackMetadataProps) {\n const intrinsicContext = item?.contentContext;\n const creatorName =\n item?.creatorName ??\n (intrinsicContext?.sourceType === \"release-track\"\n ? intrinsicContext.artistName\n : undefined);\n const collectionTitle =\n item?.collectionTitle ??\n (intrinsicContext?.sourceType === \"release-track\"\n ? intrinsicContext.releaseTitle\n : intrinsicContext?.sourceType === \"podcast-episode\"\n ? intrinsicContext.programTitle\n : undefined);\n return (\n <div\n className={[\"player-metadata\", className].filter(Boolean).join(\" \")}\n >\n {status === undefined ? null : (\n <span className=\"player-kicker\">{status}</span>\n )}\n <ScrollingTitle\n enabled={item !== null && scrollTitle}\n key={item?.title ?? \"No media selected\"}\n title={item?.title ?? \"No media selected\"}\n />\n <span className=\"player-creator\">\n {item === null\n ? \"Select media to begin\"\n : creatorName ?? \"Artist unavailable\"}\n </span>\n {collectionTitle === undefined ? null : (\n <span className=\"player-collection\">{collectionTitle}</span>\n )}\n </div>\n );\n}\n\nexport interface TimeReadoutProps {\n readonly currentTimeSec: number;\n readonly durationSec: number | null;\n readonly className?: string;\n}\n\nexport function TimeReadout({\n className,\n currentTimeSec,\n durationSec,\n}: TimeReadoutProps) {\n return (\n <div\n aria-label={`${formatTime(currentTimeSec)} of ${formatTime(durationSec)}`}\n className={[\"player-time\", className].filter(Boolean).join(\" \")}\n >\n <time>{formatTime(currentTimeSec)}</time>\n <span aria-hidden=\"true\">/</span>\n <time>{formatTime(durationSec)}</time>\n </div>\n );\n}\n\nexport interface IconButtonProps {\n readonly label: string;\n readonly children: ReactNode;\n readonly onClick: () => void;\n readonly disabled?: boolean;\n readonly pressed?: boolean;\n readonly className?: string;\n}\n\nexport function IconButton({\n children,\n className,\n disabled = false,\n label,\n onClick,\n pressed,\n}: IconButtonProps) {\n return (\n <button\n aria-label={label}\n {...(pressed === undefined ? {} : { \"aria-pressed\": pressed })}\n className={[\"player-icon-button\", className].filter(Boolean).join(\" \")}\n disabled={disabled}\n onClick={onClick}\n title={label}\n type=\"button\"\n >\n {children}\n </button>\n );\n}\n\nexport interface PrimaryPlaybackButtonProps {\n readonly state: Readonly<PlayerState>;\n readonly commands: PlayerCommands;\n readonly className?: string;\n}\n\nexport function PrimaryPlaybackButton({\n className,\n commands,\n state,\n}: PrimaryPlaybackButtonProps) {\n const isPlaying = state.status === \"playing\";\n const label = isPlaying ? \"Pause\" : \"Play\";\n\n return (\n <IconButton\n className={[\n \"player-play-button\",\n isPlaying ? \"player-play-button--active\" : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n disabled={state.currentItem === null || state.status === \"loading\"}\n label={label}\n onClick={() => {\n void commands.togglePlayback();\n }}\n >\n {isPlaying ? <PauseIcon size={22} /> : <PlayIcon size={22} />}\n </IconButton>\n );\n}\n\nexport interface TransportControlsProps {\n readonly state: Readonly<PlayerState>;\n readonly commands: PlayerCommands;\n readonly compact?: boolean;\n readonly showModes?: boolean;\n readonly className?: string;\n}\n\nexport function TransportControls({\n className,\n commands,\n compact = false,\n showModes = true,\n state,\n}: TransportControlsProps) {\n const RepeatModeIcon =\n state.repeatMode === \"one\" ? RepeatOneIcon : RepeatIcon;\n\n return (\n <div\n aria-label=\"Playback controls\"\n className={[\n \"player-transport\",\n compact ? \"player-transport--compact\" : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n role=\"group\"\n >\n {showModes ? (\n <IconButton\n disabled={state.activeContext?.mode === \"manual-history\"}\n label={state.shuffleEnabled ? \"Shuffle on\" : \"Shuffle off\"}\n onClick={() => {\n commands.setShuffle(!state.shuffleEnabled);\n }}\n pressed={state.shuffleEnabled}\n >\n <ShuffleIcon />\n </IconButton>\n ) : null}\n <IconButton\n disabled={!state.canGoPrevious}\n label=\"Previous\"\n onClick={() => {\n void commands.previous();\n }}\n >\n <PreviousIcon />\n </IconButton>\n <PrimaryPlaybackButton commands={commands} state={state} />\n <IconButton\n disabled={!state.canGoNext}\n label=\"Next\"\n onClick={() => {\n void commands.next();\n }}\n >\n <NextIcon />\n </IconButton>\n {showModes ? (\n <IconButton\n label={getRepeatLabel(state.repeatMode)}\n onClick={() => {\n commands.setRepeatMode(\n state.activeContext?.mode === \"manual-history\"\n ? state.repeatMode === \"one\"\n ? \"off\"\n : \"one\"\n : getNextRepeatMode(state.repeatMode),\n );\n }}\n pressed={state.repeatMode !== \"off\"}\n >\n <RepeatModeIcon />\n </IconButton>\n ) : null}\n </div>\n );\n}\n\nexport interface VolumeControlProps {\n readonly state: Readonly<PlayerState>;\n readonly commands: PlayerCommands;\n readonly className?: string;\n}\n\nexport function VolumeControl({\n className,\n commands,\n state,\n}: VolumeControlProps) {\n const isMuted = state.muted || state.volume === 0;\n return (\n <div\n className={[\"player-volume\", className].filter(Boolean).join(\" \")}\n >\n <IconButton\n label={isMuted ? \"Unmute\" : \"Mute\"}\n onClick={() => {\n commands.toggleMute();\n }}\n pressed={state.muted}\n >\n {isMuted ? <MuteIcon /> : <VolumeIcon />}\n </IconButton>\n <label>\n <span className=\"player-visually-hidden\">Volume</span>\n <input\n aria-label=\"Volume\"\n max={1}\n min={0}\n onChange={(event) => {\n commands.setVolume(Number(event.currentTarget.value));\n }}\n step={0.01}\n type=\"range\"\n value={state.volume}\n />\n </label>\n </div>\n );\n}\n\nexport interface PopoverVolumeControlProps {\n readonly state: Readonly<PlayerState>;\n readonly commands: PlayerCommands;\n readonly label: string;\n readonly className?: string;\n}\n\nexport function PopoverVolumeControl({\n className,\n commands,\n label,\n state,\n}: PopoverVolumeControlProps) {\n const [open, setOpen] = useState(false);\n const buttonRef = useRef<HTMLButtonElement>(null);\n const rootRef = useRef<HTMLDivElement>(null);\n const sliderRef = useRef<HTMLInputElement>(null);\n const panelId = useId();\n const isMuted = state.muted || state.volume === 0;\n\n useEffect(() => {\n if (!open) {\n return;\n }\n\n sliderRef.current?.focus();\n const closeOnOutsidePointer = (event: PointerEvent) => {\n if (\n event.target instanceof Node &&\n !rootRef.current?.contains(event.target)\n ) {\n setOpen(false);\n }\n };\n document.addEventListener(\"pointerdown\", closeOnOutsidePointer);\n return () => {\n document.removeEventListener(\"pointerdown\", closeOnOutsidePointer);\n };\n }, [open]);\n\n function closeWhenFocusLeaves(event: FocusEvent<HTMLDivElement>) {\n if (\n event.relatedTarget instanceof Node &&\n rootRef.current?.contains(event.relatedTarget)\n ) {\n return;\n }\n setOpen(false);\n }\n\n return (\n <div\n className={[\"player-volume-popover\", className]\n .filter(Boolean)\n .join(\" \")}\n onBlur={closeWhenFocusLeaves}\n onKeyDown={(event) => {\n if (event.key === \"Escape\") {\n setOpen(false);\n buttonRef.current?.focus();\n }\n }}\n ref={rootRef}\n >\n <button\n aria-controls={panelId}\n aria-expanded={open}\n aria-label={`${open ? \"Close\" : \"Open\"} ${label}`}\n className=\"player-icon-button\"\n onClick={() => {\n setOpen((current) => !current);\n }}\n ref={buttonRef}\n title={`${open ? \"Close\" : \"Open\"} ${label}`}\n type=\"button\"\n >\n {isMuted ? <MuteIcon /> : <VolumeIcon />}\n </button>\n {open ? (\n <div\n aria-label={label}\n className=\"player-volume-popover__panel\"\n id={panelId}\n role=\"group\"\n >\n <label>\n <span className=\"player-visually-hidden\">{label}</span>\n <input\n aria-label={label}\n max={1}\n min={0}\n onChange={(event) => {\n commands.setVolume(Number(event.currentTarget.value));\n }}\n ref={sliderRef}\n step={0.01}\n type=\"range\"\n value={state.volume}\n />\n </label>\n <output>{Math.round(state.volume * 100)}</output>\n </div>\n ) : null}\n </div>\n );\n}\n\nexport interface QueueToggleProps {\n readonly onClick: () => void;\n readonly expanded?: boolean;\n}\n\nexport function QueueToggle({\n expanded = false,\n onClick,\n}: QueueToggleProps) {\n return (\n <IconButton\n label={expanded ? \"Close queue\" : \"Open queue\"}\n onClick={onClick}\n pressed={expanded}\n >\n <QueueIcon />\n </IconButton>\n );\n}\n\nexport interface PlayerStatusProps {\n readonly state: Readonly<PlayerState>;\n}\n\nexport function PlayerStatus({ state }: PlayerStatusProps) {\n return (\n <span className=\"player-status\" data-status={state.status}>\n {getStatusLabel(state)}\n </span>\n );\n}\n\nexport interface PlayerErrorNoticeProps {\n readonly state: Readonly<PlayerState>;\n readonly commands: PlayerCommands;\n}\n\nexport function PlayerErrorNotice({\n commands,\n state,\n}: PlayerErrorNoticeProps) {\n if (state.error === null) {\n return null;\n }\n\n return (\n <div className=\"player-error\" role=\"alert\">\n <span>{getErrorMessage(state.error)}</span>\n {state.error.recoverable ? (\n <button\n onClick={() => {\n void commands.retry();\n }}\n type=\"button\"\n >\n <RetryIcon size={16} />\n Retry\n </button>\n ) : null}\n </div>\n );\n}\n","import { useId } from \"react\";\nimport type { PlayerWaveform } from \"../contracts/player\";\nimport { clamp } from \"./player-utils\";\n\nconst FALLBACK_PEAKS = [\n 0.16, 0.24, 0.42, 0.3, 0.58, 0.76, 0.48, 0.34, 0.66, 0.88, 0.62, 0.4,\n 0.52, 0.72, 0.44, 0.28, 0.56, 0.82, 0.68, 0.38, 0.24, 0.46, 0.32, 0.18,\n] as const;\nconst BAR_COUNT = 512;\nconst VIEWBOX_WIDTH = BAR_COUNT;\n\nexport interface WaveformProps {\n readonly waveform?: PlayerWaveform | undefined;\n readonly progress?: number;\n readonly playedStateEnabled?: boolean;\n readonly opacity?: number;\n readonly className?: string;\n}\n\nfunction createWaveformBars(peaks: readonly number[]): readonly number[] {\n const source = peaks.length > 1 ? peaks : FALLBACK_PEAKS;\n return Array.from({ length: BAR_COUNT }, (_, index) => {\n const sourcePosition =\n (index / Math.max(BAR_COUNT - 1, 1)) * (source.length - 1);\n const leftIndex = Math.floor(sourcePosition);\n const rightIndex = Math.min(leftIndex + 1, source.length - 1);\n const mix = sourcePosition - leftIndex;\n const leftPeak = Math.abs(source[leftIndex] ?? 0);\n const rightPeak = Math.abs(source[rightIndex] ?? leftPeak);\n const interpolated = leftPeak + (rightPeak - leftPeak) * mix;\n\n if (source.length >= BAR_COUNT) {\n return clamp(Math.pow(interpolated, 1.18), 0.04, 1);\n }\n\n const noiseSeed =\n Math.sin((index + 1) * 12.9898 + source.length * 78.233) *\n 43_758.5453;\n const noise = noiseSeed - Math.floor(noiseSeed);\n const fineDetail = 0.76 + noise * 0.34;\n const transient = noise > 0.975 ? 3.2 : noise > 0.91 ? 1.75 : 1;\n\n return clamp(\n Math.pow(interpolated, 1.22) * fineDetail * transient,\n 0.04,\n 1,\n );\n });\n}\n\nexport function Waveform({\n className,\n opacity = 1,\n playedStateEnabled = true,\n progress = 0,\n waveform,\n}: WaveformProps) {\n const clipId = useId().replaceAll(\":\", \"\");\n const bars = createWaveformBars(waveform?.peaks ?? FALLBACK_PEAKS);\n const progressWidth = clamp(progress, 0, 1) * VIEWBOX_WIDTH;\n const classes = [\"player-waveform\", className].filter(Boolean).join(\" \");\n const barPath = bars\n .map((peak, index) => {\n const halfHeight = peak * 47;\n const x = index + 0.5;\n return `M ${String(x)} ${String(50 - halfHeight)} V ${String(\n 50 + halfHeight,\n )}`;\n })\n .join(\" \");\n\n return (\n <svg\n aria-hidden=\"true\"\n className={classes}\n focusable=\"false\"\n preserveAspectRatio=\"none\"\n style={{ opacity: clamp(opacity, 0, 1), pointerEvents: \"none\" }}\n viewBox={`0 0 ${String(VIEWBOX_WIDTH)} 100`}\n >\n <path className=\"player-waveform__base\" d={barPath} />\n {playedStateEnabled ? (\n <>\n <clipPath id={clipId}>\n <rect width={progressWidth} height=\"100\" />\n </clipPath>\n <path\n className=\"player-waveform__played\"\n clipPath={`url(#${clipId})`}\n d={barPath}\n />\n </>\n ) : null}\n </svg>\n );\n}\n","import type { ReactNode } from \"react\";\nimport type {\n PlaybackContextMode,\n PlayerAppearance,\n PlayerMediaItem,\n PlayerRuntimeStatus,\n} from \"../contracts/player\";\nimport {\n Artwork,\n PlayerSurface,\n TimeReadout,\n TrackMetadata,\n} from \"./player-primitives\";\nimport { Waveform } from \"./waveform\";\n\ninterface CompactPlayerLayoutProps {\n readonly appearance: PlayerAppearance;\n readonly className?: string;\n readonly label: string;\n readonly item: PlayerMediaItem | null;\n readonly isPlaying: boolean;\n readonly currentTimeSec: number;\n readonly durationSec: number | null;\n readonly waveformOpacity: number;\n readonly waveformPlayedStateEnabled: boolean;\n readonly primaryControl: ReactNode;\n readonly status?: ReactNode;\n readonly seekControl?: ReactNode;\n readonly trailingControl?: ReactNode;\n readonly errorNotice?: ReactNode;\n readonly isActive?: boolean;\n readonly contextId?: string;\n readonly contextMode?: PlaybackContextMode;\n readonly runtimeStatus?: PlayerRuntimeStatus;\n readonly queueItemId?: string;\n}\n\nexport function CompactPlayerLayout({\n appearance,\n className,\n contextId,\n contextMode,\n currentTimeSec,\n durationSec,\n errorNotice,\n isActive,\n isPlaying,\n item,\n label,\n primaryControl,\n queueItemId,\n runtimeStatus,\n seekControl,\n status,\n trailingControl,\n waveformOpacity,\n waveformPlayedStateEnabled,\n}: CompactPlayerLayoutProps) {\n const progress =\n durationSec === null || durationSec <= 0\n ? 0\n : currentTimeSec / durationSec;\n\n return (\n <PlayerSurface\n appearance={appearance}\n className={[\"player-compact\", className].filter(Boolean).join(\" \")}\n label={label}\n >\n <div\n className=\"player-compact__main\"\n {...(isActive === undefined\n ? {}\n : { \"data-active\": isActive ? \"true\" : \"false\" })}\n data-has-status={status === undefined ? \"false\" : \"true\"}\n data-has-trailing-control={\n trailingControl === undefined ? \"false\" : \"true\"\n }\n data-playback-context-id={contextId}\n data-playback-context-mode={contextMode}\n data-player-runtime-status={runtimeStatus}\n data-queue-item-id={queueItemId}\n >\n {primaryControl}\n <Artwork className=\"player-compact__artwork\" item={item} />\n <TrackMetadata item={item} scrollTitle={isPlaying} />\n <div className=\"player-compact__signal\">\n {status}\n <div\n className=\"player-compact__scrubber\"\n data-seek-enabled={seekControl === undefined ? \"false\" : \"true\"}\n >\n <Waveform\n opacity={waveformOpacity}\n playedStateEnabled={waveformPlayedStateEnabled}\n progress={progress}\n waveform={item?.waveform}\n />\n {seekControl}\n </div>\n <TimeReadout\n currentTimeSec={currentTimeSec}\n durationSec={durationSec}\n />\n </div>\n {trailingControl}\n </div>\n {errorNotice}\n </PlayerSurface>\n );\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport type {\n PlaybackStatus,\n SeekCommitMode,\n} from \"../contracts/player\";\nimport { clamp, formatTimeAria } from \"./player-utils\";\n\nexport interface SeekBarProps {\n readonly currentTimeSec: number;\n readonly durationSec: number | null;\n readonly canSeek: boolean;\n readonly status: PlaybackStatus;\n readonly commitMode: SeekCommitMode;\n readonly onSeek: (seconds: number) => void;\n readonly label?: string;\n readonly className?: string;\n}\n\nexport function SeekBar({\n canSeek,\n className,\n commitMode,\n currentTimeSec,\n durationSec,\n label = \"Seek\",\n onSeek,\n status,\n}: SeekBarProps) {\n const duration =\n durationSec !== null && Number.isFinite(durationSec) && durationSec > 0\n ? durationSec\n : 0;\n const disabled = !canSeek || duration === 0 || status === \"loading\";\n const safeCurrentTime = clamp(currentTimeSec, 0, duration);\n const [previewTime, setPreviewTime] = useState(safeCurrentTime);\n const previewProgress =\n duration === 0 ? 0 : clamp(previewTime / duration, 0, 1) * 100;\n const isAdjusting = useRef(false);\n const lastCommitted = useRef<number | null>(null);\n\n useEffect(() => {\n if (!isAdjusting.current) {\n setPreviewTime(safeCurrentTime);\n }\n }, [safeCurrentTime]);\n\n function updatePreview(value: number) {\n const nextValue = clamp(value, 0, duration);\n isAdjusting.current = true;\n setPreviewTime(nextValue);\n\n if (commitMode === \"live\") {\n onSeek(nextValue);\n lastCommitted.current = nextValue;\n }\n }\n\n function commitPreview(value = previewTime) {\n const nextValue = clamp(value, 0, duration);\n\n if (\n disabled ||\n !isAdjusting.current ||\n (commitMode === \"live\" && lastCommitted.current === nextValue)\n ) {\n isAdjusting.current = false;\n return;\n }\n\n onSeek(nextValue);\n lastCommitted.current = nextValue;\n isAdjusting.current = false;\n }\n\n function cancelPreview() {\n isAdjusting.current = false;\n lastCommitted.current = null;\n setPreviewTime(safeCurrentTime);\n }\n\n return (\n <label\n className={[\"player-seek\", className].filter(Boolean).join(\" \")}\n data-disabled={disabled ? \"true\" : \"false\"}\n >\n <span className=\"player-visually-hidden\">{label}</span>\n <span\n aria-hidden=\"true\"\n className=\"player-seek__progress\"\n style={{ width: `${String(disabled ? 0 : previewProgress)}%` }}\n />\n <input\n aria-label={label}\n aria-valuetext={formatTimeAria(previewTime)}\n disabled={disabled}\n max={duration || 1}\n min={0}\n onBlur={(event) => {\n commitPreview(Number(event.currentTarget.value));\n }}\n onChange={(event) => {\n updatePreview(Number(event.currentTarget.value));\n }}\n onKeyUp={(event) => {\n commitPreview(Number(event.currentTarget.value));\n }}\n onPointerDown={() => {\n isAdjusting.current = true;\n }}\n onPointerCancel={cancelPreview}\n onPointerUp={(event) => {\n commitPreview(Number(event.currentTarget.value));\n }}\n step={0.1}\n type=\"range\"\n value={disabled ? 0 : previewTime}\n />\n </label>\n );\n}\n","import type { PlayerViewProps } from \"../contracts/player\";\nimport {\n PlayerErrorNotice,\n PlayerStatus,\n PopoverVolumeControl,\n PrimaryPlaybackButton,\n} from \"./player-primitives\";\nimport { CompactPlayerLayout } from \"./compact-player-layout\";\nimport { SeekBar } from \"./seek-bar\";\n\nexport interface CompactPlayerProps extends PlayerViewProps {\n readonly className?: string;\n}\n\nexport function CompactPlayer({\n appearance,\n className,\n commands,\n state,\n}: CompactPlayerProps) {\n return (\n <CompactPlayerLayout\n appearance={appearance}\n {...(className === undefined ? {} : { className })}\n currentTimeSec={state.currentTimeSec}\n durationSec={state.durationSec}\n errorNotice={<PlayerErrorNotice commands={commands} state={state} />}\n isPlaying={state.status === \"playing\"}\n item={state.currentItem}\n label=\"Compact music player\"\n primaryControl={\n <PrimaryPlaybackButton commands={commands} state={state} />\n }\n seekControl={\n <SeekBar\n canSeek={state.canSeek}\n commitMode={state.experienceConfig.seekCommitMode}\n currentTimeSec={state.currentTimeSec}\n durationSec={state.durationSec}\n label={`Seek in ${state.currentItem?.title ?? \"current media\"}`}\n onSeek={(seconds) => {\n commands.seekTo(seconds);\n }}\n status={state.status}\n />\n }\n status={<PlayerStatus state={state} />}\n trailingControl={\n <PopoverVolumeControl\n commands={commands}\n label=\"Compact volume\"\n state={state}\n />\n }\n waveformOpacity={state.experienceConfig.waveformOpacity}\n waveformPlayedStateEnabled={\n state.experienceConfig.waveformPlayedStateEnabled\n }\n />\n );\n}\n","import type {\n BoundPlayerCommands,\n BoundPlayerViewState,\n PlaybackContextMode,\n PlayerAppearance,\n PlayerRuntimeStatus,\n SeekCommitMode,\n} from \"../contracts/player\";\nimport { PauseIcon, PlayIcon } from \"../icons\";\nimport { CompactPlayerLayout } from \"./compact-player-layout\";\nimport { IconButton } from \"./player-primitives\";\nimport { SeekBar } from \"./seek-bar\";\n\nexport interface BoundCompactPlayerViewOptions {\n readonly seekCommitMode: SeekCommitMode;\n readonly waveformOpacity: number;\n readonly waveformPlayedStateEnabled: boolean;\n}\n\nexport interface BoundCompactPlayerViewProps {\n readonly appearance: PlayerAppearance;\n readonly commands: BoundPlayerCommands;\n readonly state: Readonly<BoundPlayerViewState>;\n readonly options: Readonly<BoundCompactPlayerViewOptions>;\n readonly className?: string;\n readonly contextId?: string;\n readonly contextMode?: PlaybackContextMode;\n readonly runtimeStatus?: PlayerRuntimeStatus;\n}\n\nexport function BoundCompactPlayerView({\n appearance,\n className,\n commands,\n contextId,\n contextMode,\n options,\n runtimeStatus,\n state,\n}: BoundCompactPlayerViewProps) {\n return (\n <CompactPlayerLayout\n appearance={appearance}\n {...(className === undefined ? {} : { className })}\n {...(contextId === undefined ? {} : { contextId })}\n {...(contextMode === undefined ? {} : { contextMode })}\n currentTimeSec={state.currentTimeSec}\n durationSec={state.durationSec}\n isActive={state.isActive}\n isPlaying={state.isPlaying}\n item={state.item}\n label={`Inline player: ${state.item.title}`}\n primaryControl={\n <IconButton\n className=\"player-play-button\"\n label={state.isPlaying ? \"Pause\" : \"Play\"}\n onClick={() => {\n void commands.togglePlayback();\n }}\n >\n {state.isPlaying ? (\n <PauseIcon size={22} />\n ) : (\n <PlayIcon size={22} />\n )}\n </IconButton>\n }\n queueItemId={state.queueItemId}\n {...(runtimeStatus === undefined ? {} : { runtimeStatus })}\n seekControl={\n <SeekBar\n canSeek={state.canSeek}\n commitMode={options.seekCommitMode}\n currentTimeSec={state.currentTimeSec}\n durationSec={state.durationSec}\n label={`Seek in ${state.item.title}`}\n onSeek={(seconds) => {\n commands.seekTo(seconds);\n }}\n status={state.status}\n />\n }\n waveformOpacity={options.waveformOpacity}\n waveformPlayedStateEnabled={options.waveformPlayedStateEnabled}\n />\n );\n}\n","import type { PlayerViewProps, QueueItem } from \"../contracts/player\";\nimport {\n Artwork,\n PlayerErrorNotice,\n PlayerStatus,\n PlayerSurface,\n TrackMetadata,\n TransportControls,\n} from \"./player-primitives\";\nimport { formatTime } from \"./player-utils\";\nimport { SeekBar } from \"./seek-bar\";\nimport { Waveform } from \"./waveform\";\n\nexport interface DetailedPlayerProps extends PlayerViewProps {\n readonly className?: string;\n readonly queueLimit?: number;\n}\n\nfunction QueueRow({\n commands,\n index,\n isCurrent,\n queue,\n queueItem,\n}: {\n readonly commands: PlayerViewProps[\"commands\"];\n readonly index: number;\n readonly isCurrent: boolean;\n readonly queue: readonly QueueItem[];\n readonly queueItem: QueueItem;\n}) {\n return (\n <li data-current={isCurrent ? \"true\" : \"false\"}>\n <button\n aria-current={isCurrent ? \"true\" : undefined}\n aria-label={`Play ${queueItem.item.title}`}\n onClick={() => {\n void commands.setQueue(queue, {\n autoplay: true,\n startQueueItemId: queueItem.queueItemId,\n });\n }}\n type=\"button\"\n >\n <span className=\"player-queue-number\">\n {String(index + 1).padStart(2, \"0\")}\n </span>\n <span className=\"player-queue-title\">{queueItem.item.title}</span>\n <time>\n {formatTime(queueItem.item.durationHintSec ?? null)}\n </time>\n </button>\n </li>\n );\n}\n\nexport function DetailedPlayer({\n appearance,\n className,\n commands,\n queueLimit = 8,\n state,\n}: DetailedPlayerProps) {\n const safeQueueLimit = Math.max(1, Math.floor(queueLimit));\n const visibleQueue = state.queue.slice(0, safeQueueLimit);\n const progress =\n state.durationSec === null || state.durationSec <= 0\n ? 0\n : state.currentTimeSec / state.durationSec;\n\n return (\n <PlayerSurface\n appearance={appearance}\n className={[\"player-detailed\", className].filter(Boolean).join(\" \")}\n label=\"Detailed music player\"\n >\n <div className=\"player-detailed__display\">\n <Artwork\n className=\"player-detailed__artwork\"\n item={state.currentItem}\n />\n <div className=\"player-detailed__primary\">\n <TrackMetadata\n item={state.currentItem}\n scrollTitle={state.status === \"playing\"}\n status=\"Now playing\"\n />\n <Waveform\n opacity={state.experienceConfig.waveformOpacity}\n playedStateEnabled={\n state.experienceConfig.waveformPlayedStateEnabled\n }\n progress={progress}\n waveform={state.currentItem?.waveform}\n />\n <SeekBar\n canSeek={state.canSeek}\n commitMode={state.experienceConfig.seekCommitMode}\n currentTimeSec={state.currentTimeSec}\n durationSec={state.durationSec}\n onSeek={(seconds) => {\n commands.seekTo(seconds);\n }}\n status={state.status}\n />\n </div>\n <div className=\"player-detailed__numbers\">\n <div className=\"player-detailed__metric\">\n <span className=\"player-detailed__metric-label\">Track</span>\n <span className=\"player-queue-count\">\n {state.currentQueueIndex === null\n ? \"--\"\n : String(state.currentQueueIndex + 1).padStart(2, \"0\")}\n {\" / \"}\n {String(state.queue.length).padStart(2, \"0\")}\n </span>\n </div>\n <div className=\"player-detailed__metric\">\n <span className=\"player-detailed__metric-label\">Current</span>\n <time className=\"player-detailed__metric-value\">\n {formatTime(state.currentTimeSec)}\n </time>\n </div>\n <div className=\"player-detailed__metric\">\n <span className=\"player-detailed__metric-label\">Total</span>\n <time className=\"player-detailed__metric-value\">\n {formatTime(state.durationSec)}\n </time>\n </div>\n <div className=\"player-detailed__metric\">\n <span className=\"player-detailed__metric-label\">Status</span>\n <PlayerStatus state={state} />\n </div>\n </div>\n </div>\n <div className=\"player-detailed__transport\">\n <TransportControls commands={commands} state={state} />\n </div>\n <div className=\"player-detailed__queue\">\n <div className=\"player-section-heading\">\n <span>Queue</span>\n <span className=\"player-queue-count\">\n {String(state.queue.length)} items\n </span>\n </div>\n {visibleQueue.length === 0 ? (\n <p className=\"player-empty\">Queue is empty.</p>\n ) : (\n <ol>\n {visibleQueue.map((queueItem, index) => (\n <QueueRow\n commands={commands}\n index={index}\n isCurrent={\n queueItem.queueItemId === state.currentQueueItemId\n }\n key={queueItem.queueItemId}\n queue={state.queue}\n queueItem={queueItem}\n />\n ))}\n </ol>\n )}\n </div>\n <PlayerErrorNotice commands={commands} state={state} />\n </PlayerSurface>\n );\n}\n","import type {\n PlaybackContextInput,\n PlayerContentContext,\n PodcastChapter,\n PodcastProgramPlaybackModel,\n QueueItem,\n ReleasePlaybackModel,\n} from \"../contracts\";\n\nexport type PlayerContentContextRejectionReason =\n | \"duplicate-content-id\"\n | \"duplicate-queue-item-id\"\n | \"ready-without-queue-item\"\n | \"non-ready-with-queue-item\"\n | \"content-context-mismatch\";\n\nexport interface PlayerContentContextRejection {\n readonly entryId: string;\n readonly entryIndex: number;\n readonly reason: PlayerContentContextRejectionReason;\n}\n\nexport interface PlayerContentContextBuildResult {\n readonly context: Extract<\n PlaybackContextInput,\n { readonly mode: \"ordered-queue\" }\n >;\n readonly rejected: readonly PlayerContentContextRejection[];\n}\n\ninterface ContentEntryLike {\n readonly id: string;\n readonly availability: { readonly state: string };\n readonly queueItem?: QueueItem;\n}\n\nfunction contentContextMatches(\n context: PlayerContentContext | undefined,\n expected:\n | {\n readonly sourceType: \"release-track\";\n readonly parentId: string;\n readonly entryId: string;\n }\n | {\n readonly sourceType: \"podcast-episode\";\n readonly parentId: string;\n readonly entryId: string;\n },\n): boolean {\n if (context?.sourceType !== expected.sourceType) {\n return false;\n }\n if (context.sourceType === \"release-track\") {\n return (\n context.releaseId === expected.parentId &&\n context.trackId === expected.entryId\n );\n }\n return (\n context.programId === expected.parentId &&\n context.episodeId === expected.entryId\n );\n}\n\nfunction buildIntrinsicContext(\n entries: readonly ContentEntryLike[],\n contextId: string,\n label: string,\n expectedSourceType: \"release-track\" | \"podcast-episode\",\n parentId: string,\n): PlayerContentContextBuildResult {\n const queue: QueueItem[] = [];\n const rejected: PlayerContentContextRejection[] = [];\n const contentIds = new Set<string>();\n const queueItemIds = new Set<string>();\n\n entries.forEach((entry, entryIndex) => {\n if (contentIds.has(entry.id)) {\n rejected.push({\n entryId: entry.id,\n entryIndex,\n reason: \"duplicate-content-id\",\n });\n return;\n }\n contentIds.add(entry.id);\n\n if (entry.availability.state !== \"ready\") {\n if (entry.queueItem !== undefined) {\n rejected.push({\n entryId: entry.id,\n entryIndex,\n reason: \"non-ready-with-queue-item\",\n });\n }\n return;\n }\n\n if (entry.queueItem === undefined) {\n rejected.push({\n entryId: entry.id,\n entryIndex,\n reason: \"ready-without-queue-item\",\n });\n return;\n }\n\n if (queueItemIds.has(entry.queueItem.queueItemId)) {\n rejected.push({\n entryId: entry.id,\n entryIndex,\n reason: \"duplicate-queue-item-id\",\n });\n return;\n }\n\n if (!contentContextMatches(entry.queueItem.item.contentContext, {\n sourceType: expectedSourceType,\n parentId,\n entryId: entry.id,\n })) {\n rejected.push({\n entryId: entry.id,\n entryIndex,\n reason: \"content-context-mismatch\",\n });\n return;\n }\n\n queueItemIds.add(entry.queueItem.queueItemId);\n queue.push(entry.queueItem);\n });\n\n return Object.freeze({\n context: Object.freeze({\n id: contextId,\n mode: \"ordered-queue\" as const,\n label,\n queue: Object.freeze(queue),\n }),\n rejected: Object.freeze(\n rejected.map((rejection) => Object.freeze(rejection)),\n ),\n });\n}\n\nexport function buildReleasePlaybackContext(\n release: ReleasePlaybackModel,\n): PlayerContentContextBuildResult {\n return buildIntrinsicContext(\n release.tracks,\n release.contextId ?? `release:${release.id}`,\n release.title,\n \"release-track\",\n release.id,\n );\n}\n\nexport function buildPodcastPlaybackContext(\n program: PodcastProgramPlaybackModel,\n): PlayerContentContextBuildResult {\n return buildIntrinsicContext(\n program.episodes,\n program.contextId ?? `podcast:${program.id}`,\n program.title,\n \"podcast-episode\",\n program.id,\n );\n}\n\nexport function findActivePodcastChapter(\n chapters: readonly PodcastChapter[] | undefined,\n currentTimeSec: number,\n): PodcastChapter | null {\n if (chapters === undefined || !Number.isFinite(currentTimeSec)) {\n return null;\n }\n\n let active: PodcastChapter | null = null;\n for (const chapter of chapters) {\n if (\n !Number.isFinite(chapter.startTimeSec) ||\n chapter.startTimeSec < 0 ||\n chapter.startTimeSec > currentTimeSec\n ) {\n continue;\n }\n if (active === null || chapter.startTimeSec >= active.startTimeSec) {\n active = chapter;\n }\n }\n return active;\n}\n","import { useEffect, useMemo, useState } from \"react\";\nimport type {\n PlayerAppearance,\n PlayerCommands,\n PlayerContentAvailabilityState,\n PlayerState,\n PodcastChapter,\n PodcastEpisodePlaybackEntry,\n PodcastProgramPlaybackModel,\n QueueItem,\n ReleasePlaybackModel,\n ReleaseTrackPlaybackEntry,\n} from \"../contracts\";\nimport {\n buildPodcastPlaybackContext,\n buildReleasePlaybackContext,\n findActivePodcastChapter,\n} from \"../consumer\";\nimport {\n NextIcon,\n PauseIcon,\n PlayIcon,\n PodcastSkipBackIcon,\n PodcastSkipForwardIcon,\n PreviousIcon,\n} from \"../icons\";\nimport {\n IconButton,\n PlayerErrorNotice,\n PlayerStatus,\n PlayerSurface,\n TimeReadout,\n} from \"./player-primitives\";\nimport { formatTime } from \"./player-utils\";\nimport { SeekBar } from \"./seek-bar\";\nimport { Waveform } from \"./waveform\";\n\ninterface IntrinsicPlayerProps {\n readonly appearance: PlayerAppearance;\n readonly className?: string;\n readonly commands: PlayerCommands;\n readonly state: Readonly<PlayerState>;\n}\n\nexport interface ReleasePlayerProps extends IntrinsicPlayerProps {\n readonly release: ReleasePlaybackModel;\n}\n\nexport interface PodcastProgramPlayerProps extends IntrinsicPlayerProps {\n readonly program: PodcastProgramPlaybackModel;\n}\n\nfunction ContentArtwork({\n alt,\n artwork,\n className,\n}: {\n readonly alt: string;\n readonly artwork:\n | { readonly url: string; readonly alt: string }\n | undefined;\n readonly className?: string;\n}) {\n return (\n <span\n className={[\"player-content__artwork\", className]\n .filter(Boolean)\n .join(\" \")}\n >\n {artwork === undefined ? (\n <span aria-label={`${alt} artwork unavailable`} role=\"img\" />\n ) : (\n <img alt={artwork.alt} src={artwork.url} />\n )}\n </span>\n );\n}\n\nfunction availabilityLabel(\n state: PlayerContentAvailabilityState,\n): string {\n switch (state) {\n case \"ready\":\n return \"Ready\";\n case \"processing\":\n return \"Processing\";\n case \"locked\":\n return \"Locked\";\n case \"failed\":\n return \"Unavailable\";\n case \"unavailable\":\n return \"Unavailable\";\n }\n}\n\nfunction IntrinsicTransport({\n active,\n canStart,\n commands,\n onStart,\n state,\n}: {\n readonly active: boolean;\n readonly canStart: boolean;\n readonly commands: PlayerCommands;\n readonly onStart: () => void;\n readonly state: Readonly<PlayerState>;\n}) {\n const isPlaying = active && state.status === \"playing\";\n return (\n <div\n aria-label=\"Content playback controls\"\n className=\"player-content__transport\"\n role=\"group\"\n >\n <IconButton\n disabled={!active || !state.canGoPrevious}\n label=\"Previous item\"\n onClick={() => {\n void commands.previous();\n }}\n >\n <PreviousIcon />\n </IconButton>\n <IconButton\n className={[\n \"player-play-button\",\n isPlaying ? \"player-play-button--active\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n disabled={!canStart || (active && state.status === \"loading\")}\n label={isPlaying ? \"Pause\" : \"Play\"}\n onClick={() => {\n if (active) {\n void commands.togglePlayback();\n } else {\n onStart();\n }\n }}\n >\n {isPlaying ? <PauseIcon size={22} /> : <PlayIcon size={22} />}\n </IconButton>\n <IconButton\n disabled={!active || !state.canGoNext}\n label=\"Next item\"\n onClick={() => {\n void commands.next();\n }}\n >\n <NextIcon />\n </IconButton>\n </div>\n );\n}\n\nfunction activateIntrinsicItem(\n commands: PlayerCommands,\n context: {\n readonly id: string;\n readonly label?: string;\n readonly queue: readonly QueueItem[];\n },\n queueItemId: string,\n): Promise<{ readonly ok: boolean }> {\n commands.setShuffle(false);\n commands.setRepeatMode(\"off\");\n return commands.activateContext({\n contextId: context.id,\n mode: \"ordered-queue\",\n ...(context.label === undefined ? {} : { label: context.label }),\n queue: context.queue,\n startQueueItemId: queueItemId,\n autoplay: true,\n });\n}\n\nfunction useIntrinsicContextGuard(\n commands: PlayerCommands,\n context: {\n readonly id: string;\n readonly label?: string;\n readonly queue: readonly QueueItem[];\n },\n state: Readonly<PlayerState>,\n): void {\n const nextQueueKey = context.queue\n .map((entry) => entry.queueItemId)\n .join(\"\\u0000\");\n const activeQueueKey = state.activeContext?.queue\n .map((entry) => entry.queueItemId)\n .join(\"\\u0000\");\n\n useEffect(() => {\n if (\n state.activeContext?.id !== context.id ||\n state.currentQueueItemId === null\n ) {\n return;\n }\n\n if (\n !context.queue.some(\n (entry) => entry.queueItemId === state.currentQueueItemId,\n )\n ) {\n void commands.clear();\n return;\n }\n\n if (activeQueueKey !== nextQueueKey) {\n commands.setShuffle(false);\n commands.setRepeatMode(\"off\");\n void commands.activateContext({\n contextId: context.id,\n mode: \"ordered-queue\",\n ...(context.label === undefined ? {} : { label: context.label }),\n queue: context.queue,\n startQueueItemId: state.currentQueueItemId,\n autoplay: state.status === \"playing\",\n });\n }\n }, [\n activeQueueKey,\n commands,\n context,\n nextQueueKey,\n state.activeContext?.id,\n state.currentQueueItemId,\n state.status,\n ]);\n}\n\nexport function ReleasePlayer({\n appearance,\n className,\n commands,\n release,\n state,\n}: ReleasePlayerProps) {\n const build = useMemo(\n () => buildReleasePlaybackContext(release),\n [release],\n );\n const playableIds = new Set(\n build.context.queue.map((entry) => entry.queueItemId),\n );\n const active = state.activeContext?.id === build.context.id;\n useIntrinsicContextGuard(commands, build.context, state);\n const currentTrackId =\n active && state.currentItem?.contentContext?.sourceType === \"release-track\"\n ? state.currentItem.contentContext.trackId\n : null;\n const first = build.context.queue[0];\n const currentTrack =\n release.tracks.find((track) => track.id === currentTrackId) ??\n release.tracks.find(\n (track) => track.queueItem?.queueItemId === first?.queueItemId,\n ) ??\n null;\n const displayItem = active ? state.currentItem : first?.item ?? null;\n const displayCurrentTimeSec = active ? state.currentTimeSec : 0;\n const displayDurationSec = active\n ? state.durationSec\n : displayItem?.durationHintSec ?? null;\n const waveformProgress =\n displayDurationSec === null || displayDurationSec <= 0\n ? 0\n : displayCurrentTimeSec / displayDurationSec;\n\n const playTrack = (track: ReleaseTrackPlaybackEntry): void => {\n if (\n track.queueItem === undefined ||\n !playableIds.has(track.queueItem.queueItemId)\n ) {\n return;\n }\n void activateIntrinsicItem(\n commands,\n build.context,\n track.queueItem.queueItemId,\n );\n };\n\n return (\n <PlayerSurface\n appearance={appearance}\n className={[\"player-release\", \"player-content\", className]\n .filter(Boolean)\n .join(\" \")}\n label=\"Release player\"\n >\n <div className=\"player-release__hero\">\n <ContentArtwork\n alt={release.title}\n artwork={release.artwork}\n className=\"player-release__artwork\"\n />\n <div className=\"player-release__detail\">\n <header className=\"player-release__identity\">\n <span className=\"player-kicker\">Release</span>\n <h2>{release.title}</h2>\n <p className=\"player-release__artist\">{release.artistName}</p>\n {release.releaseDate === undefined &&\n release.releaseType === undefined ? null : (\n <dl className=\"player-release__facts\">\n {release.releaseDate === undefined ? null : (\n <div>\n <dt>Released</dt>\n <dd>{release.releaseDate}</dd>\n </div>\n )}\n {release.releaseType === undefined ? null : (\n <div>\n <dt>Format</dt>\n <dd>{release.releaseType}</dd>\n </div>\n )}\n </dl>\n )}\n </header>\n {release.notes === undefined ? null : (\n <p className=\"player-release__notes\">{release.notes}</p>\n )}\n {release.credits === undefined || release.credits.length === 0\n ? null\n : (\n <div className=\"player-release__credits\">\n <span>Credits</span>\n <ul>\n {release.credits.map((credit) => (\n <li key={credit}>{credit}</li>\n ))}\n </ul>\n </div>\n )}\n <section\n aria-label=\"Current Release Track\"\n className=\"player-release__playback\"\n >\n <div className=\"player-release__now-playing\">\n <span>Current Track</span>\n <strong>\n {currentTrack === null\n ? \"No playable Tracks\"\n : currentTrack.title}\n </strong>\n {active ? <PlayerStatus state={state} /> : null}\n </div>\n <div className=\"player-release__signal\">\n <Waveform\n opacity={state.experienceConfig.waveformOpacity}\n playedStateEnabled={\n state.experienceConfig.waveformPlayedStateEnabled\n }\n progress={waveformProgress}\n waveform={displayItem?.waveform}\n />\n <SeekBar\n canSeek={active && state.canSeek}\n commitMode={state.experienceConfig.seekCommitMode}\n currentTimeSec={displayCurrentTimeSec}\n durationSec={displayDurationSec}\n label=\"Seek in current Release Track\"\n onSeek={(seconds) => {\n commands.seekTo(seconds);\n }}\n status={active ? state.status : \"paused\"}\n />\n <TimeReadout\n currentTimeSec={displayCurrentTimeSec}\n durationSec={displayDurationSec}\n />\n </div>\n <IntrinsicTransport\n active={active}\n canStart={first !== undefined}\n commands={commands}\n onStart={() => {\n if (first !== undefined) {\n void activateIntrinsicItem(\n commands,\n build.context,\n first.queueItemId,\n );\n }\n }}\n state={state}\n />\n </section>\n </div>\n </div>\n <section\n aria-labelledby={`release-tracklist-${release.id}`}\n className=\"player-release__tracklist\"\n >\n <div className=\"player-section-heading\">\n <span id={`release-tracklist-${release.id}`}>Tracklist</span>\n <span className=\"player-queue-count\">\n {String(release.tracks.length)} tracks\n </span>\n </div>\n {release.tracks.length === 0 ? (\n <p className=\"player-empty\">Tracklist is empty.</p>\n ) : (\n <ol className=\"player-content__list\">\n {release.tracks.map((track, index) => {\n const playable =\n track.queueItem !== undefined &&\n playableIds.has(track.queueItem.queueItemId);\n const isCurrent = track.id === currentTrackId;\n return (\n <li\n data-availability={track.availability.state}\n data-current={isCurrent ? \"true\" : \"false\"}\n key={`${track.id}:${String(index)}`}\n >\n <button\n aria-current={isCurrent ? \"true\" : undefined}\n aria-label={\n playable\n ? `Play track ${track.title}`\n : `${track.title}: ${availabilityLabel(track.availability.state)}`\n }\n disabled={!playable}\n onClick={() => {\n playTrack(track);\n }}\n type=\"button\"\n >\n <span className=\"player-queue-number\">\n {String(track.trackNumber ?? index + 1).padStart(2, \"0\")}\n </span>\n <span className=\"player-content__entry-copy\">\n <strong>{track.title}</strong>\n <small>{availabilityLabel(track.availability.state)}</small>\n </span>\n <time>{formatTime(track.durationHintSec ?? null)}</time>\n </button>\n </li>\n );\n })}\n </ol>\n )}\n </section>\n <PlayerErrorNotice commands={commands} state={state} />\n </PlayerSurface>\n );\n}\n\nexport function PodcastProgramPlayer({\n appearance,\n className,\n commands,\n program,\n state,\n}: PodcastProgramPlayerProps) {\n const build = useMemo(\n () => buildPodcastPlaybackContext(program),\n [program],\n );\n const playableIds = new Set(\n build.context.queue.map((entry) => entry.queueItemId),\n );\n const active = state.activeContext?.id === build.context.id;\n useIntrinsicContextGuard(commands, build.context, state);\n const currentEpisodeId =\n active &&\n state.currentItem?.contentContext?.sourceType === \"podcast-episode\"\n ? state.currentItem.contentContext.episodeId\n : null;\n const currentEpisode =\n program.episodes.find((episode) => episode.id === currentEpisodeId) ??\n null;\n const first = build.context.queue[0];\n const displayEpisode =\n currentEpisode ??\n program.episodes.find(\n (episode) => episode.queueItem?.queueItemId === first?.queueItemId,\n ) ??\n null;\n const selectedEpisodeId = displayEpisode?.id ?? null;\n const displayItem = active ? state.currentItem : first?.item ?? null;\n const displayCurrentTimeSec = active ? state.currentTimeSec : 0;\n const displayDurationSec = active\n ? state.durationSec\n : displayEpisode?.durationHintSec ?? displayItem?.durationHintSec ?? null;\n const waveformProgress =\n displayDurationSec === null || displayDurationSec <= 0\n ? 0\n : displayCurrentTimeSec / displayDurationSec;\n const activeChapter = findActivePodcastChapter(\n displayEpisode?.chapters,\n displayCurrentTimeSec,\n );\n const [pendingChapter, setPendingChapter] = useState<{\n readonly queueItemId: string;\n readonly seconds: number;\n } | null>(null);\n const [chaptersExpanded, setChaptersExpanded] = useState(false);\n\n useEffect(() => {\n setChaptersExpanded(false);\n }, [displayEpisode?.id]);\n\n useEffect(() => {\n if (\n pendingChapter !== null &&\n state.currentQueueItemId === pendingChapter.queueItemId &&\n state.canSeek\n ) {\n commands.seekTo(pendingChapter.seconds);\n setPendingChapter(null);\n }\n }, [commands, pendingChapter, state.canSeek, state.currentQueueItemId]);\n\n const playEpisode = (\n episode: PodcastEpisodePlaybackEntry,\n ): Promise<{ readonly ok: boolean }> | null => {\n if (\n episode.queueItem === undefined ||\n !playableIds.has(episode.queueItem.queueItemId)\n ) {\n return null;\n }\n return activateIntrinsicItem(\n commands,\n build.context,\n episode.queueItem.queueItemId,\n );\n };\n\n const selectChapter = (\n episode: PodcastEpisodePlaybackEntry,\n chapter: PodcastChapter,\n ): void => {\n if (\n episode.queueItem === undefined ||\n !playableIds.has(episode.queueItem.queueItemId)\n ) {\n return;\n }\n if (\n active &&\n state.currentQueueItemId === episode.queueItem.queueItemId &&\n state.canSeek\n ) {\n commands.seekTo(chapter.startTimeSec);\n return;\n }\n setPendingChapter({\n queueItemId: episode.queueItem.queueItemId,\n seconds: chapter.startTimeSec,\n });\n void playEpisode(episode)?.then((result) => {\n if (!result.ok) {\n setPendingChapter(null);\n }\n });\n };\n\n const backSeconds = state.experienceConfig.podcastBackSec;\n const forwardSeconds = state.experienceConfig.podcastForwardSec;\n const chapters = displayEpisode?.chapters ?? [];\n const visibleChapters = chaptersExpanded ? chapters : chapters.slice(0, 4);\n\n return (\n <PlayerSurface\n appearance={appearance}\n className={[\"player-program\", \"player-content\", className]\n .filter(Boolean)\n .join(\" \")}\n label=\"Podcast program player\"\n >\n <header className=\"player-program__hero\">\n <ContentArtwork\n alt={program.title}\n artwork={program.artwork}\n className=\"player-program__artwork\"\n />\n <div className=\"player-program__detail\">\n <span className=\"player-kicker\">Podcast Program</span>\n <h2>{program.title}</h2>\n {program.description === undefined ? null : (\n <p className=\"player-program__description\">\n {program.description}\n </p>\n )}\n {program.hosts === undefined && program.credits === undefined\n ? null\n : (\n <dl className=\"player-program__credits\">\n {program.hosts === undefined || program.hosts.length === 0\n ? null\n : (\n <div>\n <dt>Host</dt>\n <dd>{program.hosts.join(\" / \")}</dd>\n </div>\n )}\n {program.credits === undefined || program.credits.length === 0\n ? null\n : (\n <div>\n <dt>Credits</dt>\n <dd>{program.credits.join(\" / \")}</dd>\n </div>\n )}\n </dl>\n )}\n </div>\n </header>\n <section\n aria-label=\"Current Podcast Episode\"\n className=\"player-program__episode\"\n >\n <header className=\"player-program__episode-heading\">\n <span className=\"player-kicker\">Current Episode</span>\n <h3>\n {displayEpisode === null\n ? \"No playable Episodes\"\n : displayEpisode.title}\n </h3>\n {displayEpisode === null ? null : (\n <dl className=\"player-program__episode-facts\">\n {displayEpisode.publishedAt === undefined ? null : (\n <div>\n <dt>Published</dt>\n <dd>{displayEpisode.publishedAt}</dd>\n </div>\n )}\n <div>\n <dt>Duration</dt>\n <dd>{formatTime(displayDurationSec)}</dd>\n </div>\n </dl>\n )}\n {displayEpisode?.description === undefined ? null : (\n <p>{displayEpisode.description}</p>\n )}\n {active ? <PlayerStatus state={state} /> : null}\n </header>\n <div className=\"player-program__playback\">\n <div className=\"player-program__signal\">\n <Waveform\n opacity={state.experienceConfig.waveformOpacity}\n playedStateEnabled={\n state.experienceConfig.waveformPlayedStateEnabled\n }\n progress={waveformProgress}\n waveform={displayItem?.waveform}\n />\n <SeekBar\n canSeek={active && state.canSeek}\n commitMode={state.experienceConfig.seekCommitMode}\n currentTimeSec={displayCurrentTimeSec}\n durationSec={displayDurationSec}\n label=\"Seek in current Podcast Episode\"\n onSeek={(seconds) => {\n commands.seekTo(seconds);\n }}\n status={active ? state.status : \"paused\"}\n />\n <TimeReadout\n currentTimeSec={displayCurrentTimeSec}\n durationSec={displayDurationSec}\n />\n </div>\n <div className=\"player-program__transport-row\">\n <IntrinsicTransport\n active={active}\n canStart={first !== undefined}\n commands={commands}\n onStart={() => {\n if (first !== undefined) {\n void activateIntrinsicItem(\n commands,\n build.context,\n first.queueItemId,\n );\n }\n }}\n state={state}\n />\n <div\n aria-label=\"Podcast seek controls\"\n className=\"player-program__skip-controls\"\n role=\"group\"\n >\n <IconButton\n disabled={!active || !state.canSeek}\n label={`Skip back ${String(backSeconds)} seconds`}\n onClick={() => {\n commands.seekBy(-backSeconds);\n }}\n >\n <PodcastSkipBackIcon />\n </IconButton>\n <IconButton\n disabled={!active || !state.canSeek}\n label={`Skip forward ${String(forwardSeconds)} seconds`}\n onClick={() => {\n commands.seekBy(forwardSeconds);\n }}\n >\n <PodcastSkipForwardIcon />\n </IconButton>\n </div>\n </div>\n </div>\n {chapters.length === 0 || displayEpisode === null ? null : (\n <div className=\"player-program__chapters\">\n <div className=\"player-section-heading\">\n <span id={`program-chapters-${program.id}`}>Chapters</span>\n <span className=\"player-queue-count\">\n {String(chapters.length)} chapters\n </span>\n </div>\n <ol aria-labelledby={`program-chapters-${program.id}`}>\n {visibleChapters.map((chapter) => (\n <li key={chapter.id}>\n <button\n aria-current={\n chapter.id === activeChapter?.id ? \"true\" : undefined\n }\n onClick={() => {\n selectChapter(displayEpisode, chapter);\n }}\n type=\"button\"\n >\n <time>{formatTime(chapter.startTimeSec)}</time>\n <span>{chapter.title}</span>\n </button>\n </li>\n ))}\n </ol>\n {chapters.length <= 4 ? null : (\n <button\n className=\"player-program__chapters-toggle\"\n onClick={() => {\n setChaptersExpanded((expanded) => !expanded);\n }}\n type=\"button\"\n >\n {chaptersExpanded\n ? \"Show fewer chapters\"\n : `Show all ${String(chapters.length)} chapters`}\n </button>\n )}\n </div>\n )}\n </section>\n <section\n aria-labelledby={`program-episodes-${program.id}`}\n className=\"player-program__episode-list\"\n >\n <div className=\"player-section-heading\">\n <span id={`program-episodes-${program.id}`}>Episodes</span>\n <span className=\"player-queue-count\">\n {String(program.episodes.length)} episodes\n </span>\n </div>\n {program.episodes.length === 0 ? (\n <p className=\"player-empty\">No Episodes are available.</p>\n ) : (\n <ol className=\"player-content__list player-content__episodes\">\n {program.episodes.map((episode, index) => {\n const playable =\n episode.queueItem !== undefined &&\n playableIds.has(episode.queueItem.queueItemId);\n const isCurrent = episode.id === selectedEpisodeId;\n return (\n <li\n data-availability={episode.availability.state}\n data-current={isCurrent ? \"true\" : \"false\"}\n key={`${episode.id}:${String(index)}`}\n >\n <button\n aria-current={isCurrent ? \"true\" : undefined}\n aria-label={\n playable\n ? `Play episode ${episode.title}`\n : `${episode.title}: ${availabilityLabel(episode.availability.state)}`\n }\n disabled={!playable}\n onClick={() => {\n void playEpisode(episode);\n }}\n type=\"button\"\n >\n <span className=\"player-queue-number\">\n {String(index + 1).padStart(2, \"0\")}\n </span>\n <span className=\"player-content__entry-copy\">\n <strong>{episode.title}</strong>\n <small>{availabilityLabel(episode.availability.state)}</small>\n </span>\n <time>{formatTime(episode.durationHintSec ?? null)}</time>\n </button>\n </li>\n );\n })}\n </ol>\n )}\n </section>\n <PlayerErrorNotice commands={commands} state={state} />\n </PlayerSurface>\n );\n}\n","import type { PlayerViewProps } from \"../contracts/player\";\nimport {\n Artwork,\n PlayerErrorNotice,\n PlayerStatus,\n PlayerSurface,\n PopoverVolumeControl,\n TimeReadout,\n TrackMetadata,\n TransportControls,\n} from \"./player-primitives\";\nimport { SeekBar } from \"./seek-bar\";\n\nexport interface MiniPlayerProps extends PlayerViewProps {\n readonly className?: string;\n}\n\nexport function MiniPlayer({\n appearance,\n className,\n commands,\n state,\n}: MiniPlayerProps) {\n if (state.currentItem === null) {\n return null;\n }\n const contentContext = state.currentItem.contentContext;\n\n return (\n <PlayerSurface\n appearance={appearance}\n className={[\"player-mini\", className].filter(Boolean).join(\" \")}\n label={\n contentContext?.sourceType === \"podcast-episode\"\n ? \"Podcast mini player\"\n : \"Mini music player\"\n }\n >\n <div\n className=\"player-mini__main\"\n data-content-source={contentContext?.sourceType}\n data-episode-id={\n contentContext?.sourceType === \"podcast-episode\"\n ? contentContext.episodeId\n : undefined\n }\n data-program-id={\n contentContext?.sourceType === \"podcast-episode\"\n ? contentContext.programId\n : undefined\n }\n data-release-id={\n contentContext?.sourceType === \"release-track\"\n ? contentContext.releaseId\n : undefined\n }\n data-track-id={\n contentContext?.sourceType === \"release-track\"\n ? contentContext.trackId\n : undefined\n }\n data-playback-context-id={state.activeContext?.id}\n data-playback-context-mode={state.activeContext?.mode}\n >\n <Artwork className=\"player-mini__artwork\" item={state.currentItem} />\n <TrackMetadata\n item={state.currentItem}\n scrollTitle={state.status === \"playing\"}\n />\n <PlayerStatus state={state} />\n <div className=\"player-mini__controls\">\n <TransportControls\n commands={commands}\n compact\n showModes={false}\n state={state}\n />\n <PopoverVolumeControl\n commands={commands}\n label=\"Mini volume\"\n state={state}\n />\n </div>\n <div className=\"player-mini__timeline\">\n <SeekBar\n canSeek={state.canSeek}\n commitMode={state.experienceConfig.seekCommitMode}\n currentTimeSec={state.currentTimeSec}\n durationSec={state.durationSec}\n label=\"Seek in mini player\"\n onSeek={(seconds) => {\n commands.seekTo(seconds);\n }}\n status={state.status}\n />\n <TimeReadout\n currentTimeSec={state.currentTimeSec}\n durationSec={state.durationSec}\n />\n </div>\n </div>\n <PlayerErrorNotice commands={commands} state={state} />\n </PlayerSurface>\n );\n}\n","import type { PlayerViewProps } from \"../contracts/player\";\nimport {\n NextIcon,\n PodcastSkipBackIcon,\n PodcastSkipForwardIcon,\n PreviousIcon,\n} from \"../icons\";\nimport {\n Artwork,\n IconButton,\n PlayerErrorNotice,\n PlayerStatus,\n PlayerSurface,\n PrimaryPlaybackButton,\n TimeReadout,\n TrackMetadata,\n} from \"./player-primitives\";\nimport { SeekBar } from \"./seek-bar\";\nimport { Waveform } from \"./waveform\";\n\nexport interface PodcastPlayerProps extends PlayerViewProps {\n readonly className?: string;\n}\n\nexport function PodcastPlayer({\n appearance,\n className,\n commands,\n state,\n}: PodcastPlayerProps) {\n const progress =\n state.durationSec === null || state.durationSec <= 0\n ? 0\n : state.currentTimeSec / state.durationSec;\n const backSeconds = state.experienceConfig.podcastBackSec;\n const forwardSeconds = state.experienceConfig.podcastForwardSec;\n\n return (\n <PlayerSurface\n appearance={appearance}\n className={[\"player-podcast\", className].filter(Boolean).join(\" \")}\n label=\"Podcast player\"\n >\n <div className=\"player-podcast__header\">\n <Artwork\n className=\"player-podcast__artwork\"\n item={state.currentItem}\n />\n <TrackMetadata\n item={state.currentItem}\n scrollTitle={state.status === \"playing\"}\n status=\"Now playing\"\n />\n <PlayerStatus state={state} />\n </div>\n <div className=\"player-podcast__timeline\">\n <Waveform\n opacity={state.experienceConfig.waveformOpacity}\n playedStateEnabled={\n state.experienceConfig.waveformPlayedStateEnabled\n }\n progress={progress}\n waveform={state.currentItem?.waveform}\n />\n <SeekBar\n canSeek={state.canSeek}\n commitMode={state.experienceConfig.seekCommitMode}\n currentTimeSec={state.currentTimeSec}\n durationSec={state.durationSec}\n onSeek={(seconds) => {\n commands.seekTo(seconds);\n }}\n status={state.status}\n />\n <TimeReadout\n currentTimeSec={state.currentTimeSec}\n durationSec={state.durationSec}\n />\n </div>\n <div\n aria-label=\"Podcast playback controls\"\n className=\"player-podcast__transport\"\n role=\"group\"\n >\n <IconButton\n disabled={!state.canGoPrevious}\n label=\"Previous episode\"\n onClick={() => {\n void commands.previous();\n }}\n >\n <PreviousIcon />\n </IconButton>\n <IconButton\n disabled={!state.canSeek}\n label={`Skip back ${String(backSeconds)} seconds`}\n onClick={() => {\n commands.seekBy(-backSeconds);\n }}\n >\n <PodcastSkipBackIcon size={28} />\n </IconButton>\n <PrimaryPlaybackButton commands={commands} state={state} />\n <IconButton\n disabled={!state.canSeek}\n label={`Skip forward ${String(forwardSeconds)} seconds`}\n onClick={() => {\n commands.seekBy(forwardSeconds);\n }}\n >\n <PodcastSkipForwardIcon size={28} />\n </IconButton>\n <IconButton\n disabled={!state.canGoNext}\n label=\"Next episode\"\n onClick={() => {\n void commands.next();\n }}\n >\n <NextIcon />\n </IconButton>\n </div>\n <PlayerErrorNotice commands={commands} state={state} />\n </PlayerSurface>\n );\n}\n","import type { PlayerViewProps } from \"../contracts/player\";\nimport { CloseIcon } from \"../icons\";\nimport {\n IconButton,\n PlayerSurface,\n} from \"./player-primitives\";\nimport { formatTime } from \"./player-utils\";\n\nexport interface QueuePanelProps extends PlayerViewProps {\n readonly className?: string;\n readonly label?: string;\n readonly onClose?: () => void;\n}\n\nexport function QueuePanel({\n appearance,\n className,\n commands,\n label = \"Queue\",\n onClose,\n state,\n}: QueuePanelProps) {\n return (\n <PlayerSurface\n appearance={appearance}\n className={[\"player-queue-panel\", className].filter(Boolean).join(\" \")}\n label=\"Queue panel\"\n >\n <header>\n <div>\n <span className=\"player-kicker\">Playlist</span>\n <h2>{label}</h2>\n </div>\n <span className=\"player-queue-count\">\n {String(state.queue.length)} items\n </span>\n {onClose === undefined ? null : (\n <IconButton label=\"Close queue\" onClick={onClose}>\n <CloseIcon />\n </IconButton>\n )}\n </header>\n {state.queue.length === 0 ? (\n <p className=\"player-empty\">Queue is empty.</p>\n ) : (\n <ol>\n {state.queue.map((queueItem, index) => {\n const isCurrent =\n queueItem.queueItemId === state.currentQueueItemId;\n return (\n <li\n data-current={isCurrent ? \"true\" : \"false\"}\n key={queueItem.queueItemId}\n >\n <button\n aria-current={isCurrent ? \"true\" : undefined}\n aria-label={`Play ${queueItem.item.title}`}\n onClick={() => {\n void commands.setQueue(state.queue, {\n autoplay: true,\n startQueueItemId: queueItem.queueItemId,\n });\n }}\n type=\"button\"\n >\n <span className=\"player-queue-number\">\n {String(index + 1).padStart(2, \"0\")}\n </span>\n <span className=\"player-queue-copy\">\n <strong>{queueItem.item.title}</strong>\n <small>\n {queueItem.item.creatorName ?? \"Creator unavailable\"}\n </small>\n </span>\n <time>\n {formatTime(queueItem.item.durationHintSec ?? null)}\n </time>\n </button>\n </li>\n );\n })}\n </ol>\n )}\n </PlayerSurface>\n );\n}\n","import type { PlayerViewProps } from \"../contracts/player\";\nimport {\n Artwork,\n PlayerErrorNotice,\n PlayerStatus,\n PlayerSurface,\n TimeReadout,\n TrackMetadata,\n TransportControls,\n VolumeControl,\n} from \"./player-primitives\";\nimport { SeekBar } from \"./seek-bar\";\nimport { Waveform } from \"./waveform\";\n\nexport interface WidePlayerProps extends PlayerViewProps {\n readonly className?: string;\n}\n\nexport function WidePlayer({\n appearance,\n className,\n commands,\n state,\n}: WidePlayerProps) {\n const progress =\n state.durationSec === null || state.durationSec <= 0\n ? 0\n : state.currentTimeSec / state.durationSec;\n\n return (\n <PlayerSurface\n appearance={appearance}\n className={[\"player-wide\", className].filter(Boolean).join(\" \")}\n label=\"Wide music player\"\n >\n <div className=\"player-wide__grid\">\n <div className=\"player-wide__header\">\n <Artwork className=\"player-wide__artwork\" item={state.currentItem} />\n <div className=\"player-wide__identity\">\n <TrackMetadata\n item={state.currentItem}\n scrollTitle={state.status === \"playing\"}\n status=\"Now playing\"\n />\n <PlayerStatus state={state} />\n </div>\n </div>\n <div className=\"player-wide__content\">\n <div className=\"player-timeline\">\n <Waveform\n opacity={state.experienceConfig.waveformOpacity}\n playedStateEnabled={\n state.experienceConfig.waveformPlayedStateEnabled\n }\n progress={progress}\n waveform={state.currentItem?.waveform}\n />\n <SeekBar\n canSeek={state.canSeek}\n commitMode={state.experienceConfig.seekCommitMode}\n currentTimeSec={state.currentTimeSec}\n durationSec={state.durationSec}\n onSeek={(seconds) => {\n commands.seekTo(seconds);\n }}\n status={state.status}\n />\n <div className=\"player-wide__timeline-footer\">\n <TimeReadout\n currentTimeSec={state.currentTimeSec}\n durationSec={state.durationSec}\n />\n <VolumeControl commands={commands} state={state} />\n </div>\n </div>\n <TransportControls commands={commands} state={state} />\n </div>\n </div>\n <PlayerErrorNotice commands={commands} state={state} />\n </PlayerSurface>\n );\n}\n"]}
|