@videojs/react 10.0.0-beta.28 → 10.0.0-beta.29
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/__generated__/skins/default-video/styles/buttons.css +132 -18
- package/dist/default/__generated__/skins/default-video/styles/captions.css +22 -0
- package/dist/default/__generated__/skins/default-video/styles/container.css +121 -8
- package/dist/default/__generated__/skins/default-video/styles/controls.css +436 -21
- package/dist/default/__generated__/skins/default-video/styles/dialog.css +169 -0
- package/dist/default/__generated__/skins/default-video/styles/indicator.css +459 -0
- package/dist/default/__generated__/skins/default-video/styles/menus.css +254 -0
- package/dist/default/__generated__/skins/default-video/styles/overlays.css +26 -2
- package/dist/default/__generated__/skins/default-video/styles/popups.css +338 -12
- package/dist/default/__generated__/skins/default-video/styles/poster.css +4 -4
- package/dist/default/__generated__/skins/default-video/styles/sliders.css +355 -31
- package/dist/default/__generated__/skins/default-video/styles/styles.css +2455 -216
- package/dist/default/__generated__/skins/default-video/styles/theme.css +4 -19
- package/dist/default/__generated__/skins/default-video/styles/video.css +29 -0
- package/dist/default/__generated__/skins/minimal-video/styles/base.css +25 -0
- package/dist/default/__generated__/skins/minimal-video/styles/buttons.css +266 -0
- package/dist/default/__generated__/skins/minimal-video/styles/captions.css +22 -0
- package/dist/default/__generated__/skins/minimal-video/styles/container.css +158 -0
- package/dist/default/__generated__/skins/minimal-video/styles/controls.css +182 -0
- package/dist/default/__generated__/skins/minimal-video/styles/dialog.css +77 -0
- package/dist/default/__generated__/skins/minimal-video/styles/indicator.css +322 -0
- package/dist/default/__generated__/skins/minimal-video/styles/menus.css +254 -0
- package/dist/default/__generated__/skins/minimal-video/styles/overlays.css +35 -0
- package/dist/default/__generated__/skins/minimal-video/styles/popups.css +371 -0
- package/dist/default/__generated__/skins/minimal-video/styles/poster.css +47 -0
- package/dist/default/__generated__/skins/minimal-video/styles/sliders.css +436 -0
- package/dist/default/__generated__/skins/minimal-video/styles/styles.css +2246 -0
- package/dist/default/__generated__/skins/minimal-video/styles/theme.css +7 -0
- package/dist/default/__generated__/skins/minimal-video/styles/video.css +29 -0
- package/dist/default/i18n/index.js +2 -1
- package/dist/default/i18n/text.js +20 -0
- package/dist/default/i18n/text.js.map +1 -0
- package/dist/default/icons/dist/react/default/airplay-exit.js +3 -3
- package/dist/default/icons/dist/react/default/airplay-exit.js.map +1 -1
- package/dist/default/icons/dist/react/minimal/airplay-exit.js +3 -3
- package/dist/default/icons/dist/react/minimal/airplay-exit.js.map +1 -1
- package/dist/default/index.js +2 -1
- package/dist/default/media/hls-background-video/media.js +18 -3
- package/dist/default/media/hls-background-video/media.js.map +1 -1
- package/dist/default/presets/audio/minimal-skin.css +103 -101
- package/dist/default/presets/audio/minimal-skin.js +1 -1
- package/dist/default/presets/audio/minimal-skin.tailwind.js +1 -1
- package/dist/default/presets/audio/skin.css +68 -69
- package/dist/default/presets/audio/skin.js +1 -1
- package/dist/default/presets/audio/skin.tailwind.js +1 -1
- package/dist/default/presets/live-audio/minimal-skin.css +103 -101
- package/dist/default/presets/live-audio/skin.css +68 -69
- package/dist/default/presets/live-video/minimal-skin.css +140 -120
- package/dist/default/presets/live-video/minimal-skin.js +3 -8
- package/dist/default/presets/live-video/minimal-skin.js.map +1 -1
- package/dist/default/presets/live-video/minimal-skin.tailwind.js +5 -8
- package/dist/default/presets/live-video/minimal-skin.tailwind.js.map +1 -1
- package/dist/default/presets/live-video/skin.css +89 -76
- package/dist/default/presets/live-video/skin.js +3 -8
- package/dist/default/presets/live-video/skin.js.map +1 -1
- package/dist/default/presets/live-video/skin.tailwind.js +7 -10
- package/dist/default/presets/live-video/skin.tailwind.js.map +1 -1
- package/dist/default/presets/video/minimal-skin.css +140 -120
- package/dist/default/presets/video/minimal-skin.js +3 -8
- package/dist/default/presets/video/minimal-skin.js.map +1 -1
- package/dist/default/presets/video/minimal-skin.tailwind.js +5 -8
- package/dist/default/presets/video/minimal-skin.tailwind.js.map +1 -1
- package/dist/default/presets/video/skin.css +89 -76
- package/dist/default/presets/video/skin.js +3 -8
- package/dist/default/presets/video/skin.js.map +1 -1
- package/dist/default/presets/video/skin.tailwind.js +6 -9
- package/dist/default/presets/video/skin.tailwind.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/button.js +3 -1
- package/dist/default/skins/dist/default/default/tailwind/components/button.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/poster.js +8 -1
- package/dist/default/skins/dist/default/default/tailwind/components/poster.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/slider.js +10 -10
- package/dist/default/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/thumbnail.js +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/thumbnail.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js +2 -2
- package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js +8 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js +13 -12
- package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/thumbnail.js +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/thumbnail.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js +6 -5
- package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
- package/dist/default/skins/dist/default/shared/tailwind/icon-state.js +4 -4
- package/dist/default/skins/dist/default/shared/tailwind/icon-state.js.map +1 -1
- package/dist/default/ui/gesture/gesture.js.map +1 -1
- package/dist/default/ui/gesture/use-doubletap-gesture.js.map +1 -1
- package/dist/default/ui/gesture/use-tap-gesture.js.map +1 -1
- package/dist/default/ui/hotkey/hotkey.js.map +1 -1
- package/dist/default/ui/menu/context.js +6 -1
- package/dist/default/ui/menu/context.js.map +1 -1
- package/dist/default/ui/menu/menu-item-indicator.js +3 -2
- package/dist/default/ui/menu/menu-item-indicator.js.map +1 -1
- package/dist/default/ui/menu/menu-radio-item.js +19 -15
- package/dist/default/ui/menu/menu-radio-item.js.map +1 -1
- package/dist/default/ui/menu/menu-root.js +5 -6
- package/dist/default/ui/menu/menu-root.js.map +1 -1
- package/dist/default/ui/poster/poster.js +64 -17
- package/dist/default/ui/poster/poster.js.map +1 -1
- package/dist/default/ui/slider/slider-preview.js.map +1 -1
- package/dist/default/utils/use-render.js +2 -8
- package/dist/default/utils/use-render.js.map +1 -1
- package/dist/dev/__generated__/skins/default-video/styles/buttons.css +132 -18
- package/dist/dev/__generated__/skins/default-video/styles/captions.css +22 -0
- package/dist/dev/__generated__/skins/default-video/styles/container.css +121 -8
- package/dist/dev/__generated__/skins/default-video/styles/controls.css +436 -21
- package/dist/dev/__generated__/skins/default-video/styles/dialog.css +169 -0
- package/dist/dev/__generated__/skins/default-video/styles/indicator.css +459 -0
- package/dist/dev/__generated__/skins/default-video/styles/menus.css +254 -0
- package/dist/dev/__generated__/skins/default-video/styles/overlays.css +26 -2
- package/dist/dev/__generated__/skins/default-video/styles/popups.css +338 -12
- package/dist/dev/__generated__/skins/default-video/styles/poster.css +4 -4
- package/dist/dev/__generated__/skins/default-video/styles/sliders.css +355 -31
- package/dist/dev/__generated__/skins/default-video/styles/styles.css +2455 -216
- package/dist/dev/__generated__/skins/default-video/styles/theme.css +4 -19
- package/dist/dev/__generated__/skins/default-video/styles/video.css +29 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/base.css +25 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/buttons.css +266 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/captions.css +22 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/container.css +158 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/controls.css +182 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/dialog.css +77 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/indicator.css +322 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/menus.css +254 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/overlays.css +35 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/popups.css +371 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/poster.css +47 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/sliders.css +436 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/styles.css +2246 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/theme.css +7 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/video.css +29 -0
- package/dist/dev/i18n/index.d.ts +2 -1
- package/dist/dev/i18n/index.js +2 -1
- package/dist/dev/i18n/text.d.ts +11 -0
- package/dist/dev/i18n/text.d.ts.map +1 -0
- package/dist/dev/i18n/text.js +20 -0
- package/dist/dev/i18n/text.js.map +1 -0
- package/dist/dev/icons/dist/react/default/airplay-exit.js +3 -3
- package/dist/dev/icons/dist/react/default/airplay-exit.js.map +1 -1
- package/dist/dev/icons/dist/react/minimal/airplay-exit.js +3 -3
- package/dist/dev/icons/dist/react/minimal/airplay-exit.js.map +1 -1
- package/dist/dev/icons/index.d.ts +6 -1
- package/dist/dev/icons/index.d.ts.map +1 -0
- package/dist/dev/icons/minimal/index.d.ts +6 -1
- package/dist/dev/icons/minimal/index.d.ts.map +1 -0
- package/dist/dev/index.d.ts +3 -2
- package/dist/dev/index.js +2 -1
- package/dist/dev/media/hls-background-video/media.d.ts +8 -0
- package/dist/dev/media/hls-background-video/media.d.ts.map +1 -1
- package/dist/dev/media/hls-background-video/media.js +18 -3
- package/dist/dev/media/hls-background-video/media.js.map +1 -1
- package/dist/dev/presets/audio/minimal-skin.css +103 -101
- package/dist/dev/presets/audio/minimal-skin.js +1 -1
- package/dist/dev/presets/audio/minimal-skin.tailwind.js +1 -1
- package/dist/dev/presets/audio/player.d.ts +2 -2
- package/dist/dev/presets/audio/skin.css +68 -69
- package/dist/dev/presets/audio/skin.js +1 -1
- package/dist/dev/presets/audio/skin.tailwind.js +1 -1
- package/dist/dev/presets/live-audio/minimal-skin.css +103 -101
- package/dist/dev/presets/live-audio/player.d.ts +2 -2
- package/dist/dev/presets/live-audio/skin.css +68 -69
- package/dist/dev/presets/live-video/minimal-skin.css +140 -120
- package/dist/dev/presets/live-video/minimal-skin.d.ts.map +1 -1
- package/dist/dev/presets/live-video/minimal-skin.js +3 -8
- package/dist/dev/presets/live-video/minimal-skin.js.map +1 -1
- package/dist/dev/presets/live-video/minimal-skin.tailwind.d.ts.map +1 -1
- package/dist/dev/presets/live-video/minimal-skin.tailwind.js +5 -8
- package/dist/dev/presets/live-video/minimal-skin.tailwind.js.map +1 -1
- package/dist/dev/presets/live-video/player.d.ts +2 -2
- package/dist/dev/presets/live-video/skin.css +89 -76
- package/dist/dev/presets/live-video/skin.d.ts.map +1 -1
- package/dist/dev/presets/live-video/skin.js +3 -8
- package/dist/dev/presets/live-video/skin.js.map +1 -1
- package/dist/dev/presets/live-video/skin.tailwind.d.ts.map +1 -1
- package/dist/dev/presets/live-video/skin.tailwind.js +7 -10
- package/dist/dev/presets/live-video/skin.tailwind.js.map +1 -1
- package/dist/dev/presets/types.d.ts +15 -2
- package/dist/dev/presets/types.d.ts.map +1 -1
- package/dist/dev/presets/video/minimal-skin.css +140 -120
- package/dist/dev/presets/video/minimal-skin.d.ts.map +1 -1
- package/dist/dev/presets/video/minimal-skin.js +3 -8
- 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 +5 -8
- package/dist/dev/presets/video/minimal-skin.tailwind.js.map +1 -1
- package/dist/dev/presets/video/player.d.ts +2 -2
- package/dist/dev/presets/video/skin.css +89 -76
- package/dist/dev/presets/video/skin.d.ts.map +1 -1
- package/dist/dev/presets/video/skin.js +3 -8
- 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 +6 -9
- package/dist/dev/presets/video/skin.tailwind.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/button.js +3 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/button.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/poster.js +8 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/poster.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/slider.js +10 -10
- package/dist/dev/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/thumbnail.js +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/thumbnail.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js +2 -2
- package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/poster.js +8 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/slider.js +13 -12
- package/dist/dev/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/thumbnail.js +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/thumbnail.js.map +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js +6 -5
- package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
- package/dist/dev/skins/dist/default/shared/tailwind/icon-state.js +4 -4
- package/dist/dev/skins/dist/default/shared/tailwind/icon-state.js.map +1 -1
- package/dist/dev/ui/gesture/gesture.d.ts +6 -13
- package/dist/dev/ui/gesture/gesture.d.ts.map +1 -1
- package/dist/dev/ui/gesture/gesture.js.map +1 -1
- package/dist/dev/ui/gesture/use-doubletap-gesture.d.ts +2 -5
- package/dist/dev/ui/gesture/use-doubletap-gesture.d.ts.map +1 -1
- package/dist/dev/ui/gesture/use-doubletap-gesture.js.map +1 -1
- package/dist/dev/ui/gesture/use-tap-gesture.d.ts +2 -5
- package/dist/dev/ui/gesture/use-tap-gesture.d.ts.map +1 -1
- package/dist/dev/ui/gesture/use-tap-gesture.js.map +1 -1
- package/dist/dev/ui/hotkey/hotkey.d.ts +6 -12
- package/dist/dev/ui/hotkey/hotkey.d.ts.map +1 -1
- package/dist/dev/ui/hotkey/hotkey.js.map +1 -1
- package/dist/dev/ui/menu/context.js +6 -1
- package/dist/dev/ui/menu/context.js.map +1 -1
- package/dist/dev/ui/menu/menu-item-indicator.d.ts.map +1 -1
- package/dist/dev/ui/menu/menu-item-indicator.js +3 -2
- package/dist/dev/ui/menu/menu-item-indicator.js.map +1 -1
- package/dist/dev/ui/menu/menu-radio-item.d.ts.map +1 -1
- package/dist/dev/ui/menu/menu-radio-item.js +19 -15
- package/dist/dev/ui/menu/menu-radio-item.js.map +1 -1
- package/dist/dev/ui/menu/menu-root.js +5 -6
- package/dist/dev/ui/menu/menu-root.js.map +1 -1
- package/dist/dev/ui/poster/poster.d.ts +15 -4
- package/dist/dev/ui/poster/poster.d.ts.map +1 -1
- package/dist/dev/ui/poster/poster.js +64 -17
- package/dist/dev/ui/poster/poster.js.map +1 -1
- package/dist/dev/ui/slider/slider-preview.d.ts +5 -9
- package/dist/dev/ui/slider/slider-preview.d.ts.map +1 -1
- package/dist/dev/ui/slider/slider-preview.js.map +1 -1
- package/dist/dev/utils/use-render.d.ts.map +1 -1
- package/dist/dev/utils/use-render.js +2 -8
- package/dist/dev/utils/use-render.js.map +1 -1
- package/docs/README.md +1 -1
- package/docs/concepts/skins.md +97 -96
- package/docs/how-to/customize-skins.md +421 -411
- package/docs/reference/create-player.md +2 -2
- package/docs/reference/menu.md +6 -18
- package/docs/reference/popover.md +6 -6
- package/docs/reference/poster.md +187 -13
- package/docs/reference/slider.md +1 -1
- package/docs/reference/time-slider.md +1 -1
- package/docs/reference/tooltip.md +10 -10
- package/docs/reference/volume-slider.md +1 -1
- package/package.json +13 -8
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
@layer videojs.theme.base, videojs.theme.variant, videojs.theme.preferences;
|
|
2
|
+
|
|
3
|
+
@layer videojs.theme.base {
|
|
4
|
+
:is(.media-theme-default, .media-theme-minimal) {
|
|
5
|
+
--media-controls-transition-duration: 100ms;
|
|
6
|
+
--media-scale: 1;
|
|
7
|
+
--media-spacing: calc(var(--media-scale-unit, 16px) * var(--media-scale) / 4);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
@layer videojs.theme.preferences {
|
|
12
|
+
@media (pointer: fine) {
|
|
13
|
+
:is(.media-theme-default, .media-theme-minimal):has([data-controls]:not([data-visible])) {
|
|
14
|
+
--media-controls-transition-duration: 300ms;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
@media (pointer: coarse) {
|
|
19
|
+
:is(.media-theme-default, .media-theme-minimal):has([data-controls]:not([data-visible])) {
|
|
20
|
+
--media-controls-transition-duration: 150ms;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@media (prefers-reduced-motion: reduce) {
|
|
25
|
+
:is(.media-theme-default, .media-theme-minimal) {
|
|
26
|
+
--media-controls-transition-duration: 50ms;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { I18nContext, useLocale, useTranslator } from "./context.js";
|
|
3
3
|
import { I18nProvider, createI18n } from "./create-i18n.js";
|
|
4
|
+
import { Text } from "./text.js";
|
|
4
5
|
import { LOCALES, createTranslator, findLocaleKeys, getI18nTranslations, hasRegisteredLocale, isText, onI18nRegistryChange, registerI18n } from "@videojs/core/i18n";
|
|
5
|
-
export { I18nContext, I18nProvider, LOCALES, createI18n, createTranslator, findLocaleKeys, getI18nTranslations, hasRegisteredLocale, isText, onI18nRegistryChange, registerI18n, useLocale, useTranslator };
|
|
6
|
+
export { I18nContext, I18nProvider, LOCALES, Text, createI18n, createTranslator, findLocaleKeys, getI18nTranslations, hasRegisteredLocale, isText, onI18nRegistryChange, registerI18n, useLocale, useTranslator };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useTranslator } from "./context.js";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
//#region src/i18n/text.tsx
|
|
5
|
+
/** Renders translated compiler text through a native React span. */
|
|
6
|
+
function Text({ children, token, ...props }) {
|
|
7
|
+
const t = useTranslator();
|
|
8
|
+
const fallback = typeof children === "string" || typeof children === "number" ? String(children) : void 0;
|
|
9
|
+
return /* @__PURE__ */ jsx("span", {
|
|
10
|
+
...props,
|
|
11
|
+
children: token ? t({
|
|
12
|
+
key: token,
|
|
13
|
+
text: fallback ?? token
|
|
14
|
+
}) : children
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
//#endregion
|
|
18
|
+
export { Text };
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.js","names":[],"sources":["../../../src/i18n/text.tsx"],"sourcesContent":["'use client';\n\nimport type { ComponentProps, ReactNode } from 'react';\nimport { useTranslator } from './context';\n\nexport interface TextProps extends Omit<ComponentProps<'span'>, 'children'> {\n children?: ReactNode;\n token?: string | undefined;\n}\n\n/** Renders translated compiler text through a native React span. */\nexport function Text({ children, token, ...props }: TextProps) {\n const t = useTranslator();\n const fallback = typeof children === 'string' || typeof children === 'number' ? String(children) : undefined;\n\n return <span {...props}>{token ? t({ key: token, text: fallback ?? token }) : children}</span>;\n}\n"],"mappings":";;;;;AAWA,SAAgB,KAAK,EAAE,UAAU,OAAO,GAAG,SAAoB;CAC7D,MAAM,IAAI,cAAc;CACxB,MAAM,WAAW,OAAO,aAAa,YAAY,OAAO,aAAa,WAAW,OAAO,QAAQ,IAAI,KAAA;CAEnG,OAAO,oBAAC,QAAD;EAAM,GAAI;EAAQ,UAAA,QAAQ,EAAE;GAAE,KAAK;GAAO,MAAM,YAAY;EAAM,CAAC,IAAI;CAAe,CAAA;AAC/F"}
|
|
@@ -9,15 +9,15 @@ const AirPlayExitIcon = (props) => /* @__PURE__ */ jsxs("svg", {
|
|
|
9
9
|
viewBox: "0 0 18 18",
|
|
10
10
|
...props,
|
|
11
11
|
children: [
|
|
12
|
-
/* @__PURE__ */ jsx("style", { children: "@keyframes media-icon
|
|
12
|
+
/* @__PURE__ */ jsx("style", { children: "@keyframes media-icon-airplay-triangle{0%{translate:0 0}to{translate:0-2px}}@keyframes media-icon-airplay-fill{0%{opacity:0}to{opacity:.2}}@media (prefers-reduced-motion:reduce){:root{--media-icon-airplay-fill-animation:none;--media-icon-airplay-triangle-animation:none}}" }),
|
|
13
13
|
/* @__PURE__ */ jsx("path", {
|
|
14
14
|
d: "M14.5 2A3.5 3.5 0 0 1 18 5.5v5a3.5 3.5 0 0 1-3.032 3.468L9.354 8.354a.5.5 0 0 0-.708 0l-5.615 5.614A3.5 3.5 0 0 1 0 10.5v-5A3.5 3.5 0 0 1 3.5 2z",
|
|
15
|
-
style: { animation: "var(--media-icon
|
|
15
|
+
style: { animation: "var(--media-icon-airplay-fill-animation, media-icon-airplay-fill 1s ease-in-out infinite alternate)" }
|
|
16
16
|
}),
|
|
17
17
|
/* @__PURE__ */ jsx("path", { d: "M14.5 2A3.5 3.5 0 0 1 18 5.5v5l-.005.18a3.5 3.5 0 0 1-3.027 3.288L13 12h1.5a1.5 1.5 0 0 0 1.5-1.5v-5A1.5 1.5 0 0 0 14.5 4h-11A1.5 1.5 0 0 0 2 5.5v5A1.5 1.5 0 0 0 3.5 12H5l-1.968 1.967A3.5 3.5 0 0 1 0 10.5v-5A3.5 3.5 0 0 1 3.5 2z" }),
|
|
18
18
|
/* @__PURE__ */ jsx("path", {
|
|
19
19
|
d: "M8.631 10.902a.5.5 0 0 1 .738 0l4.363 4.76a.5.5 0 0 1-.369.838H4.637a.5.5 0 0 1-.369-.838z",
|
|
20
|
-
style: { animation: "var(--media-icon
|
|
20
|
+
style: { animation: "var(--media-icon-airplay-triangle-animation, media-icon-airplay-triangle 1s ease-in-out infinite alternate)" }
|
|
21
21
|
})
|
|
22
22
|
]
|
|
23
23
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"airplay-exit.js","names":[],"sources":["../../../../../../../icons/dist/react/default/airplay-exit.js"],"sourcesContent":["import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst AirPlayExitIcon = (props) => /* @__PURE__ */ _jsxs(\"svg\", {\n\txmlns: \"http://www.w3.org/2000/svg\",\n\twidth: 18,\n\theight: 18,\n\tfill: \"currentColor\",\n\t\"aria-hidden\": \"true\",\n\tviewBox: \"0 0 18 18\",\n\t...props,\n\tchildren: [\n\t\t/* @__PURE__ */ _jsx(\"style\", { children: \"@keyframes media-icon
|
|
1
|
+
{"version":3,"file":"airplay-exit.js","names":[],"sources":["../../../../../../../icons/dist/react/default/airplay-exit.js"],"sourcesContent":["import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst AirPlayExitIcon = (props) => /* @__PURE__ */ _jsxs(\"svg\", {\n\txmlns: \"http://www.w3.org/2000/svg\",\n\twidth: 18,\n\theight: 18,\n\tfill: \"currentColor\",\n\t\"aria-hidden\": \"true\",\n\tviewBox: \"0 0 18 18\",\n\t...props,\n\tchildren: [\n\t\t/* @__PURE__ */ _jsx(\"style\", { children: \"@keyframes media-icon-airplay-triangle{0%{translate:0 0}to{translate:0-2px}}@keyframes media-icon-airplay-fill{0%{opacity:0}to{opacity:.2}}@media (prefers-reduced-motion:reduce){:root{--media-icon-airplay-fill-animation:none;--media-icon-airplay-triangle-animation:none}}\" }),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\td: \"M14.5 2A3.5 3.5 0 0 1 18 5.5v5a3.5 3.5 0 0 1-3.032 3.468L9.354 8.354a.5.5 0 0 0-.708 0l-5.615 5.614A3.5 3.5 0 0 1 0 10.5v-5A3.5 3.5 0 0 1 3.5 2z\",\n\t\t\tstyle: { animation: \"var(--media-icon-airplay-fill-animation, media-icon-airplay-fill 1s ease-in-out infinite alternate)\" }\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", { d: \"M14.5 2A3.5 3.5 0 0 1 18 5.5v5l-.005.18a3.5 3.5 0 0 1-3.027 3.288L13 12h1.5a1.5 1.5 0 0 0 1.5-1.5v-5A1.5 1.5 0 0 0 14.5 4h-11A1.5 1.5 0 0 0 2 5.5v5A1.5 1.5 0 0 0 3.5 12H5l-1.968 1.967A3.5 3.5 0 0 1 0 10.5v-5A3.5 3.5 0 0 1 3.5 2z\" }),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\td: \"M8.631 10.902a.5.5 0 0 1 .738 0l4.363 4.76a.5.5 0 0 1-.369.838H4.637a.5.5 0 0 1-.369-.838z\",\n\t\t\tstyle: { animation: \"var(--media-icon-airplay-triangle-animation, media-icon-airplay-triangle 1s ease-in-out infinite alternate)\" }\n\t\t})\n\t]\n});\nexport default AirPlayExitIcon;\n"],"mappings":";;AACA,MAAM,mBAAmB,UAA0B,qBAAM,OAAO;CAC/D,OAAO;CACP,OAAO;CACP,QAAQ;CACR,MAAM;CACN,eAAe;CACf,SAAS;CACT,GAAG;CACH,UAAU;EACO,oBAAK,SAAS,EAAE,UAAU,kRAAkR,CAAC;EAC7S,oBAAK,QAAQ;GAC5B,GAAG;GACH,OAAO,EAAE,WAAW,sGAAsG;EAC3H,CAAC;EACe,oBAAK,QAAQ,EAAE,GAAG,uOAAuO,CAAC;EAC1P,oBAAK,QAAQ;GAC5B,GAAG;GACH,OAAO,EAAE,WAAW,8GAA8G;EACnI,CAAC;CACF;AACD,CAAC"}
|
|
@@ -9,15 +9,15 @@ const AirPlayExitIcon = (props) => /* @__PURE__ */ jsxs("svg", {
|
|
|
9
9
|
viewBox: "0 0 18 18",
|
|
10
10
|
...props,
|
|
11
11
|
children: [
|
|
12
|
-
/* @__PURE__ */ jsx("style", { children: "@keyframes media-icon
|
|
12
|
+
/* @__PURE__ */ jsx("style", { children: "@keyframes media-icon-airplay-triangle{0%{translate:0 0}to{translate:0-2px}}@keyframes media-icon-airplay-fill{0%{opacity:0}to{opacity:.2}}@media (prefers-reduced-motion:reduce){:root{--media-icon-airplay-fill-animation:none;--media-icon-airplay-triangle-animation:none}}" }),
|
|
13
13
|
/* @__PURE__ */ jsx("path", {
|
|
14
14
|
d: "M14.5 2A3.5 3.5 0 0 1 18 5.5v5a3.5 3.5 0 0 1-3.032 3.468L9.354 8.354a.5.5 0 0 0-.708 0l-5.615 5.614A3.5 3.5 0 0 1 0 10.5v-5A3.5 3.5 0 0 1 3.5 2z",
|
|
15
|
-
style: { animation: "var(--media-icon
|
|
15
|
+
style: { animation: "var(--media-icon-airplay-fill-animation, media-icon-airplay-fill 1s ease-in-out infinite alternate)" }
|
|
16
16
|
}),
|
|
17
17
|
/* @__PURE__ */ jsx("path", { d: "M14.5 2A3.5 3.5 0 0 1 18 5.5v5l-.005.18a3.5 3.5 0 0 1-3.027 3.288L13.5 12.5h1a2 2 0 0 0 2-2v-5a2 2 0 0 0-2-2h-11a2 2 0 0 0-2 2v5a2 2 0 0 0 2 2h1l-1.468 1.467A3.5 3.5 0 0 1 0 10.5v-5A3.5 3.5 0 0 1 3.5 2z" }),
|
|
18
18
|
/* @__PURE__ */ jsx("path", {
|
|
19
19
|
d: "M8.631 10.902a.5.5 0 0 1 .738 0l4.363 4.76a.5.5 0 0 1-.369.838H4.637a.5.5 0 0 1-.369-.838z",
|
|
20
|
-
style: { animation: "var(--media-icon
|
|
20
|
+
style: { animation: "var(--media-icon-airplay-triangle-animation, media-icon-airplay-triangle 1s ease-in-out infinite alternate)" }
|
|
21
21
|
})
|
|
22
22
|
]
|
|
23
23
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"airplay-exit.js","names":[],"sources":["../../../../../../../icons/dist/react/minimal/airplay-exit.js"],"sourcesContent":["import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst AirPlayExitIcon = (props) => /* @__PURE__ */ _jsxs(\"svg\", {\n\txmlns: \"http://www.w3.org/2000/svg\",\n\twidth: 18,\n\theight: 18,\n\tfill: \"currentColor\",\n\t\"aria-hidden\": \"true\",\n\tviewBox: \"0 0 18 18\",\n\t...props,\n\tchildren: [\n\t\t/* @__PURE__ */ _jsx(\"style\", { children: \"@keyframes media-icon
|
|
1
|
+
{"version":3,"file":"airplay-exit.js","names":[],"sources":["../../../../../../../icons/dist/react/minimal/airplay-exit.js"],"sourcesContent":["import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst AirPlayExitIcon = (props) => /* @__PURE__ */ _jsxs(\"svg\", {\n\txmlns: \"http://www.w3.org/2000/svg\",\n\twidth: 18,\n\theight: 18,\n\tfill: \"currentColor\",\n\t\"aria-hidden\": \"true\",\n\tviewBox: \"0 0 18 18\",\n\t...props,\n\tchildren: [\n\t\t/* @__PURE__ */ _jsx(\"style\", { children: \"@keyframes media-icon-airplay-triangle{0%{translate:0 0}to{translate:0-2px}}@keyframes media-icon-airplay-fill{0%{opacity:0}to{opacity:.2}}@media (prefers-reduced-motion:reduce){:root{--media-icon-airplay-fill-animation:none;--media-icon-airplay-triangle-animation:none}}\" }),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\td: \"M14.5 2A3.5 3.5 0 0 1 18 5.5v5a3.5 3.5 0 0 1-3.032 3.468L9.354 8.354a.5.5 0 0 0-.708 0l-5.615 5.614A3.5 3.5 0 0 1 0 10.5v-5A3.5 3.5 0 0 1 3.5 2z\",\n\t\t\tstyle: { animation: \"var(--media-icon-airplay-fill-animation, media-icon-airplay-fill 1s ease-in-out infinite alternate)\" }\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", { d: \"M14.5 2A3.5 3.5 0 0 1 18 5.5v5l-.005.18a3.5 3.5 0 0 1-3.027 3.288L13.5 12.5h1a2 2 0 0 0 2-2v-5a2 2 0 0 0-2-2h-11a2 2 0 0 0-2 2v5a2 2 0 0 0 2 2h1l-1.468 1.467A3.5 3.5 0 0 1 0 10.5v-5A3.5 3.5 0 0 1 3.5 2z\" }),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\td: \"M8.631 10.902a.5.5 0 0 1 .738 0l4.363 4.76a.5.5 0 0 1-.369.838H4.637a.5.5 0 0 1-.369-.838z\",\n\t\t\tstyle: { animation: \"var(--media-icon-airplay-triangle-animation, media-icon-airplay-triangle 1s ease-in-out infinite alternate)\" }\n\t\t})\n\t]\n});\nexport default AirPlayExitIcon;\n"],"mappings":";;AACA,MAAM,mBAAmB,UAA0B,qBAAM,OAAO;CAC/D,OAAO;CACP,OAAO;CACP,QAAQ;CACR,MAAM;CACN,eAAe;CACf,SAAS;CACT,GAAG;CACH,UAAU;EACO,oBAAK,SAAS,EAAE,UAAU,kRAAkR,CAAC;EAC7S,oBAAK,QAAQ;GAC5B,GAAG;GACH,OAAO,EAAE,WAAW,sGAAsG;EAC3H,CAAC;EACe,oBAAK,QAAQ,EAAE,GAAG,6MAA6M,CAAC;EAChO,oBAAK,QAAQ;GAC5B,GAAG;GACH,OAAO,EAAE,WAAW,8GAA8G;EACnI,CAAC;CACF;AACD,CAAC"}
|
package/dist/default/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { I18nContext, useLocale, useTranslator } from "./i18n/context.js";
|
|
3
3
|
import { I18nProvider, createI18n } from "./i18n/create-i18n.js";
|
|
4
|
+
import { Text } from "./i18n/text.js";
|
|
4
5
|
import { createTranslator, findLocaleKeys, getI18nTranslations, hasRegisteredLocale, onI18nRegistryChange, registerI18n } from "./i18n/index.js";
|
|
5
6
|
import { composeRefs, useComposedRefs } from "./utils/use-composed-refs.js";
|
|
6
7
|
import { useContainer, useContainerAttach, useMedia, useMediaAttach, useOptionalContainer, useOptionalPlayer, usePlayer, usePlayerContext } from "./player/context.js";
|
|
@@ -66,4 +67,4 @@ import { createSelector, shallowEqual } from "@videojs/store";
|
|
|
66
67
|
import { useSelector, useStore } from "@videojs/store/react";
|
|
67
68
|
export * from "@videojs/core/dom";
|
|
68
69
|
export * from "@videojs/media/dom";
|
|
69
|
-
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, 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 };
|
|
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 };
|
|
@@ -3,7 +3,7 @@ import { useComposedRefs } from "../../utils/use-composed-refs.js";
|
|
|
3
3
|
import { useAttachMedia } from "../../utils/use-attach-media.js";
|
|
4
4
|
import { useMediaInstance } from "../../utils/use-media-instance.js";
|
|
5
5
|
import { useSyncProps } from "../../utils/use-sync-props.js";
|
|
6
|
-
import { forwardRef } from "react";
|
|
6
|
+
import { forwardRef, useEffect, useRef } from "react";
|
|
7
7
|
import { jsx } from "react/jsx-runtime";
|
|
8
8
|
import { HlsBackgroundVideoMedia, hlsBackgroundVideoMediaDefaultProps } from "@videojs/spf/hls-background-video";
|
|
9
9
|
//#region src/media/hls-background-video/media.tsx
|
|
@@ -21,14 +21,29 @@ import { HlsBackgroundVideoMedia, hlsBackgroundVideoMediaDefaultProps } from "@v
|
|
|
21
21
|
* storyboard belong to `MuxVideo`, since none of them mean anything without
|
|
22
22
|
* controls to hang them on.
|
|
23
23
|
*
|
|
24
|
+
* `onError` fires for an unplayable source, which it could not do on its own:
|
|
25
|
+
* nothing about one reaches the media element, so the `<video>`'s own `error`
|
|
26
|
+
* stays null at `readyState 0`. The engine reports the condition, the Media
|
|
27
|
+
* promotes the fatal one, and this component re-fires it on the `<video>` — where
|
|
28
|
+
* a handler already listening for a failed source receives it. Which condition it
|
|
29
|
+
* was is on the console and `engine.state.errors`; the handler gets "this source
|
|
30
|
+
* won't play", which is the decision a background video actually has to make.
|
|
31
|
+
*
|
|
24
32
|
* `MuxBackgroundVideo` is this same component under the name the package it
|
|
25
33
|
* replaces used — an alias, not a variant.
|
|
26
34
|
*/
|
|
27
35
|
const HlsBackgroundVideo = forwardRef(function HlsBackgroundVideo({ children, ...props }, ref) {
|
|
28
36
|
const media = useMediaInstance(HlsBackgroundVideoMedia);
|
|
29
|
-
const
|
|
37
|
+
const videoRef = useRef(null);
|
|
38
|
+
const composedRef = useComposedRefs(useAttachMedia(media), videoRef, ref);
|
|
39
|
+
const htmlProps = useSyncProps(media, props, hlsBackgroundVideoMediaDefaultProps);
|
|
40
|
+
useEffect(() => {
|
|
41
|
+
const forward = () => videoRef.current?.dispatchEvent(new Event("error"));
|
|
42
|
+
media.addEventListener("error", forward);
|
|
43
|
+
return () => media.removeEventListener("error", forward);
|
|
44
|
+
}, [media]);
|
|
30
45
|
return /* @__PURE__ */ jsx("video", {
|
|
31
|
-
...
|
|
46
|
+
...htmlProps,
|
|
32
47
|
ref: composedRef,
|
|
33
48
|
muted: true,
|
|
34
49
|
autoPlay: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media.js","names":[],"sources":["../../../../src/media/hls-background-video/media.tsx"],"sourcesContent":["'use client';\n\nimport {\n HlsBackgroundVideoMedia,\n type HlsBackgroundVideoMediaProps,\n hlsBackgroundVideoMediaDefaultProps,\n} from '@videojs/spf/hls-background-video';\nimport type { 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\n// `src` is the only prop the Media owns, taken from the adapter rather than\n// restated here so the two can't disagree about what the surface is.\nexport interface HlsBackgroundVideoProps\n extends Omit<VideoHTMLAttributes<HTMLVideoElement>, keyof HlsBackgroundVideoMediaProps>,\n Partial<HlsBackgroundVideoMediaProps> {}\n\n/**\n * A muted, looping, chrome-less video over the SPF background-video engine — the\n * React counterpart to `<hls-background-video>`, and the replacement for the\n * standalone `mux-background-video` package's component.\n *\n * `src` is an HLS URL and the whole surface. Capping which rendition is fetched\n * is a param on that URL (`?max_resolution=720p` on a Mux stream, for one) rather\n * than a prop, which keeps the renditions it excludes out of the manifest instead\n * of merely unpicked.\n *\n * There is no structured Mux `source`: playback-ID identity, poster, and\n * storyboard belong to `MuxVideo`, since none of them mean anything without\n * controls to hang them on.\n *\n * `MuxBackgroundVideo` is this same component under the name the package it\n * replaces used — an alias, not a variant.\n */\nexport const HlsBackgroundVideo = forwardRef<HTMLVideoElement, HlsBackgroundVideoProps>(function HlsBackgroundVideo(\n { children, ...props },\n ref\n) {\n const media = useMediaInstance(HlsBackgroundVideoMedia);\n const attachRef = useAttachMedia(media);\n const composedRef = useComposedRefs(attachRef, ref);\n const htmlProps = useSyncProps(media, props, hlsBackgroundVideoMediaDefaultProps);\n\n return (\n // The same set `<hls-background-video>` forces onto its inner video, so the\n // two platforms present the same surface: silent looping playback with no\n // affordance a UA could hang chrome on — AirPlay, Cast, and picture-in-picture\n // all being things a background video has nowhere to put.\n //\n // Applied after the spread rather than before it, unlike the generic\n // `BackgroundVideo`: they're what the component is for, and attaching the\n // Media re-applies its own anyway, so honoring `muted={false}` would only\n // look like it worked.\n <video\n {...htmlProps}\n ref={composedRef}\n muted\n autoPlay\n loop\n playsInline\n disableRemotePlayback\n disablePictureInPicture\n >\n {children}\n </video>\n );\n});\n\nexport namespace HlsBackgroundVideo {\n export type Props = HlsBackgroundVideoProps;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"media.js","names":[],"sources":["../../../../src/media/hls-background-video/media.tsx"],"sourcesContent":["'use client';\n\nimport {\n HlsBackgroundVideoMedia,\n type HlsBackgroundVideoMediaProps,\n hlsBackgroundVideoMediaDefaultProps,\n} from '@videojs/spf/hls-background-video';\nimport type { VideoHTMLAttributes } from 'react';\nimport { forwardRef, useEffect, useRef } 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\n// `src` is the only prop the Media owns, taken from the adapter rather than\n// restated here so the two can't disagree about what the surface is.\nexport interface HlsBackgroundVideoProps\n extends Omit<VideoHTMLAttributes<HTMLVideoElement>, keyof HlsBackgroundVideoMediaProps>,\n Partial<HlsBackgroundVideoMediaProps> {}\n\n/**\n * A muted, looping, chrome-less video over the SPF background-video engine — the\n * React counterpart to `<hls-background-video>`, and the replacement for the\n * standalone `mux-background-video` package's component.\n *\n * `src` is an HLS URL and the whole surface. Capping which rendition is fetched\n * is a param on that URL (`?max_resolution=720p` on a Mux stream, for one) rather\n * than a prop, which keeps the renditions it excludes out of the manifest instead\n * of merely unpicked.\n *\n * There is no structured Mux `source`: playback-ID identity, poster, and\n * storyboard belong to `MuxVideo`, since none of them mean anything without\n * controls to hang them on.\n *\n * `onError` fires for an unplayable source, which it could not do on its own:\n * nothing about one reaches the media element, so the `<video>`'s own `error`\n * stays null at `readyState 0`. The engine reports the condition, the Media\n * promotes the fatal one, and this component re-fires it on the `<video>` — where\n * a handler already listening for a failed source receives it. Which condition it\n * was is on the console and `engine.state.errors`; the handler gets \"this source\n * won't play\", which is the decision a background video actually has to make.\n *\n * `MuxBackgroundVideo` is this same component under the name the package it\n * replaces used — an alias, not a variant.\n */\nexport const HlsBackgroundVideo = forwardRef<HTMLVideoElement, HlsBackgroundVideoProps>(function HlsBackgroundVideo(\n { children, ...props },\n ref\n) {\n const media = useMediaInstance(HlsBackgroundVideoMedia);\n const videoRef = useRef<HTMLVideoElement>(null);\n const attachRef = useAttachMedia(media);\n const composedRef = useComposedRefs(attachRef, videoRef, ref);\n const htmlProps = useSyncProps(media, props, hlsBackgroundVideoMediaDefaultProps);\n\n // Re-fired on the element rather than handed to `onError` directly, so React's\n // own event plumbing delivers it: the handler gets the synthetic event it is\n // typed for, and anything else listening on the node — the consumer's own\n // `addEventListener`, a testing-library assertion — sees the same failure.\n useEffect(() => {\n const forward = () => videoRef.current?.dispatchEvent(new Event('error'));\n media.addEventListener('error', forward);\n return () => media.removeEventListener('error', forward);\n }, [media]);\n\n return (\n // The same set `<hls-background-video>` forces onto its inner video, so the\n // two platforms present the same surface: silent looping playback with no\n // affordance a UA could hang chrome on — AirPlay, Cast, and picture-in-picture\n // all being things a background video has nowhere to put.\n //\n // Applied after the spread rather than before it, unlike the generic\n // `BackgroundVideo`: they're what the component is for, and attaching the\n // Media re-applies its own anyway, so honoring `muted={false}` would only\n // look like it worked.\n <video\n {...htmlProps}\n ref={composedRef}\n muted\n autoPlay\n loop\n playsInline\n disableRemotePlayback\n disablePictureInPicture\n >\n {children}\n </video>\n );\n});\n\nexport namespace HlsBackgroundVideo {\n export type Props = HlsBackgroundVideoProps;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CA,MAAa,qBAAqB,WAAsD,SAAS,mBAC/F,EAAE,UAAU,GAAG,SACf,KACA;CACA,MAAM,QAAQ,iBAAiB,uBAAuB;CACtD,MAAM,WAAW,OAAyB,IAAI;CAE9C,MAAM,cAAc,gBADF,eAAe,KACW,GAAG,UAAU,GAAG;CAC5D,MAAM,YAAY,aAAa,OAAO,OAAO,mCAAmC;CAMhF,gBAAgB;EACd,MAAM,gBAAgB,SAAS,SAAS,cAAc,IAAI,MAAM,OAAO,CAAC;EACxE,MAAM,iBAAiB,SAAS,OAAO;EACvC,aAAa,MAAM,oBAAoB,SAAS,OAAO;CACzD,GAAG,CAAC,KAAK,CAAC;CAEV,OAUE,oBAAC,SAAD;EACE,GAAI;EACJ,KAAK;EACL,OAAA;EACA,UAAA;EACA,MAAA;EACA,aAAA;EACA,uBAAA;EACA,yBAAA;EAEC;CACI,CAAA;AAEX,CAAC"}
|
|
@@ -444,9 +444,13 @@
|
|
|
444
444
|
}
|
|
445
445
|
|
|
446
446
|
.media-minimal-skin .media-slider {
|
|
447
|
+
--track-size: calc(var(--spacing) * 1);
|
|
448
|
+
--track-highlighted-size: calc(var(--spacing) * 1.75);
|
|
449
|
+
--track-border-radius: 99px;
|
|
447
450
|
--thumb-size: calc(var(--spacing) * 3);
|
|
448
|
-
--
|
|
449
|
-
--
|
|
451
|
+
--chapter-gap: calc(var(--spacing) * 1);
|
|
452
|
+
--chapter-inset-start: calc(var(--chapter-gap) / 2);
|
|
453
|
+
--chapter-inset-end: calc(var(--chapter-gap) / 2);
|
|
450
454
|
|
|
451
455
|
position: relative;
|
|
452
456
|
display: flex;
|
|
@@ -478,68 +482,14 @@
|
|
|
478
482
|
|
|
479
483
|
&[data-orientation="horizontal"] {
|
|
480
484
|
width: 100%;
|
|
481
|
-
height:
|
|
485
|
+
height: var(--track-size);
|
|
482
486
|
}
|
|
483
487
|
&[data-orientation="vertical"] {
|
|
484
|
-
width:
|
|
488
|
+
width: var(--track-size);
|
|
485
489
|
height: 100%;
|
|
486
490
|
}
|
|
487
491
|
}
|
|
488
492
|
|
|
489
|
-
/* Thumb */
|
|
490
|
-
.media-slider__thumb {
|
|
491
|
-
position: absolute;
|
|
492
|
-
z-index: 10;
|
|
493
|
-
width: var(--thumb-size);
|
|
494
|
-
height: var(--thumb-size);
|
|
495
|
-
user-select: none;
|
|
496
|
-
outline: 2px solid transparent;
|
|
497
|
-
outline-offset: -2px;
|
|
498
|
-
background-color: currentColor;
|
|
499
|
-
border-radius: calc(Infinity * 1px);
|
|
500
|
-
box-shadow:
|
|
501
|
-
0 0 0 1px var(--shadow-current-color, oklch(0 0 0 / 0.15)),
|
|
502
|
-
0 1px 3px 0 oklch(0 0 0 / 0.15),
|
|
503
|
-
0 1px 2px -1px oklch(0 0 0 / 0.15);
|
|
504
|
-
opacity: 0;
|
|
505
|
-
transform-origin: center;
|
|
506
|
-
scale: 0.7;
|
|
507
|
-
translate: -50% -50%;
|
|
508
|
-
transition-timing-function: ease-out;
|
|
509
|
-
transition-duration: 150ms;
|
|
510
|
-
|
|
511
|
-
&[data-orientation="horizontal"] {
|
|
512
|
-
top: 50%;
|
|
513
|
-
left: var(--media-slider-fill);
|
|
514
|
-
}
|
|
515
|
-
&[data-orientation="vertical"] {
|
|
516
|
-
top: calc(100% - var(--media-slider-fill));
|
|
517
|
-
left: 50%;
|
|
518
|
-
}
|
|
519
|
-
|
|
520
|
-
&:focus-visible {
|
|
521
|
-
outline-color: var(--focus-ring-color);
|
|
522
|
-
outline-offset: 2px;
|
|
523
|
-
}
|
|
524
|
-
}
|
|
525
|
-
|
|
526
|
-
&:focus-within .media-slider__thumb,
|
|
527
|
-
.media-slider__thumb--persistent {
|
|
528
|
-
width: var(--thumb-active-size);
|
|
529
|
-
height: var(--thumb-active-size);
|
|
530
|
-
opacity: 1;
|
|
531
|
-
scale: 1;
|
|
532
|
-
}
|
|
533
|
-
|
|
534
|
-
@media (hover: hover) and (pointer: fine) {
|
|
535
|
-
&:hover .media-slider__thumb {
|
|
536
|
-
width: var(--thumb-active-size);
|
|
537
|
-
height: var(--thumb-active-size);
|
|
538
|
-
opacity: 1;
|
|
539
|
-
scale: 1;
|
|
540
|
-
}
|
|
541
|
-
}
|
|
542
|
-
|
|
543
493
|
/* Shared track fills */
|
|
544
494
|
.media-slider__buffer,
|
|
545
495
|
.media-slider__fill {
|
|
@@ -551,13 +501,22 @@
|
|
|
551
501
|
inset-block: 0;
|
|
552
502
|
left: 0;
|
|
553
503
|
width: 100%;
|
|
554
|
-
transition-property: clip-path;
|
|
555
504
|
}
|
|
556
505
|
&[data-orientation="vertical"] {
|
|
557
506
|
inset-inline: 0;
|
|
558
507
|
bottom: 0;
|
|
559
508
|
height: 100%;
|
|
560
|
-
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
512
|
+
transition: clip-path 200ms ease-out;
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
&[data-dragging],
|
|
516
|
+
&[data-seeking] {
|
|
517
|
+
.media-slider__fill,
|
|
518
|
+
.media-slider__buffer {
|
|
519
|
+
transition-duration: 0ms;
|
|
561
520
|
}
|
|
562
521
|
}
|
|
563
522
|
|
|
@@ -584,6 +543,14 @@
|
|
|
584
543
|
clip-path: inset(calc(100% - var(--media-slider-fill)) 0 0 0 round var(--track-border-radius));
|
|
585
544
|
}
|
|
586
545
|
}
|
|
546
|
+
&[data-dragging] {
|
|
547
|
+
.media-slider__fill[data-orientation="horizontal"] {
|
|
548
|
+
clip-path: inset(0 calc(100% - var(--media-slider-pointer)) 0 0 round var(--track-border-radius));
|
|
549
|
+
}
|
|
550
|
+
.media-slider__fill[data-orientation="vertical"] {
|
|
551
|
+
clip-path: inset(calc(100% - var(--media-slider-pointer)) 0 0 0 round var(--track-border-radius));
|
|
552
|
+
}
|
|
553
|
+
}
|
|
587
554
|
|
|
588
555
|
/* Chapters */
|
|
589
556
|
.media-slider__chapters {
|
|
@@ -607,9 +574,6 @@
|
|
|
607
574
|
}
|
|
608
575
|
|
|
609
576
|
.media-slider__chapter {
|
|
610
|
-
--chapter-gap: calc(var(--spacing) * 1);
|
|
611
|
-
--chapter-inset-start: calc(var(--chapter-gap) / 2);
|
|
612
|
-
--chapter-inset-end: calc(var(--chapter-gap) / 2);
|
|
613
577
|
position: absolute;
|
|
614
578
|
inset: 0;
|
|
615
579
|
display: flex;
|
|
@@ -626,8 +590,6 @@
|
|
|
626
590
|
}
|
|
627
591
|
|
|
628
592
|
.media-slider__chapter-track {
|
|
629
|
-
--chapter-track-size: calc(var(--spacing) * 0.75);
|
|
630
|
-
--chapter-track-highlighted-size: calc(var(--spacing) * 1.25);
|
|
631
593
|
border-radius: var(--track-border-radius);
|
|
632
594
|
|
|
633
595
|
@media (prefers-reduced-motion: no-preference) {
|
|
@@ -640,7 +602,7 @@
|
|
|
640
602
|
clip-path: inset(0 calc(100% - var(--media-slider-chapter-end)) 0 var(--media-slider-chapter-start));
|
|
641
603
|
|
|
642
604
|
.media-slider__chapter-track {
|
|
643
|
-
height: var(--
|
|
605
|
+
height: var(--track-size);
|
|
644
606
|
clip-path: inset(
|
|
645
607
|
0 calc(100% - var(--media-slider-chapter-end) + var(--chapter-inset-end)) 0
|
|
646
608
|
calc(var(--media-slider-chapter-start) + var(--chapter-inset-start)) round var(--track-border-radius)
|
|
@@ -648,7 +610,7 @@
|
|
|
648
610
|
}
|
|
649
611
|
|
|
650
612
|
&[data-highlighted] .media-slider__chapter-track {
|
|
651
|
-
height: var(--
|
|
613
|
+
height: var(--track-highlighted-size);
|
|
652
614
|
}
|
|
653
615
|
}
|
|
654
616
|
|
|
@@ -656,7 +618,7 @@
|
|
|
656
618
|
clip-path: inset(calc(100% - var(--media-slider-chapter-end)) 0 var(--media-slider-chapter-start) 0);
|
|
657
619
|
|
|
658
620
|
.media-slider__chapter-track {
|
|
659
|
-
width: var(--
|
|
621
|
+
width: var(--track-size);
|
|
660
622
|
clip-path: inset(
|
|
661
623
|
calc(100% - var(--media-slider-chapter-end) + var(--chapter-inset-end)) 0
|
|
662
624
|
calc(var(--media-slider-chapter-start) + var(--chapter-inset-start)) 0 round var(--track-border-radius)
|
|
@@ -664,63 +626,102 @@
|
|
|
664
626
|
}
|
|
665
627
|
|
|
666
628
|
&[data-highlighted] .media-slider__chapter-track {
|
|
667
|
-
width: var(--
|
|
629
|
+
width: var(--track-highlighted-size);
|
|
668
630
|
}
|
|
669
631
|
}
|
|
670
632
|
}
|
|
671
633
|
|
|
672
|
-
/*
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
634
|
+
/* Thumb */
|
|
635
|
+
.media-slider__thumb {
|
|
636
|
+
position: absolute;
|
|
637
|
+
z-index: 10;
|
|
638
|
+
width: var(--thumb-size);
|
|
639
|
+
height: var(--thumb-size);
|
|
640
|
+
user-select: none;
|
|
641
|
+
outline: 2px solid transparent;
|
|
642
|
+
outline-offset: -2px;
|
|
643
|
+
background-color: currentColor;
|
|
644
|
+
border-radius: calc(Infinity * 1px);
|
|
645
|
+
box-shadow:
|
|
646
|
+
0 0 0 1px var(--shadow-current-color, oklch(0 0 0 / 0.15)),
|
|
647
|
+
0 1px 3px 0 oklch(0 0 0 / 0.15),
|
|
648
|
+
0 1px 2px -1px oklch(0 0 0 / 0.15);
|
|
649
|
+
opacity: 0;
|
|
650
|
+
transform-origin: center;
|
|
651
|
+
scale: 0.7;
|
|
652
|
+
translate: -50% -50%;
|
|
653
|
+
|
|
654
|
+
&[data-orientation="horizontal"] {
|
|
655
|
+
top: 50%;
|
|
656
|
+
left: var(--media-slider-fill);
|
|
682
657
|
}
|
|
683
|
-
|
|
684
|
-
|
|
658
|
+
&[data-orientation="vertical"] {
|
|
659
|
+
top: calc(100% - var(--media-slider-fill));
|
|
660
|
+
left: 50%;
|
|
685
661
|
}
|
|
686
|
-
}
|
|
687
662
|
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
663
|
+
&:focus-visible {
|
|
664
|
+
outline-color: var(--focus-ring-color);
|
|
665
|
+
outline-offset: 2px;
|
|
691
666
|
}
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
667
|
+
|
|
668
|
+
&:focus-visible,
|
|
669
|
+
&.media-slider__thumb--persistent {
|
|
670
|
+
opacity: 1;
|
|
671
|
+
scale: 1;
|
|
695
672
|
}
|
|
696
|
-
|
|
673
|
+
|
|
674
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
697
675
|
transition-timing-function: ease-out;
|
|
698
|
-
transition-duration:
|
|
676
|
+
transition-duration: 150ms;
|
|
677
|
+
transition-property: opacity, outline-offset, left, top, scale;
|
|
699
678
|
}
|
|
700
679
|
}
|
|
701
680
|
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
681
|
+
@media (hover: hover) and (pointer: fine) {
|
|
682
|
+
&:hover .media-slider__thumb {
|
|
683
|
+
opacity: 1;
|
|
684
|
+
scale: 1;
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
&[data-dragging] .media-slider__thumb {
|
|
689
|
+
opacity: 1;
|
|
690
|
+
scale: 0.9;
|
|
691
|
+
|
|
692
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
693
|
+
transition-property: opacity, outline-offset, scale;
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
&[data-orientation="horizontal"] {
|
|
697
|
+
left: var(--media-slider-pointer);
|
|
698
|
+
}
|
|
699
|
+
&[data-orientation="vertical"] {
|
|
700
|
+
top: calc(100% - var(--media-slider-pointer));
|
|
708
701
|
}
|
|
709
702
|
}
|
|
710
703
|
|
|
711
704
|
/* Preview */
|
|
712
705
|
.media-slider__preview {
|
|
713
|
-
--max-
|
|
714
|
-
--max-
|
|
706
|
+
--max-size-factor: 28;
|
|
707
|
+
--max-size: min(calc(var(--spacing) * var(--max-size-factor)), 100cqi);
|
|
715
708
|
|
|
716
709
|
min-width: 100%;
|
|
717
710
|
height: calc(var(--spacing) * 1);
|
|
718
711
|
|
|
712
|
+
@container media-root (width > 32rem) {
|
|
713
|
+
--max-size-factor: 36;
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
@container media-root (width > 42rem) {
|
|
717
|
+
--max-size-factor: 48;
|
|
718
|
+
}
|
|
719
|
+
|
|
719
720
|
.media-slider__thumbnail,
|
|
720
721
|
.media-slider__value {
|
|
721
722
|
position: absolute;
|
|
722
723
|
left: var(--preview-left, var(--media-slider-pointer));
|
|
723
|
-
max-width: var(--max-
|
|
724
|
+
max-width: var(--max-size);
|
|
724
725
|
opacity: 0;
|
|
725
726
|
filter: blur(8px);
|
|
726
727
|
transform-origin: bottom;
|
|
@@ -732,8 +733,9 @@
|
|
|
732
733
|
}
|
|
733
734
|
|
|
734
735
|
.media-slider__thumbnail {
|
|
735
|
-
--thumbnail-max-width: var(--max-
|
|
736
|
-
|
|
736
|
+
--thumbnail-max-width: var(--max-size);
|
|
737
|
+
--thumbnail-max-height: var(--max-size);
|
|
738
|
+
bottom: calc(100% + (var(--spacing) * 11));
|
|
737
739
|
}
|
|
738
740
|
|
|
739
741
|
.media-slider__value {
|
|
@@ -52,8 +52,8 @@ import VolumeLowIcon from "../../icons/dist/react/minimal/volume-low.js";
|
|
|
52
52
|
import VolumeOffIcon from "../../icons/dist/react/minimal/volume-off.js";
|
|
53
53
|
import { forwardRef } from "react";
|
|
54
54
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
55
|
-
import { playbackRateText } from "@videojs/core/i18n/text/menu";
|
|
56
55
|
import { cn } from "@videojs/utils/style";
|
|
56
|
+
import { playbackRateText } from "@videojs/core/i18n/text/menu";
|
|
57
57
|
//#region src/presets/audio/minimal-skin.tsx
|
|
58
58
|
const SEEK_TIME = 10;
|
|
59
59
|
const Button = forwardRef(function Button({ className, ...props }, ref) {
|
|
@@ -61,8 +61,8 @@ import { time } from "../../skins/dist/default/minimal/tailwind/components/time.
|
|
|
61
61
|
import { container, controls, error, playButton, popup, slider } from "../../skins/dist/default/minimal/tailwind/audio.tailwind.js";
|
|
62
62
|
import { forwardRef } from "react";
|
|
63
63
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
64
|
-
import { playbackRateText } from "@videojs/core/i18n/text/menu";
|
|
65
64
|
import { cn } from "@videojs/utils/style";
|
|
65
|
+
import { playbackRateText } from "@videojs/core/i18n/text/menu";
|
|
66
66
|
//#region src/presets/audio/minimal-skin.tailwind.tsx
|
|
67
67
|
const SEEK_TIME = 10;
|
|
68
68
|
const Button = forwardRef(function Button({ className, ...props }, ref) {
|