@videojs/react 10.0.0-alpha.4 → 10.0.0-alpha.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/default/_virtual/_rolldown/runtime.js +1 -19
- package/dist/default/index.js +10 -33
- package/dist/default/player/context.js +11 -1
- package/dist/default/player/context.js.map +1 -1
- package/dist/default/presets/audio/index.js +2 -8
- package/dist/default/presets/audio/skin.css +1 -0
- package/dist/default/presets/background/index.js +2 -8
- package/dist/default/presets/background/skin.css +1 -0
- package/dist/default/presets/video/index.js +2 -8
- package/dist/default/presets/video/minimal-skin.css +178 -53
- package/dist/default/presets/video/minimal-skin.js +63 -90
- package/dist/default/presets/video/minimal-skin.js.map +1 -1
- package/dist/default/presets/video/minimal-skin.tailwind.js +126 -107
- package/dist/default/presets/video/minimal-skin.tailwind.js.map +1 -1
- package/dist/default/presets/video/skin.css +179 -54
- package/dist/default/presets/video/skin.js +61 -88
- package/dist/default/presets/video/skin.js.map +1 -1
- package/dist/default/presets/video/skin.tailwind.js +121 -104
- package/dist/default/presets/video/skin.tailwind.js.map +1 -1
- package/dist/default/skins/dist/default/video/default.tailwind.js +90 -0
- package/dist/default/skins/dist/default/video/default.tailwind.js.map +1 -0
- package/dist/default/skins/dist/default/video/minimal.tailwind.js +86 -0
- package/dist/default/skins/dist/default/video/minimal.tailwind.js.map +1 -0
- package/dist/default/ui/captions-button/captions-button.js +1 -16
- package/dist/default/ui/captions-button/captions-button.js.map +1 -1
- package/dist/default/ui/controls/context.js +16 -0
- package/dist/default/ui/controls/context.js.map +1 -0
- package/dist/default/ui/controls/controls-group.js +4 -1
- package/dist/default/ui/controls/controls-group.js.map +1 -1
- package/dist/default/ui/controls/controls-root.js +19 -10
- package/dist/default/ui/controls/controls-root.js.map +1 -1
- package/dist/default/ui/create-context-part.js +29 -0
- package/dist/default/ui/create-context-part.js.map +1 -0
- package/dist/default/ui/create-media-button.js +52 -0
- package/dist/default/ui/create-media-button.js.map +1 -0
- package/dist/default/ui/fullscreen-button/fullscreen-button.js +8 -33
- package/dist/default/ui/fullscreen-button/fullscreen-button.js.map +1 -1
- package/dist/default/ui/hooks/use-slider.js +75 -0
- package/dist/default/ui/hooks/use-slider.js.map +1 -0
- package/dist/default/ui/mute-button/mute-button.js +8 -36
- package/dist/default/ui/mute-button/mute-button.js.map +1 -1
- package/dist/default/ui/pip-button/pip-button.js +8 -33
- package/dist/default/ui/pip-button/pip-button.js.map +1 -1
- package/dist/default/ui/play-button/play-button.js +7 -33
- package/dist/default/ui/play-button/play-button.js.map +1 -1
- package/dist/default/ui/playback-rate-button/index.js +3 -0
- package/dist/default/ui/playback-rate-button/playback-rate-button.js +34 -0
- package/dist/default/ui/playback-rate-button/playback-rate-button.js.map +1 -0
- package/dist/default/ui/popover/context.js +16 -0
- package/dist/default/ui/popover/context.js.map +1 -0
- package/dist/default/ui/popover/index.js +4 -0
- package/dist/default/ui/popover/index.parts.js +17 -0
- package/dist/default/ui/popover/index.parts.js.map +1 -0
- package/dist/default/ui/popover/popover-arrow.js +17 -0
- package/dist/default/ui/popover/popover-arrow.js.map +1 -0
- package/dist/default/ui/popover/popover-popup.js +94 -0
- package/dist/default/ui/popover/popover-popup.js.map +1 -0
- package/dist/default/ui/popover/popover-root.js +69 -0
- package/dist/default/ui/popover/popover-root.js.map +1 -0
- package/dist/default/ui/popover/popover-trigger.js +43 -0
- package/dist/default/ui/popover/popover-trigger.js.map +1 -0
- package/dist/default/ui/poster/poster.js +2 -1
- package/dist/default/ui/poster/poster.js.map +1 -1
- package/dist/default/ui/seek-button/seek-button.js +7 -34
- package/dist/default/ui/seek-button/seek-button.js.map +1 -1
- package/dist/default/ui/slider/context.js +22 -0
- package/dist/default/ui/slider/context.js.map +1 -0
- package/dist/default/ui/slider/index.js +3 -0
- package/dist/default/ui/slider/index.parts.js +21 -0
- package/dist/default/ui/slider/index.parts.js.map +1 -0
- package/dist/default/ui/slider/slider-buffer.js +16 -0
- package/dist/default/ui/slider/slider-buffer.js.map +1 -0
- package/dist/default/ui/slider/slider-fill.js +16 -0
- package/dist/default/ui/slider/slider-fill.js.map +1 -0
- package/dist/default/ui/slider/slider-root.js +71 -0
- package/dist/default/ui/slider/slider-root.js.map +1 -0
- package/dist/default/ui/slider/slider-thumb.js +32 -0
- package/dist/default/ui/slider/slider-thumb.js.map +1 -0
- package/dist/default/ui/slider/slider-track.js +16 -0
- package/dist/default/ui/slider/slider-track.js.map +1 -0
- package/dist/default/ui/slider/slider-value.js +32 -0
- package/dist/default/ui/slider/slider-value.js.map +1 -0
- package/dist/default/ui/thumbnail/thumbnail.js +87 -0
- package/dist/default/ui/thumbnail/thumbnail.js.map +1 -0
- package/dist/default/ui/time/time-value.js +2 -1
- package/dist/default/ui/time/time-value.js.map +1 -1
- package/dist/default/ui/time-slider/index.js +3 -0
- package/dist/default/ui/time-slider/index.parts.js +21 -0
- package/dist/default/ui/time-slider/index.parts.js.map +1 -0
- package/dist/default/ui/time-slider/time-slider-root.js +96 -0
- package/dist/default/ui/time-slider/time-slider-root.js.map +1 -0
- package/dist/default/ui/volume-slider/index.js +3 -0
- package/dist/default/ui/volume-slider/index.parts.js +19 -0
- package/dist/default/ui/volume-slider/index.parts.js.map +1 -0
- package/dist/default/ui/volume-slider/volume-slider-root.js +86 -0
- package/dist/default/ui/volume-slider/volume-slider-root.js.map +1 -0
- package/dist/default/utils/use-force-render.js +13 -0
- package/dist/default/utils/use-force-render.js.map +1 -0
- package/dist/default/utils/use-latest-ref.js +20 -0
- package/dist/default/utils/use-latest-ref.js.map +1 -0
- package/dist/default/utils/use-safe-id.js +22 -0
- package/dist/default/utils/use-safe-id.js.map +1 -0
- package/dist/dev/_virtual/_rolldown/runtime.js +1 -19
- package/dist/dev/index.d.ts +20 -2
- package/dist/dev/index.js +10 -33
- package/dist/dev/player/context.d.ts.map +1 -1
- package/dist/dev/player/context.js +11 -1
- package/dist/dev/player/context.js.map +1 -1
- package/dist/dev/presets/audio/index.d.ts +2 -9
- package/dist/dev/presets/audio/index.js +2 -8
- package/dist/dev/presets/audio/skin.css +1 -0
- package/dist/dev/presets/background/index.d.ts +2 -9
- package/dist/dev/presets/background/index.js +2 -8
- package/dist/dev/presets/background/skin.css +1 -0
- package/dist/dev/presets/video/index.d.ts +2 -9
- package/dist/dev/presets/video/index.js +2 -8
- package/dist/dev/presets/video/minimal-skin.css +178 -53
- package/dist/dev/presets/video/minimal-skin.d.ts.map +1 -1
- package/dist/dev/presets/video/minimal-skin.js +61 -88
- package/dist/dev/presets/video/minimal-skin.js.map +1 -1
- package/dist/dev/presets/video/minimal-skin.tailwind.d.ts.map +1 -1
- package/dist/dev/presets/video/minimal-skin.tailwind.js +124 -105
- package/dist/dev/presets/video/minimal-skin.tailwind.js.map +1 -1
- package/dist/dev/presets/video/skin.css +179 -54
- package/dist/dev/presets/video/skin.d.ts.map +1 -1
- package/dist/dev/presets/video/skin.js +61 -88
- package/dist/dev/presets/video/skin.js.map +1 -1
- package/dist/dev/presets/video/skin.tailwind.d.ts.map +1 -1
- package/dist/dev/presets/video/skin.tailwind.js +121 -104
- package/dist/dev/presets/video/skin.tailwind.js.map +1 -1
- package/dist/dev/skins/dist/default/video/default.tailwind.js +90 -0
- package/dist/dev/skins/dist/default/video/default.tailwind.js.map +1 -0
- package/dist/dev/skins/dist/default/video/minimal.tailwind.js +86 -0
- package/dist/dev/skins/dist/default/video/minimal.tailwind.js.map +1 -0
- package/dist/dev/ui/captions-button/captions-button.d.ts.map +1 -1
- package/dist/dev/ui/captions-button/captions-button.js +1 -16
- package/dist/dev/ui/captions-button/captions-button.js.map +1 -1
- package/dist/dev/ui/controls/context.js +16 -0
- package/dist/dev/ui/controls/context.js.map +1 -0
- package/dist/dev/ui/controls/controls-group.d.ts +2 -2
- package/dist/dev/ui/controls/controls-group.d.ts.map +1 -1
- package/dist/dev/ui/controls/controls-group.js +4 -1
- package/dist/dev/ui/controls/controls-group.js.map +1 -1
- package/dist/dev/ui/controls/controls-root.d.ts.map +1 -1
- package/dist/dev/ui/controls/controls-root.js +19 -10
- package/dist/dev/ui/controls/controls-root.js.map +1 -1
- package/dist/dev/ui/create-context-part.js +29 -0
- package/dist/dev/ui/create-context-part.js.map +1 -0
- package/dist/dev/ui/create-media-button.js +55 -0
- package/dist/dev/ui/create-media-button.js.map +1 -0
- package/dist/dev/ui/fullscreen-button/fullscreen-button.d.ts +2 -1
- package/dist/dev/ui/fullscreen-button/fullscreen-button.d.ts.map +1 -1
- package/dist/dev/ui/fullscreen-button/fullscreen-button.js +9 -37
- package/dist/dev/ui/fullscreen-button/fullscreen-button.js.map +1 -1
- package/dist/dev/ui/hooks/use-slider.d.ts +36 -0
- package/dist/dev/ui/hooks/use-slider.d.ts.map +1 -0
- package/dist/dev/ui/hooks/use-slider.js +75 -0
- package/dist/dev/ui/hooks/use-slider.js.map +1 -0
- package/dist/dev/ui/mute-button/mute-button.d.ts +2 -4
- package/dist/dev/ui/mute-button/mute-button.d.ts.map +1 -1
- package/dist/dev/ui/mute-button/mute-button.js +9 -40
- package/dist/dev/ui/mute-button/mute-button.js.map +1 -1
- package/dist/dev/ui/pip-button/pip-button.d.ts +2 -1
- package/dist/dev/ui/pip-button/pip-button.d.ts.map +1 -1
- package/dist/dev/ui/pip-button/pip-button.js +9 -37
- package/dist/dev/ui/pip-button/pip-button.js.map +1 -1
- package/dist/dev/ui/play-button/play-button.d.ts +1 -1
- package/dist/dev/ui/play-button/play-button.d.ts.map +1 -1
- package/dist/dev/ui/play-button/play-button.js +8 -37
- package/dist/dev/ui/play-button/play-button.js.map +1 -1
- package/dist/dev/ui/playback-rate-button/index.d.ts +2 -0
- package/dist/dev/ui/playback-rate-button/index.js +3 -0
- package/dist/dev/ui/playback-rate-button/playback-rate-button.d.ts +30 -0
- package/dist/dev/ui/playback-rate-button/playback-rate-button.d.ts.map +1 -0
- package/dist/dev/ui/playback-rate-button/playback-rate-button.js +34 -0
- package/dist/dev/ui/playback-rate-button/playback-rate-button.js.map +1 -0
- package/dist/dev/ui/popover/context.d.ts +17 -0
- package/dist/dev/ui/popover/context.d.ts.map +1 -0
- package/dist/dev/ui/popover/context.js +16 -0
- package/dist/dev/ui/popover/context.js.map +1 -0
- package/dist/dev/ui/popover/index.d.ts +3 -0
- package/dist/dev/ui/popover/index.js +4 -0
- package/dist/dev/ui/popover/index.parts.d.ts +12 -0
- package/dist/dev/ui/popover/index.parts.d.ts.map +1 -0
- package/dist/dev/ui/popover/index.parts.js +17 -0
- package/dist/dev/ui/popover/index.parts.js.map +1 -0
- package/dist/dev/ui/popover/popover-arrow.d.ts +15 -0
- package/dist/dev/ui/popover/popover-arrow.d.ts.map +1 -0
- package/dist/dev/ui/popover/popover-arrow.js +17 -0
- package/dist/dev/ui/popover/popover-arrow.js.map +1 -0
- package/dist/dev/ui/popover/popover-popup.d.ts +15 -0
- package/dist/dev/ui/popover/popover-popup.d.ts.map +1 -0
- package/dist/dev/ui/popover/popover-popup.js +94 -0
- package/dist/dev/ui/popover/popover-popup.js.map +1 -0
- package/dist/dev/ui/popover/popover-root.d.ts +29 -0
- package/dist/dev/ui/popover/popover-root.d.ts.map +1 -0
- package/dist/dev/ui/popover/popover-root.js +69 -0
- package/dist/dev/ui/popover/popover-root.js.map +1 -0
- package/dist/dev/ui/popover/popover-trigger.d.ts +15 -0
- package/dist/dev/ui/popover/popover-trigger.d.ts.map +1 -0
- package/dist/dev/ui/popover/popover-trigger.js +43 -0
- package/dist/dev/ui/popover/popover-trigger.js.map +1 -0
- package/dist/dev/ui/poster/poster.d.ts.map +1 -1
- package/dist/dev/ui/poster/poster.js +2 -1
- package/dist/dev/ui/poster/poster.js.map +1 -1
- package/dist/dev/ui/seek-button/seek-button.d.ts +1 -1
- package/dist/dev/ui/seek-button/seek-button.d.ts.map +1 -1
- package/dist/dev/ui/seek-button/seek-button.js +8 -38
- package/dist/dev/ui/seek-button/seek-button.js.map +1 -1
- package/dist/dev/ui/slider/context.js +22 -0
- package/dist/dev/ui/slider/context.js.map +1 -0
- package/dist/dev/ui/slider/index.d.ts +2 -0
- package/dist/dev/ui/slider/index.js +3 -0
- package/dist/dev/ui/slider/index.parts.d.ts +14 -0
- package/dist/dev/ui/slider/index.parts.d.ts.map +1 -0
- package/dist/dev/ui/slider/index.parts.js +21 -0
- package/dist/dev/ui/slider/index.parts.js.map +1 -0
- package/dist/dev/ui/slider/slider-buffer.d.ts +14 -0
- package/dist/dev/ui/slider/slider-buffer.d.ts.map +1 -0
- package/dist/dev/ui/slider/slider-buffer.js +16 -0
- package/dist/dev/ui/slider/slider-buffer.js.map +1 -0
- package/dist/dev/ui/slider/slider-fill.d.ts +14 -0
- package/dist/dev/ui/slider/slider-fill.d.ts.map +1 -0
- package/dist/dev/ui/slider/slider-fill.js +16 -0
- package/dist/dev/ui/slider/slider-fill.js.map +1 -0
- package/dist/dev/ui/slider/slider-root.d.ts +19 -0
- package/dist/dev/ui/slider/slider-root.d.ts.map +1 -0
- package/dist/dev/ui/slider/slider-root.js +71 -0
- package/dist/dev/ui/slider/slider-root.js.map +1 -0
- package/dist/dev/ui/slider/slider-thumb.d.ts +14 -0
- package/dist/dev/ui/slider/slider-thumb.d.ts.map +1 -0
- package/dist/dev/ui/slider/slider-thumb.js +32 -0
- package/dist/dev/ui/slider/slider-thumb.js.map +1 -0
- package/dist/dev/ui/slider/slider-track.d.ts +14 -0
- package/dist/dev/ui/slider/slider-track.d.ts.map +1 -0
- package/dist/dev/ui/slider/slider-track.js +16 -0
- package/dist/dev/ui/slider/slider-track.js.map +1 -0
- package/dist/dev/ui/slider/slider-value.d.ts +19 -0
- package/dist/dev/ui/slider/slider-value.d.ts.map +1 -0
- package/dist/dev/ui/slider/slider-value.js +32 -0
- package/dist/dev/ui/slider/slider-value.js.map +1 -0
- package/dist/dev/ui/thumbnail/thumbnail.d.ts +17 -0
- package/dist/dev/ui/thumbnail/thumbnail.d.ts.map +1 -0
- package/dist/dev/ui/thumbnail/thumbnail.js +87 -0
- package/dist/dev/ui/thumbnail/thumbnail.js.map +1 -0
- package/dist/dev/ui/time/time-value.d.ts.map +1 -1
- package/dist/dev/ui/time/time-value.js +2 -1
- package/dist/dev/ui/time/time-value.js.map +1 -1
- package/dist/dev/ui/time-slider/index.d.ts +2 -0
- package/dist/dev/ui/time-slider/index.js +3 -0
- package/dist/dev/ui/time-slider/index.parts.d.ts +15 -0
- package/dist/dev/ui/time-slider/index.parts.d.ts.map +1 -0
- package/dist/dev/ui/time-slider/index.parts.js +21 -0
- package/dist/dev/ui/time-slider/index.parts.js.map +1 -0
- package/dist/dev/ui/time-slider/time-slider-root.d.ts +17 -0
- package/dist/dev/ui/time-slider/time-slider-root.d.ts.map +1 -0
- package/dist/dev/ui/time-slider/time-slider-root.js +99 -0
- package/dist/dev/ui/time-slider/time-slider-root.js.map +1 -0
- package/dist/dev/ui/volume-slider/index.d.ts +2 -0
- package/dist/dev/ui/volume-slider/index.js +3 -0
- package/dist/dev/ui/volume-slider/index.parts.d.ts +14 -0
- package/dist/dev/ui/volume-slider/index.parts.d.ts.map +1 -0
- package/dist/dev/ui/volume-slider/index.parts.js +19 -0
- package/dist/dev/ui/volume-slider/index.parts.js.map +1 -0
- package/dist/dev/ui/volume-slider/volume-slider-root.d.ts +17 -0
- package/dist/dev/ui/volume-slider/volume-slider-root.d.ts.map +1 -0
- package/dist/dev/ui/volume-slider/volume-slider-root.js +89 -0
- package/dist/dev/ui/volume-slider/volume-slider-root.js.map +1 -0
- package/dist/dev/utils/use-force-render.js +13 -0
- package/dist/dev/utils/use-force-render.js.map +1 -0
- package/dist/dev/utils/use-latest-ref.js +20 -0
- package/dist/dev/utils/use-latest-ref.js.map +1 -0
- package/dist/dev/utils/use-safe-id.js +22 -0
- package/dist/dev/utils/use-safe-id.js.map +1 -0
- package/package.json +6 -5
- package/dist/default/index.js.map +0 -1
- package/dist/default/presets/audio/index.js.map +0 -1
- package/dist/default/presets/background/index.js.map +0 -1
- package/dist/default/presets/video/index.js.map +0 -1
- package/dist/dev/index.js.map +0 -1
- package/dist/dev/presets/audio/index.d.ts.map +0 -1
- package/dist/dev/presets/audio/index.js.map +0 -1
- package/dist/dev/presets/background/index.d.ts.map +0 -1
- package/dist/dev/presets/background/index.js.map +0 -1
- package/dist/dev/presets/video/index.d.ts.map +0 -1
- package/dist/dev/presets/video/index.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"minimal-skin.tailwind.js","names":["Controls.Root","Time.Group","Time.Value","Time.Separator"],"sources":["../../../../src/presets/video/minimal-skin.tailwind.tsx"],"sourcesContent":["import type { FullscreenButtonState, MuteButtonState, PlayButtonState } from '@videojs/core';\nimport {\n CaptionsOffIcon,\n CaptionsOnIcon,\n FullscreenEnterIcon,\n FullscreenExitIcon,\n PauseIcon,\n PipIcon,\n PlayIcon,\n RestartIcon,\n SeekIcon,\n SpinnerIcon,\n VolumeHighIcon,\n VolumeLowIcon,\n VolumeOffIcon,\n} from '@videojs/icons/react/minimal';\nimport { cn } from '@videojs/utils/style';\nimport { type ComponentProps, forwardRef, type ReactNode } from 'react';\nimport { Container } from '@/player/context';\nimport { BufferingIndicator } from '@/ui/buffering-indicator';\nimport { CaptionsButton, type CaptionsButtonState } from '@/ui/captions-button';\nimport { Controls } from '@/ui/controls';\nimport { ErrorDialog } from '@/ui/error-dialog';\nimport { FullscreenButton } from '@/ui/fullscreen-button';\nimport { MuteButton } from '@/ui/mute-button';\nimport { PiPButton } from '@/ui/pip-button';\nimport { PlayButton } from '@/ui/play-button';\nimport { SeekButton } from '@/ui/seek-button';\nimport { Time } from '@/ui/time';\nimport type { MinimalVideoSkinProps } from './minimal-skin';\n\nconst SEEK_TIME = 10;\n\n/* ------------------------------------ Reused fragments ------------------------------------- */\n\nconst icon = cn(\n '[grid-area:1/1] size-4.5',\n 'drop-shadow-[0_1px_0_var(--tw-drop-shadow-color)] drop-shadow-black/25',\n 'transition-discrete transition-[display,opacity] duration-150 ease-out'\n);\n\nconst iconHidden = 'hidden opacity-0';\n\n/* --------------------------------------- Components ---------------------------------------- */\n\nconst Button = forwardRef<HTMLButtonElement, ComponentProps<'button'> & { variant?: 'icon' }>(function Button(\n { className, variant, ...props },\n ref\n) {\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n // Shared\n 'shrink-0 border-none cursor-pointer select-none',\n 'outline-2 outline-transparent -outline-offset-2',\n 'transition-[background-color,color,outline-offset] duration-150 ease-out',\n 'disabled:cursor-not-allowed disabled:opacity-50 disabled:grayscale',\n // Variant\n variant === 'icon'\n ? cn(\n 'grid p-2.5 bg-transparent rounded-md',\n 'text-white',\n 'hover:text-white/80 hover:no-underline',\n 'focus-visible:text-white/80',\n 'focus-visible:outline-white focus-visible:outline-offset-2',\n 'aria-expanded:text-white/80'\n )\n : cn(\n 'flex items-center justify-center py-2 px-4 bg-white rounded-lg',\n 'text-black font-medium',\n 'focus-visible:outline-white focus-visible:outline-offset-2'\n ),\n className\n )}\n {...props}\n />\n );\n});\n\nfunction PlayButtonIcon({ state, className, ...rest }: { state: PlayButtonState } & ComponentProps<'svg'>) {\n const { ended, paused } = state;\n return (\n <>\n <RestartIcon {...rest} className={cn(className, { [iconHidden]: !ended })} />\n <PlayIcon {...rest} className={cn(className, { [iconHidden]: ended || !paused })} />\n <PauseIcon {...rest} className={cn(className, { [iconHidden]: paused })} />\n </>\n );\n}\n\nfunction MuteButtonIcon({ state, className, ...rest }: { state: MuteButtonState } & ComponentProps<'svg'>) {\n const { muted, volumeLevel } = state;\n return (\n <>\n <VolumeOffIcon {...rest} className={cn(className, { [iconHidden]: !muted })} />\n <VolumeLowIcon {...rest} className={cn(className, { [iconHidden]: muted || volumeLevel !== 'low' })} />\n <VolumeHighIcon {...rest} className={cn(className, { [iconHidden]: muted || volumeLevel === 'low' })} />\n </>\n );\n}\n\nfunction CaptionsButtonIcon({ state, className, ...rest }: { state: CaptionsButtonState } & ComponentProps<'svg'>) {\n const { active } = state;\n return (\n <>\n <CaptionsOffIcon {...rest} className={cn(className, { [iconHidden]: active })} />\n <CaptionsOnIcon {...rest} className={cn(className, { [iconHidden]: !active })} />\n </>\n );\n}\n\nfunction FullscreenButtonIcon({ state, className, ...rest }: { state: FullscreenButtonState } & ComponentProps<'svg'>) {\n const { fullscreen } = state;\n return (\n <>\n <FullscreenExitIcon {...rest} className={cn(className, { [iconHidden]: !fullscreen })} />\n <FullscreenEnterIcon {...rest} className={cn(className, { [iconHidden]: fullscreen })} />\n </>\n );\n}\n\n/* ------------------------------------------ Skin ------------------------------------------- */\n\nexport function MinimalVideoSkinTailwind(props: MinimalVideoSkinProps): ReactNode {\n const { children, className, ...rest } = props;\n\n return (\n <Container\n className={cn(\n // Layout & containment\n 'relative isolate overflow-clip @container/media-root',\n // Appearance\n 'rounded-[var(--media-border-radius,0.75rem)] bg-black',\n 'font-[Inter_Variable,Inter,ui-sans-serif,system-ui,sans-serif] text-[0.8125rem] leading-normal subpixel-antialiased',\n // Resets\n '**:box-border **:m-0',\n '[&_button]:font-[inherit]',\n 'motion-safe:[interpolate-size:allow-keywords]',\n // Outer border ring (::after only)\n 'after:absolute after:pointer-events-none after:rounded-[inherit] after:z-10',\n 'after:inset-0 after:ring-1 after:ring-inset after:ring-black/15',\n 'dark:after:ring-white/15',\n // Video element\n '[&>video]:block [&>video]:w-full [&>video]:h-full',\n // Poster image\n '[&>img]:absolute [&>img]:inset-0 [&>img]:w-full [&>img]:h-full',\n '[&>img]:object-cover [&>img]:pointer-events-none',\n '[&>img]:transition-opacity [&>img]:duration-[250ms]',\n '[&>img:not([data-visible])]:opacity-0',\n // Fullscreen\n '[&:fullscreen]:rounded-none',\n className\n )}\n {...rest}\n >\n {children}\n\n <BufferingIndicator\n render={(props, state) =>\n state.visible ? (\n <div\n {...props}\n className=\"absolute inset-0 flex items-center justify-center pointer-events-none z-10 text-white\"\n >\n <SpinnerIcon className={icon} />\n </div>\n ) : null\n }\n />\n\n <ErrorDialog\n aria-labelledby=\"media-error-title\"\n aria-describedby=\"media-error-description\"\n render={(props, { onDismiss }) => (\n <div\n {...props}\n className=\"peer/error group/error absolute inset-0 z-20 items-center justify-center pointer-events-none hidden data-[visible]:flex\"\n >\n <div\n className={cn(\n 'hidden flex-col gap-3 max-w-64 p-4 text-white text-sm pointer-events-auto',\n 'group-data-[visible]/error:flex',\n 'text-shadow-2xs text-shadow-black/50',\n 'transition-[display,opacity,scale,transform] duration-500 delay-100 transition-discrete',\n 'starting:opacity-0 starting:scale-50',\n 'ease-[linear(0,0.034_1.5%,0.763_9.7%,1.066_13.9%,1.198_19.9%,1.184_21.8%,0.963_37.5%,0.997_50.9%,1)]'\n )}\n >\n <div className=\"flex flex-col gap-2 py-1.5\">\n <p id=\"media-error-title\" className=\"font-semibold leading-tight\">\n Something went wrong.\n </p>\n <p id=\"media-error-description\">An error occurred while trying to play the video. Please try again.</p>\n </div>\n <div className=\"flex gap-2 *:flex-1\">\n <Button onClick={onDismiss}>OK</Button>\n </div>\n </div>\n </div>\n )}\n />\n\n <Controls.Root\n className={cn(\n // Peer marker for overlay/captions\n 'peer/controls',\n // Layout\n 'absolute @container/media-controls bottom-0 inset-x-0',\n 'pt-8 px-1.5 pb-1.5 flex items-center gap-2',\n 'text-white z-10',\n // Transitions\n 'will-change-[translate,filter,opacity]',\n 'transition-[translate,filter,opacity] ease-out',\n 'delay-0 duration-75',\n // Hidden state\n 'not-data-[visible]:opacity-0 not-data-[visible]:translate-y-full',\n 'not-data-[visible]:blur-[8px] not-data-[visible]:pointer-events-none',\n 'not-data-[visible]:delay-500 not-data-[visible]:duration-500',\n // Reduced motion + hidden\n 'motion-reduce:not-data-[visible]:duration-100',\n 'motion-reduce:not-data-[visible]:translate-y-0',\n 'motion-reduce:not-data-[visible]:blur-none motion-reduce:not-data-[visible]:scale-100',\n // Wider container\n '@sm/media-root:pt-10 @sm/media-root:px-3 @sm/media-root:pb-3',\n '@sm/media-root:gap-3.5'\n )}\n >\n <span className={cn('flex items-center gap-[0.075rem]', '@2xl/media-root:gap-0.5')}>\n <PlayButton\n render={(props, state) => (\n <Button variant=\"icon\" {...props}>\n <PlayButtonIcon state={state} className={icon} />\n </Button>\n )}\n />\n\n <SeekButton\n seconds={-SEEK_TIME}\n render={(props) => (\n <Button variant=\"icon\" {...props} className=\"@max-md/media-controls:hidden\">\n <span className=\"relative\">\n <SeekIcon className={cn(icon, '[scale:-1_1]')} />\n <span className=\"absolute left-0 -bottom-0.75 text-[0.75em] font-[480] tabular-nums\">\n {SEEK_TIME}\n </span>\n </span>\n </Button>\n )}\n />\n\n <SeekButton\n seconds={SEEK_TIME}\n render={(props) => (\n <Button variant=\"icon\" {...props} className=\"@max-md/media-controls:hidden\">\n <span className=\"relative\">\n <SeekIcon className={icon} />\n <span className=\"absolute right-0 -bottom-0.75 text-[0.75em] font-[480] tabular-nums\">\n {SEEK_TIME}\n </span>\n </span>\n </Button>\n )}\n />\n </span>\n\n <span className={cn('flex flex-row-reverse items-center flex-1 gap-3', '@md/media-controls:flex-row')}>\n <Time.Group className=\"flex items-center gap-1\">\n <Time.Value\n type=\"current\"\n className={cn('hidden tabular-nums text-shadow-2xs text-shadow-black/25', '@md/media-controls:inline')}\n />\n <Time.Separator className={cn('hidden', '@md/media-controls:inline @md/media-controls:text-white/50')} />\n <Time.Value\n type=\"duration\"\n className={cn('tabular-nums text-shadow-2xs text-shadow-black/25', '@md/media-controls:text-white/50')}\n />\n </Time.Group>\n\n {/* Temporary spacer */}\n <span className=\"flex-1 h-[3px] rounded-full bg-white/20\" />\n </span>\n\n <span className={cn('flex items-center gap-[0.075rem]', '@2xl/media-root:gap-0.5')}>\n <MuteButton\n render={(props, state) => (\n <Button variant=\"icon\" {...props}>\n <MuteButtonIcon state={state} className={icon} />\n </Button>\n )}\n />\n\n <CaptionsButton\n render={(props, state) => (\n <Button variant=\"icon\" {...props}>\n <CaptionsButtonIcon state={state} className={icon} />\n </Button>\n )}\n />\n\n <PiPButton\n render={(props) => (\n <Button variant=\"icon\" {...props}>\n <PipIcon className={icon} />\n </Button>\n )}\n />\n\n <FullscreenButton\n render={(props, state) => (\n <Button variant=\"icon\" {...props}>\n <FullscreenButtonIcon state={state} className={icon} />\n </Button>\n )}\n />\n </span>\n </Controls.Root>\n\n {/* <div\n className={cn(\n 'absolute z-20 pointer-events-none text-balance text-base',\n 'inset-x-4 bottom-6',\n 'transition-transform duration-150 ease-out delay-600',\n 'motion-reduce:duration-50',\n // Responsive font sizes\n '@xs/media-root:text-2xl',\n '@3xl/media-root:text-3xl',\n '@7xl/media-root:text-4xl',\n // Shift up when controls visible\n 'peer-data-[visible]/controls:-translate-y-10 peer-data-[visible]/controls:delay-25',\n )}\n >\n <div className=\"max-w-[42ch] mx-auto text-center flex flex-col items-center\">\n <span className={cn(\n 'block py-0.5 px-2 text-white text-center whitespace-pre-wrap leading-1.2',\n '[text-shadow:0_0_1px_oklab(0_0_0_/_0.7),0_0_8px_oklab(0_0_0_/_0.7)]',\n 'contrast-more:[text-shadow:none] contrast-more:[box-decoration-break:clone] contrast-more:bg-black/70',\n '*:inline',\n )}>\n An example cue\n </span>\n </div>\n </div> */}\n\n <div\n className={cn(\n // Layout\n 'absolute inset-0 flex flex-col items-start',\n 'pointer-events-none rounded-[inherit]',\n // Default: hidden\n 'opacity-0',\n 'bg-gradient-to-t from-black/70 via-black/50 via-[7.5rem] to-transparent',\n 'backdrop-blur-[0px] backdrop-saturate-120 backdrop-brightness-90',\n // Transitions\n 'transition-[opacity,backdrop-filter] ease-out',\n 'duration-500 delay-500',\n // Shown when controls visible\n 'peer-data-[visible]/controls:opacity-100',\n 'peer-data-[visible]/controls:duration-150',\n 'peer-data-[visible]/controls:delay-0',\n // Shown when error visible (+ blur)\n 'peer-data-[visible]/error:opacity-100',\n 'peer-data-[visible]/error:duration-150',\n 'peer-data-[visible]/error:delay-0',\n 'peer-data-[visible]/error:backdrop-blur-[8px]',\n // Reduced motion\n 'motion-reduce:duration-100'\n )}\n />\n </Container>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"minimal-skin.tailwind.js","names":["Controls.Root","Time.Group","Time.Value","Time.Separator","TimeSlider.Root","TimeSlider.Track","TimeSlider.Fill","TimeSlider.Buffer","TimeSlider.Thumb","Popover.Root","Popover.Trigger","Popover.Popup","VolumeSlider.Root","VolumeSlider.Track","VolumeSlider.Fill","VolumeSlider.Thumb"],"sources":["../../../../src/presets/video/minimal-skin.tailwind.tsx"],"sourcesContent":["import {\n CaptionsOffIcon,\n CaptionsOnIcon,\n FullscreenEnterIcon,\n FullscreenExitIcon,\n PauseIcon,\n PipIcon,\n PlayIcon,\n RestartIcon,\n SeekIcon,\n SpinnerIcon,\n VolumeHighIcon,\n VolumeLowIcon,\n VolumeOffIcon,\n} from '@videojs/icons/react/minimal';\nimport { playbackRate } from '@videojs/skins/video/default.tailwind';\nimport {\n bufferingIndicator,\n button,\n buttonGroup,\n controls,\n error,\n icon,\n iconContainer,\n iconFlipped,\n iconState,\n overlay,\n popup,\n root,\n seek,\n slider,\n time,\n} from '@videojs/skins/video/minimal.tailwind';\nimport { cn } from '@videojs/utils/style';\nimport { type ComponentProps, forwardRef, type ReactNode } from 'react';\nimport { Container } from '@/player/context';\nimport { BufferingIndicator } from '@/ui/buffering-indicator';\nimport { CaptionsButton } from '@/ui/captions-button';\nimport { Controls } from '@/ui/controls';\nimport { ErrorDialog } from '@/ui/error-dialog';\nimport { FullscreenButton } from '@/ui/fullscreen-button';\nimport { MuteButton } from '@/ui/mute-button';\nimport { PiPButton } from '@/ui/pip-button';\nimport { PlayButton } from '@/ui/play-button';\nimport { PlaybackRateButton } from '@/ui/playback-rate-button';\nimport { Popover } from '@/ui/popover';\nimport { SeekButton } from '@/ui/seek-button';\nimport { Time } from '@/ui/time';\nimport { TimeSlider } from '@/ui/time-slider';\nimport { VolumeSlider } from '@/ui/volume-slider';\nimport type { MinimalVideoSkinProps } from './minimal-skin';\n\nconst SEEK_TIME = 10;\n\n/* --------------------------------------- Components ---------------------------------------- */\n\nconst Button = forwardRef<HTMLButtonElement, ComponentProps<'button'> & { variant?: 'icon' }>(function Button(\n { className, variant, ...props },\n ref\n) {\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(button.base, variant === 'icon' ? button.icon : button.default, className)}\n {...props}\n />\n );\n});\n\nconst SliderRoot = forwardRef<HTMLDivElement, ComponentProps<'div'>>(function SliderRoot({ className, ...props }, ref) {\n return <div ref={ref} className={cn(slider.root, className)} {...props} />;\n});\n\nconst SliderTrack = forwardRef<HTMLDivElement, ComponentProps<'div'>>(function SliderTrack(\n { className, ...props },\n ref\n) {\n return <div ref={ref} className={cn(slider.track, className)} {...props} />;\n});\n\nconst SliderFill = forwardRef<HTMLDivElement, ComponentProps<'div'> & { type?: 'fill' | 'buffer' }>(function SliderFill(\n { type = 'fill', className, ...props },\n ref\n) {\n return (\n <div\n ref={ref}\n className={cn(slider.fill.base, type === 'fill' ? slider.fill.fill : slider.fill.buffer, className)}\n {...props}\n />\n );\n});\n\nconst SliderThumb = forwardRef<HTMLDivElement, ComponentProps<'div'> & { persistent?: boolean }>(function SliderThumb(\n { persistent, className, ...props },\n ref\n) {\n return (\n <div\n ref={ref}\n className={cn(slider.thumb.base, persistent ? undefined : slider.thumb.interactive, className)}\n {...props}\n />\n );\n});\n\n/* ------------------------------------------ Skin ------------------------------------------- */\n\nexport function MinimalVideoSkinTailwind(props: MinimalVideoSkinProps): ReactNode {\n const { children, className, ...rest } = props;\n\n return (\n <Container className={cn(root, className)} {...rest}>\n <BufferingIndicator\n render={(props) => (\n <div {...props} className={bufferingIndicator}>\n <SpinnerIcon className={icon} />\n </div>\n )}\n />\n\n <ErrorDialog\n aria-labelledby=\"media-error-title\"\n aria-describedby=\"media-error-description\"\n render={(props, { onDismiss }) => (\n <div {...props} className={error.root}>\n <div className={error.dialog}>\n <div className={error.content}>\n <p id=\"media-error-title\" className={error.title}>\n Something went wrong.\n </p>\n <p id=\"media-error-description\">An error occurred while trying to play the video. Please try again.</p>\n </div>\n <div className={error.actions}>\n <Button onClick={onDismiss}>OK</Button>\n </div>\n </div>\n </div>\n )}\n />\n\n <Controls.Root\n data-controls=\"\" // Used as a hook for Tailwind has-[] styles\n className={controls}\n >\n <span className={buttonGroup}>\n <PlayButton\n render={(props) => (\n <Button variant=\"icon\" {...props} className={iconState.play.button}>\n <RestartIcon className={cn(icon, iconState.play.restart)} />\n <PlayIcon className={cn(icon, iconState.play.play)} />\n <PauseIcon className={cn(icon, iconState.play.pause)} />\n </Button>\n )}\n />\n\n <SeekButton\n seconds={-SEEK_TIME}\n render={(props) => (\n <Button variant=\"icon\" {...props} className={seek.button}>\n <span className={iconContainer}>\n <SeekIcon className={cn(icon, iconFlipped)} />\n <span className={cn(seek.label, seek.labelBackward)}>{SEEK_TIME}</span>\n </span>\n </Button>\n )}\n />\n\n <SeekButton\n seconds={SEEK_TIME}\n render={(props) => (\n <Button variant=\"icon\" {...props} className={seek.button}>\n <span className={iconContainer}>\n <SeekIcon className={icon} />\n <span className={cn(seek.label, seek.labelForward)}>{SEEK_TIME}</span>\n </span>\n </Button>\n )}\n />\n </span>\n\n <span className={time.controls}>\n <Time.Group className={time.group}>\n <Time.Value type=\"current\" className={time.current} />\n <Time.Separator className={time.separator} />\n <Time.Value type=\"duration\" className={time.duration} />\n </Time.Group>\n\n <TimeSlider.Root render={(props) => <SliderRoot {...props} />}>\n <TimeSlider.Track render={(props) => <SliderTrack {...props} />}>\n <TimeSlider.Fill render={(props) => <SliderFill {...props} />} />\n <TimeSlider.Buffer render={(props) => <SliderFill type=\"buffer\" {...props} />} />\n </TimeSlider.Track>\n <TimeSlider.Thumb render={(props) => <SliderThumb {...props} />} />\n </TimeSlider.Root>\n </span>\n\n <span className={buttonGroup}>\n <PlaybackRateButton\n render={(props) => <Button variant=\"icon\" {...props} className={playbackRate.button} />}\n />\n\n <Popover.Root openOnHover delay={200} closeDelay={100} side=\"top\">\n <Popover.Trigger\n render={\n <MuteButton\n render={(props) => (\n <Button variant=\"icon\" {...props} className={iconState.mute.button}>\n <VolumeOffIcon className={cn(icon, iconState.mute.volumeOff)} />\n <VolumeLowIcon className={cn(icon, iconState.mute.volumeLow)} />\n <VolumeHighIcon className={cn(icon, iconState.mute.volumeHigh)} />\n </Button>\n )}\n />\n }\n />\n <Popover.Popup className={cn(popup.base, popup.volume)}>\n <VolumeSlider.Root\n orientation=\"vertical\"\n thumbAlignment=\"edge\"\n render={(props) => <SliderRoot {...props} />}\n >\n <VolumeSlider.Track render={(props) => <SliderTrack {...props} />}>\n <VolumeSlider.Fill render={(props) => <SliderFill {...props} />} />\n </VolumeSlider.Track>\n <VolumeSlider.Thumb render={(props) => <SliderThumb persistent {...props} />} />\n </VolumeSlider.Root>\n </Popover.Popup>\n </Popover.Root>\n\n <CaptionsButton\n render={(props) => (\n <Button variant=\"icon\" {...props} className={iconState.captions.button}>\n <CaptionsOffIcon className={cn(icon, iconState.captions.off)} />\n <CaptionsOnIcon className={cn(icon, iconState.captions.on)} />\n </Button>\n )}\n />\n\n <PiPButton\n render={(props) => (\n <Button variant=\"icon\" {...props}>\n <PipIcon className={icon} />\n </Button>\n )}\n />\n\n <FullscreenButton\n render={(props) => (\n <Button variant=\"icon\" {...props} className={iconState.fullscreen.button}>\n <FullscreenEnterIcon className={cn(icon, iconState.fullscreen.enter)} />\n <FullscreenExitIcon className={cn(icon, iconState.fullscreen.exit)} />\n </Button>\n )}\n />\n </span>\n </Controls.Root>\n\n {/* <div className={captions.root}>\n <div className={captions.container}>\n <span className={captions.cue}>\n An example cue\n </span>\n </div>\n </div> */}\n\n <div className={overlay} />\n\n {children}\n </Container>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,3 +1,54 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
Icon State Visibility
|
|
3
|
+
|
|
4
|
+
Data-attribute-driven visibility rules for multi-state icon buttons.
|
|
5
|
+
Uses :is() with both element selectors (for HTML custom element wrappers)
|
|
6
|
+
and class selectors (for React rendered SVG elements).
|
|
7
|
+
========================================================================== */
|
|
8
|
+
|
|
9
|
+
/* --- All icons hidden by default --- */
|
|
10
|
+
|
|
11
|
+
.media-button--play .media-icon--restart,
|
|
12
|
+
.media-button--play .media-icon--play,
|
|
13
|
+
.media-button--play .media-icon--pause,
|
|
14
|
+
.media-button--mute .media-icon--volume-off,
|
|
15
|
+
.media-button--mute .media-icon--volume-low,
|
|
16
|
+
.media-button--mute .media-icon--volume-high,
|
|
17
|
+
.media-button--fullscreen .media-icon--fullscreen-enter,
|
|
18
|
+
.media-button--fullscreen .media-icon--fullscreen-exit,
|
|
19
|
+
.media-button--captions .media-icon--captions-off,
|
|
20
|
+
.media-button--captions .media-icon--captions-on {
|
|
21
|
+
display: none;
|
|
22
|
+
opacity: 0;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/* --- Active icon per state --- */
|
|
26
|
+
|
|
27
|
+
/* Play: ended → restart */
|
|
28
|
+
.media-button--play[data-ended] .media-icon--restart,
|
|
29
|
+
/* Play: paused (not ended) → play */
|
|
30
|
+
.media-button--play:not([data-ended])[data-paused] .media-icon--play,
|
|
31
|
+
/* Play: playing (not paused, not ended) → pause */
|
|
32
|
+
.media-button--play:not([data-paused]):not([data-ended]) .media-icon--pause,
|
|
33
|
+
/* Mute: muted → volume off */
|
|
34
|
+
.media-button--mute[data-muted] .media-icon--volume-off,
|
|
35
|
+
/* Mute: volume low (not muted) → volume low */
|
|
36
|
+
.media-button--mute:not([data-muted])[data-volume-level="low"] .media-icon--volume-low,
|
|
37
|
+
/* Mute: volume high (not muted, not low) → volume high */
|
|
38
|
+
.media-button--mute:not([data-muted]):not([data-volume-level="low"]) .media-icon--volume-high,
|
|
39
|
+
/* Fullscreen: not fullscreen → enter */
|
|
40
|
+
.media-button--fullscreen:not([data-fullscreen]) .media-icon--fullscreen-enter,
|
|
41
|
+
/* Fullscreen: fullscreen → exit */
|
|
42
|
+
.media-button--fullscreen[data-fullscreen] .media-icon--fullscreen-exit,
|
|
43
|
+
/* Captions: not active → captions off */
|
|
44
|
+
.media-button--captions:not([data-active]) .media-icon--captions-off,
|
|
45
|
+
/* Captions: active → captions on */
|
|
46
|
+
.media-button--captions[data-active] .media-icon--captions-on {
|
|
47
|
+
display: block;
|
|
48
|
+
opacity: 1;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
|
|
1
52
|
/* ==========================================================================
|
|
2
53
|
Reset
|
|
3
54
|
========================================================================== */
|
|
@@ -30,6 +81,7 @@
|
|
|
30
81
|
.media-default-skin {
|
|
31
82
|
position: relative;
|
|
32
83
|
isolation: isolate;
|
|
84
|
+
display: block;
|
|
33
85
|
container: media-root / inline-size;
|
|
34
86
|
overflow: clip;
|
|
35
87
|
border-radius: var(--media-border-radius, 2rem);
|
|
@@ -78,6 +130,7 @@
|
|
|
78
130
|
display: block;
|
|
79
131
|
width: 100%;
|
|
80
132
|
height: 100%;
|
|
133
|
+
border-radius: inherit;
|
|
81
134
|
}
|
|
82
135
|
|
|
83
136
|
/* ==========================================================================
|
|
@@ -89,6 +142,7 @@
|
|
|
89
142
|
inset: 0;
|
|
90
143
|
width: 100%;
|
|
91
144
|
height: 100%;
|
|
145
|
+
border-radius: inherit;
|
|
92
146
|
object-fit: cover;
|
|
93
147
|
transition: opacity 0.25s;
|
|
94
148
|
pointer-events: none;
|
|
@@ -104,6 +158,7 @@
|
|
|
104
158
|
.media-default-skin .media-overlay {
|
|
105
159
|
position: absolute;
|
|
106
160
|
inset: 0;
|
|
161
|
+
z-index: 1;
|
|
107
162
|
border-radius: inherit;
|
|
108
163
|
background-image: linear-gradient(to top, oklch(0 0 0 / 0.5), oklch(0 0 0 / 0.3), oklch(0 0 0 / 0));
|
|
109
164
|
backdrop-filter: blur(0) saturate(1.2) brightness(0.9);
|
|
@@ -137,12 +192,15 @@
|
|
|
137
192
|
position: absolute;
|
|
138
193
|
inset: 0;
|
|
139
194
|
z-index: 10;
|
|
140
|
-
display:
|
|
195
|
+
display: none;
|
|
141
196
|
align-items: center;
|
|
142
197
|
justify-content: center;
|
|
143
198
|
color: oklch(1 0 0);
|
|
144
199
|
pointer-events: none;
|
|
145
200
|
}
|
|
201
|
+
.media-default-skin .media-buffering-indicator[data-visible] {
|
|
202
|
+
display: flex;
|
|
203
|
+
}
|
|
146
204
|
.media-default-skin .media-buffering-indicator .media-surface {
|
|
147
205
|
padding: 0.25rem;
|
|
148
206
|
border-radius: 100%;
|
|
@@ -339,6 +397,7 @@
|
|
|
339
397
|
outline-offset: -2px;
|
|
340
398
|
color: oklch(0 0 0);
|
|
341
399
|
font-weight: 500;
|
|
400
|
+
text-align: center;
|
|
342
401
|
transition-property: background-color, color, outline-offset;
|
|
343
402
|
transition-duration: 150ms;
|
|
344
403
|
transition-timing-function: ease-out;
|
|
@@ -358,7 +417,9 @@
|
|
|
358
417
|
/* Icon button variant */
|
|
359
418
|
.media-default-skin .media-button--icon {
|
|
360
419
|
display: grid;
|
|
361
|
-
|
|
420
|
+
width: 2.125rem;
|
|
421
|
+
padding: 0;
|
|
422
|
+
aspect-ratio: 1;
|
|
362
423
|
background: transparent;
|
|
363
424
|
color: oklch(1 0 0 / 0.9);
|
|
364
425
|
text-shadow: 0 1px 0 oklch(0 0 0 / 0.25);
|
|
@@ -374,13 +435,35 @@
|
|
|
374
435
|
filter: drop-shadow(0 1px 0 oklch(0 0 0 / 0.25));
|
|
375
436
|
}
|
|
376
437
|
|
|
377
|
-
/* Seek button
|
|
438
|
+
/* Seek button */
|
|
439
|
+
.media-default-skin .media-button--seek .media-icon__label {
|
|
440
|
+
position: absolute;
|
|
441
|
+
right: -1px;
|
|
442
|
+
bottom: -3px;
|
|
443
|
+
font-size: 0.75em;
|
|
444
|
+
font-weight: 480;
|
|
445
|
+
font-variant-numeric: tabular-nums;
|
|
446
|
+
}
|
|
447
|
+
.media-default-skin .media-button--seek:has(.media-icon--flipped) .media-icon__label {
|
|
448
|
+
right: unset;
|
|
449
|
+
left: -1px;
|
|
450
|
+
}
|
|
378
451
|
@container media-controls (width < 28rem) {
|
|
379
452
|
.media-default-skin .media-button--seek {
|
|
380
453
|
display: none;
|
|
381
454
|
}
|
|
382
455
|
}
|
|
383
456
|
|
|
457
|
+
/* Playback rate button */
|
|
458
|
+
.media-default-skin .media-button--playback-rate {
|
|
459
|
+
padding: 0;
|
|
460
|
+
}
|
|
461
|
+
.media-default-skin .media-button--playback-rate::after {
|
|
462
|
+
content: attr(data-rate) "\00D7";
|
|
463
|
+
width: 4ch;
|
|
464
|
+
font-variant-numeric: tabular-nums;
|
|
465
|
+
}
|
|
466
|
+
|
|
384
467
|
/* ==========================================================================
|
|
385
468
|
Icons
|
|
386
469
|
========================================================================== */
|
|
@@ -389,6 +472,8 @@
|
|
|
389
472
|
position: relative;
|
|
390
473
|
}
|
|
391
474
|
.media-default-skin .media-icon {
|
|
475
|
+
display: block;
|
|
476
|
+
flex-shrink: 0;
|
|
392
477
|
grid-area: 1 / 1;
|
|
393
478
|
width: 18px;
|
|
394
479
|
height: 18px;
|
|
@@ -397,28 +482,10 @@
|
|
|
397
482
|
transition-duration: 150ms;
|
|
398
483
|
transition-timing-function: ease-out;
|
|
399
484
|
}
|
|
400
|
-
.media-default-skin .media-icon--hidden {
|
|
401
|
-
display: none;
|
|
402
|
-
opacity: 0;
|
|
403
|
-
}
|
|
404
485
|
.media-default-skin .media-icon--flipped {
|
|
405
486
|
scale: -1 1;
|
|
406
487
|
}
|
|
407
488
|
|
|
408
|
-
/* Seek icon label positioning */
|
|
409
|
-
.media-default-skin .media-icon--seek ~ .media-icon__label {
|
|
410
|
-
position: absolute;
|
|
411
|
-
right: 0;
|
|
412
|
-
bottom: -3px;
|
|
413
|
-
font-size: 0.75em;
|
|
414
|
-
font-weight: 480;
|
|
415
|
-
font-variant-numeric: tabular-nums;
|
|
416
|
-
}
|
|
417
|
-
.media-default-skin .media-icon--seek.media-icon--flipped ~ .media-icon__label {
|
|
418
|
-
right: unset;
|
|
419
|
-
left: 0;
|
|
420
|
-
}
|
|
421
|
-
|
|
422
489
|
/* ==========================================================================
|
|
423
490
|
Slider
|
|
424
491
|
========================================================================== */
|
|
@@ -453,10 +520,7 @@
|
|
|
453
520
|
overflow: hidden;
|
|
454
521
|
background-color: oklch(1 0 0 / 0.2);
|
|
455
522
|
border-radius: inherit;
|
|
456
|
-
outline: 2px solid transparent;
|
|
457
|
-
outline-offset: -2px;
|
|
458
523
|
box-shadow: 0 0 0 1px oklch(0 0 0 / 0.05);
|
|
459
|
-
transition: outline-offset 150ms ease-out;
|
|
460
524
|
user-select: none;
|
|
461
525
|
}
|
|
462
526
|
.media-default-skin .media-slider__track[data-orientation="horizontal"] {
|
|
@@ -467,14 +531,12 @@
|
|
|
467
531
|
width: 0.25rem;
|
|
468
532
|
height: 100%;
|
|
469
533
|
}
|
|
470
|
-
.media-default-skin .media-slider:focus-visible .media-slider__track {
|
|
471
|
-
outline-color: oklch(62.3% 0.214 259.815);
|
|
472
|
-
outline-offset: 6px;
|
|
473
|
-
}
|
|
474
534
|
|
|
475
535
|
/* Thumb */
|
|
476
536
|
.media-default-skin .media-slider__thumb {
|
|
477
537
|
z-index: 10;
|
|
538
|
+
position: absolute;
|
|
539
|
+
transform: translate(-50%, -50%);
|
|
478
540
|
width: 0.625rem;
|
|
479
541
|
height: 0.625rem;
|
|
480
542
|
background-color: oklch(1 0 0);
|
|
@@ -484,36 +546,78 @@
|
|
|
484
546
|
0 1px 3px 0 oklch(0 0 0 / 0.15),
|
|
485
547
|
0 1px 2px -1px oklch(0 0 0 / 0.15);
|
|
486
548
|
opacity: 0;
|
|
487
|
-
transition-property: opacity, height, width;
|
|
549
|
+
transition-property: opacity, height, width, outline-offset;
|
|
488
550
|
transition-duration: 150ms;
|
|
489
551
|
transition-timing-function: ease-out;
|
|
490
552
|
user-select: none;
|
|
553
|
+
outline: 2px solid transparent;
|
|
554
|
+
outline-offset: -2px;
|
|
491
555
|
}
|
|
492
|
-
.media-default-skin .media-slider__thumb
|
|
556
|
+
.media-default-skin .media-slider__thumb[data-orientation="horizontal"] {
|
|
557
|
+
top: 50%;
|
|
558
|
+
left: var(--media-slider-fill);
|
|
559
|
+
}
|
|
560
|
+
.media-default-skin .media-slider__thumb[data-orientation="vertical"] {
|
|
561
|
+
left: 50%;
|
|
562
|
+
top: calc(100% - var(--media-slider-fill));
|
|
563
|
+
}
|
|
564
|
+
.media-default-skin .media-slider__thumb:focus-visible {
|
|
565
|
+
outline-color: oklch(62.3% 0.214 259.815);
|
|
566
|
+
outline-offset: 2px;
|
|
567
|
+
}
|
|
568
|
+
.media-default-skin .media-slider:active .media-slider__thumb,
|
|
569
|
+
.media-default-skin .media-slider__thumb--persistent {
|
|
493
570
|
width: 0.75rem;
|
|
494
571
|
height: 0.75rem;
|
|
495
572
|
}
|
|
496
573
|
.media-default-skin .media-slider:hover .media-slider__thumb,
|
|
497
|
-
.media-default-skin .media-
|
|
574
|
+
.media-default-skin .media-slider__thumb:focus-visible,
|
|
575
|
+
.media-default-skin .media-slider__thumb--persistent {
|
|
498
576
|
opacity: 1;
|
|
499
577
|
}
|
|
500
|
-
|
|
501
|
-
|
|
578
|
+
|
|
579
|
+
/* Shared track fills */
|
|
580
|
+
.media-default-skin .media-slider__buffer,
|
|
581
|
+
.media-default-skin .media-slider__fill {
|
|
582
|
+
position: absolute;
|
|
583
|
+
border-radius: inherit;
|
|
584
|
+
pointer-events: none;
|
|
502
585
|
}
|
|
503
|
-
.media-default-skin .media-
|
|
504
|
-
|
|
586
|
+
.media-default-skin .media-slider__buffer[data-orientation="horizontal"],
|
|
587
|
+
.media-default-skin .media-slider__fill[data-orientation="horizontal"] {
|
|
588
|
+
inset-block: 0;
|
|
589
|
+
left: 0;
|
|
590
|
+
}
|
|
591
|
+
.media-default-skin .media-slider__buffer[data-orientation="vertical"],
|
|
592
|
+
.media-default-skin .media-slider__fill[data-orientation="vertical"] {
|
|
593
|
+
inset-inline: 0;
|
|
594
|
+
bottom: 0;
|
|
505
595
|
}
|
|
506
596
|
|
|
507
|
-
/*
|
|
508
|
-
.media-default-skin .media-
|
|
597
|
+
/* Buffer */
|
|
598
|
+
.media-default-skin .media-slider__buffer {
|
|
509
599
|
background-color: oklch(1 0 0 / 0.2);
|
|
510
|
-
|
|
600
|
+
transition-duration: 0.25s;
|
|
601
|
+
transition-timing-function: ease-out;
|
|
602
|
+
}
|
|
603
|
+
.media-default-skin .media-slider__buffer[data-orientation="horizontal"] {
|
|
604
|
+
width: var(--media-slider-buffer);
|
|
605
|
+
transition-property: width;
|
|
606
|
+
}
|
|
607
|
+
.media-default-skin .media-slider__buffer[data-orientation="vertical"] {
|
|
608
|
+
height: var(--media-slider-buffer);
|
|
609
|
+
transition-property: height;
|
|
511
610
|
}
|
|
512
611
|
|
|
513
|
-
/*
|
|
514
|
-
.media-default-skin .media-
|
|
612
|
+
/* Fill */
|
|
613
|
+
.media-default-skin .media-slider__fill {
|
|
515
614
|
background-color: oklch(1 0 0);
|
|
516
|
-
|
|
615
|
+
}
|
|
616
|
+
.media-default-skin .media-slider__fill[data-orientation="horizontal"] {
|
|
617
|
+
width: var(--media-slider-fill);
|
|
618
|
+
}
|
|
619
|
+
.media-default-skin .media-slider__fill[data-orientation="vertical"] {
|
|
620
|
+
height: var(--media-slider-fill);
|
|
517
621
|
}
|
|
518
622
|
|
|
519
623
|
/* Time display within slider */
|
|
@@ -543,10 +647,13 @@
|
|
|
543
647
|
transition-duration: 0ms;
|
|
544
648
|
}
|
|
545
649
|
|
|
546
|
-
.media-default-skin .media-
|
|
650
|
+
.media-default-skin .media-popup {
|
|
547
651
|
margin: 0;
|
|
548
|
-
padding: 0.75rem 0.25rem;
|
|
549
652
|
border: 0;
|
|
653
|
+
--media-popover-side-offset: 0.5rem;
|
|
654
|
+
}
|
|
655
|
+
.media-default-skin .media-popup--volume {
|
|
656
|
+
padding: 0.625rem 0.25rem;
|
|
550
657
|
border-radius: calc(infinity * 1px);
|
|
551
658
|
}
|
|
552
659
|
|
|
@@ -574,16 +681,8 @@
|
|
|
574
681
|
z-index: 20;
|
|
575
682
|
font-size: 1rem;
|
|
576
683
|
text-wrap: balance;
|
|
577
|
-
/* The delay must account for the controls delay/duration */
|
|
578
|
-
transition: transform 150ms ease-out;
|
|
579
|
-
transition-delay: 600ms;
|
|
580
684
|
pointer-events: none;
|
|
581
685
|
}
|
|
582
|
-
@media (prefers-reduced-motion: reduce) {
|
|
583
|
-
.media-default-skin .media-captions {
|
|
584
|
-
transition-duration: 50ms;
|
|
585
|
-
}
|
|
586
|
-
}
|
|
587
686
|
.media-default-skin .media-captions__container {
|
|
588
687
|
display: flex;
|
|
589
688
|
flex-direction: column;
|
|
@@ -631,8 +730,34 @@
|
|
|
631
730
|
}
|
|
632
731
|
}
|
|
633
732
|
|
|
634
|
-
/*
|
|
733
|
+
/* Caption shifting styles (custom and native) */
|
|
734
|
+
.media-default-skin {
|
|
735
|
+
--media-caption-track-delay: 600ms;
|
|
736
|
+
--media-caption-track-y: -0.5rem;
|
|
737
|
+
}
|
|
738
|
+
.media-default-skin:has(.media-controls[data-visible]) {
|
|
739
|
+
--media-caption-track-delay: 25ms;
|
|
740
|
+
--media-caption-track-y: -3.5rem;
|
|
741
|
+
}
|
|
742
|
+
.media-default-skin .media-captions,
|
|
743
|
+
.media-default-skin video::-webkit-media-text-track-container {
|
|
744
|
+
/* NOTE: The delay must account for the controls delay/duration */
|
|
745
|
+
transition: transform 150ms ease-out;
|
|
746
|
+
transition-delay: var(--media-caption-track-delay);
|
|
747
|
+
}
|
|
748
|
+
.media-default-skin video::-webkit-media-text-track-container {
|
|
749
|
+
transform: translateY(var(--media-caption-track-y)) scale(0.98);
|
|
750
|
+
z-index: 1;
|
|
751
|
+
font-family: inherit;
|
|
752
|
+
}
|
|
753
|
+
/* When controls are visible, shift captions up to avoid overlap */
|
|
635
754
|
.media-default-skin .media-controls[data-visible] ~ .media-captions {
|
|
636
|
-
transform: translateY(-
|
|
637
|
-
transition-delay: 25ms;
|
|
755
|
+
transform: translateY(calc(var(--media-caption-track-y) - 0.5rem));
|
|
638
756
|
}
|
|
757
|
+
@media (prefers-reduced-motion: reduce) {
|
|
758
|
+
.media-default-skin .media-captions,
|
|
759
|
+
.media-default-skin video::-webkit-media-text-track-container {
|
|
760
|
+
transition-duration: 50ms;
|
|
761
|
+
}
|
|
762
|
+
}
|
|
763
|
+
|