@videojs/react 10.0.0-beta.29 → 10.0.0-beta.30
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/index.js +2 -1
- package/dist/default/media/shaka-video/index.js +2 -0
- package/dist/default/media/shaka-video/media.js +21 -0
- package/dist/default/media/shaka-video/media.js.map +1 -0
- package/dist/default/presets/audio/minimal-skin.css +1 -3
- package/dist/default/presets/audio/skin.css +1 -3
- package/dist/default/presets/live-audio/minimal-skin.css +1 -3
- package/dist/default/presets/live-audio/skin.css +1 -3
- package/dist/default/presets/live-video/minimal-skin.css +2 -31
- package/dist/default/presets/live-video/minimal-skin.js +2 -6
- package/dist/default/presets/live-video/minimal-skin.js.map +1 -1
- package/dist/default/presets/live-video/minimal-skin.tailwind.js +2 -6
- package/dist/default/presets/live-video/minimal-skin.tailwind.js.map +1 -1
- package/dist/default/presets/live-video/skin.css +2 -33
- package/dist/default/presets/live-video/skin.js +2 -6
- package/dist/default/presets/live-video/skin.js.map +1 -1
- package/dist/default/presets/live-video/skin.tailwind.js +2 -6
- package/dist/default/presets/live-video/skin.tailwind.js.map +1 -1
- package/dist/default/presets/video/minimal-skin.css +2 -31
- package/dist/default/presets/video/minimal-skin.js +2 -6
- package/dist/default/presets/video/minimal-skin.js.map +1 -1
- package/dist/default/presets/video/minimal-skin.tailwind.js +2 -6
- package/dist/default/presets/video/minimal-skin.tailwind.js.map +1 -1
- package/dist/default/presets/video/skin.css +2 -33
- package/dist/default/presets/video/skin.js +2 -6
- package/dist/default/presets/video/skin.js.map +1 -1
- package/dist/default/presets/video/skin.tailwind.js +2 -6
- package/dist/default/presets/video/skin.tailwind.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/button.js +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/button.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/menu.js +2 -2
- package/dist/default/skins/dist/default/default/tailwind/components/menu.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/poster.js +1 -7
- package/dist/default/skins/dist/default/default/tailwind/components/poster.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js +1 -10
- package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/button.js +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/button.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/menu.js +2 -2
- package/dist/default/skins/dist/default/minimal/tailwind/components/menu.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js +1 -7
- package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js +1 -10
- package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
- package/dist/default/ui/thumbnail/thumbnail.js +18 -1
- package/dist/default/ui/thumbnail/thumbnail.js.map +1 -1
- package/dist/default/ui/title/index.js +2 -0
- package/dist/default/ui/title/title.js +44 -0
- package/dist/default/ui/title/title.js.map +1 -0
- package/dist/dev/index.d.ts +3 -2
- package/dist/dev/index.js +2 -1
- package/dist/dev/media/shaka-video/index.d.ts +2 -0
- package/dist/dev/media/shaka-video/index.js +2 -0
- package/dist/dev/media/shaka-video/media.d.ts +13 -0
- package/dist/dev/media/shaka-video/media.d.ts.map +1 -0
- package/dist/dev/media/shaka-video/media.js +21 -0
- package/dist/dev/media/shaka-video/media.js.map +1 -0
- package/dist/dev/presets/audio/minimal-skin.css +1 -3
- package/dist/dev/presets/audio/skin.css +1 -3
- package/dist/dev/presets/live-audio/minimal-skin.css +1 -3
- package/dist/dev/presets/live-audio/skin.css +1 -3
- package/dist/dev/presets/live-video/minimal-skin.css +2 -31
- package/dist/dev/presets/live-video/minimal-skin.js +2 -6
- package/dist/dev/presets/live-video/minimal-skin.js.map +1 -1
- package/dist/dev/presets/live-video/minimal-skin.tailwind.js +2 -6
- package/dist/dev/presets/live-video/minimal-skin.tailwind.js.map +1 -1
- package/dist/dev/presets/live-video/skin.css +2 -33
- package/dist/dev/presets/live-video/skin.js +2 -6
- package/dist/dev/presets/live-video/skin.js.map +1 -1
- package/dist/dev/presets/live-video/skin.tailwind.js +2 -6
- package/dist/dev/presets/live-video/skin.tailwind.js.map +1 -1
- package/dist/dev/presets/types.d.ts +0 -2
- package/dist/dev/presets/types.d.ts.map +1 -1
- package/dist/dev/presets/video/minimal-skin.css +2 -31
- package/dist/dev/presets/video/minimal-skin.js +2 -6
- package/dist/dev/presets/video/minimal-skin.js.map +1 -1
- package/dist/dev/presets/video/minimal-skin.tailwind.js +2 -6
- package/dist/dev/presets/video/minimal-skin.tailwind.js.map +1 -1
- package/dist/dev/presets/video/skin.css +2 -33
- package/dist/dev/presets/video/skin.js +2 -6
- package/dist/dev/presets/video/skin.js.map +1 -1
- package/dist/dev/presets/video/skin.tailwind.js +2 -6
- package/dist/dev/presets/video/skin.tailwind.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/button.js +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/button.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/menu.js +2 -2
- package/dist/dev/skins/dist/default/default/tailwind/components/menu.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/poster.js +1 -7
- package/dist/dev/skins/dist/default/default/tailwind/components/poster.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js +1 -10
- package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/button.js +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/button.js.map +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/menu.js +2 -2
- package/dist/dev/skins/dist/default/minimal/tailwind/components/menu.js.map +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/poster.js +1 -7
- package/dist/dev/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js +1 -10
- package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
- package/dist/dev/ui/thumbnail/thumbnail.d.ts.map +1 -1
- package/dist/dev/ui/thumbnail/thumbnail.js +18 -1
- package/dist/dev/ui/thumbnail/thumbnail.js.map +1 -1
- package/dist/dev/ui/title/index.d.ts +2 -0
- package/dist/dev/ui/title/index.js +2 -0
- package/dist/dev/ui/title/title.d.ts +27 -0
- package/dist/dev/ui/title/title.d.ts.map +1 -0
- package/dist/dev/ui/title/title.js +47 -0
- package/dist/dev/ui/title/title.js.map +1 -0
- package/docs/README.md +1 -1
- package/docs/concepts/presets.md +4 -4
- package/docs/concepts/skins.md +8 -48
- package/docs/how-to/add-a-poster-placeholder.md +133 -0
- package/docs/how-to/customize-skins.md +10 -92
- package/docs/how-to/migrate-from-mux-player.md +14 -8
- package/docs/llms.txt +3 -0
- package/docs/reference/feature-fullscreen.md +9 -8
- package/docs/reference/feature-metadata.md +129 -0
- package/docs/reference/feature-orientation-lock.md +94 -8
- package/docs/reference/feature-text-tracks.md +10 -0
- package/docs/reference/menu.md +0 -1
- package/docs/reference/thumbnail.md +4 -0
- package/docs/reference/title.md +208 -0
- package/package.json +8 -8
|
@@ -34,20 +34,11 @@ const container = (isShadowDOM) => cn(container$1, "group/skin", "bg-black overf
|
|
|
34
34
|
"[&_video::-webkit-media-text-track-container]:scale-98",
|
|
35
35
|
"[&_video::-webkit-media-text-track-container]:z-1",
|
|
36
36
|
"[&_video::-webkit-media-text-track-container]:font-[inherit]"
|
|
37
|
-
] : [], !isShadowDOM ? [
|
|
38
|
-
"before:absolute before:inset-0 before:pointer-events-none",
|
|
39
|
-
"before:[background-image:var(--media-poster-placeholder,none)]",
|
|
40
|
-
"before:bg-no-repeat",
|
|
41
|
-
"before:[background-position:var(--media-object-position,center)]",
|
|
42
|
-
"before:[background-size:var(--media-object-fit,contain)]",
|
|
43
|
-
"before:opacity-0 before:[filter:blur(var(--media-poster-placeholder-blur,20px))]",
|
|
44
|
-
"before:transition-opacity before:duration-250",
|
|
45
|
-
"has-[img[data-visible]:not([data-loaded])]:before:opacity-100"
|
|
46
37
|
] : [], "[&:fullscreen]:[--container-border-radius:0]", {
|
|
47
38
|
"[&:fullscreen_video]:object-contain": !isShadowDOM,
|
|
48
39
|
"[&:fullscreen_::slotted(video)]:object-contain": isShadowDOM
|
|
49
40
|
});
|
|
50
|
-
const controls = cn(controls$1, "absolute bottom-1 inset-x-1", "[--base-side-offset:5] [--base-boundary-offset:1]", "[--volume-mask:linear-gradient(to_right,transparent_10%,black_25%,black_100%)]", "gap-x-2 flex-wrap rounded-[--spacing(3)] group/controls", "text-white z-20", "peer-data-open/error:hidden", "ease-(--controls-transition-timing-function)", "duration-[calc(var(--controls-transition-duration)/2)]", "not-data-visible:duration-(--controls-transition-duration)", "pointer-fine:
|
|
41
|
+
const controls = cn(controls$1, "absolute bottom-1 inset-x-1", "[--base-side-offset:5] [--base-boundary-offset:1]", "[--volume-mask:linear-gradient(to_right,transparent_10%,black_25%,black_100%)]", "gap-x-2 flex-wrap rounded-[--spacing(3)] group/controls", "text-white z-20", "peer-data-open/error:hidden", "ease-(--controls-transition-timing-function)", "duration-[calc(var(--controls-transition-duration)/2)]", "not-data-visible:duration-(--controls-transition-duration)", "pointer-fine:transition-[translate,filter,opacity]", "pointer-coarse:transition-[translate,opacity]", "not-data-visible:opacity-0 not-data-visible:pointer-events-none", "motion-safe:not-data-visible:translate-y-full", "pointer-fine:motion-safe:not-data-visible:blur-sm", "@2xl/media-root:flex-nowrap @2xl/media-root:[--controls-padding:2] @2xl/media-root:[--base-side-offset:2]");
|
|
51
42
|
const volumeMaskTarget = cn("[mask-image:var(--volume-mask-image,none)]", "[mask-repeat:no-repeat]", "[mask-position:var(--volume-mask-position,100%_0)]", "[mask-size:var(--volume-mask-size,200%_100%)]", "[transition:mask-position_50ms_ease-out]");
|
|
52
43
|
const buttonGroupStart = cn(buttonGroup, "flex-1 @2xl/media-root:flex-none");
|
|
53
44
|
const buttonGroupEnd = cn(buttonGroup, volumeMaskTarget, "flex-1 justify-end @2xl/media-root:flex-none", "group-has-[[data-volume-level][aria-expanded=true]]/controls:@max-2xl/media-root:[--volume-mask-image:var(--volume-mask)]", "group-has-[[data-volume-level][aria-expanded=true]]/controls:@max-2xl/media-root:[--volume-mask-position:0_0]", "group-has-[[data-volume-level][aria-expanded=true]]/controls:@max-2xl/media-root:[--volume-mask-size:400%_100%]");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"video.tailwind.js","names":[],"sources":["../../../../../../../../skins/dist/default/minimal/tailwind/video.tailwind.js"],"sourcesContent":["import { container as container$1 } from \"./components/container.js\";\nimport { controls as controls$1 } from \"./components/controls.js\";\nimport { error as error$1 } from \"./components/error.js\";\nimport { popup as popup$1 } from \"./components/popup.js\";\nimport { slider as slider$1 } from \"./components/slider.js\";\nimport { iconState } from \"../../shared/tailwind/icon-state.js\";\nimport { badge } from \"./components/badge.js\";\nimport { bufferingIndicator } from \"./components/buffering.js\";\nimport { button } from \"./components/button.js\";\nimport { buttonGroup } from \"./components/button-group.js\";\nimport { icon, iconContainer, iconFlipped, iconHidden } from \"./components/icon.js\";\nimport { menu as menu$1 } from \"./components/menu.js\";\nimport { playbackRate } from \"./components/playback-rate.js\";\nimport { seek } from \"./components/seek.js\";\nimport { time as time$1 } from \"./components/time.js\";\nimport { thumbnail as thumbnail$1 } from \"./components/thumbnail.js\";\nimport { inputIndicatorOverlay } from \"./components/input-indicator-overlay.js\";\nimport { overlay } from \"./components/overlay.js\";\nimport { poster } from \"./components/poster.js\";\nimport { seekIndicator } from \"./components/seek-indicator.js\";\nimport { statusIndicator } from \"./components/status-indicator.js\";\nimport { volumeIndicator } from \"./components/volume-indicator.js\";\nimport { cn } from \"@videojs/utils/style\";\n//#region src/minimal/tailwind/video.tailwind.ts\nconst container = (isShadowDOM) => cn(container$1, \"group/skin\", \"bg-black overflow-clip\", \"after:absolute after:pointer-events-none after:rounded-[inherit] after:z-10\", \"[&:fullscreen]:after:hidden\", \"after:inset-0 after:ring-1 after:ring-inset after:ring-(color:--border-color)\", {\n\t\"[&_::slotted(video)]:block [&_::slotted(video)]:w-full [&_::slotted(video)]:h-full [&_::slotted(video)]:rounded-(--container-border-radius) [&_::slotted(video)]:[object-fit:var(--media-object-fit,cover)] [&_::slotted(video)]:[object-position:var(--media-object-position,center)]\": isShadowDOM,\n\t\"[&_video]:block [&_video]:w-full [&_video]:h-full [&_video]:rounded-[inherit] [&_video]:[object-fit:var(--media-object-fit,contain)] [&_video]:[object-position:var(--media-object-position,center)]\": !isShadowDOM\n}, \"[--default-accent-color:oklch(1_0_0)]\", \"[--border-color:light-dark(oklch(0_0_0/0.15),oklch(1_0_0/0.15))]\", \"[--focus-ring-color:light-dark(oklch(0_0_0),oklch(1_0_0))]\", \"**:[--focus-ring-color:oklch(1_0_0)]\", \"[--container-border-radius:var(--media-border-radius,0.75rem)]\", \"[--media-video-border-radius:var(--container-border-radius)]\", \"[--controls-background-color:transparent]\", \"[--controls-transition-duration:100ms]\", \"[--controls-transition-timing-function:ease-out]\", \"[--error-dialog-transition-duration:150ms]\", \"[--error-dialog-transition-delay:100ms]\", \"[--error-dialog-transition-timing-function:ease-out]\", \"[--popup-transition-duration:100ms]\", \"[--popup-transition-timing-function:ease-out]\", \"[--popover-backdrop-filter:blur(16px)_saturate(1.5)]\", \"[--popover-background-color:oklch(0_0_0/0.5)]\", \"[--popover-border-color:oklch(1_0_0/0.1)]\", \"[--tooltip-backdrop-filter:var(--popover-backdrop-filter)]\", \"[--tooltip-background-color:var(--popover-background-color)]\", \"[--tooltip-border-color:var(--popover-border-color)]\", \"[--tooltip-text-color:currentColor]\", \"min-[1280px]:[&:fullscreen]:[--scale:1.25]\", \"min-[1536px]:[&:fullscreen]:[--scale:1.5]\", \"min-[1920px]:[&:fullscreen]:[--scale:1.75]\", \"motion-reduce:[--error-dialog-transition-duration:50ms]\", \"motion-reduce:[--error-dialog-transition-delay:0ms]\", \"motion-reduce:[--popup-transition-duration:0ms]\", \"[@media(prefers-reduced-transparency:reduce)]:[--controls-background-color:oklch(0_0_0)]\", \"contrast-more:[--controls-background-color:oklch(0_0_0)]\", \"[@media(prefers-reduced-transparency:reduce)]:[--tooltip-background-color:oklch(0_0_0)]\", \"contrast-more:[--tooltip-background-color:oklch(0_0_0)]\", \"pointer-fine:has-[[data-controls]:not([data-visible])]:[--controls-transition-duration:300ms]\", \"pointer-coarse:has-[[data-controls]:not([data-visible])]:[--controls-transition-duration:150ms]\", \"motion-reduce:has-[[data-controls]:not([data-visible])]:[--controls-transition-duration:50ms]\", \"[--media-caption-track-y:--spacing(-2)]\", \"[--media-caption-track-delay:25ms]\", \"[--media-caption-track-duration:var(--controls-transition-duration)]\", \"has-[[data-controls][data-visible]]:[--media-caption-track-y:--spacing(-18)]\", \"@2xl/media-root:has-[[data-controls][data-visible]]:*:[--media-caption-track-y:--spacing(-12)]\", !isShadowDOM ? [\n\t\"[&_video::-webkit-media-text-track-container]:transition-[translate]\",\n\t\"[&_video::-webkit-media-text-track-container]:duration-(--media-caption-track-duration)\",\n\t\"[&_video::-webkit-media-text-track-container]:ease-out\",\n\t\"[&_video::-webkit-media-text-track-container]:delay-(--media-caption-track-delay)\",\n\t\"[&_video::-webkit-media-text-track-container]:translate-y-(--media-caption-track-y)\",\n\t\"[&_video::-webkit-media-text-track-container]:scale-98\",\n\t\"[&_video::-webkit-media-text-track-container]:z-1\",\n\t\"[&_video::-webkit-media-text-track-container]:font-[inherit]\"\n] : [], !isShadowDOM ? [\n\t\"before:absolute before:inset-0 before:pointer-events-none\",\n\t\"before:[background-image:var(--media-poster-placeholder,none)]\",\n\t\"before:bg-no-repeat\",\n\t\"before:[background-position:var(--media-object-position,center)]\",\n\t\"before:[background-size:var(--media-object-fit,contain)]\",\n\t\"before:opacity-0 before:[filter:blur(var(--media-poster-placeholder-blur,20px))]\",\n\t\"before:transition-opacity before:duration-250\",\n\t\"has-[img[data-visible]:not([data-loaded])]:before:opacity-100\"\n] : [], \"[&:fullscreen]:[--container-border-radius:0]\", {\n\t\"[&:fullscreen_video]:object-contain\": !isShadowDOM,\n\t\"[&:fullscreen_::slotted(video)]:object-contain\": isShadowDOM\n});\nconst controls = cn(controls$1, \"absolute bottom-1 inset-x-1\", \"[--base-side-offset:5] [--base-boundary-offset:1]\", \"[--volume-mask:linear-gradient(to_right,transparent_10%,black_25%,black_100%)]\", \"gap-x-2 flex-wrap rounded-[--spacing(3)] group/controls\", \"text-white z-20\", \"peer-data-open/error:hidden\", \"ease-(--controls-transition-timing-function)\", \"duration-[calc(var(--controls-transition-duration)/2)]\", \"not-data-visible:duration-(--controls-transition-duration)\", \"pointer-fine:will-change-[translate,filter,opacity]\", \"pointer-fine:transition-[translate,filter,opacity]\", \"pointer-coarse:will-change-[translate,opacity]\", \"pointer-coarse:transition-[translate,opacity]\", \"not-data-visible:opacity-0 not-data-visible:pointer-events-none\", \"motion-safe:not-data-visible:translate-y-full\", \"pointer-fine:motion-safe:not-data-visible:blur-sm\", \"@2xl/media-root:flex-nowrap @2xl/media-root:[--controls-padding:2] @2xl/media-root:[--base-side-offset:2]\");\nconst volumeMaskTarget = cn(\"[mask-image:var(--volume-mask-image,none)]\", \"[mask-repeat:no-repeat]\", \"[mask-position:var(--volume-mask-position,100%_0)]\", \"[mask-size:var(--volume-mask-size,200%_100%)]\", \"[transition:mask-position_50ms_ease-out]\");\nconst buttonGroupStart = cn(buttonGroup, \"flex-1 @2xl/media-root:flex-none\");\nconst buttonGroupEnd = cn(buttonGroup, volumeMaskTarget, \"flex-1 justify-end @2xl/media-root:flex-none\", \"group-has-[[data-volume-level][aria-expanded=true]]/controls:@max-2xl/media-root:[--volume-mask-image:var(--volume-mask)]\", \"group-has-[[data-volume-level][aria-expanded=true]]/controls:@max-2xl/media-root:[--volume-mask-position:0_0]\", \"group-has-[[data-volume-level][aria-expanded=true]]/controls:@max-2xl/media-root:[--volume-mask-size:400%_100%]\");\nconst spacer = \"grow\";\nconst time = {\n\t...time$1,\n\tcontrols: cn(time$1.controls, volumeMaskTarget, \"[--slider-height:--spacing(5)] grow-0 shrink-0 basis-full order-[-1] px-1.5\", \"@2xl/media-root:[--slider-height:--spacing(8)] @2xl/media-root:grow @2xl/media-root:shrink @2xl/media-root:basis-0 @2xl/media-root:order-[unset]\", \"group-has-[[data-volume-level][aria-expanded=true]]/controls:@2xl/media-root:[--volume-mask-image:var(--volume-mask)]\", \"group-has-[[data-volume-level][aria-expanded=true]]/controls:@2xl/media-root:[--volume-mask-position:0_0]\")\n};\nconst error = {\n\t...error$1,\n\troot: cn(error$1.root, \"pointer-events-none outline-none\"),\n\tdialog: cn(error$1.dialog, \"pointer-events-auto w-full max-w-64 p-4 rounded-none\"),\n\tcontent: cn(error$1.content, \"p-0 py-1.5\"),\n\ttitle: \"text-(length:--font-size-medium)\"\n};\nconst thumbnail = thumbnail$1;\nconst slider = {\n\t...slider$1,\n\ttrack: cn(slider$1.track, \"ring-1 ring-black/5\"),\n\tpreview: cn(slider$1.preview, \"[--preview-end-inset:calc(100cqi-100%)]\", \"[--preview-left:clamp(calc(var(--max-size)/2),var(--media-slider-pointer),calc(100%-var(--max-size)/2+var(--preview-end-inset)))]\", \"@2xl/media-root:[--preview-left:var(--media-slider-pointer)]\")\n};\nconst popup = {\n\t...popup$1,\n\tvolume: cn(popup$1.popover, \"p-0 bg-transparent\", \"@max-2xl/media-root:[--media-popover-side-offset:--spacing(3)]\")\n};\nconst menu = {\n\t...menu$1,\n\troot: menu$1.root,\n\tsettings: menu$1.settings\n};\n//#endregion\nexport { badge, bufferingIndicator, button, buttonGroup, buttonGroupEnd, buttonGroupStart, container, controls, error, icon, iconContainer, iconFlipped, iconHidden, iconState, inputIndicatorOverlay, menu, overlay, playbackRate, popup, poster, seek, seekIndicator, slider, spacer, statusIndicator, thumbnail, time, volumeIndicator };\n\n//# sourceMappingURL=video.tailwind.js.map"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAwBA,MAAM,aAAa,gBAAgB,GAAG,aAAa,cAAc,0BAA0B,+EAA+E,+BAA+B,iFAAiF;CACzR,0RAA0R;CAC1R,wMAAwM,CAAC;AAC1M,GAAG,yCAAyC,oEAAoE,8DAA8D,wCAAwC,kEAAkE,gEAAgE,6CAA6C,0CAA0C,oDAAoD,8CAA8C,2CAA2C,wDAAwD,uCAAuC,iDAAiD,wDAAwD,iDAAiD,6CAA6C,8DAA8D,gEAAgE,wDAAwD,uCAAuC,8CAA8C,6CAA6C,8CAA8C,2DAA2D,uDAAuD,mDAAmD,4FAA4F,4DAA4D,2FAA2F,2DAA2D,iGAAiG,mGAAmG,iGAAiG,2CAA2C,sCAAsC,wEAAwE,gFAAgF,kGAAkG,CAAC,cAAc;CACzxE;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD,IAAI,CAAC,GAAG,CAAC,cAAc;CACtB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD,IAAI,CAAC,GAAG,gDAAgD;CACvD,uCAAuC,CAAC;CACxC,kDAAkD;AACnD,CAAC;AACD,MAAM,WAAW,GAAG,YAAY,+BAA+B,qDAAqD,kFAAkF,2DAA2D,mBAAmB,+BAA+B,gDAAgD,0DAA0D,8DAA8D,uDAAuD,sDAAsD,kDAAkD,iDAAiD,mEAAmE,iDAAiD,qDAAqD,2GAA2G;AAC/7B,MAAM,mBAAmB,GAAG,8CAA8C,2BAA2B,sDAAsD,iDAAiD,0CAA0C;AACtP,MAAM,mBAAmB,GAAG,aAAa,kCAAkC;AAC3E,MAAM,iBAAiB,GAAG,aAAa,kBAAkB,gDAAgD,6HAA6H,iHAAiH,iHAAiH;AACxc,MAAM,SAAS;AACf,MAAM,OAAO;CACZ,GAAG;CACH,UAAU,GAAG,OAAO,UAAU,kBAAkB,+EAA+E,oJAAoJ,yHAAyH,2GAA2G;AACxf;AACA,MAAM,QAAQ;CACb,GAAG;CACH,MAAM,GAAG,QAAQ,MAAM,kCAAkC;CACzD,QAAQ,GAAG,QAAQ,QAAQ,sDAAsD;CACjF,SAAS,GAAG,QAAQ,SAAS,YAAY;CACzC,OAAO;AACR;AACA,MAAM,YAAY;AAClB,MAAM,SAAS;CACd,GAAG;CACH,OAAO,GAAG,SAAS,OAAO,qBAAqB;CAC/C,SAAS,GAAG,SAAS,SAAS,2CAA2C,qIAAqI,8DAA8D;AAC7Q;AACA,MAAM,QAAQ;CACb,GAAG;CACH,QAAQ,GAAG,QAAQ,SAAS,sBAAsB,gEAAgE;AACnH;AACA,MAAM,OAAO;CACZ,GAAG;CACH,MAAM,OAAO;CACb,UAAU,OAAO;AAClB"}
|
|
1
|
+
{"version":3,"file":"video.tailwind.js","names":[],"sources":["../../../../../../../../skins/dist/default/minimal/tailwind/video.tailwind.js"],"sourcesContent":["import { container as container$1 } from \"./components/container.js\";\nimport { controls as controls$1 } from \"./components/controls.js\";\nimport { error as error$1 } from \"./components/error.js\";\nimport { popup as popup$1 } from \"./components/popup.js\";\nimport { slider as slider$1 } from \"./components/slider.js\";\nimport { iconState } from \"../../shared/tailwind/icon-state.js\";\nimport { badge } from \"./components/badge.js\";\nimport { bufferingIndicator } from \"./components/buffering.js\";\nimport { button } from \"./components/button.js\";\nimport { buttonGroup } from \"./components/button-group.js\";\nimport { icon, iconContainer, iconFlipped, iconHidden } from \"./components/icon.js\";\nimport { menu as menu$1 } from \"./components/menu.js\";\nimport { playbackRate } from \"./components/playback-rate.js\";\nimport { seek } from \"./components/seek.js\";\nimport { time as time$1 } from \"./components/time.js\";\nimport { thumbnail as thumbnail$1 } from \"./components/thumbnail.js\";\nimport { inputIndicatorOverlay } from \"./components/input-indicator-overlay.js\";\nimport { overlay } from \"./components/overlay.js\";\nimport { poster } from \"./components/poster.js\";\nimport { seekIndicator } from \"./components/seek-indicator.js\";\nimport { statusIndicator } from \"./components/status-indicator.js\";\nimport { volumeIndicator } from \"./components/volume-indicator.js\";\nimport { cn } from \"@videojs/utils/style\";\n//#region src/minimal/tailwind/video.tailwind.ts\nconst container = (isShadowDOM) => cn(container$1, \"group/skin\", \"bg-black overflow-clip\", \"after:absolute after:pointer-events-none after:rounded-[inherit] after:z-10\", \"[&:fullscreen]:after:hidden\", \"after:inset-0 after:ring-1 after:ring-inset after:ring-(color:--border-color)\", {\n\t\"[&_::slotted(video)]:block [&_::slotted(video)]:w-full [&_::slotted(video)]:h-full [&_::slotted(video)]:rounded-(--container-border-radius) [&_::slotted(video)]:[object-fit:var(--media-object-fit,cover)] [&_::slotted(video)]:[object-position:var(--media-object-position,center)]\": isShadowDOM,\n\t\"[&_video]:block [&_video]:w-full [&_video]:h-full [&_video]:rounded-[inherit] [&_video]:[object-fit:var(--media-object-fit,contain)] [&_video]:[object-position:var(--media-object-position,center)]\": !isShadowDOM\n}, \"[--default-accent-color:oklch(1_0_0)]\", \"[--border-color:light-dark(oklch(0_0_0/0.15),oklch(1_0_0/0.15))]\", \"[--focus-ring-color:light-dark(oklch(0_0_0),oklch(1_0_0))]\", \"**:[--focus-ring-color:oklch(1_0_0)]\", \"[--container-border-radius:var(--media-border-radius,0.75rem)]\", \"[--media-video-border-radius:var(--container-border-radius)]\", \"[--controls-background-color:transparent]\", \"[--controls-transition-duration:100ms]\", \"[--controls-transition-timing-function:ease-out]\", \"[--error-dialog-transition-duration:150ms]\", \"[--error-dialog-transition-delay:100ms]\", \"[--error-dialog-transition-timing-function:ease-out]\", \"[--popup-transition-duration:100ms]\", \"[--popup-transition-timing-function:ease-out]\", \"[--popover-backdrop-filter:blur(16px)_saturate(1.5)]\", \"[--popover-background-color:oklch(0_0_0/0.5)]\", \"[--popover-border-color:oklch(1_0_0/0.1)]\", \"[--tooltip-backdrop-filter:var(--popover-backdrop-filter)]\", \"[--tooltip-background-color:var(--popover-background-color)]\", \"[--tooltip-border-color:var(--popover-border-color)]\", \"[--tooltip-text-color:currentColor]\", \"min-[1280px]:[&:fullscreen]:[--scale:1.25]\", \"min-[1536px]:[&:fullscreen]:[--scale:1.5]\", \"min-[1920px]:[&:fullscreen]:[--scale:1.75]\", \"motion-reduce:[--error-dialog-transition-duration:50ms]\", \"motion-reduce:[--error-dialog-transition-delay:0ms]\", \"motion-reduce:[--popup-transition-duration:0ms]\", \"[@media(prefers-reduced-transparency:reduce)]:[--controls-background-color:oklch(0_0_0)]\", \"contrast-more:[--controls-background-color:oklch(0_0_0)]\", \"[@media(prefers-reduced-transparency:reduce)]:[--tooltip-background-color:oklch(0_0_0)]\", \"contrast-more:[--tooltip-background-color:oklch(0_0_0)]\", \"pointer-fine:has-[[data-controls]:not([data-visible])]:[--controls-transition-duration:300ms]\", \"pointer-coarse:has-[[data-controls]:not([data-visible])]:[--controls-transition-duration:150ms]\", \"motion-reduce:has-[[data-controls]:not([data-visible])]:[--controls-transition-duration:50ms]\", \"[--media-caption-track-y:--spacing(-2)]\", \"[--media-caption-track-delay:25ms]\", \"[--media-caption-track-duration:var(--controls-transition-duration)]\", \"has-[[data-controls][data-visible]]:[--media-caption-track-y:--spacing(-18)]\", \"@2xl/media-root:has-[[data-controls][data-visible]]:*:[--media-caption-track-y:--spacing(-12)]\", !isShadowDOM ? [\n\t\"[&_video::-webkit-media-text-track-container]:transition-[translate]\",\n\t\"[&_video::-webkit-media-text-track-container]:duration-(--media-caption-track-duration)\",\n\t\"[&_video::-webkit-media-text-track-container]:ease-out\",\n\t\"[&_video::-webkit-media-text-track-container]:delay-(--media-caption-track-delay)\",\n\t\"[&_video::-webkit-media-text-track-container]:translate-y-(--media-caption-track-y)\",\n\t\"[&_video::-webkit-media-text-track-container]:scale-98\",\n\t\"[&_video::-webkit-media-text-track-container]:z-1\",\n\t\"[&_video::-webkit-media-text-track-container]:font-[inherit]\"\n] : [], \"[&:fullscreen]:[--container-border-radius:0]\", {\n\t\"[&:fullscreen_video]:object-contain\": !isShadowDOM,\n\t\"[&:fullscreen_::slotted(video)]:object-contain\": isShadowDOM\n});\nconst controls = cn(controls$1, \"absolute bottom-1 inset-x-1\", \"[--base-side-offset:5] [--base-boundary-offset:1]\", \"[--volume-mask:linear-gradient(to_right,transparent_10%,black_25%,black_100%)]\", \"gap-x-2 flex-wrap rounded-[--spacing(3)] group/controls\", \"text-white z-20\", \"peer-data-open/error:hidden\", \"ease-(--controls-transition-timing-function)\", \"duration-[calc(var(--controls-transition-duration)/2)]\", \"not-data-visible:duration-(--controls-transition-duration)\", \"pointer-fine:transition-[translate,filter,opacity]\", \"pointer-coarse:transition-[translate,opacity]\", \"not-data-visible:opacity-0 not-data-visible:pointer-events-none\", \"motion-safe:not-data-visible:translate-y-full\", \"pointer-fine:motion-safe:not-data-visible:blur-sm\", \"@2xl/media-root:flex-nowrap @2xl/media-root:[--controls-padding:2] @2xl/media-root:[--base-side-offset:2]\");\nconst volumeMaskTarget = cn(\"[mask-image:var(--volume-mask-image,none)]\", \"[mask-repeat:no-repeat]\", \"[mask-position:var(--volume-mask-position,100%_0)]\", \"[mask-size:var(--volume-mask-size,200%_100%)]\", \"[transition:mask-position_50ms_ease-out]\");\nconst buttonGroupStart = cn(buttonGroup, \"flex-1 @2xl/media-root:flex-none\");\nconst buttonGroupEnd = cn(buttonGroup, volumeMaskTarget, \"flex-1 justify-end @2xl/media-root:flex-none\", \"group-has-[[data-volume-level][aria-expanded=true]]/controls:@max-2xl/media-root:[--volume-mask-image:var(--volume-mask)]\", \"group-has-[[data-volume-level][aria-expanded=true]]/controls:@max-2xl/media-root:[--volume-mask-position:0_0]\", \"group-has-[[data-volume-level][aria-expanded=true]]/controls:@max-2xl/media-root:[--volume-mask-size:400%_100%]\");\nconst spacer = \"grow\";\nconst time = {\n\t...time$1,\n\tcontrols: cn(time$1.controls, volumeMaskTarget, \"[--slider-height:--spacing(5)] grow-0 shrink-0 basis-full order-[-1] px-1.5\", \"@2xl/media-root:[--slider-height:--spacing(8)] @2xl/media-root:grow @2xl/media-root:shrink @2xl/media-root:basis-0 @2xl/media-root:order-[unset]\", \"group-has-[[data-volume-level][aria-expanded=true]]/controls:@2xl/media-root:[--volume-mask-image:var(--volume-mask)]\", \"group-has-[[data-volume-level][aria-expanded=true]]/controls:@2xl/media-root:[--volume-mask-position:0_0]\")\n};\nconst error = {\n\t...error$1,\n\troot: cn(error$1.root, \"pointer-events-none outline-none\"),\n\tdialog: cn(error$1.dialog, \"pointer-events-auto w-full max-w-64 p-4 rounded-none\"),\n\tcontent: cn(error$1.content, \"p-0 py-1.5\"),\n\ttitle: \"text-(length:--font-size-medium)\"\n};\nconst thumbnail = thumbnail$1;\nconst slider = {\n\t...slider$1,\n\ttrack: cn(slider$1.track, \"ring-1 ring-black/5\"),\n\tpreview: cn(slider$1.preview, \"[--preview-end-inset:calc(100cqi-100%)]\", \"[--preview-left:clamp(calc(var(--max-size)/2),var(--media-slider-pointer),calc(100%-var(--max-size)/2+var(--preview-end-inset)))]\", \"@2xl/media-root:[--preview-left:var(--media-slider-pointer)]\")\n};\nconst popup = {\n\t...popup$1,\n\tvolume: cn(popup$1.popover, \"p-0 bg-transparent\", \"@max-2xl/media-root:[--media-popover-side-offset:--spacing(3)]\")\n};\nconst menu = {\n\t...menu$1,\n\troot: menu$1.root,\n\tsettings: menu$1.settings\n};\n//#endregion\nexport { badge, bufferingIndicator, button, buttonGroup, buttonGroupEnd, buttonGroupStart, container, controls, error, icon, iconContainer, iconFlipped, iconHidden, iconState, inputIndicatorOverlay, menu, overlay, playbackRate, popup, poster, seek, seekIndicator, slider, spacer, statusIndicator, thumbnail, time, volumeIndicator };\n\n//# sourceMappingURL=video.tailwind.js.map"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAwBA,MAAM,aAAa,gBAAgB,GAAG,aAAa,cAAc,0BAA0B,+EAA+E,+BAA+B,iFAAiF;CACzR,0RAA0R;CAC1R,wMAAwM,CAAC;AAC1M,GAAG,yCAAyC,oEAAoE,8DAA8D,wCAAwC,kEAAkE,gEAAgE,6CAA6C,0CAA0C,oDAAoD,8CAA8C,2CAA2C,wDAAwD,uCAAuC,iDAAiD,wDAAwD,iDAAiD,6CAA6C,8DAA8D,gEAAgE,wDAAwD,uCAAuC,8CAA8C,6CAA6C,8CAA8C,2DAA2D,uDAAuD,mDAAmD,4FAA4F,4DAA4D,2FAA2F,2DAA2D,iGAAiG,mGAAmG,iGAAiG,2CAA2C,sCAAsC,wEAAwE,gFAAgF,kGAAkG,CAAC,cAAc;CACzxE;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD,IAAI,CAAC,GAAG,gDAAgD;CACvD,uCAAuC,CAAC;CACxC,kDAAkD;AACnD,CAAC;AACD,MAAM,WAAW,GAAG,YAAY,+BAA+B,qDAAqD,kFAAkF,2DAA2D,mBAAmB,+BAA+B,gDAAgD,0DAA0D,8DAA8D,sDAAsD,iDAAiD,mEAAmE,iDAAiD,qDAAqD,2GAA2G;AACt1B,MAAM,mBAAmB,GAAG,8CAA8C,2BAA2B,sDAAsD,iDAAiD,0CAA0C;AACtP,MAAM,mBAAmB,GAAG,aAAa,kCAAkC;AAC3E,MAAM,iBAAiB,GAAG,aAAa,kBAAkB,gDAAgD,6HAA6H,iHAAiH,iHAAiH;AACxc,MAAM,SAAS;AACf,MAAM,OAAO;CACZ,GAAG;CACH,UAAU,GAAG,OAAO,UAAU,kBAAkB,+EAA+E,oJAAoJ,yHAAyH,2GAA2G;AACxf;AACA,MAAM,QAAQ;CACb,GAAG;CACH,MAAM,GAAG,QAAQ,MAAM,kCAAkC;CACzD,QAAQ,GAAG,QAAQ,QAAQ,sDAAsD;CACjF,SAAS,GAAG,QAAQ,SAAS,YAAY;CACzC,OAAO;AACR;AACA,MAAM,YAAY;AAClB,MAAM,SAAS;CACd,GAAG;CACH,OAAO,GAAG,SAAS,OAAO,qBAAqB;CAC/C,SAAS,GAAG,SAAS,SAAS,2CAA2C,qIAAqI,8DAA8D;AAC7Q;AACA,MAAM,QAAQ;CACb,GAAG;CACH,QAAQ,GAAG,QAAQ,SAAS,sBAAsB,gEAAgE;AACnH;AACA,MAAM,OAAO;CACZ,GAAG;CACH,MAAM,OAAO;CACb,UAAU,OAAO;AAClB"}
|
|
@@ -4,8 +4,24 @@ import { renderElement } from "../../utils/use-render.js";
|
|
|
4
4
|
import { createThumbnail, selectTextTrack } from "@videojs/core/dom";
|
|
5
5
|
import { forwardRef, useMemo, useRef, useState } from "react";
|
|
6
6
|
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
import { isNull, isUndefined } from "@videojs/utils/predicate";
|
|
7
8
|
import { ThumbnailCore, ThumbnailDataAttrs, mapCuesToThumbnails } from "@videojs/core";
|
|
8
9
|
//#region src/ui/thumbnail/thumbnail.tsx
|
|
10
|
+
/**
|
|
11
|
+
* Leaving `crossOrigin` unset means "follow the media element", so thumbnails
|
|
12
|
+
* keep working on a CORS-enabled player without a skin having to thread a prop
|
|
13
|
+
* through. `null` opts out and fetches the sprites no-CORS. `''` is passed
|
|
14
|
+
* straight through, since the CORS-settings attribute reads it as Anonymous.
|
|
15
|
+
*
|
|
16
|
+
* Only the `<track>` path inherits: `thumbnails` passed directly may point at a
|
|
17
|
+
* host that has nothing to do with the media element.
|
|
18
|
+
*/
|
|
19
|
+
function resolveCrossOrigin(explicit, external, inherited) {
|
|
20
|
+
if (isNull(explicit)) return void 0;
|
|
21
|
+
if (!isUndefined(explicit)) return explicit;
|
|
22
|
+
if (external?.length) return void 0;
|
|
23
|
+
return inherited ?? void 0;
|
|
24
|
+
}
|
|
9
25
|
const Thumbnail = forwardRef(function Thumbnail(componentProps, forwardedRef) {
|
|
10
26
|
const { render, className, style, time = 0, thumbnails: externalThumbnails, crossOrigin, loading, fetchPriority, ...elementProps } = componentProps;
|
|
11
27
|
const [core] = useState(() => new ThumbnailCore());
|
|
@@ -28,6 +44,7 @@ const Thumbnail = forwardRef(function Thumbnail(componentProps, forwardedRef) {
|
|
|
28
44
|
thumbnails,
|
|
29
45
|
time
|
|
30
46
|
]);
|
|
47
|
+
const resolvedCrossOrigin = resolveCrossOrigin(crossOrigin, externalThumbnails, textTrack?.thumbnailTrackCrossOrigin);
|
|
31
48
|
handle.updateSrc(thumbnail?.url);
|
|
32
49
|
const state = core.getState(handle.loading, handle.error, thumbnail);
|
|
33
50
|
let containerStyle = { overflow: "hidden" };
|
|
@@ -67,7 +84,7 @@ const Thumbnail = forwardRef(function Thumbnail(componentProps, forwardedRef) {
|
|
|
67
84
|
"aria-hidden": "true",
|
|
68
85
|
decoding: "async",
|
|
69
86
|
src: thumbnail?.url,
|
|
70
|
-
crossOrigin:
|
|
87
|
+
crossOrigin: resolvedCrossOrigin,
|
|
71
88
|
loading,
|
|
72
89
|
style: imgStyle,
|
|
73
90
|
fetchPriority
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thumbnail.js","names":[],"sources":["../../../../src/ui/thumbnail/thumbnail.tsx"],"sourcesContent":["import {\n mapCuesToThumbnails,\n ThumbnailCore,\n ThumbnailDataAttrs,\n type ThumbnailFetchPriority,\n type ThumbnailImage,\n} from '@videojs/core';\nimport { createThumbnail, selectTextTrack } from '@videojs/core/dom';\nimport type { CSSProperties } from 'react';\nimport { forwardRef, useMemo, useRef, useState } from 'react';\n\nimport { useOptionalPlayer } from '../../player/context';\nimport type { UIComponentProps } from '../../utils/types';\nimport { useDestroy } from '../../utils/use-destroy';\nimport { renderElement } from '../../utils/use-render';\n\nexport interface ThumbnailProps extends UIComponentProps<'div', ThumbnailCore.State>, ThumbnailCore.Props {\n /** Pre-parsed thumbnail images — bypasses the automatic `<track>` detection. */\n thumbnails?: ThumbnailImage[] | undefined;\n}\n\nexport const Thumbnail = forwardRef<HTMLDivElement, ThumbnailProps>(function Thumbnail(componentProps, forwardedRef) {\n const {\n render,\n className,\n style,\n time = 0,\n thumbnails: externalThumbnails,\n crossOrigin,\n loading,\n fetchPriority,\n ...elementProps\n } = componentProps;\n\n const [core] = useState(() => new ThumbnailCore());\n const divRef = useRef<HTMLDivElement>(null);\n const imgRef = useRef<HTMLImageElement>(null);\n const textTrack = useOptionalPlayer(selectTextTrack);\n\n // Force re-render when the handle's state changes (img load/error, resize).\n const [, setRenderToken] = useState(0);\n\n const [handle] = useState(() =>\n createThumbnail({\n getContainer: () => divRef.current,\n getImg: () => imgRef.current,\n onStateChange: () => setRenderToken((n) => n + 1),\n })\n );\n\n useDestroy(handle, () => handle.connect());\n\n // Resolve thumbnails: external prop takes priority over auto <track> path.\n const thumbnails = useMemo(() => {\n if (externalThumbnails && externalThumbnails.length > 0) return externalThumbnails;\n return textTrack && textTrack.thumbnailCues.length > 0\n ? mapCuesToThumbnails(textTrack.thumbnailCues, textTrack.thumbnailTrackSrc ?? undefined)\n : [];\n }, [externalThumbnails, textTrack]);\n\n const thumbnail = useMemo(() => core.findActiveThumbnail(thumbnails, time), [core, thumbnails, time]);\n\n // Track src changes via the handle.\n handle.updateSrc(thumbnail?.url);\n\n const state = core.getState(handle.loading, handle.error, thumbnail);\n\n // Compute styles declaratively from resize result.\n let containerStyle: CSSProperties = { overflow: 'hidden' };\n let imgStyle: CSSProperties | undefined;\n\n if (thumbnail && handle.naturalWidth && handle.naturalHeight) {\n const constraints = handle.readConstraints();\n const result = core.resize(thumbnail, handle.naturalWidth, handle.naturalHeight, constraints);\n\n if (result) {\n containerStyle = {\n overflow: 'hidden',\n width: result.containerWidth,\n height: result.containerHeight,\n };\n imgStyle = {\n width: result.imageWidth,\n height: result.imageHeight,\n maxWidth: 'none',\n transform:\n result.offsetX || result.offsetY ? `translate(-${result.offsetX}px, -${result.offsetY}px)` : undefined,\n };\n }\n }\n\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n stateAttrMap: ThumbnailDataAttrs,\n ref: [forwardedRef, divRef],\n props: [\n core.getAttrs(state),\n { style: containerStyle },\n elementProps,\n {\n children: (\n <img\n ref={imgRef}\n alt=\"\"\n aria-hidden=\"true\"\n decoding=\"async\"\n src={thumbnail?.url}\n crossOrigin={
|
|
1
|
+
{"version":3,"file":"thumbnail.js","names":[],"sources":["../../../../src/ui/thumbnail/thumbnail.tsx"],"sourcesContent":["import {\n mapCuesToThumbnails,\n ThumbnailCore,\n ThumbnailDataAttrs,\n type ThumbnailFetchPriority,\n type ThumbnailImage,\n} from '@videojs/core';\nimport { createThumbnail, selectTextTrack } from '@videojs/core/dom';\nimport type { MediaTextTrackState } from '@videojs/media';\nimport { isNull, isUndefined } from '@videojs/utils/predicate';\nimport type { CSSProperties } from 'react';\nimport { forwardRef, useMemo, useRef, useState } from 'react';\n\nimport { useOptionalPlayer } from '../../player/context';\nimport type { UIComponentProps } from '../../utils/types';\nimport { useDestroy } from '../../utils/use-destroy';\nimport { renderElement } from '../../utils/use-render';\n\nexport interface ThumbnailProps extends UIComponentProps<'div', ThumbnailCore.State>, ThumbnailCore.Props {\n /** Pre-parsed thumbnail images — bypasses the automatic `<track>` detection. */\n thumbnails?: ThumbnailImage[] | undefined;\n}\n\n/**\n * Leaving `crossOrigin` unset means \"follow the media element\", so thumbnails\n * keep working on a CORS-enabled player without a skin having to thread a prop\n * through. `null` opts out and fetches the sprites no-CORS. `''` is passed\n * straight through, since the CORS-settings attribute reads it as Anonymous.\n *\n * Only the `<track>` path inherits: `thumbnails` passed directly may point at a\n * host that has nothing to do with the media element.\n */\nfunction resolveCrossOrigin(\n explicit: ThumbnailCore.Props['crossOrigin'],\n external: ThumbnailImage[] | undefined,\n inherited: MediaTextTrackState['thumbnailTrackCrossOrigin'] | undefined\n) {\n if (isNull(explicit)) return undefined;\n if (!isUndefined(explicit)) return explicit;\n if (external?.length) return undefined;\n\n return inherited ?? undefined;\n}\n\nexport const Thumbnail = forwardRef<HTMLDivElement, ThumbnailProps>(function Thumbnail(componentProps, forwardedRef) {\n const {\n render,\n className,\n style,\n time = 0,\n thumbnails: externalThumbnails,\n crossOrigin,\n loading,\n fetchPriority,\n ...elementProps\n } = componentProps;\n\n const [core] = useState(() => new ThumbnailCore());\n const divRef = useRef<HTMLDivElement>(null);\n const imgRef = useRef<HTMLImageElement>(null);\n const textTrack = useOptionalPlayer(selectTextTrack);\n\n // Force re-render when the handle's state changes (img load/error, resize).\n const [, setRenderToken] = useState(0);\n\n const [handle] = useState(() =>\n createThumbnail({\n getContainer: () => divRef.current,\n getImg: () => imgRef.current,\n onStateChange: () => setRenderToken((n) => n + 1),\n })\n );\n\n useDestroy(handle, () => handle.connect());\n\n // Resolve thumbnails: external prop takes priority over auto <track> path.\n const thumbnails = useMemo(() => {\n if (externalThumbnails && externalThumbnails.length > 0) return externalThumbnails;\n return textTrack && textTrack.thumbnailCues.length > 0\n ? mapCuesToThumbnails(textTrack.thumbnailCues, textTrack.thumbnailTrackSrc ?? undefined)\n : [];\n }, [externalThumbnails, textTrack]);\n\n const thumbnail = useMemo(() => core.findActiveThumbnail(thumbnails, time), [core, thumbnails, time]);\n\n const resolvedCrossOrigin = resolveCrossOrigin(crossOrigin, externalThumbnails, textTrack?.thumbnailTrackCrossOrigin);\n\n // Track src changes via the handle.\n handle.updateSrc(thumbnail?.url);\n\n const state = core.getState(handle.loading, handle.error, thumbnail);\n\n // Compute styles declaratively from resize result.\n let containerStyle: CSSProperties = { overflow: 'hidden' };\n let imgStyle: CSSProperties | undefined;\n\n if (thumbnail && handle.naturalWidth && handle.naturalHeight) {\n const constraints = handle.readConstraints();\n const result = core.resize(thumbnail, handle.naturalWidth, handle.naturalHeight, constraints);\n\n if (result) {\n containerStyle = {\n overflow: 'hidden',\n width: result.containerWidth,\n height: result.containerHeight,\n };\n imgStyle = {\n width: result.imageWidth,\n height: result.imageHeight,\n maxWidth: 'none',\n transform:\n result.offsetX || result.offsetY ? `translate(-${result.offsetX}px, -${result.offsetY}px)` : undefined,\n };\n }\n }\n\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n stateAttrMap: ThumbnailDataAttrs,\n ref: [forwardedRef, divRef],\n props: [\n core.getAttrs(state),\n { style: containerStyle },\n elementProps,\n {\n children: (\n <img\n ref={imgRef}\n alt=\"\"\n aria-hidden=\"true\"\n decoding=\"async\"\n src={thumbnail?.url}\n crossOrigin={resolvedCrossOrigin}\n loading={loading}\n style={imgStyle}\n // React's types omit `| undefined` from fetchPriority — cast to satisfy exactOptionalPropertyTypes.\n fetchPriority={fetchPriority as ThumbnailFetchPriority}\n />\n ),\n },\n ],\n }\n );\n});\n\nexport namespace Thumbnail {\n export type Props = ThumbnailProps;\n export type State = ThumbnailCore.State;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAgCA,SAAS,mBACP,UACA,UACA,WACA;CACA,IAAI,OAAO,QAAQ,GAAG,OAAO,KAAA;CAC7B,IAAI,CAAC,YAAY,QAAQ,GAAG,OAAO;CACnC,IAAI,UAAU,QAAQ,OAAO,KAAA;CAE7B,OAAO,aAAa,KAAA;AACtB;AAEA,MAAa,YAAY,WAA2C,SAAS,UAAU,gBAAgB,cAAc;CACnH,MAAM,EACJ,QACA,WACA,OACA,OAAO,GACP,YAAY,oBACZ,aACA,SACA,eACA,GAAG,iBACD;CAEJ,MAAM,CAAC,QAAQ,eAAe,IAAI,cAAc,CAAC;CACjD,MAAM,SAAS,OAAuB,IAAI;CAC1C,MAAM,SAAS,OAAyB,IAAI;CAC5C,MAAM,YAAY,kBAAkB,eAAe;CAGnD,MAAM,GAAG,kBAAkB,SAAS,CAAC;CAErC,MAAM,CAAC,UAAU,eACf,gBAAgB;EACd,oBAAoB,OAAO;EAC3B,cAAc,OAAO;EACrB,qBAAqB,gBAAgB,MAAM,IAAI,CAAC;CAClD,CAAC,CACH;CAEA,WAAW,cAAc,OAAO,QAAQ,CAAC;CAGzC,MAAM,aAAa,cAAc;EAC/B,IAAI,sBAAsB,mBAAmB,SAAS,GAAG,OAAO;EAChE,OAAO,aAAa,UAAU,cAAc,SAAS,IACjD,oBAAoB,UAAU,eAAe,UAAU,qBAAqB,KAAA,CAAS,IACrF,CAAC;CACP,GAAG,CAAC,oBAAoB,SAAS,CAAC;CAElC,MAAM,YAAY,cAAc,KAAK,oBAAoB,YAAY,IAAI,GAAG;EAAC;EAAM;EAAY;CAAI,CAAC;CAEpG,MAAM,sBAAsB,mBAAmB,aAAa,oBAAoB,WAAW,yBAAyB;CAGpH,OAAO,UAAU,WAAW,GAAG;CAE/B,MAAM,QAAQ,KAAK,SAAS,OAAO,SAAS,OAAO,OAAO,SAAS;CAGnE,IAAI,iBAAgC,EAAE,UAAU,SAAS;CACzD,IAAI;CAEJ,IAAI,aAAa,OAAO,gBAAgB,OAAO,eAAe;EAC5D,MAAM,cAAc,OAAO,gBAAgB;EAC3C,MAAM,SAAS,KAAK,OAAO,WAAW,OAAO,cAAc,OAAO,eAAe,WAAW;EAE5F,IAAI,QAAQ;GACV,iBAAiB;IACf,UAAU;IACV,OAAO,OAAO;IACd,QAAQ,OAAO;GACjB;GACA,WAAW;IACT,OAAO,OAAO;IACd,QAAQ,OAAO;IACf,UAAU;IACV,WACE,OAAO,WAAW,OAAO,UAAU,cAAc,OAAO,QAAQ,OAAO,OAAO,QAAQ,OAAO,KAAA;GACjG;EACF;CACF;CAEA,OAAO,cACL,OACA;EAAE;EAAQ;EAAW;CAAM,GAC3B;EACE;EACA,cAAc;EACd,KAAK,CAAC,cAAc,MAAM;EAC1B,OAAO;GACL,KAAK,SAAS,KAAK;GACnB,EAAE,OAAO,eAAe;GACxB;GACA,EACE,UACE,oBAAC,OAAD;IACE,KAAK;IACL,KAAI;IACJ,eAAY;IACZ,UAAS;IACT,KAAK,WAAW;IAChB,aAAa;IACJ;IACT,OAAO;IAEQ;GAChB,CAAA,EAEL;EACF;CACF,CACF;AACF,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { usePlayer } from "../../player/context.js";
|
|
3
|
+
import { renderElement } from "../../utils/use-render.js";
|
|
4
|
+
import { selectMetadata } from "@videojs/core/dom";
|
|
5
|
+
import { forwardRef, useState } from "react";
|
|
6
|
+
import { TitleCore, TitleDataAttrs } from "@videojs/core";
|
|
7
|
+
//#region src/ui/title/title.tsx
|
|
8
|
+
/**
|
|
9
|
+
* Displays the resolved content title.
|
|
10
|
+
*
|
|
11
|
+
* The component owns its text content. Set the title through the player's
|
|
12
|
+
* `title` prop rather than by passing children.
|
|
13
|
+
*
|
|
14
|
+
* Renders nothing when no title resolves.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```tsx
|
|
18
|
+
* <Title />
|
|
19
|
+
*
|
|
20
|
+
* <Title className="title" />
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
const Title = forwardRef(function Title(componentProps, forwardedRef) {
|
|
24
|
+
const { render, className, style, ...elementProps } = componentProps;
|
|
25
|
+
const metadata = usePlayer(selectMetadata);
|
|
26
|
+
const [core] = useState(() => new TitleCore());
|
|
27
|
+
if (!metadata) return null;
|
|
28
|
+
const state = core.getState(metadata);
|
|
29
|
+
if (state.hidden) return null;
|
|
30
|
+
return renderElement("span", {
|
|
31
|
+
render,
|
|
32
|
+
className,
|
|
33
|
+
style
|
|
34
|
+
}, {
|
|
35
|
+
state,
|
|
36
|
+
stateAttrMap: TitleDataAttrs,
|
|
37
|
+
ref: [forwardedRef],
|
|
38
|
+
props: [{ children: state.title }, elementProps]
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
//#endregion
|
|
42
|
+
export { Title };
|
|
43
|
+
|
|
44
|
+
//# sourceMappingURL=title.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"title.js","names":[],"sources":["../../../../src/ui/title/title.tsx"],"sourcesContent":["'use client';\n\nimport { TitleCore, TitleDataAttrs } from '@videojs/core';\nimport { logMissingFeature, selectMetadata } from '@videojs/core/dom';\nimport type { ForwardedRef } from 'react';\nimport { forwardRef, useState } from 'react';\n\nimport { usePlayer } from '../../player/context';\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\n\nexport interface TitleProps extends Omit<UIComponentProps<'span', TitleCore.State>, 'children'> {}\n\n/**\n * Displays the resolved content title.\n *\n * The component owns its text content. Set the title through the player's\n * `title` prop rather than by passing children.\n *\n * Renders nothing when no title resolves.\n *\n * @example\n * ```tsx\n * <Title />\n *\n * <Title className=\"title\" />\n * ```\n */\nexport const Title = forwardRef(function Title(\n componentProps: TitleProps,\n forwardedRef: ForwardedRef<HTMLSpanElement>\n) {\n const { render, className, style, ...elementProps } = componentProps;\n\n const metadata = usePlayer(selectMetadata);\n\n const [core] = useState(() => new TitleCore());\n\n if (!metadata) {\n if (__DEV__) logMissingFeature('Title', 'metadata');\n return null;\n }\n\n const state = core.getState(metadata);\n\n if (state.hidden) return null;\n\n return renderElement(\n 'span',\n { render, className, style },\n {\n state,\n stateAttrMap: TitleDataAttrs,\n ref: [forwardedRef],\n props: [{ children: state.title }, elementProps],\n }\n );\n});\n\nexport namespace Title {\n export type Props = TitleProps;\n export type State = TitleCore.State;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AA4BA,MAAa,QAAQ,WAAW,SAAS,MACvC,gBACA,cACA;CACA,MAAM,EAAE,QAAQ,WAAW,OAAO,GAAG,iBAAiB;CAEtD,MAAM,WAAW,UAAU,cAAc;CAEzC,MAAM,CAAC,QAAQ,eAAe,IAAI,UAAU,CAAC;CAE7C,IAAI,CAAC,UAEH,OAAO;CAGT,MAAM,QAAQ,KAAK,SAAS,QAAQ;CAEpC,IAAI,MAAM,QAAQ,OAAO;CAEzB,OAAO,cACL,QACA;EAAE;EAAQ;EAAW;CAAM,GAC3B;EACE;EACA,cAAc;EACd,KAAK,CAAC,YAAY;EAClB,OAAO,CAAC,EAAE,UAAU,MAAM,MAAM,GAAG,YAAY;CACjD,CACF;AACF,CAAC"}
|
package/dist/dev/index.d.ts
CHANGED
|
@@ -82,6 +82,7 @@ import { TimeSliderChapterTitleProps, TimeSliderChapterTitleState } from "./ui/t
|
|
|
82
82
|
import { TimeSliderChapterState, TimeSliderChaptersProps, TimeSliderChaptersState } from "./ui/time-slider/time-slider-chapters/time-slider-chapters.js";
|
|
83
83
|
import { index_parts_d_exports as index_parts_d_exports$9 } from "./ui/time-slider/index.parts.js";
|
|
84
84
|
import "./ui/time-slider/index.js";
|
|
85
|
+
import { Title, TitleProps } from "./ui/title/title.js";
|
|
85
86
|
import { TooltipContent, TooltipContextValue, useTooltipContext } from "./ui/tooltip/context.js";
|
|
86
87
|
import { index_parts_d_exports as index_parts_d_exports$10 } from "./ui/tooltip/index.parts.js";
|
|
87
88
|
import "./ui/tooltip/index.js";
|
|
@@ -107,10 +108,10 @@ import { IndicatorStatus, InputAction, InputIndicatorLabels } from "@videojs/cor
|
|
|
107
108
|
export * from "@videojs/core/dom";
|
|
108
109
|
export * from "@videojs/media/dom";
|
|
109
110
|
declare namespace index_d_exports {
|
|
110
|
-
export { AirPlayButton, AirPlayButtonProps, index_parts_d_exports as AlertDialog, AlertDialogContextValue, AudioTrackOption, AudioTrackOptionsProps, AudioTrackOptionsResult, AudioTrackRadioGroup, AudioTrackRadioGroupItemProps, AudioTrackRadioGroupItemState, AudioTrackRadioGroupProps, BufferingIndicator, BufferingIndicatorProps, CaptionsButton, CaptionsButtonProps, CaptionsOption, CaptionsOptionsProps, CaptionsOptionsResult, CaptionsRadioGroup, CaptionsRadioGroupItemProps, CaptionsRadioGroupItemState, CaptionsRadioGroupProps, CastButton, CastButtonProps, Comparator, Container, ContainerProps, index_parts_d_exports$1 as Controls, ControlsGroupProps, ControlsRootProps, CreateI18nOptions, CreateI18nResult, CreatePlayerConfig, CreatePlayerResult, index_parts_d_exports$2 as ErrorDialog, ErrorDialogContextValue, FlatTranslations, FullscreenButton, FullscreenButtonProps, Gesture, GestureProps, HTMLProps, Hotkey, HotkeyProps, I18nContext, I18nContextValue, I18nProvider, I18nProviderProps, IndicatorStatus, InputAction, InputIndicatorLabels, LiveButton, LiveButtonProps, Locale, MediaGesture, MediaGestureProps, MediaHotkey, MediaHotkeyProps, index_parts_d_exports$3 as Menu, MenuContextValue, MuteButton, MuteButtonProps, NodeListLike, PiPButton, PiPButtonProps, PlayButton, PlayButtonProps, PlaybackRateButton, PlaybackRateButtonProps, PlaybackRateOption, PlaybackRateOptionsProps, PlaybackRateOptionsResult, PlaybackRateRadioGroup, PlaybackRateRadioGroupItemProps, PlaybackRateRadioGroupItemState, PlaybackRateRadioGroupProps, PlayerContextValue, PlayerProps, index_parts_d_exports$4 as Popover, PopoverContextValue, Poster, PosterProps, QualityOption, QualityOptionsProps, QualityOptionsResult, QualityRadioGroup, QualityRadioGroupItemProps, QualityRadioGroupItemState, QualityRadioGroupProps, RenderFunction, RenderProp, SeekButton, SeekButtonProps, index_parts_d_exports$5 as SeekIndicator, SeekIndicatorRootProps, SeekIndicatorValueProps, Selector, index_parts_d_exports$6 as Slider, SliderBufferProps, SliderFillProps, SliderRootProps, SliderThumbProps, SliderThumbnailProps, SliderTrackProps, SliderValueProps, StatusAnnouncer, StatusAnnouncerProps, index_parts_d_exports$7 as StatusIndicator, StatusIndicatorRootProps, StatusIndicatorValueProps, Text, TextProps, Thumbnail, ThumbnailProps, index_parts_d_exports$8 as Time, index_parts_d_exports$9 as TimeSlider, TimeSliderChapterState, TimeSliderChapterTitleProps, TimeSliderChapterTitleState, TimeSliderChaptersProps, TimeSliderChaptersState, index_parts_d_exports$10 as Tooltip, TooltipContent, TooltipContextValue, TranslationParams, Translations, Translator, UIComponentProps, UseDoubleTapGestureOptions, UseHotkeyOptions, UseTapGestureOptions, index_parts_d_exports$11 as VolumeIndicator, VolumeIndicatorFillProps, VolumeIndicatorRootProps, VolumeIndicatorValueProps, index_parts_d_exports$12 as VolumeSlider, composeRefs, createI18n, createPlayer, createSelector, createTranslator, findLocaleKeys, getI18nTranslations, hasMetadata, hasRegisteredLocale, isMediaAudioTrackCapable, isMediaBufferCapable, isMediaErrorCapable, isMediaLiveCapable, isMediaPauseCapable, isMediaPlaybackRateCapable, isMediaRemotePlaybackCapable, isMediaSeekCapable, isMediaSourceCapable, isMediaStreamTypeCapable, isMediaTextTrackCapable, isMediaVideoDimensionsCapable, isMediaVideoRenditionCapable, isMediaVolumeCapable, isQuerySelectorAllCapable, mergeProps, onI18nRegistryChange, registerI18n, renderElement, shallowEqual, useAlertDialogContext, useAttachMedia, useAudioTrackOptions, useButton, useCaptionsOptions, useComposedRefs, useContainer, useContainerAttach, useDestroy, useDoubleTapGesture, useErrorDialogContext, useHotkey, useHotkeyShortcut, useLatestRef, useLocale, useMedia, useMediaAttach, useMediaComponent, useMediaInstance, useMenuContext, useOptionalContainer, useOptionalMenuContext, useOptionalPlayer, usePlaybackRateOptions, usePlayer, usePlayerContext, usePopoverContext, useQualityOptions, useSelector, useSlider, useStore, useTapGesture, useTooltipContext, useTranslator };
|
|
111
|
+
export { AirPlayButton, AirPlayButtonProps, index_parts_d_exports as AlertDialog, AlertDialogContextValue, AudioTrackOption, AudioTrackOptionsProps, AudioTrackOptionsResult, AudioTrackRadioGroup, AudioTrackRadioGroupItemProps, AudioTrackRadioGroupItemState, AudioTrackRadioGroupProps, BufferingIndicator, BufferingIndicatorProps, CaptionsButton, CaptionsButtonProps, CaptionsOption, CaptionsOptionsProps, CaptionsOptionsResult, CaptionsRadioGroup, CaptionsRadioGroupItemProps, CaptionsRadioGroupItemState, CaptionsRadioGroupProps, CastButton, CastButtonProps, Comparator, Container, ContainerProps, index_parts_d_exports$1 as Controls, ControlsGroupProps, ControlsRootProps, CreateI18nOptions, CreateI18nResult, CreatePlayerConfig, CreatePlayerResult, index_parts_d_exports$2 as ErrorDialog, ErrorDialogContextValue, FlatTranslations, FullscreenButton, FullscreenButtonProps, Gesture, GestureProps, HTMLProps, Hotkey, HotkeyProps, I18nContext, I18nContextValue, I18nProvider, I18nProviderProps, IndicatorStatus, InputAction, InputIndicatorLabels, LiveButton, LiveButtonProps, Locale, MediaGesture, MediaGestureProps, MediaHotkey, MediaHotkeyProps, index_parts_d_exports$3 as Menu, MenuContextValue, MuteButton, MuteButtonProps, NodeListLike, PiPButton, PiPButtonProps, PlayButton, PlayButtonProps, PlaybackRateButton, PlaybackRateButtonProps, PlaybackRateOption, PlaybackRateOptionsProps, PlaybackRateOptionsResult, PlaybackRateRadioGroup, PlaybackRateRadioGroupItemProps, PlaybackRateRadioGroupItemState, PlaybackRateRadioGroupProps, PlayerContextValue, PlayerProps, index_parts_d_exports$4 as Popover, PopoverContextValue, Poster, PosterProps, QualityOption, QualityOptionsProps, QualityOptionsResult, QualityRadioGroup, QualityRadioGroupItemProps, QualityRadioGroupItemState, QualityRadioGroupProps, RenderFunction, RenderProp, SeekButton, SeekButtonProps, index_parts_d_exports$5 as SeekIndicator, SeekIndicatorRootProps, SeekIndicatorValueProps, Selector, index_parts_d_exports$6 as Slider, SliderBufferProps, SliderFillProps, SliderRootProps, SliderThumbProps, SliderThumbnailProps, SliderTrackProps, SliderValueProps, StatusAnnouncer, StatusAnnouncerProps, index_parts_d_exports$7 as StatusIndicator, StatusIndicatorRootProps, StatusIndicatorValueProps, Text, TextProps, Thumbnail, ThumbnailProps, index_parts_d_exports$8 as Time, index_parts_d_exports$9 as TimeSlider, TimeSliderChapterState, TimeSliderChapterTitleProps, TimeSliderChapterTitleState, TimeSliderChaptersProps, TimeSliderChaptersState, Title, TitleProps, index_parts_d_exports$10 as Tooltip, TooltipContent, TooltipContextValue, TranslationParams, Translations, Translator, UIComponentProps, UseDoubleTapGestureOptions, UseHotkeyOptions, UseTapGestureOptions, index_parts_d_exports$11 as VolumeIndicator, VolumeIndicatorFillProps, VolumeIndicatorRootProps, VolumeIndicatorValueProps, index_parts_d_exports$12 as VolumeSlider, composeRefs, createI18n, createPlayer, createSelector, createTranslator, findLocaleKeys, getI18nTranslations, hasMetadata, hasRegisteredLocale, isMediaAudioTrackCapable, isMediaBufferCapable, isMediaErrorCapable, isMediaLiveCapable, isMediaPauseCapable, isMediaPlaybackRateCapable, isMediaRemotePlaybackCapable, isMediaSeekCapable, isMediaSourceCapable, isMediaStreamTypeCapable, isMediaTextTrackCapable, isMediaVideoDimensionsCapable, isMediaVideoRenditionCapable, isMediaVolumeCapable, isQuerySelectorAllCapable, mergeProps, onI18nRegistryChange, registerI18n, renderElement, shallowEqual, useAlertDialogContext, useAttachMedia, useAudioTrackOptions, useButton, useCaptionsOptions, useComposedRefs, useContainer, useContainerAttach, useDestroy, useDoubleTapGesture, useErrorDialogContext, useHotkey, useHotkeyShortcut, useLatestRef, useLocale, useMedia, useMediaAttach, useMediaComponent, useMediaInstance, useMenuContext, useOptionalContainer, useOptionalMenuContext, useOptionalPlayer, usePlaybackRateOptions, usePlayer, usePlayerContext, usePopoverContext, useQualityOptions, useSelector, useSlider, useStore, useTapGesture, useTooltipContext, useTranslator };
|
|
111
112
|
}
|
|
112
113
|
import * as import__videojs_core_dom from "@videojs/core/dom";
|
|
113
114
|
import * as import__videojs_media_dom from "@videojs/media/dom";
|
|
114
115
|
//#endregion
|
|
115
|
-
export { AirPlayButton, type AirPlayButtonProps, index_parts_d_exports as AlertDialog, type AlertDialogContextValue, type AudioTrackOption, type AudioTrackOptionsProps, type AudioTrackOptionsResult, AudioTrackRadioGroup, type AudioTrackRadioGroupItemProps, type AudioTrackRadioGroupItemState, type AudioTrackRadioGroupProps, BufferingIndicator, type BufferingIndicatorProps, CaptionsButton, type CaptionsButtonProps, type CaptionsOption, type CaptionsOptionsProps, type CaptionsOptionsResult, CaptionsRadioGroup, type CaptionsRadioGroupItemProps, type CaptionsRadioGroupItemState, type CaptionsRadioGroupProps, CastButton, type CastButtonProps, type Comparator, Container, type ContainerProps, index_parts_d_exports$1 as Controls, type ControlsGroupProps, type ControlsRootProps, type CreateI18nOptions, type CreateI18nResult, type CreatePlayerConfig, type CreatePlayerResult, index_parts_d_exports$2 as ErrorDialog, type ErrorDialogContextValue, type FlatTranslations, FullscreenButton, type FullscreenButtonProps, Gesture, type GestureProps, type HTMLProps, Hotkey, type HotkeyProps, I18nContext, type I18nContextValue, I18nProvider, type I18nProviderProps, type IndicatorStatus, type InputAction, type InputIndicatorLabels, LiveButton, type LiveButtonProps, type Locale, MediaGesture, type MediaGestureProps, MediaHotkey, type MediaHotkeyProps, index_parts_d_exports$3 as Menu, type MenuContextValue, MuteButton, type MuteButtonProps, type NodeListLike, PiPButton, type PiPButtonProps, PlayButton, type PlayButtonProps, PlaybackRateButton, type PlaybackRateButtonProps, type PlaybackRateOption, type PlaybackRateOptionsProps, type PlaybackRateOptionsResult, PlaybackRateRadioGroup, type PlaybackRateRadioGroupItemProps, type PlaybackRateRadioGroupItemState, type PlaybackRateRadioGroupProps, type PlayerContextValue, type PlayerProps, index_parts_d_exports$4 as Popover, type PopoverContextValue, Poster, type PosterProps, type QualityOption, type QualityOptionsProps, type QualityOptionsResult, QualityRadioGroup, type QualityRadioGroupItemProps, type QualityRadioGroupItemState, type QualityRadioGroupProps, type RenderFunction, type RenderProp, SeekButton, type SeekButtonProps, index_parts_d_exports$5 as SeekIndicator, type SeekIndicatorRootProps, type SeekIndicatorValueProps, type Selector, index_parts_d_exports$6 as Slider, type SliderBufferProps, type SliderFillProps, type SliderRootProps, type SliderThumbProps, type SliderThumbnailProps, type SliderTrackProps, type SliderValueProps, StatusAnnouncer, type StatusAnnouncerProps, index_parts_d_exports$7 as StatusIndicator, type StatusIndicatorRootProps, type StatusIndicatorValueProps, Text, type TextProps, Thumbnail, type ThumbnailProps, index_parts_d_exports$8 as Time, index_parts_d_exports$9 as TimeSlider, type TimeSliderChapterState, type TimeSliderChapterTitleProps, type TimeSliderChapterTitleState, type TimeSliderChaptersProps, type TimeSliderChaptersState, index_parts_d_exports$10 as Tooltip, type TooltipContent, type TooltipContextValue, type TranslationParams, type Translations, type Translator, type UIComponentProps, type UseDoubleTapGestureOptions, type UseHotkeyOptions, type UseTapGestureOptions, index_parts_d_exports$11 as VolumeIndicator, type VolumeIndicatorFillProps, type VolumeIndicatorRootProps, type VolumeIndicatorValueProps, index_parts_d_exports$12 as VolumeSlider, composeRefs, createI18n, createPlayer, createSelector, createTranslator, findLocaleKeys, getI18nTranslations, hasMetadata, hasRegisteredLocale, index_d_exports, isMediaAudioTrackCapable, isMediaBufferCapable, isMediaErrorCapable, isMediaLiveCapable, isMediaPauseCapable, isMediaPlaybackRateCapable, isMediaRemotePlaybackCapable, isMediaSeekCapable, isMediaSourceCapable, isMediaStreamTypeCapable, isMediaTextTrackCapable, isMediaVideoDimensionsCapable, isMediaVideoRenditionCapable, isMediaVolumeCapable, isQuerySelectorAllCapable, mergeProps, onI18nRegistryChange, registerI18n, renderElement, shallowEqual, useAlertDialogContext, useAttachMedia, useAudioTrackOptions, useButton, useCaptionsOptions, useComposedRefs, useContainer, useContainerAttach, useDestroy, useDoubleTapGesture, useErrorDialogContext, useHotkey, useHotkeyShortcut, useLatestRef, useLocale, useMedia, useMediaAttach, useMediaComponent, useMediaInstance, useMenuContext, useOptionalContainer, useOptionalMenuContext, useOptionalPlayer, usePlaybackRateOptions, usePlayer, usePlayerContext, usePopoverContext, useQualityOptions, useSelector, useSlider, useStore, useTapGesture, useTooltipContext, useTranslator };
|
|
116
|
+
export { AirPlayButton, type AirPlayButtonProps, index_parts_d_exports as AlertDialog, type AlertDialogContextValue, type AudioTrackOption, type AudioTrackOptionsProps, type AudioTrackOptionsResult, AudioTrackRadioGroup, type AudioTrackRadioGroupItemProps, type AudioTrackRadioGroupItemState, type AudioTrackRadioGroupProps, BufferingIndicator, type BufferingIndicatorProps, CaptionsButton, type CaptionsButtonProps, type CaptionsOption, type CaptionsOptionsProps, type CaptionsOptionsResult, CaptionsRadioGroup, type CaptionsRadioGroupItemProps, type CaptionsRadioGroupItemState, type CaptionsRadioGroupProps, CastButton, type CastButtonProps, type Comparator, Container, type ContainerProps, index_parts_d_exports$1 as Controls, type ControlsGroupProps, type ControlsRootProps, type CreateI18nOptions, type CreateI18nResult, type CreatePlayerConfig, type CreatePlayerResult, index_parts_d_exports$2 as ErrorDialog, type ErrorDialogContextValue, type FlatTranslations, FullscreenButton, type FullscreenButtonProps, Gesture, type GestureProps, type HTMLProps, Hotkey, type HotkeyProps, I18nContext, type I18nContextValue, I18nProvider, type I18nProviderProps, type IndicatorStatus, type InputAction, type InputIndicatorLabels, LiveButton, type LiveButtonProps, type Locale, MediaGesture, type MediaGestureProps, MediaHotkey, type MediaHotkeyProps, index_parts_d_exports$3 as Menu, type MenuContextValue, MuteButton, type MuteButtonProps, type NodeListLike, PiPButton, type PiPButtonProps, PlayButton, type PlayButtonProps, PlaybackRateButton, type PlaybackRateButtonProps, type PlaybackRateOption, type PlaybackRateOptionsProps, type PlaybackRateOptionsResult, PlaybackRateRadioGroup, type PlaybackRateRadioGroupItemProps, type PlaybackRateRadioGroupItemState, type PlaybackRateRadioGroupProps, type PlayerContextValue, type PlayerProps, index_parts_d_exports$4 as Popover, type PopoverContextValue, Poster, type PosterProps, type QualityOption, type QualityOptionsProps, type QualityOptionsResult, QualityRadioGroup, type QualityRadioGroupItemProps, type QualityRadioGroupItemState, type QualityRadioGroupProps, type RenderFunction, type RenderProp, SeekButton, type SeekButtonProps, index_parts_d_exports$5 as SeekIndicator, type SeekIndicatorRootProps, type SeekIndicatorValueProps, type Selector, index_parts_d_exports$6 as Slider, type SliderBufferProps, type SliderFillProps, type SliderRootProps, type SliderThumbProps, type SliderThumbnailProps, type SliderTrackProps, type SliderValueProps, StatusAnnouncer, type StatusAnnouncerProps, index_parts_d_exports$7 as StatusIndicator, type StatusIndicatorRootProps, type StatusIndicatorValueProps, Text, type TextProps, Thumbnail, type ThumbnailProps, index_parts_d_exports$8 as Time, index_parts_d_exports$9 as TimeSlider, type TimeSliderChapterState, type TimeSliderChapterTitleProps, type TimeSliderChapterTitleState, type TimeSliderChaptersProps, type TimeSliderChaptersState, Title, type TitleProps, index_parts_d_exports$10 as Tooltip, type TooltipContent, type TooltipContextValue, type TranslationParams, type Translations, type Translator, type UIComponentProps, type UseDoubleTapGestureOptions, type UseHotkeyOptions, type UseTapGestureOptions, index_parts_d_exports$11 as VolumeIndicator, type VolumeIndicatorFillProps, type VolumeIndicatorRootProps, type VolumeIndicatorValueProps, index_parts_d_exports$12 as VolumeSlider, composeRefs, createI18n, createPlayer, createSelector, createTranslator, findLocaleKeys, getI18nTranslations, hasMetadata, hasRegisteredLocale, index_d_exports, isMediaAudioTrackCapable, isMediaBufferCapable, isMediaErrorCapable, isMediaLiveCapable, isMediaPauseCapable, isMediaPlaybackRateCapable, isMediaRemotePlaybackCapable, isMediaSeekCapable, isMediaSourceCapable, isMediaStreamTypeCapable, isMediaTextTrackCapable, isMediaVideoDimensionsCapable, isMediaVideoRenditionCapable, isMediaVolumeCapable, isQuerySelectorAllCapable, mergeProps, onI18nRegistryChange, registerI18n, renderElement, shallowEqual, useAlertDialogContext, useAttachMedia, useAudioTrackOptions, useButton, useCaptionsOptions, useComposedRefs, useContainer, useContainerAttach, useDestroy, useDoubleTapGesture, useErrorDialogContext, useHotkey, useHotkeyShortcut, useLatestRef, useLocale, useMedia, useMediaAttach, useMediaComponent, useMediaInstance, useMenuContext, useOptionalContainer, useOptionalMenuContext, useOptionalPlayer, usePlaybackRateOptions, usePlayer, usePlayerContext, usePopoverContext, useQualityOptions, useSelector, useSlider, useStore, useTapGesture, useTooltipContext, useTranslator };
|
|
116
117
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/dev/index.js
CHANGED
|
@@ -56,6 +56,7 @@ import { StatusAnnouncer } from "./ui/status-announcer/status-announcer.js";
|
|
|
56
56
|
import { index_parts_exports as index_parts_exports$7 } from "./ui/status-indicator/index.parts.js";
|
|
57
57
|
import { index_parts_exports as index_parts_exports$8 } from "./ui/time/index.parts.js";
|
|
58
58
|
import { index_parts_exports as index_parts_exports$9 } from "./ui/time-slider/index.parts.js";
|
|
59
|
+
import { Title } from "./ui/title/title.js";
|
|
59
60
|
import { index_parts_exports as index_parts_exports$10 } from "./ui/tooltip/index.parts.js";
|
|
60
61
|
import { index_parts_exports as index_parts_exports$11 } from "./ui/volume-indicator/index.parts.js";
|
|
61
62
|
import { index_parts_exports as index_parts_exports$12 } from "./ui/volume-slider/index.parts.js";
|
|
@@ -67,4 +68,4 @@ import { createSelector, shallowEqual } from "@videojs/store";
|
|
|
67
68
|
import { useSelector, useStore } from "@videojs/store/react";
|
|
68
69
|
export * from "@videojs/core/dom";
|
|
69
70
|
export * from "@videojs/media/dom";
|
|
70
|
-
export { AirPlayButton, index_parts_exports as AlertDialog, AudioTrackRadioGroup, BufferingIndicator, CaptionsButton, CaptionsRadioGroup, CastButton, Container, index_parts_exports$1 as Controls, index_parts_exports$2 as ErrorDialog, FullscreenButton, Gesture, Hotkey, I18nContext, I18nProvider, LiveButton, MediaGesture, MediaHotkey, index_parts_exports$3 as Menu, MuteButton, PiPButton, PlayButton, PlaybackRateButton, PlaybackRateRadioGroup, index_parts_exports$4 as Popover, Poster, QualityRadioGroup, SeekButton, index_parts_exports$5 as SeekIndicator, index_parts_exports$6 as Slider, StatusAnnouncer, index_parts_exports$7 as StatusIndicator, Text, Thumbnail, index_parts_exports$8 as Time, index_parts_exports$9 as TimeSlider, index_parts_exports$10 as Tooltip, index_parts_exports$11 as VolumeIndicator, index_parts_exports$12 as VolumeSlider, composeRefs, createI18n, createPlayer, createSelector, createTranslator, findLocaleKeys, getI18nTranslations, hasMetadata, hasRegisteredLocale, isMediaAudioTrackCapable, isMediaBufferCapable, isMediaErrorCapable, isMediaLiveCapable, isMediaPauseCapable, isMediaPlaybackRateCapable, isMediaRemotePlaybackCapable, isMediaSeekCapable, isMediaSourceCapable, isMediaStreamTypeCapable, isMediaTextTrackCapable, isMediaVideoDimensionsCapable, isMediaVideoRenditionCapable, isMediaVolumeCapable, isQuerySelectorAllCapable, mergeProps, onI18nRegistryChange, registerI18n, renderElement, shallowEqual, useAlertDialogContext, useAttachMedia, useAudioTrackOptions, useButton, useCaptionsOptions, useComposedRefs, useContainer, useContainerAttach, useDestroy, useDoubleTapGesture, useErrorDialogContext, useHotkey, useHotkeyShortcut, useLatestRef, useLocale, useMedia, useMediaAttach, useMediaComponent, useMediaInstance, useMenuContext, useOptionalContainer, useOptionalMenuContext, useOptionalPlayer, usePlaybackRateOptions, usePlayer, usePlayerContext, usePopoverContext, useQualityOptions, useSelector, useSlider, useStore, useTapGesture, useTooltipContext, useTranslator };
|
|
71
|
+
export { AirPlayButton, index_parts_exports as AlertDialog, AudioTrackRadioGroup, BufferingIndicator, CaptionsButton, CaptionsRadioGroup, CastButton, Container, index_parts_exports$1 as Controls, index_parts_exports$2 as ErrorDialog, FullscreenButton, Gesture, Hotkey, I18nContext, I18nProvider, LiveButton, MediaGesture, MediaHotkey, index_parts_exports$3 as Menu, MuteButton, PiPButton, PlayButton, PlaybackRateButton, PlaybackRateRadioGroup, index_parts_exports$4 as Popover, Poster, QualityRadioGroup, SeekButton, index_parts_exports$5 as SeekIndicator, index_parts_exports$6 as Slider, StatusAnnouncer, index_parts_exports$7 as StatusIndicator, Text, Thumbnail, index_parts_exports$8 as Time, index_parts_exports$9 as TimeSlider, Title, index_parts_exports$10 as Tooltip, index_parts_exports$11 as VolumeIndicator, index_parts_exports$12 as VolumeSlider, composeRefs, createI18n, createPlayer, createSelector, createTranslator, findLocaleKeys, getI18nTranslations, hasMetadata, hasRegisteredLocale, isMediaAudioTrackCapable, isMediaBufferCapable, isMediaErrorCapable, isMediaLiveCapable, isMediaPauseCapable, isMediaPlaybackRateCapable, isMediaRemotePlaybackCapable, isMediaSeekCapable, isMediaSourceCapable, isMediaStreamTypeCapable, isMediaTextTrackCapable, isMediaVideoDimensionsCapable, isMediaVideoRenditionCapable, isMediaVolumeCapable, isQuerySelectorAllCapable, mergeProps, onI18nRegistryChange, registerI18n, renderElement, shallowEqual, useAlertDialogContext, useAttachMedia, useAudioTrackOptions, useButton, useCaptionsOptions, useComposedRefs, useContainer, useContainerAttach, useDestroy, useDoubleTapGesture, useErrorDialogContext, useHotkey, useHotkeyShortcut, useLatestRef, useLocale, useMedia, useMediaAttach, useMediaComponent, useMediaInstance, useMenuContext, useOptionalContainer, useOptionalMenuContext, useOptionalPlayer, usePlaybackRateOptions, usePlayer, usePlayerContext, usePopoverContext, useQualityOptions, useSelector, useSlider, useStore, useTapGesture, useTooltipContext, useTranslator };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ReactNode, VideoHTMLAttributes } from "react";
|
|
2
|
+
import { ShakaMediaProps } from "@videojs/media/dom/shaka";
|
|
3
|
+
//#region src/media/shaka-video/media.d.ts
|
|
4
|
+
interface ShakaVideoProps extends Omit<VideoHTMLAttributes<HTMLVideoElement>, keyof ShakaMediaProps>, Partial<ShakaMediaProps> {
|
|
5
|
+
children?: ReactNode;
|
|
6
|
+
}
|
|
7
|
+
declare const ShakaVideo: import("react").ForwardRefExoticComponent<ShakaVideoProps & import("react").RefAttributes<HTMLVideoElement>>;
|
|
8
|
+
declare namespace ShakaVideo {
|
|
9
|
+
type Props = ShakaVideoProps;
|
|
10
|
+
}
|
|
11
|
+
//#endregion
|
|
12
|
+
export { ShakaVideo, ShakaVideoProps };
|
|
13
|
+
//# sourceMappingURL=media.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.d.ts","names":[],"sources":["../../../../src/media/shaka-video/media.tsx"],"mappings":";;;UAWiB,wBACP,KAAK,oBAAoB,yBAAyB,kBACxD,QAAQ;EACV,WAAW;;cAGA,4BAAU,0BAAA,kCAAA,cAAA;kBAgBN;OACH,QAAQ"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useComposedRefs } from "../../utils/use-composed-refs.js";
|
|
3
|
+
import { useAttachMedia } from "../../utils/use-attach-media.js";
|
|
4
|
+
import { useMediaInstance } from "../../utils/use-media-instance.js";
|
|
5
|
+
import { useSyncProps } from "../../utils/use-sync-props.js";
|
|
6
|
+
import { forwardRef } from "react";
|
|
7
|
+
import { jsx } from "react/jsx-runtime";
|
|
8
|
+
import { ShakaMedia, shakaMediaDefaultProps } from "@videojs/media/dom/shaka";
|
|
9
|
+
//#region src/media/shaka-video/media.tsx
|
|
10
|
+
const ShakaVideo = forwardRef(function ShakaVideo({ children, ...props }, ref) {
|
|
11
|
+
const media = useMediaInstance(ShakaMedia);
|
|
12
|
+
return /* @__PURE__ */ jsx("video", {
|
|
13
|
+
ref: useComposedRefs(useAttachMedia(media), ref),
|
|
14
|
+
...useSyncProps(media, props, shakaMediaDefaultProps),
|
|
15
|
+
children
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
//#endregion
|
|
19
|
+
export { ShakaVideo };
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=media.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.js","names":[],"sources":["../../../../src/media/shaka-video/media.tsx"],"sourcesContent":["'use client';\n\nimport type { ShakaMediaProps } from '@videojs/media/dom/shaka';\nimport { ShakaMedia, shakaMediaDefaultProps } from '@videojs/media/dom/shaka';\nimport type { ReactNode, VideoHTMLAttributes } from 'react';\nimport { forwardRef } from 'react';\nimport { useAttachMedia } from '../../utils/use-attach-media';\nimport { useComposedRefs } from '../../utils/use-composed-refs';\nimport { useMediaInstance } from '../../utils/use-media-instance';\nimport { useSyncProps } from '../../utils/use-sync-props';\n\nexport interface ShakaVideoProps\n extends Omit<VideoHTMLAttributes<HTMLVideoElement>, keyof ShakaMediaProps>,\n Partial<ShakaMediaProps> {\n children?: ReactNode;\n}\n\nexport const ShakaVideo = forwardRef<HTMLVideoElement, ShakaVideoProps>(function ShakaVideo(\n { children, ...props },\n ref\n) {\n const media = useMediaInstance(ShakaMedia);\n const attachRef = useAttachMedia(media);\n const composedRef = useComposedRefs(attachRef, ref);\n const htmlProps = useSyncProps(media, props, shakaMediaDefaultProps);\n\n return (\n <video ref={composedRef} {...htmlProps}>\n {children}\n </video>\n );\n});\n\nexport namespace ShakaVideo {\n export type Props = ShakaVideoProps;\n}\n"],"mappings":";;;;;;;;;AAiBA,MAAa,aAAa,WAA8C,SAAS,WAC/E,EAAE,UAAU,GAAG,SACf,KACA;CACA,MAAM,QAAQ,iBAAiB,UAAU;CAKzC,OACE,oBAAC,SAAD;EAAO,KAJW,gBADF,eAAe,KACW,GAAG,GAIvB;EAAG,GAHT,aAAa,OAAO,OAAO,sBAGN;EAClC;CACI,CAAA;AAEX,CAAC"}
|
|
@@ -408,7 +408,7 @@
|
|
|
408
408
|
@media (prefers-reduced-motion: reduce) {
|
|
409
409
|
.media-minimal-skin .media-button {
|
|
410
410
|
scale: 1;
|
|
411
|
-
transition-property: background-color
|
|
411
|
+
transition-property: background-color;
|
|
412
412
|
will-change: auto;
|
|
413
413
|
}
|
|
414
414
|
}
|
|
@@ -979,7 +979,6 @@
|
|
|
979
979
|
transition-timing-function: ease-out;
|
|
980
980
|
transition-duration: var(--menu-transition-duration);
|
|
981
981
|
transition-property: translate, filter;
|
|
982
|
-
will-change: translate, filter;
|
|
983
982
|
|
|
984
983
|
&:where([data-starting-style], [data-ending-style]) {
|
|
985
984
|
overflow: hidden;
|
|
@@ -1158,7 +1157,6 @@
|
|
|
1158
1157
|
transition:
|
|
1159
1158
|
translate var(--menu-transition-duration) ease-out,
|
|
1160
1159
|
filter var(--menu-transition-duration) ease-out;
|
|
1161
|
-
will-change: translate, filter;
|
|
1162
1160
|
}
|
|
1163
1161
|
|
|
1164
1162
|
&[data-submenu-expanded="true"] > :not([data-submenu]) {
|
|
@@ -399,7 +399,7 @@
|
|
|
399
399
|
@media (prefers-reduced-motion: reduce) {
|
|
400
400
|
.media-default-skin .media-button {
|
|
401
401
|
scale: 1;
|
|
402
|
-
transition-property: background-color, color
|
|
402
|
+
transition-property: background-color, color;
|
|
403
403
|
will-change: auto;
|
|
404
404
|
}
|
|
405
405
|
}
|
|
@@ -971,7 +971,6 @@
|
|
|
971
971
|
transition-timing-function: ease-out;
|
|
972
972
|
transition-duration: var(--menu-transition-duration);
|
|
973
973
|
transition-property: translate, filter;
|
|
974
|
-
will-change: translate, filter;
|
|
975
974
|
|
|
976
975
|
&:where([data-starting-style], [data-ending-style]) {
|
|
977
976
|
overflow: hidden;
|
|
@@ -1155,7 +1154,6 @@
|
|
|
1155
1154
|
transition:
|
|
1156
1155
|
translate var(--menu-transition-duration) ease-out,
|
|
1157
1156
|
filter var(--menu-transition-duration) ease-out;
|
|
1158
|
-
will-change: translate, filter;
|
|
1159
1157
|
}
|
|
1160
1158
|
|
|
1161
1159
|
&[data-submenu-expanded="true"] > :not([data-submenu]) {
|
|
@@ -408,7 +408,7 @@
|
|
|
408
408
|
@media (prefers-reduced-motion: reduce) {
|
|
409
409
|
.media-minimal-skin .media-button {
|
|
410
410
|
scale: 1;
|
|
411
|
-
transition-property: background-color
|
|
411
|
+
transition-property: background-color;
|
|
412
412
|
will-change: auto;
|
|
413
413
|
}
|
|
414
414
|
}
|
|
@@ -979,7 +979,6 @@
|
|
|
979
979
|
transition-timing-function: ease-out;
|
|
980
980
|
transition-duration: var(--menu-transition-duration);
|
|
981
981
|
transition-property: translate, filter;
|
|
982
|
-
will-change: translate, filter;
|
|
983
982
|
|
|
984
983
|
&:where([data-starting-style], [data-ending-style]) {
|
|
985
984
|
overflow: hidden;
|
|
@@ -1158,7 +1157,6 @@
|
|
|
1158
1157
|
transition:
|
|
1159
1158
|
translate var(--menu-transition-duration) ease-out,
|
|
1160
1159
|
filter var(--menu-transition-duration) ease-out;
|
|
1161
|
-
will-change: translate, filter;
|
|
1162
1160
|
}
|
|
1163
1161
|
|
|
1164
1162
|
&[data-submenu-expanded="true"] > :not([data-submenu]) {
|
|
@@ -399,7 +399,7 @@
|
|
|
399
399
|
@media (prefers-reduced-motion: reduce) {
|
|
400
400
|
.media-default-skin .media-button {
|
|
401
401
|
scale: 1;
|
|
402
|
-
transition-property: background-color, color
|
|
402
|
+
transition-property: background-color, color;
|
|
403
403
|
will-change: auto;
|
|
404
404
|
}
|
|
405
405
|
}
|
|
@@ -971,7 +971,6 @@
|
|
|
971
971
|
transition-timing-function: ease-out;
|
|
972
972
|
transition-duration: var(--menu-transition-duration);
|
|
973
973
|
transition-property: translate, filter;
|
|
974
|
-
will-change: translate, filter;
|
|
975
974
|
|
|
976
975
|
&:where([data-starting-style], [data-ending-style]) {
|
|
977
976
|
overflow: hidden;
|
|
@@ -1155,7 +1154,6 @@
|
|
|
1155
1154
|
transition:
|
|
1156
1155
|
translate var(--menu-transition-duration) ease-out,
|
|
1157
1156
|
filter var(--menu-transition-duration) ease-out;
|
|
1158
|
-
will-change: translate, filter;
|
|
1159
1157
|
}
|
|
1160
1158
|
|
|
1161
1159
|
&[data-submenu-expanded="true"] > :not([data-submenu]) {
|
|
@@ -466,7 +466,7 @@
|
|
|
466
466
|
@media (prefers-reduced-motion: reduce) {
|
|
467
467
|
.media-minimal-skin .media-button {
|
|
468
468
|
scale: 1;
|
|
469
|
-
transition-property: background-color
|
|
469
|
+
transition-property: background-color;
|
|
470
470
|
will-change: auto;
|
|
471
471
|
}
|
|
472
472
|
}
|
|
@@ -511,8 +511,7 @@
|
|
|
511
511
|
transition: opacity 0.25s;
|
|
512
512
|
}
|
|
513
513
|
.media-minimal-skin media-poster:not([data-visible]),
|
|
514
|
-
.media-minimal-skin > img:not([data-visible])
|
|
515
|
-
.media-minimal-skin > img[data-visible]:not([data-loaded]) {
|
|
514
|
+
.media-minimal-skin > img:not([data-visible]) {
|
|
516
515
|
opacity: 0;
|
|
517
516
|
}
|
|
518
517
|
.media-minimal-skin media-poster ::slotted(img),
|
|
@@ -531,30 +530,6 @@
|
|
|
531
530
|
border-radius: inherit;
|
|
532
531
|
}
|
|
533
532
|
|
|
534
|
-
/* Blurred placeholder: HTML path targets media-poster::before, React path targets the skin container::before */
|
|
535
|
-
.media-minimal-skin media-poster::before,
|
|
536
|
-
.media-minimal-skin::before {
|
|
537
|
-
position: absolute;
|
|
538
|
-
inset: 0;
|
|
539
|
-
pointer-events: none;
|
|
540
|
-
content: "";
|
|
541
|
-
background-image: var(--media-poster-placeholder, none);
|
|
542
|
-
background-repeat: no-repeat;
|
|
543
|
-
background-position: var(--media-object-position, center);
|
|
544
|
-
background-size: var(--media-object-fit, contain);
|
|
545
|
-
filter: blur(var(--media-poster-placeholder-blur, 20px));
|
|
546
|
-
}
|
|
547
|
-
|
|
548
|
-
/* React path: hidden by default, transitions in while poster loads */
|
|
549
|
-
.media-minimal-skin::before {
|
|
550
|
-
opacity: 0;
|
|
551
|
-
transition: opacity 0.25s;
|
|
552
|
-
}
|
|
553
|
-
/* Show placeholder while the poster is visible but not yet loaded */
|
|
554
|
-
.media-minimal-skin:has(img[data-visible]:not([data-loaded]))::before {
|
|
555
|
-
opacity: 1;
|
|
556
|
-
}
|
|
557
|
-
|
|
558
533
|
.media-minimal-skin:fullscreen media-poster ::slotted(img),
|
|
559
534
|
.media-minimal-skin:fullscreen media-poster img,
|
|
560
535
|
.media-minimal-skin:fullscreen > img {
|
|
@@ -1161,7 +1136,6 @@
|
|
|
1161
1136
|
transition-timing-function: ease-out;
|
|
1162
1137
|
transition-duration: var(--menu-transition-duration);
|
|
1163
1138
|
transition-property: translate, filter;
|
|
1164
|
-
will-change: translate, filter;
|
|
1165
1139
|
|
|
1166
1140
|
&:where([data-starting-style], [data-ending-style]) {
|
|
1167
1141
|
overflow: hidden;
|
|
@@ -1340,7 +1314,6 @@
|
|
|
1340
1314
|
transition:
|
|
1341
1315
|
translate var(--menu-transition-duration) ease-out,
|
|
1342
1316
|
filter var(--menu-transition-duration) ease-out;
|
|
1343
|
-
will-change: translate, filter;
|
|
1344
1317
|
}
|
|
1345
1318
|
|
|
1346
1319
|
&[data-submenu-expanded="true"] > :not([data-submenu]) {
|
|
@@ -1896,12 +1869,10 @@
|
|
|
1896
1869
|
|
|
1897
1870
|
@media (pointer: fine) {
|
|
1898
1871
|
transition-property: translate, filter, opacity;
|
|
1899
|
-
will-change: translate, filter, opacity;
|
|
1900
1872
|
}
|
|
1901
1873
|
|
|
1902
1874
|
@media (pointer: coarse) {
|
|
1903
1875
|
transition-property: translate, opacity;
|
|
1904
|
-
will-change: translate, opacity;
|
|
1905
1876
|
}
|
|
1906
1877
|
|
|
1907
1878
|
&:not([data-visible]) {
|
|
@@ -170,14 +170,10 @@ function CaptionsTrigger() {
|
|
|
170
170
|
});
|
|
171
171
|
}
|
|
172
172
|
function MinimalLiveVideoSkin(props) {
|
|
173
|
-
const { children, className, renderPoster,
|
|
174
|
-
const containerStyle = placeholder ? {
|
|
175
|
-
"--media-poster-placeholder": `url(${placeholder})`,
|
|
176
|
-
...style
|
|
177
|
-
} : style;
|
|
173
|
+
const { children, className, renderPoster, style, ...rest } = props;
|
|
178
174
|
return /* @__PURE__ */ jsxs(Container, {
|
|
179
175
|
className: cn("media-minimal-skin media-minimal-skin--video", className),
|
|
180
|
-
style
|
|
176
|
+
style,
|
|
181
177
|
...rest,
|
|
182
178
|
children: [
|
|
183
179
|
children,
|