@videojs/react 0.1.0-preview.8 → 10.0.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/default/_virtual/_rolldown/runtime.js +18 -0
- package/dist/default/index.js +22 -0
- package/dist/default/media/audio.js +22 -0
- package/dist/default/media/audio.js.map +1 -0
- package/dist/default/media/background-video/index.js +28 -0
- package/dist/default/media/background-video/index.js.map +1 -0
- package/dist/default/media/hls-video/index.js +25 -0
- package/dist/default/media/hls-video/index.js.map +1 -0
- package/dist/default/media/video.js +22 -0
- package/dist/default/media/video.js.map +1 -0
- package/dist/default/player/context.js +55 -0
- package/dist/default/player/context.js.map +1 -0
- package/dist/default/player/create-player.js +38 -0
- package/dist/default/player/create-player.js.map +1 -0
- package/dist/default/presets/audio/index.js +5 -0
- package/dist/default/presets/audio/minimal-skin.css +3 -0
- package/dist/default/presets/audio/minimal-skin.js +11 -0
- package/dist/default/presets/audio/minimal-skin.js.map +1 -0
- package/dist/default/presets/audio/skin.css +3 -0
- package/dist/default/presets/audio/skin.js +11 -0
- package/dist/default/presets/audio/skin.js.map +1 -0
- package/dist/default/presets/background/index.js +4 -0
- package/dist/default/presets/background/skin.css +3 -0
- package/dist/default/presets/background/skin.js +11 -0
- package/dist/default/presets/background/skin.js.map +1 -0
- package/dist/default/presets/video/index.js +7 -0
- package/dist/default/presets/video/minimal-skin.css +637 -0
- package/dist/default/presets/video/minimal-skin.js +234 -0
- package/dist/default/presets/video/minimal-skin.js.map +1 -0
- package/dist/default/presets/video/minimal-skin.tailwind.js +231 -0
- package/dist/default/presets/video/minimal-skin.tailwind.js.map +1 -0
- package/dist/default/presets/video/skin.css +638 -0
- package/dist/default/presets/video/skin.js +223 -0
- package/dist/default/presets/video/skin.js.map +1 -0
- package/dist/default/presets/video/skin.tailwind.js +222 -0
- package/dist/default/presets/video/skin.tailwind.js.map +1 -0
- package/dist/default/ui/buffering-indicator/buffering-indicator.js +50 -0
- package/dist/default/ui/buffering-indicator/buffering-indicator.js.map +1 -0
- package/dist/default/ui/buffering-indicator/index.js +3 -0
- package/dist/default/ui/captions-button/captions-button.js +51 -0
- package/dist/default/ui/captions-button/captions-button.js.map +1 -0
- package/dist/default/ui/captions-button/index.js +3 -0
- package/dist/default/ui/controls/controls-group.js +27 -0
- package/dist/default/ui/controls/controls-group.js.map +1 -0
- package/dist/default/ui/controls/controls-root.js +31 -0
- package/dist/default/ui/controls/controls-root.js.map +1 -0
- package/dist/default/ui/controls/index.js +3 -0
- package/dist/default/ui/controls/index.parts.js +13 -0
- package/dist/default/ui/controls/index.parts.js.map +1 -0
- package/dist/default/ui/error-dialog/error-dialog.js +54 -0
- package/dist/default/ui/error-dialog/error-dialog.js.map +1 -0
- package/dist/default/ui/error-dialog/index.js +3 -0
- package/dist/default/ui/fullscreen-button/fullscreen-button.js +44 -0
- package/dist/default/ui/fullscreen-button/fullscreen-button.js.map +1 -0
- package/dist/default/ui/fullscreen-button/index.js +3 -0
- package/dist/default/ui/hooks/use-button.js +44 -0
- package/dist/default/ui/hooks/use-button.js.map +1 -0
- package/dist/default/ui/mute-button/index.js +3 -0
- package/dist/default/ui/mute-button/mute-button.js +47 -0
- package/dist/default/ui/mute-button/mute-button.js.map +1 -0
- package/dist/default/ui/pip-button/index.js +3 -0
- package/dist/default/ui/pip-button/pip-button.js +44 -0
- package/dist/default/ui/pip-button/pip-button.js.map +1 -0
- package/dist/default/ui/play-button/index.js +3 -0
- package/dist/default/ui/play-button/play-button.js +60 -0
- package/dist/default/ui/play-button/play-button.js.map +1 -0
- package/dist/default/ui/poster/index.js +3 -0
- package/dist/default/ui/poster/poster.js +43 -0
- package/dist/default/ui/poster/poster.js.map +1 -0
- package/dist/default/ui/seek-button/index.js +3 -0
- package/dist/default/ui/seek-button/seek-button.js +62 -0
- package/dist/default/ui/seek-button/seek-button.js.map +1 -0
- package/dist/default/ui/time/index.js +3 -0
- package/dist/default/ui/time/index.parts.js +15 -0
- package/dist/default/ui/time/index.parts.js.map +1 -0
- package/dist/default/ui/time/time-group.js +34 -0
- package/dist/default/ui/time/time-group.js.map +1 -0
- package/dist/default/ui/time/time-separator.js +34 -0
- package/dist/default/ui/time/time-separator.js.map +1 -0
- package/dist/default/ui/time/time-value.js +54 -0
- package/dist/default/ui/time/time-value.js.map +1 -0
- package/dist/default/utils/attach-media-element.js +12 -0
- package/dist/default/utils/attach-media-element.js.map +1 -0
- package/dist/default/utils/media-props.js +11 -0
- package/dist/default/utils/media-props.js.map +1 -0
- package/dist/default/utils/merge-props.js +85 -0
- package/dist/default/utils/merge-props.js.map +1 -0
- package/dist/default/utils/use-composed-refs.js +57 -0
- package/dist/default/utils/use-composed-refs.js.map +1 -0
- package/dist/default/utils/use-render.js +71 -0
- package/dist/default/utils/use-render.js.map +1 -0
- package/dist/dev/_virtual/_rolldown/runtime.js +18 -0
- package/dist/dev/index.d.ts +23 -0
- package/dist/dev/index.js +22 -0
- package/dist/dev/media/audio.d.ts +12 -0
- package/dist/dev/media/audio.d.ts.map +1 -0
- package/dist/dev/media/audio.js +22 -0
- package/dist/dev/media/audio.js.map +1 -0
- package/dist/dev/media/background-video/index.d.ts +12 -0
- package/dist/dev/media/background-video/index.d.ts.map +1 -0
- package/dist/dev/media/background-video/index.js +28 -0
- package/dist/dev/media/background-video/index.js.map +1 -0
- package/dist/dev/media/hls-video/index.d.ts +11 -0
- package/dist/dev/media/hls-video/index.d.ts.map +1 -0
- package/dist/dev/media/hls-video/index.js +25 -0
- package/dist/dev/media/hls-video/index.js.map +1 -0
- package/dist/dev/media/video.d.ts +12 -0
- package/dist/dev/media/video.d.ts.map +1 -0
- package/dist/dev/media/video.js +22 -0
- package/dist/dev/media/video.js.map +1 -0
- package/dist/dev/player/context.d.ts +40 -0
- package/dist/dev/player/context.d.ts.map +1 -0
- package/dist/dev/player/context.js +55 -0
- package/dist/dev/player/context.js.map +1 -0
- package/dist/dev/player/create-player.d.ts +47 -0
- package/dist/dev/player/create-player.d.ts.map +1 -0
- package/dist/dev/player/create-player.js +39 -0
- package/dist/dev/player/create-player.js.map +1 -0
- package/dist/dev/presets/audio/index.d.ts +4 -0
- package/dist/dev/presets/audio/index.js +5 -0
- package/dist/dev/presets/audio/minimal-skin.css +3 -0
- package/dist/dev/presets/audio/minimal-skin.d.ts +9 -0
- package/dist/dev/presets/audio/minimal-skin.d.ts.map +1 -0
- package/dist/dev/presets/audio/minimal-skin.js +11 -0
- package/dist/dev/presets/audio/minimal-skin.js.map +1 -0
- package/dist/dev/presets/audio/skin.css +3 -0
- package/dist/dev/presets/audio/skin.d.ts +9 -0
- package/dist/dev/presets/audio/skin.d.ts.map +1 -0
- package/dist/dev/presets/audio/skin.js +11 -0
- package/dist/dev/presets/audio/skin.js.map +1 -0
- package/dist/dev/presets/background/index.d.ts +3 -0
- package/dist/dev/presets/background/index.js +4 -0
- package/dist/dev/presets/background/skin.css +3 -0
- package/dist/dev/presets/background/skin.d.ts +9 -0
- package/dist/dev/presets/background/skin.d.ts.map +1 -0
- package/dist/dev/presets/background/skin.js +11 -0
- package/dist/dev/presets/background/skin.js.map +1 -0
- package/dist/dev/presets/types.d.ts +10 -0
- package/dist/dev/presets/types.d.ts.map +1 -0
- package/dist/dev/presets/video/index.d.ts +6 -0
- package/dist/dev/presets/video/index.js +7 -0
- package/dist/dev/presets/video/minimal-skin.css +637 -0
- package/dist/dev/presets/video/minimal-skin.d.ts +9 -0
- package/dist/dev/presets/video/minimal-skin.d.ts.map +1 -0
- package/dist/dev/presets/video/minimal-skin.js +234 -0
- package/dist/dev/presets/video/minimal-skin.js.map +1 -0
- package/dist/dev/presets/video/minimal-skin.tailwind.d.ts +8 -0
- package/dist/dev/presets/video/minimal-skin.tailwind.d.ts.map +1 -0
- package/dist/dev/presets/video/minimal-skin.tailwind.js +231 -0
- package/dist/dev/presets/video/minimal-skin.tailwind.js.map +1 -0
- package/dist/dev/presets/video/skin.css +638 -0
- package/dist/dev/presets/video/skin.d.ts +9 -0
- package/dist/dev/presets/video/skin.d.ts.map +1 -0
- package/dist/dev/presets/video/skin.js +223 -0
- package/dist/dev/presets/video/skin.js.map +1 -0
- package/dist/dev/presets/video/skin.tailwind.d.ts +8 -0
- package/dist/dev/presets/video/skin.tailwind.d.ts.map +1 -0
- package/dist/dev/presets/video/skin.tailwind.js +222 -0
- package/dist/dev/presets/video/skin.tailwind.js.map +1 -0
- package/dist/dev/ui/buffering-indicator/buffering-indicator.d.ts +32 -0
- package/dist/dev/ui/buffering-indicator/buffering-indicator.d.ts.map +1 -0
- package/dist/dev/ui/buffering-indicator/buffering-indicator.js +53 -0
- package/dist/dev/ui/buffering-indicator/buffering-indicator.js.map +1 -0
- package/dist/dev/ui/buffering-indicator/index.d.ts +2 -0
- package/dist/dev/ui/buffering-indicator/index.js +3 -0
- package/dist/dev/ui/captions-button/captions-button.d.ts +36 -0
- package/dist/dev/ui/captions-button/captions-button.d.ts.map +1 -0
- package/dist/dev/ui/captions-button/captions-button.js +51 -0
- package/dist/dev/ui/captions-button/captions-button.js.map +1 -0
- package/dist/dev/ui/captions-button/index.d.ts +2 -0
- package/dist/dev/ui/captions-button/index.js +3 -0
- package/dist/dev/ui/controls/controls-group.d.ts +17 -0
- package/dist/dev/ui/controls/controls-group.d.ts.map +1 -0
- package/dist/dev/ui/controls/controls-group.js +27 -0
- package/dist/dev/ui/controls/controls-group.js.map +1 -0
- package/dist/dev/ui/controls/controls-root.d.ts +18 -0
- package/dist/dev/ui/controls/controls-root.d.ts.map +1 -0
- package/dist/dev/ui/controls/controls-root.js +34 -0
- package/dist/dev/ui/controls/controls-root.js.map +1 -0
- package/dist/dev/ui/controls/index.d.ts +2 -0
- package/dist/dev/ui/controls/index.js +3 -0
- package/dist/dev/ui/controls/index.parts.d.ts +10 -0
- package/dist/dev/ui/controls/index.parts.d.ts.map +1 -0
- package/dist/dev/ui/controls/index.parts.js +13 -0
- package/dist/dev/ui/controls/index.parts.js.map +1 -0
- package/dist/dev/ui/error-dialog/error-dialog.d.ts +35 -0
- package/dist/dev/ui/error-dialog/error-dialog.d.ts.map +1 -0
- package/dist/dev/ui/error-dialog/error-dialog.js +54 -0
- package/dist/dev/ui/error-dialog/error-dialog.js.map +1 -0
- package/dist/dev/ui/error-dialog/index.d.ts +2 -0
- package/dist/dev/ui/error-dialog/index.js +3 -0
- package/dist/dev/ui/fullscreen-button/fullscreen-button.d.ts +14 -0
- package/dist/dev/ui/fullscreen-button/fullscreen-button.d.ts.map +1 -0
- package/dist/dev/ui/fullscreen-button/fullscreen-button.js +47 -0
- package/dist/dev/ui/fullscreen-button/fullscreen-button.js.map +1 -0
- package/dist/dev/ui/fullscreen-button/index.d.ts +2 -0
- package/dist/dev/ui/fullscreen-button/index.js +3 -0
- package/dist/dev/ui/hooks/use-button.d.ts +40 -0
- package/dist/dev/ui/hooks/use-button.d.ts.map +1 -0
- package/dist/dev/ui/hooks/use-button.js +46 -0
- package/dist/dev/ui/hooks/use-button.js.map +1 -0
- package/dist/dev/ui/mute-button/index.d.ts +2 -0
- package/dist/dev/ui/mute-button/index.js +3 -0
- package/dist/dev/ui/mute-button/mute-button.d.ts +17 -0
- package/dist/dev/ui/mute-button/mute-button.d.ts.map +1 -0
- package/dist/dev/ui/mute-button/mute-button.js +50 -0
- package/dist/dev/ui/mute-button/mute-button.js.map +1 -0
- package/dist/dev/ui/pip-button/index.d.ts +2 -0
- package/dist/dev/ui/pip-button/index.js +3 -0
- package/dist/dev/ui/pip-button/pip-button.d.ts +14 -0
- package/dist/dev/ui/pip-button/pip-button.d.ts.map +1 -0
- package/dist/dev/ui/pip-button/pip-button.js +47 -0
- package/dist/dev/ui/pip-button/pip-button.js.map +1 -0
- package/dist/dev/ui/play-button/index.d.ts +2 -0
- package/dist/dev/ui/play-button/index.js +3 -0
- package/dist/dev/ui/play-button/play-button.d.ts +30 -0
- package/dist/dev/ui/play-button/play-button.d.ts.map +1 -0
- package/dist/dev/ui/play-button/play-button.js +63 -0
- package/dist/dev/ui/play-button/play-button.js.map +1 -0
- package/dist/dev/ui/poster/index.d.ts +2 -0
- package/dist/dev/ui/poster/index.js +3 -0
- package/dist/dev/ui/poster/poster.d.ts +28 -0
- package/dist/dev/ui/poster/poster.d.ts.map +1 -0
- package/dist/dev/ui/poster/poster.js +46 -0
- package/dist/dev/ui/poster/poster.js.map +1 -0
- package/dist/dev/ui/seek-button/index.d.ts +2 -0
- package/dist/dev/ui/seek-button/index.js +3 -0
- package/dist/dev/ui/seek-button/seek-button.d.ts +31 -0
- package/dist/dev/ui/seek-button/seek-button.d.ts.map +1 -0
- package/dist/dev/ui/seek-button/seek-button.js +65 -0
- package/dist/dev/ui/seek-button/seek-button.js.map +1 -0
- package/dist/dev/ui/time/index.d.ts +2 -0
- package/dist/dev/ui/time/index.js +3 -0
- package/dist/dev/ui/time/index.parts.d.ts +11 -0
- package/dist/dev/ui/time/index.parts.d.ts.map +1 -0
- package/dist/dev/ui/time/index.parts.js +15 -0
- package/dist/dev/ui/time/index.parts.js.map +1 -0
- package/dist/dev/ui/time/time-group.d.ts +29 -0
- package/dist/dev/ui/time/time-group.d.ts.map +1 -0
- package/dist/dev/ui/time/time-group.js +34 -0
- package/dist/dev/ui/time/time-group.js.map +1 -0
- package/dist/dev/ui/time/time-separator.d.ts +26 -0
- package/dist/dev/ui/time/time-separator.d.ts.map +1 -0
- package/dist/dev/ui/time/time-separator.js +34 -0
- package/dist/dev/ui/time/time-separator.js.map +1 -0
- package/dist/dev/ui/time/time-value.d.ts +24 -0
- package/dist/dev/ui/time/time-value.d.ts.map +1 -0
- package/dist/dev/ui/time/time-value.js +57 -0
- package/dist/dev/ui/time/time-value.js.map +1 -0
- package/dist/dev/utils/attach-media-element.js +12 -0
- package/dist/dev/utils/attach-media-element.js.map +1 -0
- package/dist/dev/utils/media-props.js +11 -0
- package/dist/dev/utils/media-props.js.map +1 -0
- package/dist/dev/utils/merge-props.d.ts +26 -0
- package/dist/dev/utils/merge-props.d.ts.map +1 -0
- package/dist/dev/utils/merge-props.js +85 -0
- package/dist/dev/utils/merge-props.js.map +1 -0
- package/dist/dev/utils/types.d.ts +27 -0
- package/dist/dev/utils/types.d.ts.map +1 -0
- package/dist/dev/utils/use-composed-refs.js +57 -0
- package/dist/dev/utils/use-composed-refs.js.map +1 -0
- package/dist/dev/utils/use-render.d.ts +45 -0
- package/dist/dev/utils/use-render.d.ts.map +1 -0
- package/dist/dev/utils/use-render.js +71 -0
- package/dist/dev/utils/use-render.js.map +1 -0
- package/package.json +58 -53
- package/dist/FrostedSkin-t8edr5LV.d.ts +0 -13
- package/dist/FrostedSkin-t8edr5LV.d.ts.map +0 -1
- package/dist/MinimalSkin-DzHkJgW-.d.ts +0 -13
- package/dist/MinimalSkin-DzHkJgW-.d.ts.map +0 -1
- package/dist/VolumeSlider-DmlupkvF.js +0 -1042
- package/dist/VolumeSlider-DmlupkvF.js.map +0 -1
- package/dist/frosted-0lXuIgHt.js +0 -156
- package/dist/frosted-0lXuIgHt.js.map +0 -1
- package/dist/icons-BqfV81R8.js +0 -316
- package/dist/icons-BqfV81R8.js.map +0 -1
- package/dist/icons.d.ts +0 -71
- package/dist/icons.d.ts.map +0 -1
- package/dist/icons.js +0 -3
- package/dist/index-CM70WSkA.d.ts +0 -36
- package/dist/index-CM70WSkA.d.ts.map +0 -1
- package/dist/index.d.ts +0 -312
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -89
- package/dist/index.js.map +0 -1
- package/dist/minimal-B-R9aRNe.js +0 -162
- package/dist/minimal-B-R9aRNe.js.map +0 -1
- package/dist/skins/frosted.css +0 -4
- package/dist/skins/frosted.d.ts +0 -2
- package/dist/skins/frosted.js +0 -9
- package/dist/skins/minimal.css +0 -4
- package/dist/skins/minimal.d.ts +0 -2
- package/dist/skins/minimal.js +0 -9
- package/dist/store-hGO5HE2A.js +0 -124
- package/dist/store-hGO5HE2A.js.map +0 -1
- package/dist/store.d.ts +0 -2
- package/dist/store.js +0 -6
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { renderElement } from "../../utils/use-render.js";
|
|
4
|
+
import { forwardRef } from "react";
|
|
5
|
+
|
|
6
|
+
//#region src/ui/time/time-group.tsx
|
|
7
|
+
/**
|
|
8
|
+
* Container for composed time displays. Renders a `<span>` element.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```tsx
|
|
12
|
+
* <Time.Group>
|
|
13
|
+
* <Time.Value type="current" />
|
|
14
|
+
* <Time.Separator />
|
|
15
|
+
* <Time.Value type="duration" />
|
|
16
|
+
* </Time.Group>
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
const Group = forwardRef(function Group(componentProps, forwardedRef) {
|
|
20
|
+
const { render, className, style, children, ...elementProps } = componentProps;
|
|
21
|
+
return renderElement("span", {
|
|
22
|
+
render,
|
|
23
|
+
className,
|
|
24
|
+
style
|
|
25
|
+
}, {
|
|
26
|
+
state: {},
|
|
27
|
+
ref: [forwardedRef],
|
|
28
|
+
props: [{ children }, elementProps]
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
//#endregion
|
|
33
|
+
export { Group };
|
|
34
|
+
//# sourceMappingURL=time-group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time-group.js","names":[],"sources":["../../../../src/ui/time/time-group.tsx"],"sourcesContent":["'use client';\n\nimport type { ForwardedRef, ReactNode } from 'react';\nimport { forwardRef } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\n\n// Empty state for Group (no dynamic state)\ntype GroupState = Record<string, never>;\n\nexport interface GroupProps extends UIComponentProps<'span', GroupState> {\n /** Time value components to render inside the group. */\n children?: ReactNode | undefined;\n}\n\n/**\n * Container for composed time displays. Renders a `<span>` element.\n *\n * @example\n * ```tsx\n * <Time.Group>\n * <Time.Value type=\"current\" />\n * <Time.Separator />\n * <Time.Value type=\"duration\" />\n * </Time.Group>\n * ```\n */\nexport const Group = forwardRef(function Group(\n componentProps: GroupProps,\n forwardedRef: ForwardedRef<HTMLSpanElement>\n) {\n const { render, className, style, children, ...elementProps } = componentProps;\n\n const state: GroupState = {};\n\n return renderElement(\n 'span',\n { render, className, style },\n {\n state,\n ref: [forwardedRef],\n props: [{ children }, elementProps],\n }\n );\n});\n\nexport namespace Group {\n export type Props = GroupProps;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AA4BA,MAAa,QAAQ,WAAW,SAAS,MACvC,gBACA,cACA;CACA,MAAM,EAAE,QAAQ,WAAW,OAAO,UAAU,GAAG,iBAAiB;AAIhE,QAAO,cACL,QACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE,OANsB,EAAE;EAOxB,KAAK,CAAC,aAAa;EACnB,OAAO,CAAC,EAAE,UAAU,EAAE,aAAa;EACpC,CACF;EACD"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { renderElement } from "../../utils/use-render.js";
|
|
4
|
+
import { forwardRef } from "react";
|
|
5
|
+
|
|
6
|
+
//#region src/ui/time/time-separator.tsx
|
|
7
|
+
/**
|
|
8
|
+
* Divider between time values. Hidden from screen readers.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```tsx
|
|
12
|
+
* <Time.Separator />
|
|
13
|
+
* <Time.Separator> of </Time.Separator>
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
const Separator = forwardRef(function Separator(componentProps, forwardedRef) {
|
|
17
|
+
const { render, className, style, children = "/", ...elementProps } = componentProps;
|
|
18
|
+
return renderElement("span", {
|
|
19
|
+
render,
|
|
20
|
+
className,
|
|
21
|
+
style
|
|
22
|
+
}, {
|
|
23
|
+
state: {},
|
|
24
|
+
ref: [forwardedRef],
|
|
25
|
+
props: [{
|
|
26
|
+
"aria-hidden": "true",
|
|
27
|
+
children
|
|
28
|
+
}, elementProps]
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
//#endregion
|
|
33
|
+
export { Separator };
|
|
34
|
+
//# sourceMappingURL=time-separator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time-separator.js","names":[],"sources":["../../../../src/ui/time/time-separator.tsx"],"sourcesContent":["'use client';\n\nimport type { ForwardedRef, ReactNode } from 'react';\nimport { forwardRef } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\n\n// Empty state for Separator (no dynamic state)\ntype SeparatorState = Record<string, never>;\n\nexport interface SeparatorProps extends UIComponentProps<'span', SeparatorState> {\n /** Separator content. Defaults to \"/\". */\n children?: ReactNode | undefined;\n}\n\n/**\n * Divider between time values. Hidden from screen readers.\n *\n * @example\n * ```tsx\n * <Time.Separator />\n * <Time.Separator> of </Time.Separator>\n * ```\n */\nexport const Separator = forwardRef(function Separator(\n componentProps: SeparatorProps,\n forwardedRef: ForwardedRef<HTMLSpanElement>\n) {\n const { render, className, style, children = '/', ...elementProps } = componentProps;\n\n const state: SeparatorState = {};\n\n return renderElement(\n 'span',\n { render, className, style },\n {\n state,\n ref: [forwardedRef],\n props: [{ 'aria-hidden': 'true', children }, elementProps],\n }\n );\n});\n\nexport namespace Separator {\n export type Props = SeparatorProps;\n}\n"],"mappings":";;;;;;;;;;;;;;;AAyBA,MAAa,YAAY,WAAW,SAAS,UAC3C,gBACA,cACA;CACA,MAAM,EAAE,QAAQ,WAAW,OAAO,WAAW,KAAK,GAAG,iBAAiB;AAItE,QAAO,cACL,QACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE,OAN0B,EAAE;EAO5B,KAAK,CAAC,aAAa;EACnB,OAAO,CAAC;GAAE,eAAe;GAAQ;GAAU,EAAE,aAAa;EAC3D,CACF;EACD"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { usePlayer } from "../../player/context.js";
|
|
4
|
+
import { renderElement } from "../../utils/use-render.js";
|
|
5
|
+
import { selectTime } from "@videojs/core/dom";
|
|
6
|
+
import { forwardRef, useState } from "react";
|
|
7
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
import { TimeCore, TimeDataAttrs } from "@videojs/core";
|
|
9
|
+
|
|
10
|
+
//#region src/ui/time/time-value.tsx
|
|
11
|
+
/**
|
|
12
|
+
* Displays a formatted time value (current, duration, or remaining).
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```tsx
|
|
16
|
+
* <Time.Value />
|
|
17
|
+
* <Time.Value type="duration" />
|
|
18
|
+
* <Time.Value type="remaining" negativeSign="−" />
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
const Value = forwardRef(function Value(componentProps, forwardedRef) {
|
|
22
|
+
const { render, className, style, type, negativeSign, label, ...elementProps } = componentProps;
|
|
23
|
+
const time = usePlayer(selectTime);
|
|
24
|
+
const [core] = useState(() => new TimeCore());
|
|
25
|
+
core.setProps({
|
|
26
|
+
type,
|
|
27
|
+
negativeSign,
|
|
28
|
+
label
|
|
29
|
+
});
|
|
30
|
+
if (!time) return null;
|
|
31
|
+
const state = core.getState(time);
|
|
32
|
+
const content = state.negative ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
|
|
33
|
+
"aria-hidden": "true",
|
|
34
|
+
children: negativeSign ?? TimeCore.defaultProps.negativeSign
|
|
35
|
+
}), state.text] }) : state.text;
|
|
36
|
+
return renderElement("time", {
|
|
37
|
+
render,
|
|
38
|
+
className,
|
|
39
|
+
style
|
|
40
|
+
}, {
|
|
41
|
+
state,
|
|
42
|
+
stateAttrMap: TimeDataAttrs,
|
|
43
|
+
ref: [forwardedRef],
|
|
44
|
+
props: [{
|
|
45
|
+
dateTime: state.datetime,
|
|
46
|
+
children: content,
|
|
47
|
+
...core.getAttrs(state)
|
|
48
|
+
}, elementProps]
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
//#endregion
|
|
53
|
+
export { Value };
|
|
54
|
+
//# sourceMappingURL=time-value.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time-value.js","names":[],"sources":["../../../../src/ui/time/time-value.tsx"],"sourcesContent":["'use client';\n\nimport { TimeCore, TimeDataAttrs } from '@videojs/core';\nimport { logMissingFeature, selectTime } 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 ValueProps extends Omit<UIComponentProps<'time', TimeCore.State>, 'children'>, TimeCore.Props {}\n\n/**\n * Displays a formatted time value (current, duration, or remaining).\n *\n * @example\n * ```tsx\n * <Time.Value />\n * <Time.Value type=\"duration\" />\n * <Time.Value type=\"remaining\" negativeSign=\"−\" />\n * ```\n */\nexport const Value = forwardRef(function Value(\n componentProps: ValueProps,\n forwardedRef: ForwardedRef<HTMLTimeElement>\n) {\n const { render, className, style, type, negativeSign, label, ...elementProps } = componentProps;\n\n const time = usePlayer(selectTime);\n\n const [core] = useState(() => new TimeCore());\n core.setProps({ type, negativeSign, label });\n\n if (!time) {\n if (__DEV__) logMissingFeature('Time.Value', 'time');\n return null;\n }\n\n const state = core.getState(time);\n\n const content = state.negative ? (\n <>\n <span aria-hidden=\"true\">{negativeSign ?? TimeCore.defaultProps.negativeSign}</span>\n {state.text}\n </>\n ) : (\n state.text\n );\n\n return renderElement(\n 'time',\n { render, className, style },\n {\n state,\n stateAttrMap: TimeDataAttrs,\n ref: [forwardedRef],\n props: [\n {\n dateTime: state.datetime,\n children: content,\n ...core.getAttrs(state),\n },\n elementProps,\n ],\n }\n );\n});\n\nexport namespace Value {\n export type Props = ValueProps;\n export type State = TimeCore.State;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAuBA,MAAa,QAAQ,WAAW,SAAS,MACvC,gBACA,cACA;CACA,MAAM,EAAE,QAAQ,WAAW,OAAO,MAAM,cAAc,OAAO,GAAG,iBAAiB;CAEjF,MAAM,OAAO,UAAU,WAAW;CAElC,MAAM,CAAC,QAAQ,eAAe,IAAI,UAAU,CAAC;AAC7C,MAAK,SAAS;EAAE;EAAM;EAAc;EAAO,CAAC;AAE5C,KAAI,CAAC,KAEH,QAAO;CAGT,MAAM,QAAQ,KAAK,SAAS,KAAK;CAEjC,MAAM,UAAU,MAAM,WACpB,4CACE,oBAAC;EAAK,eAAY;YAAQ,gBAAgB,SAAS,aAAa;GAAoB,EACnF,MAAM,QACN,GAEH,MAAM;AAGR,QAAO,cACL,QACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE;EACA,cAAc;EACd,KAAK,CAAC,aAAa;EACnB,OAAO,CACL;GACE,UAAU,MAAM;GAChB,UAAU;GACV,GAAG,KAAK,SAAS,MAAM;GACxB,EACD,aACD;EACF,CACF;EACD"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region src/utils/attach-media-element.ts
|
|
2
|
+
function attachMediaElement(media) {
|
|
3
|
+
return (element) => {
|
|
4
|
+
if (element) media.attach(element);
|
|
5
|
+
else media.detach();
|
|
6
|
+
return () => media.detach();
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
//#endregion
|
|
11
|
+
export { attachMediaElement };
|
|
12
|
+
//# sourceMappingURL=attach-media-element.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attach-media-element.js","names":[],"sources":["../../../src/utils/attach-media-element.ts"],"sourcesContent":["interface Attachable {\n attach(target: EventTarget): void;\n detach(): void;\n}\n\nexport function attachMediaElement<T extends HTMLVideoElement>(media: Attachable): (element: T | null) => void {\n return (element: T | null) => {\n if (element) {\n media.attach(element);\n } else {\n media.detach();\n }\n // React 19+ accepts a cleanup function as the return value\n return () => media.detach();\n };\n}\n"],"mappings":";AAKA,SAAgB,mBAA+C,OAAgD;AAC7G,SAAQ,YAAsB;AAC5B,MAAI,QACF,OAAM,OAAO,QAAQ;MAErB,OAAM,QAAQ;AAGhB,eAAa,MAAM,QAAQ"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
//#region src/utils/media-props.ts
|
|
2
|
+
function mediaProps(media, props) {
|
|
3
|
+
const { src, ...remainingProps } = props;
|
|
4
|
+
if (props.preload && media.preload !== props.preload) media.preload = props.preload;
|
|
5
|
+
if (media.src !== src) media.src = src ?? "";
|
|
6
|
+
return remainingProps;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
//#endregion
|
|
10
|
+
export { mediaProps };
|
|
11
|
+
//# sourceMappingURL=media-props.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-props.js","names":[],"sources":["../../../src/utils/media-props.ts"],"sourcesContent":["import type { MediaApi } from '@videojs/core/dom';\nimport type { VideoHTMLAttributes } from 'react';\n\ninterface VideoProps extends VideoHTMLAttributes<HTMLVideoElement> {}\n\nexport function mediaProps(media: MediaApi, props: VideoProps) {\n const { src, ...remainingProps } = props;\n\n // Preload can still be passed as a prop to the native media element\n if (props.preload && media.preload !== props.preload) {\n media.preload = props.preload as '' | 'none' | 'metadata' | 'auto';\n }\n\n if (media.src !== src) {\n media.src = src ?? '';\n }\n\n // The remaining props are passed to the native media element\n return remainingProps;\n}\n"],"mappings":";AAKA,SAAgB,WAAW,OAAiB,OAAmB;CAC7D,MAAM,EAAE,KAAK,GAAG,mBAAmB;AAGnC,KAAI,MAAM,WAAW,MAAM,YAAY,MAAM,QAC3C,OAAM,UAAU,MAAM;AAGxB,KAAI,MAAM,QAAQ,IAChB,OAAM,MAAM,OAAO;AAIrB,QAAO"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
//#region src/utils/merge-props.ts
|
|
4
|
+
/**
|
|
5
|
+
* Check if a key is an event handler key (on* with capital letter).
|
|
6
|
+
*/
|
|
7
|
+
function isEventHandlerKey(key) {
|
|
8
|
+
return key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && key.charCodeAt(2) >= 65 && key.charCodeAt(2) <= 90;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Check if a key/value pair is an event handler (includes undefined values).
|
|
12
|
+
*/
|
|
13
|
+
function isEventHandler(key, value) {
|
|
14
|
+
return isEventHandlerKey(key) && (typeof value === "function" || typeof value === "undefined");
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Merge two event handlers - external runs first, ours runs second.
|
|
18
|
+
*/
|
|
19
|
+
function mergeEventHandlers(ours, theirs) {
|
|
20
|
+
if (!theirs) return ours;
|
|
21
|
+
if (!ours) return theirs;
|
|
22
|
+
return (event) => {
|
|
23
|
+
theirs(event);
|
|
24
|
+
ours(event);
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Merge two className values - concatenate strings.
|
|
29
|
+
*/
|
|
30
|
+
function mergeClassNames(ours, theirs) {
|
|
31
|
+
if (theirs && ours) return `${theirs} ${ours}`;
|
|
32
|
+
return theirs || ours;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Merge two style objects - theirs overwrites conflicts.
|
|
36
|
+
*/
|
|
37
|
+
function mergeStyles(ours, theirs) {
|
|
38
|
+
if (!theirs) return ours;
|
|
39
|
+
if (!ours) return theirs;
|
|
40
|
+
return {
|
|
41
|
+
...ours,
|
|
42
|
+
...theirs
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Merge a single props object into accumulated result.
|
|
47
|
+
*/
|
|
48
|
+
function mergeOne(merged, props) {
|
|
49
|
+
if (!props) return merged;
|
|
50
|
+
for (const key in props) {
|
|
51
|
+
const value = props[key];
|
|
52
|
+
if (key === "className") merged.className = mergeClassNames(merged.className, value);
|
|
53
|
+
else if (key === "style") merged.style = mergeStyles(merged.style, value);
|
|
54
|
+
else if (isEventHandler(key, value)) merged[key] = mergeEventHandlers(merged[key], value);
|
|
55
|
+
else merged[key] = value;
|
|
56
|
+
}
|
|
57
|
+
return merged;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Merge multiple props objects.
|
|
61
|
+
*
|
|
62
|
+
* - Event handlers (on*): chained - external first, ours second
|
|
63
|
+
* - className: concatenated
|
|
64
|
+
* - style: merged objects (external wins conflicts)
|
|
65
|
+
* - other: last one wins
|
|
66
|
+
*
|
|
67
|
+
* @public
|
|
68
|
+
* @example
|
|
69
|
+
* ```ts
|
|
70
|
+
* const merged = mergeProps(
|
|
71
|
+
* { onClick: ourHandler, className: 'base' },
|
|
72
|
+
* { onClick: theirHandler, className: 'custom' }
|
|
73
|
+
* );
|
|
74
|
+
* // { onClick: chainedHandler, className: 'custom base' }
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
function mergeProps(...propSets) {
|
|
78
|
+
let merged = {};
|
|
79
|
+
for (const props of propSets) merged = mergeOne(merged, props);
|
|
80
|
+
return merged;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
//#endregion
|
|
84
|
+
export { mergeProps };
|
|
85
|
+
//# sourceMappingURL=merge-props.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-props.js","names":[],"sources":["../../../src/utils/merge-props.ts"],"sourcesContent":["'use client';\n\nimport type { ComponentPropsWithRef, CSSProperties, ElementType, SyntheticEvent } from 'react';\n\ntype Props<T extends ElementType = ElementType> = ComponentPropsWithRef<T>;\n\n/**\n * Check if a key is an event handler key (on* with capital letter).\n */\nfunction isEventHandlerKey(key: string): boolean {\n return (\n key.charCodeAt(0) === 111 /* o */ &&\n key.charCodeAt(1) === 110 /* n */ &&\n key.charCodeAt(2) >= 65 /* A */ &&\n key.charCodeAt(2) <= 90 /* Z */\n );\n}\n\n/**\n * Check if a key/value pair is an event handler (includes undefined values).\n */\nfunction isEventHandler(key: string, value: unknown): boolean {\n return isEventHandlerKey(key) && (typeof value === 'function' || typeof value === 'undefined');\n}\n\n/**\n * Merge two event handlers - external runs first, ours runs second.\n */\nfunction mergeEventHandlers(\n ours: ((event: SyntheticEvent) => void) | undefined,\n theirs: ((event: SyntheticEvent) => void) | undefined\n): ((event: SyntheticEvent) => void) | undefined {\n if (!theirs) return ours;\n if (!ours) return theirs;\n\n return (event: SyntheticEvent) => {\n theirs(event);\n ours(event);\n };\n}\n\n/**\n * Merge two className values - concatenate strings.\n */\nfunction mergeClassNames(ours: string | undefined, theirs: string | undefined): string | undefined {\n if (theirs && ours) return `${theirs} ${ours}`;\n return theirs || ours;\n}\n\n/**\n * Merge two style objects - theirs overwrites conflicts.\n */\nfunction mergeStyles(ours: CSSProperties | undefined, theirs: CSSProperties | undefined): CSSProperties | undefined {\n if (!theirs) return ours;\n if (!ours) return theirs;\n return { ...ours, ...theirs };\n}\n\n/**\n * Merge a single props object into accumulated result.\n */\nfunction mergeOne<T extends ElementType>(\n merged: Record<string, unknown>,\n props: Props<T> | undefined\n): Record<string, unknown> {\n if (!props) return merged;\n\n for (const key in props) {\n const value = props[key as keyof typeof props];\n\n if (key === 'className') {\n merged.className = mergeClassNames(merged.className as string | undefined, value as string);\n } else if (key === 'style') {\n merged.style = mergeStyles(merged.style as CSSProperties | undefined, value as CSSProperties);\n } else if (isEventHandler(key, value)) {\n merged[key] = mergeEventHandlers(\n merged[key] as ((event: SyntheticEvent) => void) | undefined,\n value as (event: SyntheticEvent) => void\n );\n } else {\n merged[key] = value;\n }\n }\n\n return merged;\n}\n\n/**\n * Merge multiple props objects.\n *\n * - Event handlers (on*): chained - external first, ours second\n * - className: concatenated\n * - style: merged objects (external wins conflicts)\n * - other: last one wins\n *\n * @public\n * @example\n * ```ts\n * const merged = mergeProps(\n * { onClick: ourHandler, className: 'base' },\n * { onClick: theirHandler, className: 'custom' }\n * );\n * // { onClick: chainedHandler, className: 'custom base' }\n * ```\n */\nexport function mergeProps<T extends ElementType>(...propSets: (Props<T> | undefined)[]): Props<T> {\n let merged: Record<string, unknown> = {};\n\n for (const props of propSets) {\n merged = mergeOne(merged, props);\n }\n\n return merged as Props<T>;\n}\n"],"mappings":";;;;;;AASA,SAAS,kBAAkB,KAAsB;AAC/C,QACE,IAAI,WAAW,EAAE,KAAK,OACtB,IAAI,WAAW,EAAE,KAAK,OACtB,IAAI,WAAW,EAAE,IAAI,MACrB,IAAI,WAAW,EAAE,IAAI;;;;;AAOzB,SAAS,eAAe,KAAa,OAAyB;AAC5D,QAAO,kBAAkB,IAAI,KAAK,OAAO,UAAU,cAAc,OAAO,UAAU;;;;;AAMpF,SAAS,mBACP,MACA,QAC+C;AAC/C,KAAI,CAAC,OAAQ,QAAO;AACpB,KAAI,CAAC,KAAM,QAAO;AAElB,SAAQ,UAA0B;AAChC,SAAO,MAAM;AACb,OAAK,MAAM;;;;;;AAOf,SAAS,gBAAgB,MAA0B,QAAgD;AACjG,KAAI,UAAU,KAAM,QAAO,GAAG,OAAO,GAAG;AACxC,QAAO,UAAU;;;;;AAMnB,SAAS,YAAY,MAAiC,QAA8D;AAClH,KAAI,CAAC,OAAQ,QAAO;AACpB,KAAI,CAAC,KAAM,QAAO;AAClB,QAAO;EAAE,GAAG;EAAM,GAAG;EAAQ;;;;;AAM/B,SAAS,SACP,QACA,OACyB;AACzB,KAAI,CAAC,MAAO,QAAO;AAEnB,MAAK,MAAM,OAAO,OAAO;EACvB,MAAM,QAAQ,MAAM;AAEpB,MAAI,QAAQ,YACV,QAAO,YAAY,gBAAgB,OAAO,WAAiC,MAAgB;WAClF,QAAQ,QACjB,QAAO,QAAQ,YAAY,OAAO,OAAoC,MAAuB;WACpF,eAAe,KAAK,MAAM,CACnC,QAAO,OAAO,mBACZ,OAAO,MACP,MACD;MAED,QAAO,OAAO;;AAIlB,QAAO;;;;;;;;;;;;;;;;;;;;AAqBT,SAAgB,WAAkC,GAAG,UAA8C;CACjG,IAAI,SAAkC,EAAE;AAExC,MAAK,MAAM,SAAS,SAClB,UAAS,SAAS,QAAQ,MAAM;AAGlC,QAAO"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useCallback } from "react";
|
|
4
|
+
import { isFunction } from "@videojs/utils/predicate";
|
|
5
|
+
|
|
6
|
+
//#region src/utils/use-composed-refs.ts
|
|
7
|
+
/**
|
|
8
|
+
* Set a given ref to a given value.
|
|
9
|
+
*
|
|
10
|
+
* Handles both callback refs and RefObject(s).
|
|
11
|
+
*
|
|
12
|
+
* @returns Cleanup function if the ref callback returned one (React 19+)
|
|
13
|
+
*/
|
|
14
|
+
function setRef(ref, value) {
|
|
15
|
+
if (isFunction(ref)) return ref(value);
|
|
16
|
+
else if (ref !== null && ref !== void 0) ref.current = value;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Compose multiple refs into a single callback ref.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```tsx
|
|
23
|
+
* const composedRef = composeRefs(ref1, ref2, ref3);
|
|
24
|
+
* return <div ref={composedRef} />;
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
function composeRefs(...refs) {
|
|
28
|
+
const flatRefs = refs.flat();
|
|
29
|
+
return (node) => {
|
|
30
|
+
const cleanups = flatRefs.map((ref) => setRef(ref, node));
|
|
31
|
+
if (cleanups.some(isFunction)) return () => {
|
|
32
|
+
for (let i = 0; i < cleanups.length; i++) {
|
|
33
|
+
const cleanup = cleanups[i];
|
|
34
|
+
if (isFunction(cleanup)) cleanup();
|
|
35
|
+
else setRef(flatRefs[i], null);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Hook that composes multiple refs into a single callback ref.
|
|
42
|
+
*
|
|
43
|
+
* Memoized for stable reference.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```tsx
|
|
47
|
+
* const composedRef = useComposedRefs(forwardedRef, localRef);
|
|
48
|
+
* return <div ref={composedRef} />;
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
function useComposedRefs(...refs) {
|
|
52
|
+
return useCallback(composeRefs(...refs), [...refs]);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
//#endregion
|
|
56
|
+
export { composeRefs, useComposedRefs };
|
|
57
|
+
//# sourceMappingURL=use-composed-refs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-composed-refs.js","names":[],"sources":["../../../src/utils/use-composed-refs.ts"],"sourcesContent":["'use client';\n\nimport { isFunction } from '@videojs/utils/predicate';\nimport type { Ref, RefCallback } from 'react';\n\nimport { useCallback } from 'react';\n\ntype OptionalRef<T> = Ref<T> | undefined;\n\n/**\n * Set a given ref to a given value.\n *\n * Handles both callback refs and RefObject(s).\n *\n * @returns Cleanup function if the ref callback returned one (React 19+)\n */\nfunction setRef<T>(ref: OptionalRef<T>, value: T): (() => void) | void | undefined {\n if (isFunction(ref)) {\n return ref(value);\n } else if (ref !== null && ref !== undefined) {\n ref.current = value;\n }\n}\n\n/**\n * Compose multiple refs into a single callback ref.\n *\n * @example\n * ```tsx\n * const composedRef = composeRefs(ref1, ref2, ref3);\n * return <div ref={composedRef} />;\n * ```\n */\nexport function composeRefs<T>(...refs: (OptionalRef<T> | OptionalRef<T>[])[]): RefCallback<T> {\n const flatRefs = refs.flat();\n\n return (node): (() => void) | void => {\n const cleanups = flatRefs.map((ref) => setRef(ref, node));\n\n // Only return cleanup if any refs returned one (React 19+).\n // React 18 handles cleanup by calling the ref callback with null.\n if (cleanups.some(isFunction)) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (isFunction(cleanup)) {\n cleanup();\n } else {\n setRef(flatRefs[i], null);\n }\n }\n };\n }\n };\n}\n\n/**\n * Hook that composes multiple refs into a single callback ref.\n *\n * Memoized for stable reference.\n *\n * @example\n * ```tsx\n * const composedRef = useComposedRefs(forwardedRef, localRef);\n * return <div ref={composedRef} />;\n * ```\n */\nexport function useComposedRefs<T>(...refs: OptionalRef<T>[]): RefCallback<T> {\n return useCallback(composeRefs(...refs), [...refs]);\n}\n"],"mappings":";;;;;;;;;;;;;AAgBA,SAAS,OAAU,KAAqB,OAA2C;AACjF,KAAI,WAAW,IAAI,CACjB,QAAO,IAAI,MAAM;UACR,QAAQ,QAAQ,QAAQ,OACjC,KAAI,UAAU;;;;;;;;;;;AAalB,SAAgB,YAAe,GAAG,MAA6D;CAC7F,MAAM,WAAW,KAAK,MAAM;AAE5B,SAAQ,SAA8B;EACpC,MAAM,WAAW,SAAS,KAAK,QAAQ,OAAO,KAAK,KAAK,CAAC;AAIzD,MAAI,SAAS,KAAK,WAAW,CAC3B,cAAa;AACX,QAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;IACxC,MAAM,UAAU,SAAS;AACzB,QAAI,WAAW,QAAQ,CACrB,UAAS;QAET,QAAO,SAAS,IAAI,KAAK;;;;;;;;;;;;;;;;AAmBrC,SAAgB,gBAAmB,GAAG,MAAwC;AAC5E,QAAO,YAAY,YAAY,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { composeRefs } from "./use-composed-refs.js";
|
|
4
|
+
import { mergeProps } from "./merge-props.js";
|
|
5
|
+
import { getStateDataAttrs } from "@videojs/core/dom";
|
|
6
|
+
import { cloneElement, createElement, isValidElement } from "react";
|
|
7
|
+
import { isFunction } from "@videojs/utils/predicate";
|
|
8
|
+
|
|
9
|
+
//#region src/utils/use-render.tsx
|
|
10
|
+
function resolveClassName(className, state) {
|
|
11
|
+
return isFunction(className) ? className(state) : className;
|
|
12
|
+
}
|
|
13
|
+
function resolveStyle(style, state) {
|
|
14
|
+
return isFunction(style) ? style(state) : style;
|
|
15
|
+
}
|
|
16
|
+
function getElementRef(element) {
|
|
17
|
+
const elementAny = element;
|
|
18
|
+
return elementAny.ref ?? elementAny.props?.ref;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Render a UI component element.
|
|
22
|
+
*
|
|
23
|
+
* Handles:
|
|
24
|
+
* - Default tag rendering
|
|
25
|
+
* - Render prop (element or function)
|
|
26
|
+
* - Props merging (event handlers chained, className concatenated, style merged)
|
|
27
|
+
* - Ref composition
|
|
28
|
+
* - className/style as functions of state
|
|
29
|
+
*
|
|
30
|
+
* @public
|
|
31
|
+
* @example
|
|
32
|
+
* ```tsx
|
|
33
|
+
* return renderElement('button', componentProps, {
|
|
34
|
+
* state,
|
|
35
|
+
* ref: [forwardedRef, buttonRef],
|
|
36
|
+
* props: [{ type: 'button' }, elementProps, getButtonProps],
|
|
37
|
+
* });
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
function renderElement(element, componentProps, params) {
|
|
41
|
+
const { className: classNameProp, style: styleProp, render } = componentProps;
|
|
42
|
+
const { state, ref, props, stateAttrMap } = params;
|
|
43
|
+
const className = resolveClassName(classNameProp, state);
|
|
44
|
+
const style = resolveStyle(styleProp, state);
|
|
45
|
+
const mergedProps = mergeProps(getStateDataAttrs(state, stateAttrMap), ...Array.isArray(props) ? props : props ? [props] : []);
|
|
46
|
+
if (className !== void 0) mergedProps.className = mergedProps.className ? `${mergedProps.className} ${className}` : className;
|
|
47
|
+
if (style !== void 0) mergedProps.style = mergedProps.style ? {
|
|
48
|
+
...mergedProps.style,
|
|
49
|
+
...style
|
|
50
|
+
} : style;
|
|
51
|
+
if (isFunction(render)) {
|
|
52
|
+
const mergedRef = composeRefs(ref, mergedProps.ref);
|
|
53
|
+
return render({
|
|
54
|
+
...mergedProps,
|
|
55
|
+
ref: mergedRef
|
|
56
|
+
}, state);
|
|
57
|
+
}
|
|
58
|
+
if (isValidElement(render)) {
|
|
59
|
+
const elementRef = getElementRef(render);
|
|
60
|
+
const mergedRef = composeRefs(ref, mergedProps.ref, elementRef);
|
|
61
|
+
const elementProps = mergeProps(mergedProps, render.props);
|
|
62
|
+
elementProps.ref = mergedRef;
|
|
63
|
+
return cloneElement(render, elementProps);
|
|
64
|
+
}
|
|
65
|
+
mergedProps.ref = composeRefs(ref, mergedProps.ref);
|
|
66
|
+
return createElement(element, mergedProps);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
//#endregion
|
|
70
|
+
export { renderElement };
|
|
71
|
+
//# sourceMappingURL=use-render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-render.js","names":[],"sources":["../../../src/utils/use-render.tsx"],"sourcesContent":["'use client';\n\nimport { getStateDataAttrs, type StateAttrMap } from '@videojs/core/dom';\nimport { isFunction } from '@videojs/utils/predicate';\nimport type { CSSProperties, ReactElement, Ref } from 'react';\nimport { cloneElement, createElement, isValidElement } from 'react';\nimport { mergeProps } from './merge-props';\nimport type { HTMLProps, RenderProp } from './types';\nimport { composeRefs } from './use-composed-refs';\n\ntype IntrinsicTagName = keyof React.JSX.IntrinsicElements;\n\nexport interface UseRenderComponentProps<State> {\n className?: string | ((state: State) => string | undefined) | undefined;\n style?: CSSProperties | ((state: State) => CSSProperties | undefined) | undefined;\n render?: RenderProp<State> | undefined;\n}\n\nexport interface UseRenderParameters<State, RenderedElementType extends Element> {\n state: State;\n ref?: Ref<RenderedElementType> | Ref<RenderedElementType>[] | undefined;\n props?: object | object[] | undefined;\n stateAttrMap?: StateAttrMap<State> | undefined;\n}\n\nfunction resolveClassName<State>(\n className: string | ((state: State) => string | undefined) | undefined,\n state: State\n): string | undefined {\n return isFunction(className) ? className(state) : className;\n}\n\nfunction resolveStyle<State>(\n style: CSSProperties | ((state: State) => CSSProperties | undefined) | undefined,\n state: State\n): CSSProperties | undefined {\n return isFunction(style) ? style(state) : style;\n}\n\nfunction getElementRef(element: ReactElement): Ref<unknown> | undefined {\n // React 19+ uses element.props.ref, older versions use element.ref\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const elementAny = element as any;\n return elementAny.ref ?? elementAny.props?.ref;\n}\n\n/**\n * Render a UI component element.\n *\n * Handles:\n * - Default tag rendering\n * - Render prop (element or function)\n * - Props merging (event handlers chained, className concatenated, style merged)\n * - Ref composition\n * - className/style as functions of state\n *\n * @public\n * @example\n * ```tsx\n * return renderElement('button', componentProps, {\n * state,\n * ref: [forwardedRef, buttonRef],\n * props: [{ type: 'button' }, elementProps, getButtonProps],\n * });\n * ```\n */\nexport function renderElement<\n State extends object,\n RenderedElementType extends Element,\n TagName extends IntrinsicTagName,\n>(\n element: TagName,\n componentProps: UseRenderComponentProps<State>,\n params: UseRenderParameters<State, RenderedElementType>\n): ReactElement | null {\n const { className: classNameProp, style: styleProp, render } = componentProps;\n const { state, ref, props, stateAttrMap } = params;\n\n // Resolve className and style if they're functions\n const className = resolveClassName(classNameProp, state);\n const style = resolveStyle(styleProp, state);\n\n // Generate data attributes from state\n const stateDataAttrs = getStateDataAttrs(state, stateAttrMap);\n\n // Merge: state data attrs first, then props (so props can override)\n const propsArray = Array.isArray(props) ? props : props ? [props] : [];\n const mergedProps = mergeProps(stateDataAttrs, ...(propsArray as Record<string, unknown>[]));\n\n if (className !== undefined) {\n // Add resolved className and style\n mergedProps.className = mergedProps.className ? `${mergedProps.className} ${className}` : className;\n }\n\n if (style !== undefined) {\n mergedProps.style = mergedProps.style ? { ...(mergedProps.style as CSSProperties), ...style } : style;\n }\n\n if (isFunction(render)) {\n // Render function: call with props and state\n const mergedRef = composeRefs(ref, mergedProps.ref);\n return render({ ...mergedProps, ref: mergedRef } as HTMLProps, state);\n }\n\n if (isValidElement(render)) {\n const elementRef = getElementRef(render);\n\n const mergedRef = composeRefs(ref, mergedProps.ref, elementRef);\n\n const elementProps = mergeProps(mergedProps, render.props as Record<string, unknown>);\n elementProps.ref = mergedRef;\n\n return cloneElement(render, elementProps);\n }\n\n // Default tag\n const mergedRef = composeRefs(ref, mergedProps.ref);\n mergedProps.ref = mergedRef;\n\n return createElement(element, mergedProps);\n}\n\nexport namespace renderElement {\n export type ComponentProps<State> = UseRenderComponentProps<State>;\n export type Parameters<State, RenderedElementType extends Element> = UseRenderParameters<State, RenderedElementType>;\n}\n"],"mappings":";;;;;;;;;AAyBA,SAAS,iBACP,WACA,OACoB;AACpB,QAAO,WAAW,UAAU,GAAG,UAAU,MAAM,GAAG;;AAGpD,SAAS,aACP,OACA,OAC2B;AAC3B,QAAO,WAAW,MAAM,GAAG,MAAM,MAAM,GAAG;;AAG5C,SAAS,cAAc,SAAiD;CAGtE,MAAM,aAAa;AACnB,QAAO,WAAW,OAAO,WAAW,OAAO;;;;;;;;;;;;;;;;;;;;;;AAuB7C,SAAgB,cAKd,SACA,gBACA,QACqB;CACrB,MAAM,EAAE,WAAW,eAAe,OAAO,WAAW,WAAW;CAC/D,MAAM,EAAE,OAAO,KAAK,OAAO,iBAAiB;CAG5C,MAAM,YAAY,iBAAiB,eAAe,MAAM;CACxD,MAAM,QAAQ,aAAa,WAAW,MAAM;CAO5C,MAAM,cAAc,WAJG,kBAAkB,OAAO,aAAa,EAId,GAD5B,MAAM,QAAQ,MAAM,GAAG,QAAQ,QAAQ,CAAC,MAAM,GAAG,EAAE,CACsB;AAE5F,KAAI,cAAc,OAEhB,aAAY,YAAY,YAAY,YAAY,GAAG,YAAY,UAAU,GAAG,cAAc;AAG5F,KAAI,UAAU,OACZ,aAAY,QAAQ,YAAY,QAAQ;EAAE,GAAI,YAAY;EAAyB,GAAG;EAAO,GAAG;AAGlG,KAAI,WAAW,OAAO,EAAE;EAEtB,MAAM,YAAY,YAAY,KAAK,YAAY,IAAI;AACnD,SAAO,OAAO;GAAE,GAAG;GAAa,KAAK;GAAW,EAAe,MAAM;;AAGvE,KAAI,eAAe,OAAO,EAAE;EAC1B,MAAM,aAAa,cAAc,OAAO;EAExC,MAAM,YAAY,YAAY,KAAK,YAAY,KAAK,WAAW;EAE/D,MAAM,eAAe,WAAW,aAAa,OAAO,MAAiC;AACrF,eAAa,MAAM;AAEnB,SAAO,aAAa,QAAQ,aAAa;;AAK3C,aAAY,MADM,YAAY,KAAK,YAAY,IAAI;AAGnD,QAAO,cAAc,SAAS,YAAY"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region \0rolldown/runtime.js
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __exportAll = (all, no_symbols) => {
|
|
4
|
+
let target = {};
|
|
5
|
+
for (var name in all) {
|
|
6
|
+
__defProp(target, name, {
|
|
7
|
+
get: all[name],
|
|
8
|
+
enumerable: true
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
if (!no_symbols) {
|
|
12
|
+
__defProp(target, Symbol.toStringTag, { value: "Module" });
|
|
13
|
+
}
|
|
14
|
+
return target;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
//#endregion
|
|
18
|
+
export { __exportAll };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Container, ContainerProps, PlayerContextValue, useMedia, useMediaRegistration, usePlayer, usePlayerContext } from "./player/context.js";
|
|
2
|
+
import { CreatePlayerConfig, CreatePlayerResult, ProviderProps, createPlayer } from "./player/create-player.js";
|
|
3
|
+
import { HTMLProps, RenderFunction, RenderProp, UIComponentProps } from "./utils/types.js";
|
|
4
|
+
import { BufferingIndicator, BufferingIndicatorProps } from "./ui/buffering-indicator/buffering-indicator.js";
|
|
5
|
+
import { ControlsGroupProps } from "./ui/controls/controls-group.js";
|
|
6
|
+
import { ControlsRootProps } from "./ui/controls/controls-root.js";
|
|
7
|
+
import { index_parts_d_exports } from "./ui/controls/index.parts.js";
|
|
8
|
+
import "./ui/controls/index.js";
|
|
9
|
+
import { FullscreenButton, FullscreenButtonProps } from "./ui/fullscreen-button/fullscreen-button.js";
|
|
10
|
+
import { useButton } from "./ui/hooks/use-button.js";
|
|
11
|
+
import { MuteButton, MuteButtonProps } from "./ui/mute-button/mute-button.js";
|
|
12
|
+
import { PiPButton, PiPButtonProps } from "./ui/pip-button/pip-button.js";
|
|
13
|
+
import { PlayButton, PlayButtonProps } from "./ui/play-button/play-button.js";
|
|
14
|
+
import { Poster, PosterProps } from "./ui/poster/poster.js";
|
|
15
|
+
import { SeekButton, SeekButtonProps } from "./ui/seek-button/seek-button.js";
|
|
16
|
+
import { index_parts_d_exports as index_parts_d_exports$1 } from "./ui/time/index.parts.js";
|
|
17
|
+
import "./ui/time/index.js";
|
|
18
|
+
import { mergeProps } from "./utils/merge-props.js";
|
|
19
|
+
import { renderElement } from "./utils/use-render.js";
|
|
20
|
+
import { Comparator, Selector, createSelector, shallowEqual } from "@videojs/store";
|
|
21
|
+
import { useSelector, useStore } from "@videojs/store/react";
|
|
22
|
+
export * from "@videojs/core/dom";
|
|
23
|
+
export { BufferingIndicator, type BufferingIndicatorProps, type Comparator, Container, type ContainerProps, index_parts_d_exports as Controls, type ControlsGroupProps, type ControlsRootProps, type CreatePlayerConfig, type CreatePlayerResult, FullscreenButton, type FullscreenButtonProps, type HTMLProps, MuteButton, type MuteButtonProps, PiPButton, type PiPButtonProps, PlayButton, type PlayButtonProps, type PlayerContextValue, Poster, type PosterProps, type ProviderProps, type RenderFunction, type RenderProp, SeekButton, type SeekButtonProps, type Selector, index_parts_d_exports$1 as Time, type UIComponentProps, createPlayer, createSelector, mergeProps, renderElement, shallowEqual, useButton, useMedia, useMediaRegistration, usePlayer, usePlayerContext, useSelector, useStore };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { Container, useMedia, useMediaRegistration, usePlayer, usePlayerContext } from "./player/context.js";
|
|
4
|
+
import { createPlayer } from "./player/create-player.js";
|
|
5
|
+
import { mergeProps } from "./utils/merge-props.js";
|
|
6
|
+
import { renderElement } from "./utils/use-render.js";
|
|
7
|
+
import { BufferingIndicator } from "./ui/buffering-indicator/buffering-indicator.js";
|
|
8
|
+
import { index_parts_exports } from "./ui/controls/index.parts.js";
|
|
9
|
+
import { useButton } from "./ui/hooks/use-button.js";
|
|
10
|
+
import { FullscreenButton } from "./ui/fullscreen-button/fullscreen-button.js";
|
|
11
|
+
import { MuteButton } from "./ui/mute-button/mute-button.js";
|
|
12
|
+
import { PiPButton } from "./ui/pip-button/pip-button.js";
|
|
13
|
+
import { PlayButton } from "./ui/play-button/play-button.js";
|
|
14
|
+
import { Poster } from "./ui/poster/poster.js";
|
|
15
|
+
import { SeekButton } from "./ui/seek-button/seek-button.js";
|
|
16
|
+
import { index_parts_exports as index_parts_exports$1 } from "./ui/time/index.parts.js";
|
|
17
|
+
import { createSelector, shallowEqual } from "@videojs/store";
|
|
18
|
+
import { useSelector, useStore } from "@videojs/store/react";
|
|
19
|
+
|
|
20
|
+
export * from "@videojs/core/dom"
|
|
21
|
+
|
|
22
|
+
export { BufferingIndicator, Container, index_parts_exports as Controls, FullscreenButton, MuteButton, PiPButton, PlayButton, Poster, SeekButton, index_parts_exports$1 as Time, createPlayer, createSelector, mergeProps, renderElement, shallowEqual, useButton, useMedia, useMediaRegistration, usePlayer, usePlayerContext, useSelector, useStore };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as react from "react";
|
|
2
|
+
import { AudioHTMLAttributes } from "react";
|
|
3
|
+
|
|
4
|
+
//#region src/media/audio.d.ts
|
|
5
|
+
interface AudioProps extends AudioHTMLAttributes<HTMLAudioElement> {}
|
|
6
|
+
declare const Audio: react.ForwardRefExoticComponent<AudioProps & react.RefAttributes<HTMLAudioElement>>;
|
|
7
|
+
declare namespace Audio {
|
|
8
|
+
type Props = AudioProps;
|
|
9
|
+
}
|
|
10
|
+
//#endregion
|
|
11
|
+
export { Audio, AudioProps };
|
|
12
|
+
//# sourceMappingURL=audio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio.d.ts","names":[],"sources":["../../../src/media/audio.tsx"],"mappings":";;;;UAQiB,UAAA,SAAmB,mBAAA,CAAoB,gBAAA;AAAA,cAE3C,KAAA,EAAK,KAAA,CAAA,yBAAA,CAAA,UAAA,GAAA,KAAA,CAAA,aAAA,CAAA,gBAAA;AAAA,kBAmBD,KAAA;EAAA,KACH,KAAA,GAAQ,UAAA;AAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useComposedRefs } from "../utils/use-composed-refs.js";
|
|
4
|
+
import { useMediaRegistration } from "../player/context.js";
|
|
5
|
+
import { forwardRef, useCallback } from "react";
|
|
6
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
|
|
8
|
+
//#region src/media/audio.tsx
|
|
9
|
+
const Audio = forwardRef(function Audio({ children, ...props }, ref) {
|
|
10
|
+
const setMedia = useMediaRegistration();
|
|
11
|
+
return /* @__PURE__ */ jsx("audio", {
|
|
12
|
+
ref: useComposedRefs(ref, useCallback((el) => {
|
|
13
|
+
setMedia?.(el);
|
|
14
|
+
}, [setMedia])),
|
|
15
|
+
...props,
|
|
16
|
+
children
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
//#endregion
|
|
21
|
+
export { Audio };
|
|
22
|
+
//# sourceMappingURL=audio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio.js","names":[],"sources":["../../../src/media/audio.tsx"],"sourcesContent":["'use client';\n\nimport type { AudioHTMLAttributes } from 'react';\nimport { forwardRef, useCallback } from 'react';\n\nimport { useMediaRegistration } from '../player/context';\nimport { useComposedRefs } from '../utils/use-composed-refs';\n\nexport interface AudioProps extends AudioHTMLAttributes<HTMLAudioElement> {}\n\nexport const Audio = forwardRef<HTMLAudioElement, AudioProps>(function Audio({ children, ...props }, ref) {\n const setMedia = useMediaRegistration();\n\n const mediaRef = useCallback(\n (el: HTMLAudioElement | null) => {\n setMedia?.(el);\n },\n [setMedia]\n );\n\n const composedRef = useComposedRefs(ref, mediaRef);\n\n return (\n <audio ref={composedRef} {...props}>\n {children}\n </audio>\n );\n});\n\nexport namespace Audio {\n export type Props = AudioProps;\n}\n"],"mappings":";;;;;;;;AAUA,MAAa,QAAQ,WAAyC,SAAS,MAAM,EAAE,UAAU,GAAG,SAAS,KAAK;CACxG,MAAM,WAAW,sBAAsB;AAWvC,QACE,oBAAC;EAAM,KAHW,gBAAgB,KAPnB,aACd,OAAgC;AAC/B,cAAW,GAAG;KAEhB,CAAC,SAAS,CACX,CAEiD;EAGvB,GAAI;EAC1B;GACK;EAEV"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as react from "react";
|
|
2
|
+
import { VideoHTMLAttributes } from "react";
|
|
3
|
+
|
|
4
|
+
//#region src/media/background-video/index.d.ts
|
|
5
|
+
interface BackgroundVideoProps extends VideoHTMLAttributes<HTMLVideoElement> {}
|
|
6
|
+
declare const BackgroundVideo: react.ForwardRefExoticComponent<BackgroundVideoProps & react.RefAttributes<HTMLVideoElement>>;
|
|
7
|
+
declare namespace BackgroundVideo {
|
|
8
|
+
type Props = BackgroundVideoProps;
|
|
9
|
+
}
|
|
10
|
+
//#endregion
|
|
11
|
+
export { BackgroundVideo, BackgroundVideoProps };
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/media/background-video/index.tsx"],"mappings":";;;;UAQiB,oBAAA,SAA6B,mBAAA,CAAoB,gBAAA;AAAA,cAErD,eAAA,EAAe,KAAA,CAAA,yBAAA,CAAA,oBAAA,GAAA,KAAA,CAAA,aAAA,CAAA,gBAAA;AAAA,kBAsBX,eAAA;EAAA,KACH,KAAA,GAAQ,oBAAA;AAAA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useComposedRefs } from "../../utils/use-composed-refs.js";
|
|
4
|
+
import { useMediaRegistration } from "../../player/context.js";
|
|
5
|
+
import { forwardRef, useCallback } from "react";
|
|
6
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
|
|
8
|
+
//#region src/media/background-video/index.tsx
|
|
9
|
+
const BackgroundVideo = forwardRef(function BackgroundVideo({ children, ...props }, ref) {
|
|
10
|
+
const setMedia = useMediaRegistration();
|
|
11
|
+
return /* @__PURE__ */ jsx("video", {
|
|
12
|
+
ref: useComposedRefs(ref, useCallback((el) => {
|
|
13
|
+
setMedia?.(el);
|
|
14
|
+
}, [setMedia])),
|
|
15
|
+
muted: true,
|
|
16
|
+
autoPlay: true,
|
|
17
|
+
loop: true,
|
|
18
|
+
playsInline: true,
|
|
19
|
+
disableRemotePlayback: true,
|
|
20
|
+
disablePictureInPicture: true,
|
|
21
|
+
...props,
|
|
22
|
+
children
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
//#endregion
|
|
27
|
+
export { BackgroundVideo };
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/media/background-video/index.tsx"],"sourcesContent":["'use client';\n\nimport type { VideoHTMLAttributes } from 'react';\nimport { forwardRef, useCallback } from 'react';\n\nimport { useMediaRegistration } from '../../player/context';\nimport { useComposedRefs } from '../../utils/use-composed-refs';\n\nexport interface BackgroundVideoProps extends VideoHTMLAttributes<HTMLVideoElement> {}\n\nexport const BackgroundVideo = forwardRef<HTMLVideoElement, BackgroundVideoProps>(function BackgroundVideo(\n { children, ...props },\n ref\n) {\n const setMedia = useMediaRegistration();\n\n const mediaRef = useCallback(\n (el: HTMLVideoElement | null) => {\n setMedia?.(el);\n },\n [setMedia]\n );\n\n const composedRef = useComposedRefs(ref, mediaRef);\n\n return (\n <video ref={composedRef} muted autoPlay loop playsInline disableRemotePlayback disablePictureInPicture {...props}>\n {children}\n </video>\n );\n});\n\nexport namespace BackgroundVideo {\n export type Props = BackgroundVideoProps;\n}\n"],"mappings":";;;;;;;;AAUA,MAAa,kBAAkB,WAAmD,SAAS,gBACzF,EAAE,UAAU,GAAG,SACf,KACA;CACA,MAAM,WAAW,sBAAsB;AAWvC,QACE,oBAAC;EAAM,KAHW,gBAAgB,KAPnB,aACd,OAAgC;AAC/B,cAAW,GAAG;KAEhB,CAAC,SAAS,CACX,CAEiD;EAGvB;EAAM;EAAS;EAAK;EAAY;EAAsB;EAAwB,GAAI;EACxG;GACK;EAEV"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as react from "react";
|
|
2
|
+
import { PropsWithChildren, VideoHTMLAttributes } from "react";
|
|
3
|
+
|
|
4
|
+
//#region src/media/hls-video/index.d.ts
|
|
5
|
+
type HlsVideoProps = PropsWithChildren<VideoHTMLAttributes<HTMLVideoElement>>;
|
|
6
|
+
declare const HlsVideo: react.ForwardRefExoticComponent<VideoHTMLAttributes<HTMLVideoElement> & {
|
|
7
|
+
children?: react.ReactNode | undefined;
|
|
8
|
+
} & react.RefAttributes<HTMLVideoElement>>;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { HlsVideo, HlsVideo as default, HlsVideoProps };
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/media/hls-video/index.tsx"],"mappings":";;;;KAQY,aAAA,GAAgB,iBAAA,CAAkB,mBAAA,CAAoB,gBAAA;AAAA,cAErD,QAAA,QAAQ,yBAAA,CAAA,mBAAA,CAAA,gBAAA;aAAA,KAAA,CAAA,SAAA;AAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { useComposedRefs } from "../../utils/use-composed-refs.js";
|
|
2
|
+
import { useMediaRegistration } from "../../player/context.js";
|
|
3
|
+
import { attachMediaElement } from "../../utils/attach-media-element.js";
|
|
4
|
+
import { mediaProps } from "../../utils/media-props.js";
|
|
5
|
+
import { forwardRef, useEffect, useMemo } from "react";
|
|
6
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
import { HlsMedia } from "@videojs/core/dom/media/hls";
|
|
8
|
+
|
|
9
|
+
//#region src/media/hls-video/index.tsx
|
|
10
|
+
const HlsVideo = forwardRef(({ children, ...props }, ref) => {
|
|
11
|
+
const mediaApi = useMemo(() => new HlsMedia(), []);
|
|
12
|
+
const setMedia = useMediaRegistration();
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
setMedia?.(mediaApi);
|
|
15
|
+
}, [mediaApi, setMedia]);
|
|
16
|
+
return /* @__PURE__ */ jsx("video", {
|
|
17
|
+
ref: useComposedRefs(attachMediaElement(mediaApi), ref),
|
|
18
|
+
...mediaProps(mediaApi, props),
|
|
19
|
+
children
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
//#endregion
|
|
24
|
+
export { HlsVideo, HlsVideo as default };
|
|
25
|
+
//# sourceMappingURL=index.js.map
|