@bazza-ui/react 0.0.0 → 0.1.0-canary.10
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/ListboxStore-BYBpGrOz.d.ts +453 -0
- package/dist/ListboxStore-nmorsoqX.d.cts +453 -0
- package/dist/chunk-4C666HHU.js +2 -0
- package/dist/chunk-4C666HHU.js.map +1 -0
- package/dist/chunk-5T5B5SPR.cjs +2 -0
- package/dist/chunk-5T5B5SPR.cjs.map +1 -0
- package/dist/chunk-A4Z5BY7H.js +2 -0
- package/dist/chunk-A4Z5BY7H.js.map +1 -0
- package/dist/chunk-BFOY762U.js +2 -0
- package/dist/chunk-BFOY762U.js.map +1 -0
- package/dist/chunk-IT372NHF.js +2 -0
- package/dist/chunk-IT372NHF.js.map +1 -0
- package/dist/chunk-JFEVUUPC.cjs +2 -0
- package/dist/chunk-JFEVUUPC.cjs.map +1 -0
- package/dist/chunk-KO3DXT3Y.js +2 -0
- package/dist/chunk-KO3DXT3Y.js.map +1 -0
- package/dist/chunk-LXXK4S4Q.js +2 -0
- package/dist/chunk-LXXK4S4Q.js.map +1 -0
- package/dist/chunk-M4G6J7DP.cjs +2 -0
- package/dist/chunk-M4G6J7DP.cjs.map +1 -0
- package/dist/chunk-SCDHQZFI.cjs +2 -0
- package/dist/chunk-SCDHQZFI.cjs.map +1 -0
- package/dist/chunk-W4ACKMIZ.cjs +2 -0
- package/dist/chunk-W4ACKMIZ.cjs.map +1 -0
- package/dist/chunk-XMZZ62VJ.cjs +2 -0
- package/dist/chunk-XMZZ62VJ.cjs.map +1 -0
- package/dist/combobox/index.cjs +2 -0
- package/dist/combobox/index.cjs.map +1 -0
- package/dist/combobox/index.d.cts +1066 -0
- package/dist/combobox/index.d.ts +1066 -0
- package/dist/combobox/index.js +2 -0
- package/dist/combobox/index.js.map +1 -0
- package/dist/command-menu/index.cjs +2 -0
- package/dist/command-menu/index.cjs.map +1 -0
- package/dist/command-menu/index.d.cts +154 -0
- package/dist/command-menu/index.d.ts +154 -0
- package/dist/command-menu/index.js +2 -0
- package/dist/command-menu/index.js.map +1 -0
- package/dist/command-score-CTJ9NV6n.d.cts +23 -0
- package/dist/command-score-CTJ9NV6n.d.ts +23 -0
- package/dist/context-menu/index.cjs +2 -0
- package/dist/context-menu/index.cjs.map +1 -0
- package/dist/context-menu/index.d.cts +672 -0
- package/dist/context-menu/index.d.ts +672 -0
- package/dist/context-menu/index.js +2 -0
- package/dist/context-menu/index.js.map +1 -0
- package/dist/dropdown-menu/index.cjs +2 -0
- package/dist/dropdown-menu/index.cjs.map +1 -0
- package/dist/dropdown-menu/index.d.cts +699 -0
- package/dist/dropdown-menu/index.d.ts +699 -0
- package/dist/dropdown-menu/index.js +2 -0
- package/dist/dropdown-menu/index.js.map +1 -0
- package/dist/events-DOGItflK.d.ts +1776 -0
- package/dist/events-DPsuhBln.d.cts +1776 -0
- package/dist/input-C95v6jB0.d.cts +46 -0
- package/dist/input-CYweYB_i.d.ts +46 -0
- package/dist/internal/listbox/index.cjs +2 -0
- package/dist/internal/listbox/index.cjs.map +1 -0
- package/dist/internal/listbox/index.d.cts +272 -0
- package/dist/internal/listbox/index.d.ts +272 -0
- package/dist/internal/listbox/index.js +2 -0
- package/dist/internal/listbox/index.js.map +1 -0
- package/dist/internal/popup-menu/index.cjs +2 -0
- package/dist/internal/popup-menu/index.cjs.map +1 -0
- package/dist/internal/popup-menu/index.d.cts +238 -0
- package/dist/internal/popup-menu/index.d.ts +238 -0
- package/dist/internal/popup-menu/index.js +2 -0
- package/dist/internal/popup-menu/index.js.map +1 -0
- package/dist/items-B6HeFO_8.d.cts +37 -0
- package/dist/items-B6HeFO_8.d.ts +37 -0
- package/dist/kbd/index.cjs +2 -0
- package/dist/kbd/index.cjs.map +1 -0
- package/dist/kbd/index.d.cts +61 -0
- package/dist/kbd/index.d.ts +61 -0
- package/dist/kbd/index.js +2 -0
- package/dist/kbd/index.js.map +1 -0
- package/dist/loaders/index.cjs +2 -0
- package/dist/loaders/index.cjs.map +1 -0
- package/dist/loaders/index.d.cts +363 -0
- package/dist/loaders/index.d.ts +363 -0
- package/dist/loaders/index.js +2 -0
- package/dist/loaders/index.js.map +1 -0
- package/dist/loading-C6WZGUc3.d.cts +29 -0
- package/dist/loading-CC4n55sR.d.ts +29 -0
- package/dist/resolve-BYm41YfG.d.ts +406 -0
- package/dist/resolve-Dk_fAKb2.d.cts +406 -0
- package/dist/scroll-arrow-B81wZTZ2.d.cts +544 -0
- package/dist/scroll-arrow-CNd0tgME.d.ts +544 -0
- package/dist/select/index.cjs +2 -0
- package/dist/select/index.cjs.map +1 -0
- package/dist/select/index.d.cts +985 -0
- package/dist/select/index.d.ts +985 -0
- package/dist/select/index.js +2 -0
- package/dist/select/index.js.map +1 -0
- package/dist/separator-BiySI623.d.cts +275 -0
- package/dist/separator-De8l8DKO.d.ts +275 -0
- package/dist/surface-context-ClmxshBW.d.ts +14 -0
- package/dist/surface-context-DF-L-30G.d.cts +14 -0
- package/dist/type-guards-BC2B6bVi.d.cts +350 -0
- package/dist/type-guards-ybcHBB3C.d.ts +350 -0
- package/dist/types-DT4FOOa2.d.cts +51 -0
- package/dist/types-DT4FOOa2.d.ts +51 -0
- package/dist/use-listbox-item-NzZuY34-.d.cts +212 -0
- package/dist/use-listbox-item-NzZuY34-.d.ts +212 -0
- package/dist/video-player/index.cjs +3 -0
- package/dist/video-player/index.cjs.map +1 -0
- package/dist/video-player/index.d.cts +1391 -0
- package/dist/video-player/index.d.ts +1391 -0
- package/dist/video-player/index.js +3 -0
- package/dist/video-player/index.js.map +1 -0
- package/package.json +66 -12
- package/dist/index.d.ts +0 -2
- package/dist/index.js +0 -2
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
interface GroupPositional {
|
|
4
|
+
first?: boolean;
|
|
5
|
+
last?: boolean;
|
|
6
|
+
firstInGroup?: boolean;
|
|
7
|
+
lastInGroup?: boolean;
|
|
8
|
+
firstGroup?: boolean;
|
|
9
|
+
lastGroup?: boolean;
|
|
10
|
+
}
|
|
11
|
+
interface GroupContextValue {
|
|
12
|
+
groupId?: string;
|
|
13
|
+
positional?: GroupPositional;
|
|
14
|
+
}
|
|
15
|
+
declare const GroupContext: React.Context<GroupContextValue | null>;
|
|
16
|
+
declare function useGroupContext(): GroupContextValue | null;
|
|
17
|
+
|
|
18
|
+
interface ItemContextValue {
|
|
19
|
+
/** Unique ID for this item (for DOM id attribute) */
|
|
20
|
+
id: string;
|
|
21
|
+
/** Whether the item is highlighted */
|
|
22
|
+
highlighted: boolean;
|
|
23
|
+
/** Whether the item is disabled */
|
|
24
|
+
disabled: boolean;
|
|
25
|
+
/** Keyboard shortcut for this item */
|
|
26
|
+
shortcut?: string;
|
|
27
|
+
}
|
|
28
|
+
declare const ItemContext: React.Context<ItemContextValue | null>;
|
|
29
|
+
declare function useItemContext(): ItemContextValue;
|
|
30
|
+
declare function useMaybeItemContext(): ItemContextValue | null;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Aim guard refs for submenu navigation.
|
|
34
|
+
* Optional - only needed for popup menus with submenus.
|
|
35
|
+
*/
|
|
36
|
+
interface AimGuardRefs {
|
|
37
|
+
/** Whether aim guard is currently active */
|
|
38
|
+
aimGuardActiveRef: React.RefObject<boolean>;
|
|
39
|
+
/** The depth at which aim guard is active (null when not guarding) */
|
|
40
|
+
guardedDepthRef: React.RefObject<number | null>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Parameters for the useListboxItem hook.
|
|
44
|
+
*/
|
|
45
|
+
interface UseListboxItemParams {
|
|
46
|
+
/**
|
|
47
|
+
* Explicit unique identifier for this item in the store.
|
|
48
|
+
* Takes highest priority for item registration.
|
|
49
|
+
* Used by data-first APIs to ensure consistent IDs.
|
|
50
|
+
*/
|
|
51
|
+
id?: string;
|
|
52
|
+
/**
|
|
53
|
+
* Unique value for this item used as identifier and for filtering.
|
|
54
|
+
* If not provided, will be inferred from textContent.
|
|
55
|
+
* Used for registration when `id` is not provided.
|
|
56
|
+
*/
|
|
57
|
+
value?: string;
|
|
58
|
+
/**
|
|
59
|
+
* Additional keywords to match against when filtering.
|
|
60
|
+
* Useful for aliases or synonyms.
|
|
61
|
+
*/
|
|
62
|
+
keywords?: string[];
|
|
63
|
+
/**
|
|
64
|
+
* Whether this item is disabled.
|
|
65
|
+
* Disabled items are not selectable and are skipped during keyboard navigation.
|
|
66
|
+
*/
|
|
67
|
+
disabled?: boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Whether this item can be activated via Enter or click.
|
|
70
|
+
* Non-activatable items remain highlightable.
|
|
71
|
+
* @default true
|
|
72
|
+
*/
|
|
73
|
+
activatable?: boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Whether to force render this item regardless of filter results.
|
|
76
|
+
* @default false
|
|
77
|
+
*/
|
|
78
|
+
forceMount?: boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Keyboard shortcut to trigger this item.
|
|
81
|
+
* When the menu is focused and the user presses this key, the item will be selected.
|
|
82
|
+
* Should be a single character (e.g., "1", "a", etc.).
|
|
83
|
+
*/
|
|
84
|
+
shortcut?: string;
|
|
85
|
+
/**
|
|
86
|
+
* Forces this row's relative order during score-based sorting.
|
|
87
|
+
* Lower values appear earlier.
|
|
88
|
+
* @default 0
|
|
89
|
+
*/
|
|
90
|
+
forceOrder?: number;
|
|
91
|
+
/**
|
|
92
|
+
* Overrides this row's computed fuzzy-match score.
|
|
93
|
+
* Useful for pinning or manually ranking rows in score-based views.
|
|
94
|
+
*/
|
|
95
|
+
forceScore?: number;
|
|
96
|
+
/**
|
|
97
|
+
* Whether this item is a submenu trigger (for store registration).
|
|
98
|
+
* @default false
|
|
99
|
+
*/
|
|
100
|
+
isSubmenuTrigger?: boolean;
|
|
101
|
+
/**
|
|
102
|
+
* Callback when this item is selected (via click or Enter key).
|
|
103
|
+
* For simple items, pass this directly. For checkbox/radio items,
|
|
104
|
+
* use registerSelect() to register a dynamic handler.
|
|
105
|
+
*/
|
|
106
|
+
onSelect?: () => void;
|
|
107
|
+
/**
|
|
108
|
+
* Whether selecting this item should close the menu.
|
|
109
|
+
* @default true
|
|
110
|
+
*/
|
|
111
|
+
closeOnClick?: boolean;
|
|
112
|
+
/**
|
|
113
|
+
* Callback invoked after selection occurs (via click).
|
|
114
|
+
* Called with the item's ID. The consumer handles any
|
|
115
|
+
* post-selection behavior like closing menus.
|
|
116
|
+
*/
|
|
117
|
+
onAfterSelect?: (itemId: string) => void;
|
|
118
|
+
/**
|
|
119
|
+
* Children (used for text content inference when value is not provided).
|
|
120
|
+
*/
|
|
121
|
+
children?: React.ReactNode;
|
|
122
|
+
/**
|
|
123
|
+
* Optional aim guard refs for popup menu navigation.
|
|
124
|
+
* When provided, pointer move events will respect the aim guard.
|
|
125
|
+
*/
|
|
126
|
+
aimGuard?: AimGuardRefs;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Return value from the useListboxItem hook.
|
|
130
|
+
*/
|
|
131
|
+
interface UseListboxItemReturn {
|
|
132
|
+
/** Unique ID for this item (DOM ID for aria-activedescendant) */
|
|
133
|
+
id: string;
|
|
134
|
+
/**
|
|
135
|
+
* Store identifier for this item.
|
|
136
|
+
* Use this when calling store methods like setHighlightedId, registerSubmenuOpen, etc.
|
|
137
|
+
* This is the `value` prop (or inferred from textContent).
|
|
138
|
+
*/
|
|
139
|
+
storeId: string;
|
|
140
|
+
/** Ref to attach to the item element */
|
|
141
|
+
ref: React.RefObject<HTMLDivElement | null>;
|
|
142
|
+
/** Callback ref that tracks the mounted row element for positional attributes. Merge into the rendered element's ref. */
|
|
143
|
+
rowRef: (element: HTMLElement | null) => void;
|
|
144
|
+
/** Positional state among visible rows (all false in virtualized mode). */
|
|
145
|
+
positional: {
|
|
146
|
+
first: boolean;
|
|
147
|
+
last: boolean;
|
|
148
|
+
firstInGroup: boolean;
|
|
149
|
+
lastInGroup: boolean;
|
|
150
|
+
};
|
|
151
|
+
/** Whether item is currently highlighted */
|
|
152
|
+
isHighlighted: boolean;
|
|
153
|
+
/** Whether item should be rendered (passes filter) */
|
|
154
|
+
isVisible: boolean;
|
|
155
|
+
/** Context value to provide to children via ItemContext.Provider */
|
|
156
|
+
contextValue: ItemContextValue;
|
|
157
|
+
/**
|
|
158
|
+
* Event handlers to spread on the element.
|
|
159
|
+
* These handle click, pointer move, and pointer down events.
|
|
160
|
+
*/
|
|
161
|
+
handlers: {
|
|
162
|
+
onClick: React.MouseEventHandler<HTMLDivElement>;
|
|
163
|
+
onPointerMove: React.PointerEventHandler<HTMLDivElement>;
|
|
164
|
+
onPointerDown: React.PointerEventHandler<HTMLDivElement>;
|
|
165
|
+
};
|
|
166
|
+
/**
|
|
167
|
+
* Register a custom onSelect handler.
|
|
168
|
+
* This is useful for checkbox/radio items where the select behavior
|
|
169
|
+
* needs to be customized (e.g., toggle checked state).
|
|
170
|
+
* Returns an unregister function.
|
|
171
|
+
*/
|
|
172
|
+
registerSelect: (handler: (() => void) | undefined) => () => void;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Hook that provides all shared logic for navigatable/highlightable listbox items.
|
|
176
|
+
*
|
|
177
|
+
* This hook handles:
|
|
178
|
+
* - Item registration with the listbox store
|
|
179
|
+
* - Highlight state management (keyboard and pointer)
|
|
180
|
+
* - Filter/search visibility
|
|
181
|
+
* - Scroll into view on keyboard navigation
|
|
182
|
+
* - Click, pointer move, and pointer down event handlers
|
|
183
|
+
* - Optional aim guard integration (for submenu navigation)
|
|
184
|
+
*
|
|
185
|
+
* @example
|
|
186
|
+
* ```tsx
|
|
187
|
+
* function CustomItem(props) {
|
|
188
|
+
* const item = useListboxItem({
|
|
189
|
+
* value: props.value,
|
|
190
|
+
* disabled: props.disabled,
|
|
191
|
+
* onSelect: props.onSelect,
|
|
192
|
+
* })
|
|
193
|
+
*
|
|
194
|
+
* if (!item.isVisible) return null
|
|
195
|
+
*
|
|
196
|
+
* return (
|
|
197
|
+
* <ItemContext.Provider value={item.contextValue}>
|
|
198
|
+
* <div
|
|
199
|
+
* ref={item.ref}
|
|
200
|
+
* {...item.handlers}
|
|
201
|
+
* data-highlighted={item.isHighlighted || undefined}
|
|
202
|
+
* >
|
|
203
|
+
* {props.children}
|
|
204
|
+
* </div>
|
|
205
|
+
* </ItemContext.Provider>
|
|
206
|
+
* )
|
|
207
|
+
* }
|
|
208
|
+
* ```
|
|
209
|
+
*/
|
|
210
|
+
declare function useListboxItem(params: UseListboxItemParams): UseListboxItemReturn;
|
|
211
|
+
|
|
212
|
+
export { type AimGuardRefs as A, type GroupContextValue as G, type ItemContextValue as I, type UseListboxItemParams as U, useMaybeItemContext as a, type GroupPositional as b, GroupContext as c, useGroupContext as d, ItemContext as e, type UseListboxItemReturn as f, useListboxItem as g, useItemContext as u };
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkSCDHQZFIcjs = require('../chunk-SCDHQZFI.cjs');var _chunkM4G6J7DPcjs = require('../chunk-M4G6J7DP.cjs');var _react = require('react'); var He = _interopRequireWildcard(_react); var Ie = _interopRequireWildcard(_react); var ar = _interopRequireWildcard(_react); var sr = _interopRequireWildcard(_react); var it = _interopRequireWildcard(_react); var fe = _interopRequireWildcard(_react); var X = _interopRequireWildcard(_react); var ue = _interopRequireWildcard(_react); var pr = _interopRequireWildcard(_react); var Qe = _interopRequireWildcard(_react); var ce = _interopRequireWildcard(_react); var yr = _interopRequireWildcard(_react); var Sr = _interopRequireWildcard(_react); var lt = _interopRequireWildcard(_react); var $e = _interopRequireWildcard(_react); var Ne = _interopRequireWildcard(_react); var dt = _interopRequireWildcard(_react); var d = _interopRequireWildcard(_react); var Ue = _interopRequireWildcard(_react); var R = _interopRequireWildcard(_react); var F = _interopRequireWildcard(_react); var tt = _interopRequireWildcard(_react); var K = _interopRequireWildcard(_react); var de = _interopRequireWildcard(_react); var O = _interopRequireWildcard(_react);var at=He.createContext(null);function P(c){let e=He.useContext(at);if(!e)throw new Error(`<VideoPlayer.${c}> must be used within <VideoPlayer.Root>`);return e}function ie(){return P("useVideoPlayer")}var Kr={};_chunkM4G6J7DPcjs.a.call(void 0, Kr,{BufferedIndicator:()=>nr,Captions:()=>ir,CaptionsButton:()=>lr,CaptionsDataAttributes:()=>De,CaptionsMenu:()=>ur,CaptionsMenuItem:()=>Ae,Controls:()=>cr,ControlsDataAttributes:()=>We,FullscreenButton:()=>dr,MuteButton:()=>fr,Overlay:()=>mr,OverlayDataAttributes:()=>Fe,PictureInPictureButton:()=>Pr,PlayButton:()=>Rr,PlaybackRateButton:()=>br,PlaybackRateMenu:()=>kr,PlaybackRateMenuItem:()=>ut,Portal:()=>gr,Poster:()=>vr,QualityMenu:()=>Tr,QualityMenuItem:()=>pt,Root:()=>xr,RootDataAttributes:()=>je,SeekSlider:()=>Br,SeekSliderBuffered:()=>Ir,SeekSliderControl:()=>Vr,SeekSliderCssVars:()=>qe,SeekSliderDataAttributes:()=>Xe,SeekSliderHover:()=>Or,SeekSliderPreviewThumb:()=>Dr,SeekSliderPreviewThumbDataAttributes:()=>Ye,SeekSliderPreviewTooltip:()=>me,SeekSliderPreviewTooltipPopup:()=>Je,SeekSliderPreviewTooltipPortal:()=>Ge,SeekSliderPreviewTooltipPositioner:()=>ze,SeekSliderProgress:()=>Lr,SeekSliderThumb:()=>Hr,SeekSliderTrack:()=>wr,Thumbnail:()=>Ar,ThumbnailDataAttributes:()=>Ze,TimeDisplay:()=>Wr,TimeDisplayDataAttributes:()=>et,Track:()=>Fr,Video:()=>Qr,VolumeSlider:()=>$r,VolumeSliderControl:()=>Nr,VolumeSliderCssVars:()=>rt,VolumeSliderDataAttributes:()=>nt,VolumeSliderRange:()=>Ur,VolumeSliderThumb:()=>_r,VolumeSliderTrack:()=>jr,useTransitionStatus:()=>Y,useVideoPlayer:()=>ie});var _jsxruntime = require('react/jsx-runtime');var nr=Ie.forwardRef(function(e,r){let{render:l,...u}=e,n=P("BufferedIndicator"),o=Ie.useMemo(()=>{if(!n.buffered||n.buffered.length===0)return 0;for(let i=0;i<n.buffered.length;i++)if(n.buffered.start(i)<=n.currentTime&&n.currentTime<=n.buffered.end(i))return n.buffered.end(i);return n.buffered.end(0)},[n.buffered,n.currentTime]),a=n.duration>0?o/n.duration*100:0,t={buffered:n.buffered,duration:n.duration,bufferedPercentage:a,bufferedEnd:o},s={"--buffered-percentage":`${a}%`,"--buffered-end":o,...u.style},p={ref:r,style:s,"aria-hidden":!0};return l?l(p,t):_jsxruntime.jsx.call(void 0, "div",{ref:r,"aria-hidden":"true",...u,style:s})});var De=(e=>(e.active="data-active",e))(De||{});var ir=ar.forwardRef(function(e,r){let{render:l,children:u,...n}=e,a=P("Captions").activeCues,t=a.map(f=>f.text).join(`
|
|
2
|
+
`),s=a.length>0,p={active:s,cueText:t,cues:a},i={ref:r,"aria-live":"polite","aria-atomic":!0,role:"status",style:{pointerEvents:"none"},"data-active":s||void 0};return l?l(i,p):u?_jsxruntime.jsx.call(void 0, "div",{...i,...n,children:u}):_jsxruntime.jsx.call(void 0, "div",{...i,...n,children:t})});var lr=sr.forwardRef(function(e,r){let{render:l,...u}=e,n=P("CaptionsButton"),o=n.registeredTracks.length>0,a=n.activeTextTrack!==null,t={active:a,available:o,trackCount:n.registeredTracks.length},s=_chunkSCDHQZFIcjs.a.call(void 0, {ref:r,type:"button","aria-label":a?"Disable captions":"Enable captions","aria-pressed":a,disabled:!o,"data-active":a||void 0,"data-available":o||void 0,onClick(){if(a)n.setTextTrack(null);else if(n.registeredTracks.length>0){let p=n.registeredTracks[0];_optionalChain([p, 'optionalAccess', _2 => _2.textTrack])&&n.setTextTrack(p.textTrack)}}},u);return l?l(s,t):_jsxruntime.jsx.call(void 0, "button",{...s})});var ur=it.forwardRef(function(e,r){let{render:l,children:u,...n}=e,o=P("CaptionsMenu"),a={registeredTracks:o.registeredTracks,activeTextTrack:o.activeTextTrack},t={ref:r,role:"menu","aria-label":"Captions","data-active":o.activeTextTrack!==null||void 0};return l?l(t,a):_jsxruntime.jsx.call(void 0, "div",{...t,...n,children:_nullishCoalesce(u, () => (_jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment,{children:[_jsxruntime.jsx.call(void 0, Ae,{track:null,children:"Off"}),o.registeredTracks.map(s=>_jsxruntime.jsx.call(void 0, Ae,{track:s.textTrack,children:s.label},s.id))]})))})}),Ae=it.forwardRef(function(e,r){let{track:l,children:u,...n}=e,o=P("CaptionsMenuItem"),a=o.activeTextTrack===l,t=_chunkSCDHQZFIcjs.a.call(void 0, {ref:r,type:"button",role:"menuitemradio","aria-checked":a,"data-active":a||void 0,onClick(){o.setTextTrack(l)}},n);return _jsxruntime.jsx.call(void 0, "button",{...t,children:u})});var We=(t=>(t.open="data-open",t.closed="data-closed",t.idle="data-idle",t.playing="data-playing",t.paused="data-paused",t.ended="data-ended",t.startingStyle="data-starting-style",t.endingStyle="data-ending-style",t))(We||{});function an(c){let e=[...c.getAnimations(),...Array.from(c.querySelectorAll("*")).flatMap(r=>r.getAnimations())];return e.length===0?Promise.resolve():Promise.all(e.map(r=>r.finished)).then(()=>{}).catch(()=>{})}function Y(c){let{open:e,keepMounted:r=!1}=c,[l,u]=X.useState(e||r),[n,o]=X.useState(e?"starting":void 0),a=X.useRef(null),t=X.useRef(!1);return X.useEffect(()=>{if(e){t.current=!1,u(!0),o("starting");let s=requestAnimationFrame(()=>{requestAnimationFrame(()=>{o(void 0)})});return()=>cancelAnimationFrame(s)}},[e]),X.useEffect(()=>{if(!e&&l&&!t.current){o("ending");let s=a.current;if(!s){o(void 0),r||u(!1);return}t.current=!0;let p=requestAnimationFrame(()=>{requestAnimationFrame(()=>{an(s).then(()=>{t.current&&(t.current=!1,o(void 0),r||u(!1))})})});return()=>{cancelAnimationFrame(p)}}},[e,l,r]),X.useEffect(()=>{r&&!l&&!e&&u(!0)},[r,l,e]),{mounted:l||r,transitionStatus:n,elementRef:a}}var cr=fe.forwardRef(function(e,r){let{idleTimeout:l,keepMounted:u=!1,render:n,children:o,...a}=e,t=P("Controls"),p=(_nullishCoalesce(l, () => (t.idleTimeout)))===0||!t.idle,{mounted:i,transitionStatus:f,elementRef:b}=Y({open:p,keepMounted:u}),S=fe.useCallback(L=>{b.current=L,typeof r=="function"?r(L):r&&(r.current=L)},[r,b]),{onClick:T,...y}=a,x=fe.useCallback(L=>{L.stopPropagation(),_optionalChain([T, 'optionalCall', _3 => _3(L)])},[T]),v={open:p,idle:t.idle,playing:t.playing,paused:t.paused,ended:t.ended},k={ref:S,onClick:x,"data-open":p||void 0,"data-closed":!p||void 0,"data-idle":t.idle||void 0,"data-playing":t.playing||void 0,"data-paused":t.paused||void 0,"data-ended":t.ended||void 0,"data-starting-style":f==="starting"||void 0,"data-ending-style":f==="ending"||void 0};return i?n?n(k,v):_jsxruntime.jsx.call(void 0, "div",{...k,...y,children:o}):null});var dr=ue.forwardRef(function(e,r){let{render:l,children:u,...n}=e,o=P("FullscreenButton"),[a,t]=ue.useState(!1);ue.useEffect(()=>{t("fullscreenEnabled"in document&&document.fullscreenEnabled)},[]);let s={fullscreen:o.fullscreen,supported:a},p=_chunkSCDHQZFIcjs.a.call(void 0, {ref:r,type:"button","aria-label":o.fullscreen?"Exit fullscreen":"Enter fullscreen","aria-pressed":o.fullscreen,disabled:!a,"data-fullscreen":o.fullscreen||void 0,"data-supported":a||void 0,onClick(){o.toggleFullscreen()}},n);return l?l(p,s):_jsxruntime.jsx.call(void 0, "button",{...p,children:u})});var fr=pr.forwardRef(function(e,r){let{render:l,...u}=e,n=P("MuteButton"),o={muted:n.muted,volume:n.volume},a=n.volume,t=n.muted,s=a===0||t,p=a>0&&!t,i=!t&&a>0&&a<.5,f=!t&&a>=.5,b=_chunkSCDHQZFIcjs.a.call(void 0, {ref:r,type:"button","aria-label":n.muted?"Unmute":"Mute","aria-pressed":n.muted,"data-muted":t||void 0,"data-volume-off":s||void 0,"data-volume-on":p||void 0,"data-volume-low":i||void 0,"data-volume-high":f||void 0,onClick(){n.toggleMute()}},u);return l?l(b,o):_jsxruntime.jsx.call(void 0, "button",{...b})});var Fe=(i=>(i.open="data-open",i.closed="data-closed",i.playing="data-playing",i.paused="data-paused",i.ended="data-ended",i.waiting="data-waiting",i.seeking="data-seeking",i.fullscreen="data-fullscreen",i.pip="data-pip",i.startingStyle="data-starting-style",i.endingStyle="data-ending-style",i))(Fe||{});var mr=Qe.forwardRef(function(e,r){let{idleTimeout:l,keepMounted:u=!1,render:n,children:o,...a}=e,t=P("Overlay"),p=(_nullishCoalesce(l, () => (t.idleTimeout)))===0||!t.idle,{mounted:i,transitionStatus:f,elementRef:b}=Y({open:p,keepMounted:u}),S=Qe.useCallback(x=>{b.current=x,typeof r=="function"?r(x):r&&(r.current=x)},[r,b]),T={playing:t.playing,paused:t.paused,ended:t.ended,waiting:t.waiting,seeking:t.seeking,fullscreen:t.fullscreen,pictureInPicture:t.pictureInPicture,open:p},y=_chunkSCDHQZFIcjs.a.call(void 0, {ref:S,onClick(){t.toggle()},"data-playing":t.playing||void 0,"data-paused":t.paused||void 0,"data-ended":t.ended||void 0,"data-waiting":t.waiting||void 0,"data-seeking":t.seeking||void 0,"data-fullscreen":t.fullscreen||void 0,"data-pip":t.pictureInPicture||void 0,"data-open":p||void 0,"data-closed":!p||void 0,"data-starting-style":f==="starting"||void 0,"data-ending-style":f==="ending"||void 0},a);return i?n?n(y,T):_jsxruntime.jsx.call(void 0, "div",{...y,...a,children:o}):null});var Pr=ce.forwardRef(function(e,r){let{render:l,...u}=e,n=P("PictureInPictureButton"),[o,a]=ce.useState(!1);ce.useEffect(()=>{a("pictureInPictureEnabled"in document&&document.pictureInPictureEnabled)},[]);let t={pictureInPicture:n.pictureInPicture,supported:o},s=_chunkSCDHQZFIcjs.a.call(void 0, {ref:r,type:"button","aria-label":n.pictureInPicture?"Exit picture-in-picture":"Enter picture-in-picture","aria-pressed":n.pictureInPicture,disabled:!o,"data-pip":n.pictureInPicture||void 0,"data-supported":o||void 0,onClick(){n.togglePictureInPicture()}},u);return l?l(s,t):_jsxruntime.jsx.call(void 0, "button",{...s})});var Rr=yr.forwardRef(function(e,r){let{render:l,children:u,...n}=e,o=P("PlayButton"),a={playing:o.playing,paused:o.paused,ended:o.ended,waiting:o.waiting},t=_chunkSCDHQZFIcjs.a.call(void 0, {ref:r,type:"button","aria-label":o.playing?"Pause":"Play","data-playing":o.playing||void 0,"data-paused":o.paused||void 0,"data-ended":o.ended||void 0,"data-waiting":o.waiting||void 0,onClick(){o.toggle()}},n);return l?l(t,a):_jsxruntime.jsx.call(void 0, "button",{...t,children:u})});var fn=[.25,.5,.75,1,1.25,1.5,1.75,2],br=Sr.forwardRef(function(e,r){let{rates:l=fn,render:u,children:n,...o}=e,a=P("PlaybackRateButton"),t={playbackRate:a.playbackRate,rates:l},s=_chunkSCDHQZFIcjs.a.call(void 0, {ref:r,type:"button","aria-label":`Playback speed: ${a.playbackRate}x`,"data-rate":a.playbackRate,onClick(){let p=l.indexOf(a.playbackRate),i=_nullishCoalesce(_nullishCoalesce(l[(p+1)%l.length], () => (l[0])), () => (a.playbackRate));a.setPlaybackRate(i)}},o);return u?u(s,t):_jsxruntime.jsx.call(void 0, "button",{...s,children:_nullishCoalesce(n, () => (`${a.playbackRate}x`))})});var Pn=[.25,.5,.75,1,1.25,1.5,1.75,2],kr=lt.forwardRef(function(e,r){let{rates:l=Pn,render:u,children:n,...o}=e,a=P("PlaybackRateMenu"),t={playbackRate:a.playbackRate,rates:l},s={ref:r,role:"menu","aria-label":"Playback speed","data-rate":a.playbackRate};return u?u(s,t):_jsxruntime.jsx.call(void 0, "div",{...s,...o,children:_nullishCoalesce(n, () => (l.map(p=>_jsxruntime.jsx.call(void 0, ut,{rate:p},p))))})}),ut=lt.forwardRef(function(e,r){let{rate:l,children:u,...n}=e,o=P("PlaybackRateMenuItem"),a=o.playbackRate===l,t=_chunkSCDHQZFIcjs.a.call(void 0, {ref:r,type:"button",role:"menuitemradio","aria-checked":a,"data-active":a||void 0,onClick(){o.setPlaybackRate(l)}},n);return _jsxruntime.jsx.call(void 0, "button",{...t,children:_nullishCoalesce(u, () => (`${l}x`))})});var _reactdom = require('react-dom'); var Mr = _interopRequireWildcard(_reactdom);function gr(c){let{children:e,container:r}=c,[l,u]=$e.useState(!1);if($e.useEffect(()=>(u(!0),()=>u(!1)),[]),!l)return null;let n=_nullishCoalesce(r, () => ((typeof document<"u"?document.body:null)));return n?_reactdom.createPortal.call(void 0, e,n):null}var vr=Ne.forwardRef(function(e,r){let{keepMounted:l=!1,render:u,children:n,...o}=e,a=P("Poster"),t=!a.canPlay,s=a.canPlay,{mounted:p,transitionStatus:i,elementRef:f}=Y({open:t,keepMounted:l}),b=Rn(r,f),S={loading:t,loaded:s,transitionStatus:i},T={ref:b,"aria-hidden":!0,"data-loading":t||void 0,"data-loaded":s||void 0,"data-starting-style":i==="starting"||void 0,"data-ending-style":i==="ending"||void 0};return p?u?u(T,S):_jsxruntime.jsx.call(void 0, "div",{...T,...o,children:n}):null});function Rn(...c){return Ne.useCallback(e=>{for(let r of c)typeof r=="function"?r(e):r!=null&&(r.current=e)},c)}var Tr=dt.forwardRef(function(e,r){let{render:l,children:u,...n}=e,o=P("QualityMenu"),a={qualities:o.qualities,activeQuality:o.activeQuality},t={ref:r,role:"menu","aria-label":"Video quality","data-quality":_nullishCoalesce(_optionalChain([o, 'access', _4 => _4.activeQuality, 'optionalAccess', _5 => _5.label]), () => (void 0))};return l?l(t,a):_jsxruntime.jsx.call(void 0, "div",{...t,...n,children:_nullishCoalesce(u, () => (o.qualities.map(s=>_jsxruntime.jsx.call(void 0, pt,{quality:s,children:s.label},s.label))))})}),pt=dt.forwardRef(function(e,r){let{quality:l,children:u,...n}=e,o=P("QualityMenuItem"),a=_optionalChain([o, 'access', _6 => _6.activeQuality, 'optionalAccess', _7 => _7.label])===l.label,t=_chunkSCDHQZFIcjs.a.call(void 0, {ref:r,type:"button",role:"menuitemradio","aria-checked":a,"data-active":a||void 0,onClick(){o.setQuality(l)}},n);return _jsxruntime.jsx.call(void 0, "button",{...t,children:u})});var je=(s=>(s.playing="data-playing",s.paused="data-paused",s.ended="data-ended",s.waiting="data-waiting",s.seeking="data-seeking",s.fullscreen="data-fullscreen",s.pip="data-pip",s.muted="data-muted",s.idle="data-idle",s))(je||{});function bn(c,e){return!(c instanceof HTMLElement)||c instanceof HTMLInputElement&&c.type==="range"&&e===" "?!1:c.tagName==="INPUT"||c.tagName==="TEXTAREA"||c.isContentEditable}function kn(c){return c==="ArrowRight"||c==="ArrowLeft"}function hr(c,e){let r=ie(),l=Ue.useRef(r);l.current=r,Ue.useEffect(()=>{if(e==="none")return;let u=a=>{if(bn(a.target,a.key))return;let t=l.current;switch(a.key){case" ":a.preventDefault(),t.toggle();break;case"f":case"F":a.preventDefault(),t.toggleFullscreen();break;case"ArrowUp":a.preventDefault(),t.setVolume(Math.min(t.volume+.1,1));break;case"ArrowDown":a.preventDefault(),t.setVolume(Math.max(t.volume-.1,0));break;case"ArrowRight":a.preventDefault(),t.beginSeekInteraction(),t.seek(Math.min(t.currentTime+5,t.duration));break;case"ArrowLeft":a.preventDefault(),t.beginSeekInteraction(),t.seek(Math.max(t.currentTime-5,0));break;default:return}t.resetIdle()},n=a=>{kn(a.key)&&l.current.endSeekInteraction()};if(e==="global")return window.addEventListener("keydown",u),window.addEventListener("keyup",n),()=>{window.removeEventListener("keydown",u),window.removeEventListener("keyup",n)};let o=c.current;if(o)return o.addEventListener("keydown",u),o.addEventListener("keyup",n),()=>{o.removeEventListener("keydown",u),o.removeEventListener("keyup",n)}},[e,c])}function _e(c,e,r){let[l,u]=d.useState(e),n=c!==void 0,o=n?c:l,a=d.useCallback(t=>{let s=typeof t=="function"?t(o):t;n||u(s),_optionalChain([r, 'optionalCall', _8 => _8(s)])},[n,o,r]);return[o,a]}function gn({rootRef:c,videoRef:e,actionsRef:r,defaultPlaying:l=!1,autoPlay:u=!1,defaultVolume:n=1,defaultMuted:o=!1,defaultPlaybackRate:a=1,playing:t,onPlayingChange:s,volume:p,onVolumeChange:i,muted:f,onMutedChange:b,playbackRate:S,onPlaybackRateChange:T,currentTime:y,onCurrentTimeChange:x,idleTimeout:v=3e3,preventIdleWhenPaused:k=!1,idle:L,onIdleChange:M,onEnded:w,onWaiting:H,onSeeking:Q,onSeeked:D,onFullscreenChange:h,onPictureInPictureChange:$,children:U}){let q=d.useRef(1),_=d.useRef(!1),z=d.useRef(!1),Z=d.useRef(!1),[B,I]=d.useState("paused"),[g,A]=d.useState(l?"play":"pause");d.useEffect(()=>{t!==void 0&&(A(t?"play":"pause"),B!=="waiting"&&I(t?"playing":"paused"))},[t,B]);let[W,te]=_e(p,n,i),[J,pe]=_e(f,o,b),[Pt,yt]=_e(S,a,T),[qr,re]=_e(L,!0,M),ne=d.useRef(null),ye=d.useCallback(()=>{ne.current&&(clearTimeout(ne.current),ne.current=null)},[]),Rt=d.useCallback(()=>{v!==0&&(ye(),ne.current=setTimeout(()=>{re(!0)},v))},[v,ye,re]),St=d.useCallback(()=>{re(!1),Rt()},[re,Rt]),bt=d.useCallback(()=>{ye(),re(!0)},[ye,re]);d.useEffect(()=>(v>0&&(ne.current=setTimeout(()=>{re(!0)},v)),()=>{ne.current&&clearTimeout(ne.current)}),[]);let kt=k&&B!=="playing"?!1:qr,se=d.useCallback(()=>{let m=e.current;m&&(m.muted!==J&&(m.muted=J),m.volume!==W&&(m.volume=W))},[J,e,W]),Re=d.useCallback(async()=>{let m=e.current;if(!(!u||!m||Z.current)){Z.current=!0,A("play"),se();try{await m.play(),I("playing"),_optionalChain([s, 'optionalCall', _9 => _9(!0)])}catch (e2){A("pause"),I("paused")}}},[u,s,se,e]);d.useEffect(()=>{if(!u){Z.current=!1;return}Re()},[u,Re]);let[gt,vt]=d.useState(0),[Se,Tt]=d.useState(0),[ht,Xr]=d.useState(null),[be,Yr]=d.useState(null),[xt,Ct]=d.useState(!1),[Mt,le]=d.useState(!1),[ke,Gr]=d.useState(!1),[ge,Et]=d.useState(!1),[Bt,ot]=d.useState([]),[oe,zr]=d.useState(null),[Vt,ve]=d.useState([]),[wt,Wn]=d.useState([]),[Lt,Jr]=d.useState(null);d.useEffect(()=>{y!==void 0&&e.current&&(e.current.currentTime=y)},[y,e]),d.useEffect(()=>{f===void 0&&p===void 0||se()},[f,p,se]),d.useEffect(()=>{let m=()=>{let C=document.fullscreenElement===c.current;Gr(C),_optionalChain([h, 'optionalCall', _10 => _10(C)])};return document.addEventListener("fullscreenchange",m),()=>document.removeEventListener("fullscreenchange",m)},[h,c]),d.useEffect(()=>{let m=e.current;if(!m)return;let C=()=>{Et(!0),_optionalChain([$, 'optionalCall', _11 => _11(!0)])},N=()=>{Et(!1),_optionalChain([$, 'optionalCall', _12 => _12(!1)])};return m.addEventListener("enterpictureinpicture",C),m.addEventListener("leavepictureinpicture",N),()=>{m.removeEventListener("enterpictureinpicture",C),m.removeEventListener("leavepictureinpicture",N)}},[$,e]);let Te=d.useCallback(async()=>{e.current&&(A("play"),await e.current.play(),I("playing"),_optionalChain([s, 'optionalCall', _13 => _13(!0)]))},[e,s]),he=d.useCallback(()=>{e.current&&(A("pause"),e.current.pause(),I("paused"),_optionalChain([s, 'optionalCall', _14 => _14(!1)]))},[e,s]),xe=d.useCallback(async()=>{B==="playing"?he():await Te()},[B,Te,he]),Ce=d.useCallback(m=>{e.current&&(e.current.currentTime=m,vt(m),_optionalChain([x, 'optionalCall', _15 => _15(m)]))},[x,e]),Ht=d.useCallback(()=>{let m=e.current;!m||_.current||(_.current=!0,z.current=g==="play",le(!0),z.current&&!m.paused&&m.pause())},[g,e]),It=d.useCallback(()=>{let m=e.current;if(!m||!_.current)return;let C=z.current&&g==="play";if(_.current=!1,z.current=!1,!C){le(!1);return}m.play().then(()=>{I("playing"),le(!1)}).catch(()=>{I("waiting"),le(!1)})},[g,e]),Me=d.useCallback(m=>{let C=Math.max(0,Math.min(1,m));e.current&&(e.current.volume=C),te(C)},[te,e]),Dt=d.useCallback(()=>{if(!(J||W===0))q.current=W,e.current&&(e.current.muted=!0),pe(!0);else{let C=q.current>0?q.current:1;e.current&&(e.current.volume=C,e.current.muted=!1),te(C),pe(!1)}},[J,W,pe,te,e]),Ee=d.useCallback(async()=>{_optionalChain([c, 'access', _16 => _16.current, 'optionalAccess', _17 => _17.requestFullscreen])&&await c.current.requestFullscreen()},[c]),Be=d.useCallback(async()=>{document.exitFullscreen&&await document.exitFullscreen()},[]),Ve=d.useCallback(async()=>{ke?await Be():await Ee()},[ke,Ee,Be]),we=d.useCallback(async()=>{_optionalChain([e, 'access', _18 => _18.current, 'optionalAccess', _19 => _19.requestPictureInPicture])&&await e.current.requestPictureInPicture()},[e]),Le=d.useCallback(async()=>{document.pictureInPictureElement&&await document.exitPictureInPicture()},[]),Ot=d.useCallback(async()=>{ge?await Le():await we()},[ge,we,Le]),At=d.useCallback(m=>{e.current&&(e.current.playbackRate=m),yt(m)},[yt,e]),Wt=d.useCallback(m=>{if(e.current){for(let C=0;C<e.current.textTracks.length;C++){let N=e.current.textTracks[C];N&&(N.mode="disabled")}m&&(m.mode="hidden")}zr(m),ve([])},[e]),Ft=d.useCallback(m=>{Jr(m)},[]),Qt=d.useCallback(m=>{ot(C=>C.some(N=>N.id===m.id)?C:[...C,m])},[]),$t=d.useCallback(m=>{ot(C=>C.filter(N=>N.id!==m))},[]),Nt=d.useCallback((m,C)=>{ot(N=>N.map(ae=>ae.id===m?{...ae,textTrack:C}:ae))},[]);d.useEffect(()=>{if(!oe){ve([]);return}let m=()=>{let C=oe.activeCues;if(!C){ve([]);return}let N=[];for(let ae=0;ae<C.length;ae++){let rr=C[ae];rr instanceof VTTCue&&N.push(rr)}ve(N)};return m(),oe.addEventListener("cuechange",m),()=>{oe.removeEventListener("cuechange",m)}},[oe]),d.useImperativeHandle(r,()=>({toggle:xe,seek:Ce,setVolume:Me,toggleFullscreen:Ve}),[xe,Ce,Me,Ve]);let jt=d.useCallback(()=>{if(e.current){let m=e.current.currentTime;vt(m),_optionalChain([x, 'optionalCall', _20 => _20(m)])}},[x,e]),Ut=d.useCallback(()=>{e.current&&Tt(e.current.duration)},[e]),_t=d.useCallback(()=>{e.current&&Xr(e.current.buffered)},[e]),Kt=d.useCallback(()=>{A("play"),I("playing"),_optionalChain([s, 'optionalCall', _21 => _21(!0)])},[s]),qt=d.useCallback(()=>{_.current||B!=="ended"&&(I("paused"),_optionalChain([s, 'optionalCall', _22 => _22(!1)]))},[B,s]),Xt=d.useCallback(()=>{A("pause"),I("ended"),_optionalChain([s, 'optionalCall', _23 => _23(!1)]),_optionalChain([w, 'optionalCall', _24 => _24()])},[s,w]),Yt=d.useCallback(()=>{_.current||(I("waiting"),_optionalChain([H, 'optionalCall', _25 => _25()]))},[H]),Gt=d.useCallback(()=>{if(_.current){Ct(!0);return}if(B==="waiting"){let m=g==="play"?"playing":"paused";I(m),_optionalChain([s, 'optionalCall', _26 => _26(m==="playing")])}Ct(!0)},[B,g,s]),zt=d.useCallback(()=>{le(!0),B==="ended"&&I("paused"),_optionalChain([Q, 'optionalCall', _27 => _27()])},[B,Q]),Jt=d.useCallback(()=>{if(le(!1),e.current){let{currentTime:m,duration:C}=e.current;C>0&&C-m<.01&&I("ended")}_optionalChain([D, 'optionalCall', _28 => _28()])},[D,e]),Zt=d.useCallback(()=>{e.current&&(te(e.current.volume),pe(e.current.muted))},[te,pe,e]),er=d.useCallback(()=>{e.current&&Tt(e.current.duration)},[e]),tr=d.useCallback(()=>{se(),Re()},[Re,se]),Zr=d.useMemo(()=>({playbackStatus:B,playbackIntent:g,playing:B==="playing",paused:B==="paused",ended:B==="ended",waiting:B==="waiting",seeking:Mt,canPlay:xt,currentTime:gt,duration:Se,buffered:ht,hoverTime:be,hoverProgress:be!==null&&Se>0?be/Se*100:null,volume:W,muted:J,fullscreen:ke,pictureInPicture:ge,idle:kt,idleTimeout:v,preventIdleWhenPaused:k,registeredTracks:Bt,activeTextTrack:oe,activeCues:Vt,playbackRate:Pt,qualities:wt,activeQuality:Lt,videoRef:e,rootRef:c,play:Te,pause:he,toggle:xe,seek:Ce,setVolume:Me,toggleMute:Dt,enterFullscreen:Ee,exitFullscreen:Be,toggleFullscreen:Ve,enterPictureInPicture:we,exitPictureInPicture:Le,togglePictureInPicture:Ot,setPlaybackRate:At,setTextTrack:Wt,setQuality:Ft,registerTrack:Qt,unregisterTrack:$t,updateTrackRef:Nt,resetIdle:St,setHoverTime:Yr,beginSeekInteraction:Ht,endSeekInteraction:It,_handlers:{onTimeUpdate:jt,onDurationChange:Ut,onProgress:_t,onPlay:Kt,onPause:qt,onEnded:Xt,onWaiting:Yt,onCanPlay:Gt,onSeeking:zt,onSeeked:Jt,onVolumeChange:Zt,onLoadedMetadata:er,onVideoMount:tr,onRootMouseLeave:bt}}),[B,g,Mt,xt,gt,Se,ht,be,W,J,ke,ge,kt,v,k,Bt,oe,Vt,Pt,wt,Lt,e,c,Te,he,xe,Ce,Me,Dt,Ee,Be,Ve,we,Le,Ot,At,Wt,Ft,Qt,$t,Nt,St,Ht,It,jt,Ut,_t,Kt,qt,Xt,Yt,Gt,zt,Jt,Zt,er,tr,bt]);return _jsxruntime.jsx.call(void 0, at.Provider,{value:Zr,children:U})}var xr=d.forwardRef(function(e,r){let{actionsRef:l,keyboardShortcuts:u="focused",defaultPlaying:n,autoPlay:o,defaultVolume:a,defaultMuted:t,defaultPlaybackRate:s,playing:p,onPlayingChange:i,volume:f,onVolumeChange:b,muted:S,onMutedChange:T,playbackRate:y,onPlaybackRateChange:x,currentTime:v,onCurrentTimeChange:k,idleTimeout:L,preventIdleWhenPaused:M,hideCursorWhenIdle:w="fullscreen",idle:H,onIdleChange:Q,onEnded:D,onWaiting:h,onSeeking:$,onSeeked:U,onFullscreenChange:q,onPictureInPictureChange:_,children:z,...Z}=e,B=d.useRef(null),I=d.useRef(null);return _jsxruntime.jsx.call(void 0, gn,{actionsRef:l,defaultPlaying:n,autoPlay:o,defaultVolume:a,defaultMuted:t,defaultPlaybackRate:s,playing:p,onPlayingChange:i,volume:f,onVolumeChange:b,muted:S,onMutedChange:T,playbackRate:y,onPlaybackRateChange:x,currentTime:v,onCurrentTimeChange:k,idleTimeout:L,preventIdleWhenPaused:M,idle:H,onIdleChange:Q,onEnded:D,onWaiting:h,onSeeking:$,onSeeked:U,onFullscreenChange:q,onPictureInPictureChange:_,rootRef:B,videoRef:I,children:_jsxruntime.jsx.call(void 0, vn,{ref:r,rootRef:B,keyboardShortcuts:u,hideCursorWhenIdle:w,...Z,children:z})})}),vn=d.forwardRef(function({rootRef:e,keyboardShortcuts:r,hideCursorWhenIdle:l,children:u,className:n,style:o,...a},t){let s=ie(),p=Tn(t,e),i=d.useRef(null);hr(e,r);let f=d.useCallback(w=>{let{clientX:H,clientY:Q}=w,D=i.current;D&&D.x===H&&D.y===Q||(i.current={x:H,y:Q},s.resetIdle())},[s]),b=d.useCallback(w=>{let{clientX:H,clientY:Q}=w,D=i.current;D&&D.x===H&&D.y===Q||(i.current={x:H,y:Q},s.resetIdle())},[s]),S=d.useCallback(()=>{s._handlers.onRootMouseLeave()},[s._handlers]),T=d.useCallback(()=>{s.resetIdle()},[s]),y=d.useCallback(()=>{s.resetIdle()},[s]),x=d.useCallback(w=>{w.key==="Tab"&&s.resetIdle()},[s]),v=_chunkSCDHQZFIcjs.a.call(void 0, {onMouseMove:f,onMouseEnter:b,onMouseLeave:S,onClick:T,onFocus:y,onKeyDown:x},a),k={"data-playing":s.playing||void 0,"data-paused":s.paused||void 0,"data-ended":s.ended||void 0,"data-waiting":s.waiting||void 0,"data-seeking":s.seeking||void 0,"data-fullscreen":s.fullscreen||void 0,"data-pip":s.pictureInPicture||void 0,"data-muted":s.muted||void 0,"data-idle":s.idle||void 0},L=l!==!1&&s.idle&&(l==="always"||l==="fullscreen"&&s.fullscreen),M=d.useId();return _jsxruntime.jsxs.call(void 0, "div",{...v,ref:p,tabIndex:r==="focused"?0:void 0,className:n,style:o,"data-video-player-scope":M,...k,children:[L&&_jsxruntime.jsx.call(void 0, "style",{children:`[data-video-player-scope="${M}"], [data-video-player-scope="${M}"] * { cursor: none !important; }`}),u]})});function Tn(...c){return d.useCallback(e=>{for(let r of c)typeof r=="function"?r(e):r!=null&&(r.current=e)},c)}var qe=(o=>(o.progress="--seek-progress",o.buffered="--seek-buffered",o.currentTime="--seek-current-time",o.duration="--seek-duration",o.hoverProgress="--seek-hover-progress",o.hoverTime="--seek-hover-time",o))(qe||{});var Xe=(u=>(u.seeking="data-seeking",u.hovering="data-hovering",u.pressing="data-pressing",u.dragging="data-dragging",u))(Xe||{});var _slider = require('@base-ui/react/slider');var _react2 = require('@floating-ui/react');var Ye=(u=>(u.open="data-open",u.closed="data-closed",u.startingStyle="data-starting-style",u.endingStyle="data-ending-style",u))(Ye||{});var ft=R.createContext(null);function Er(c){let e=R.useContext(ft);if(!e)throw new Error(`${c} must be used within SeekSlider`);return e}function Cr(c){return c==="ArrowRight"||c==="ArrowLeft"}var Br=R.forwardRef(function(e,r){let{render:l,children:u,onPointerMove:n,onPointerLeave:o,onPointerDown:a,onKeyUp:t,onValueCommitted:s,...p}=e,i=P("SeekSlider"),f=R.useRef(null),[b,S]=R.useState(null),[T,y]=R.useState(!1),[x,v]=R.useState(!1),k=R.useRef(!1);R.useEffect(()=>{if(!T)return;let g=()=>{y(!1),v(!1),k.current=!1,i.endSeekInteraction()};return window.addEventListener("pointerup",g),()=>window.removeEventListener("pointerup",g)},[T,i]);let L=i.duration>0?i.currentTime/i.duration*100:0,M=R.useCallback((g,A)=>{let W=typeof g=="number"?g:g[0];W!==void 0&&(A.reason==="keyboard"&&i.beginSeekInteraction(),i.seek(W),i.resetIdle(),k.current&&v(!0))},[i]),w=R.useCallback(g=>{if(_optionalChain([n, 'optionalCall', _29 => _29(g)]),!f.current||i.duration===0)return;let A=f.current.getBoundingClientRect(),W=g.clientX-A.left,J=Math.max(0,Math.min(1,W/A.width))*i.duration;i.setHoverTime(J)},[n,i]),H=R.useCallback(g=>{_optionalChain([o, 'optionalCall', _30 => _30(g)]),i.setHoverTime(null)},[o,i]),Q=R.useCallback(g=>{_optionalChain([a, 'optionalCall', _31 => _31(g)]),y(!0),k.current=!0,i.beginSeekInteraction()},[a,i]),D=R.useCallback(g=>{_optionalChain([t, 'optionalCall', _32 => _32(g)]),Cr(g.key)&&i.endSeekInteraction()},[t,i]),h=R.useCallback((g,A)=>{let W=typeof g=="number"?g:g[0];W!==void 0&&(_optionalChain([s, 'optionalCall', _33 => _33(W,A)]),y(!1),v(!1),k.current=!1,!(A.reason==="keyboard"&&Cr(A.event.key))&&i.endSeekInteraction())},[s,i]),$=R.useMemo(()=>{if(!i.buffered||i.buffered.length===0)return 0;for(let g=0;g<i.buffered.length;g++)if(i.buffered.start(g)<=i.currentTime&&i.currentTime<=i.buffered.end(g))return i.buffered.end(g);return i.buffered.end(0)},[i.buffered,i.currentTime]),U=i.duration>0?$/i.duration*100:0;R.useLayoutEffect(()=>{typeof r=="function"?r(f.current):r&&(r.current=f.current)});let q={currentTime:i.currentTime,duration:i.duration,progress:L,seeking:i.seeking,pressing:T,dragging:x,hoverTime:i.hoverTime,hoverProgress:i.hoverProgress},_=i.hoverProgress!==null,z=_nullishCoalesce(i.hoverProgress, () => (0)),Z=R.useMemo(()=>({sliderRef:f,previewThumbElement:b,setPreviewThumbElement:S,hoverProgress:z,open:_}),[f,b,S,z,_]),B={position:"relative","--seek-progress":`${L}%`,"--seek-buffered":`${U}%`,"--seek-current-time":i.currentTime,"--seek-duration":i.duration,"--seek-hover-progress":i.hoverProgress!==null?`${i.hoverProgress}%`:void 0,"--seek-hover-time":_nullishCoalesce(i.hoverTime, () => (void 0)),...p.style},I={"data-seeking":i.seeking||void 0,"data-hovering":i.hoverTime!==null||void 0,"data-pressing":T||void 0,"data-dragging":x||void 0,style:B};return l?_jsxruntime.jsx.call(void 0, ft.Provider,{value:Z,children:_jsxruntime.jsx.call(void 0, _slider.Slider.Root,{ref:f,min:0,max:i.duration||100,step:.1,value:i.currentTime,onValueChange:M,onValueCommitted:h,onPointerMove:w,onPointerLeave:H,onPointerDown:Q,onKeyUp:D,"aria-label":"Seek",render:g=>l({...g,...I,style:{...g.style,...I.style}},q)})}):_jsxruntime.jsx.call(void 0, ft.Provider,{value:Z,children:_jsxruntime.jsx.call(void 0, _slider.Slider.Root,{ref:f,min:0,max:i.duration||100,step:.1,value:i.currentTime,onValueChange:M,onValueCommitted:h,onPointerMove:w,onPointerLeave:H,onPointerDown:Q,onKeyUp:D,"aria-label":"Seek",...I,...p,children:_nullishCoalesce(u, () => (_jsxruntime.jsx.call(void 0, _slider.Slider.Control,{children:_jsxruntime.jsxs.call(void 0, _slider.Slider.Track,{style:{position:"relative"},children:[_jsxruntime.jsx.call(void 0, "div",{style:{position:"absolute",left:0,top:0,height:"100%",width:`${U}%`}}),_jsxruntime.jsx.call(void 0, _slider.Slider.Indicator,{}),_jsxruntime.jsx.call(void 0, _slider.Slider.Thumb,{})]})})))})})}),Vr=_slider.Slider.Control,wr=R.forwardRef(function(e,r){let{render:l,children:u,style:n,...o}=e,a={},t={position:"relative",...n},s={ref:r,style:t};return l?_jsxruntime.jsx.call(void 0, _slider.Slider.Track,{render:p=>l({...p,...s},a)}):_jsxruntime.jsx.call(void 0, _slider.Slider.Track,{ref:r,style:t,...o,children:u})}),Lr=R.forwardRef(function(e,r){let{render:l,children:u,style:n,...o}=e,a=P("SeekSliderProgress"),s={progress:a.duration>0?a.currentTime/a.duration*100:0},p={height:"100%",...n},i={ref:r,style:p};return l?_jsxruntime.jsx.call(void 0, _slider.Slider.Indicator,{render:f=>l({...f,...i,style:{...f.style,...p}},s)}):_jsxruntime.jsx.call(void 0, _slider.Slider.Indicator,{ref:r,style:p,...o,children:u})}),Hr=R.forwardRef(function(e,r){let{render:l,children:u,style:n,...o}=e,a={},t={ref:r,style:_nullishCoalesce(n, () => ({}))};return l?_jsxruntime.jsx.call(void 0, _slider.Slider.Thumb,{render:s=>l({...s,...t,style:{...s.style,...n}},a)}):_jsxruntime.jsx.call(void 0, _slider.Slider.Thumb,{ref:r,style:n,...o,children:u})}),Ir=R.forwardRef(function(e,r){let{render:l,children:u,...n}=e,o=P("SeekSliderBuffered"),a=R.useMemo(()=>{if(!o.buffered||o.buffered.length===0)return 0;for(let f=0;f<o.buffered.length;f++)if(o.buffered.start(f)<=o.currentTime&&o.currentTime<=o.buffered.end(f))return o.buffered.end(f);return o.buffered.end(0)},[o.buffered,o.currentTime]),t=o.duration>0?a/o.duration*100:0,s={bufferedPercentage:t},p={position:"absolute",left:0,top:0,height:"100%",width:`${t}%`,...n.style},i={ref:r,style:p};return l?l(i,s):_jsxruntime.jsx.call(void 0, "div",{...i,...n,children:u})}),Dr=R.forwardRef(function(e,r){let{keepMounted:l=!1,render:u,children:n,...o}=e,a=P("SeekSliderPreviewThumb"),t=Er("SeekSliderPreviewThumb"),s=a.hoverProgress!==null,p=R.useRef(0);a.hoverProgress!==null&&(p.current=a.hoverProgress);let i=_nullishCoalesce(a.hoverProgress, () => (p.current)),{mounted:f,transitionStatus:b,elementRef:S}=Y({open:s,keepMounted:l}),T=R.useCallback(k=>{S.current=k,t.setPreviewThumbElement(k),typeof r=="function"?r(k):r&&(r.current=k)},[r,S,t]),y={open:s,transitionStatus:b,hoverProgress:i},x={position:"absolute",left:`${i}%`,transform:"translateX(-50%)",pointerEvents:"none",...o.style},v={ref:T,style:x,"data-open":s||void 0,"data-closed":!s||void 0,"data-starting-style":b==="starting"||void 0,"data-ending-style":b==="ending"||void 0};return f?u?u(v,y):_jsxruntime.jsx.call(void 0, "span",{...v,...o,children:n}):null}),Or=R.forwardRef(function(e,r){let{render:l,children:u,style:n,...o}=e,a=P("SeekSliderHover"),t=a.hoverProgress!==null,s=_nullishCoalesce(a.hoverProgress, () => (0)),p={hovering:t,hoverProgress:a.hoverProgress,hoverTime:a.hoverTime},i={position:"absolute",left:0,top:0,height:"100%",width:`${s}%`,pointerEvents:"none",...n},f={ref:r,style:i,"data-hovering":t||void 0};return l?l(f,p):_jsxruntime.jsx.call(void 0, "div",{...f,...o,children:u})});function Ge({children:c,container:e}){let r=P("SeekSliderPreviewTooltipPortal"),[l,u]=R.useState(!1);if(R.useEffect(()=>{u(!0)},[]),!l)return null;let n=_nullishCoalesce(_nullishCoalesce(e, () => (r.rootRef.current)), () => (document.body));return Mr.createPortal(c,n)}var ze=R.forwardRef(function(e,r){let{sideOffset:l=8,collisionPadding:u=0,collisionBoundary:n,keepMounted:o=!1,children:a,style:t,...s}=e,p=Er("SeekSliderPreviewTooltipPositioner"),{previewThumbElement:i,open:f,hoverProgress:b}=p,[S,T]=R.useState(null),{refs:y,floatingStyles:x,update:v}=_react2.useFloating.call(void 0, {placement:"top",middleware:[_react2.offset.call(void 0, l),_react2.shift.call(void 0, {boundary:n,padding:u})]});R.useLayoutEffect(()=>{i&&y.setReference(i)},[i,y]),R.useEffect(()=>{if(f&&i&&S)return _react2.autoUpdate.call(void 0, i,S,v)},[f,i,S,v]),R.useLayoutEffect(()=>{f&&i&&S&&v()},[b,f,i,S,v]);let k=R.useCallback(M=>{y.setFloating(M),T(M),typeof r=="function"?r(M):r&&(r.current=M)},[y,r]);return(o||f)&&!!i?_jsxruntime.jsx.call(void 0, "div",{ref:k,style:{...x,...t},"data-seek-slider-preview-tooltip-positioner":!0,"data-open":f||void 0,"data-closed":!f||void 0,...s,children:a}):null}),Je=R.forwardRef(function(e,r){let{children:l,...u}=e;return _jsxruntime.jsx.call(void 0, "div",{ref:r,"data-seek-slider-preview-tooltip-popup":!0,...u,children:l})});function me({sideOffset:c,collisionPadding:e,collisionBoundary:r,keepMounted:l,container:u,children:n,...o}){return _jsxruntime.jsx.call(void 0, Ge,{container:u,children:_jsxruntime.jsx.call(void 0, ze,{sideOffset:c,collisionPadding:e,collisionBoundary:r,keepMounted:l,children:_jsxruntime.jsx.call(void 0, Je,{...o,children:n})})})}me.Portal=Ge;me.Positioner=ze;me.Popup=Je;var Ze=(l=>(l.loading="data-loading",l.ready="data-ready",l.error="data-error",l))(Ze||{});var Ar=F.forwardRef(function(e,r){let{time:l,crossOrigin:u="anonymous",render:n,children:o,width:a,height:t,...s}=e,p=P("Thumbnail"),i=F.useRef(null),f=F.useRef(null),b=F.useRef(null),[S,T]=F.useState("idle"),[y,x]=F.useState({width:160,height:90}),v=l!==void 0?l:p.hoverTime,k=F.useMemo(()=>{let h=p.videoRef.current;return h?h.currentSrc||h.src:null},[p.videoRef]);F.useEffect(()=>{if(!k)return;let h=document.createElement("video");h.src=k,h.crossOrigin=u,h.preload="metadata",h.muted=!0,h.playsInline=!0;let $=()=>{x({width:h.videoWidth,height:h.videoHeight})},U=()=>{T("error")};return h.addEventListener("loadedmetadata",$),h.addEventListener("error",U),f.current=h,()=>{h.removeEventListener("loadedmetadata",$),h.removeEventListener("error",U),h.src="",f.current=null}},[k,u]),F.useEffect(()=>{let h=f.current,$=i.current;if(!h||!$||v===null||v===void 0||b.current!==null&&Math.abs(b.current-v)<.1)return;T("loading");let U=()=>{let q=$.getContext("2d");if(q)try{q.drawImage(h,0,0,$.width,$.height),b.current=v,T("ready")}catch (e3){T("error")}};return h.addEventListener("seeked",U,{once:!0}),h.currentTime=v,()=>{h.removeEventListener("seeked",U)}},[v]);let L=F.useCallback(h=>{i.current=h,typeof r=="function"?r(h):r&&(r.current=h)},[r]),M=y.width/y.height,w=_nullishCoalesce(a, () => (160)),H=_nullishCoalesce(t, () => (Math.round(w/M)));typeof w=="string"&&(w=160),typeof H=="string"&&(H=90);let Q={loading:S==="loading",ready:S==="ready",error:S==="error",time:v,videoWidth:y.width,videoHeight:y.height},D={ref:L,width:w,height:H,"data-loading":S==="loading"||void 0,"data-ready":S==="ready"||void 0,"data-error":S==="error"||void 0};return n?n(D,Q):_jsxruntime.jsx.call(void 0, "canvas",{...D,...s,children:o})});var et=(e=>(e.hovering="data-hovering",e))(et||{});var Wr=tt.forwardRef(function(e,r){let{format:l="current / duration",fixedWidth:u=!0,align:n="left",render:o,...a}=e,t=P("TimeDisplay"),s=tt.useRef(0);t.hoverTime!==null&&(s.current=t.hoverTime);let p=t.duration-t.currentTime,i=Pe(t.currentTime),f=Pe(t.duration),b=Pe(p),S=t.hoverTime!==null?Pe(t.hoverTime):Pe(s.current),T={currentTime:t.currentTime,duration:t.duration,remaining:p,hoverTime:t.hoverTime,hovering:t.hoverTime!==null,formattedCurrent:i,formattedDuration:f,formattedRemaining:b,formattedHover:S},y=()=>{switch(l){case"current":return i;case"duration":return f;case"remaining":return`-${b}`;case"current / duration":return`${i} / ${f}`;case"current / remaining":return`${i} / -${b}`;case"hover":return S;default:return`${i} / ${f}`}},x=()=>{let k=Ln(t.duration);switch(l){case"current":case"duration":case"hover":return k;case"remaining":return`-${k}`;case"current / duration":return`${k} / ${k}`;case"current / remaining":return`${k} / -${k}`;default:return`${k} / ${k}`}},v={ref:r,style:{position:u?"relative":void 0,userSelect:"none",fontVariantNumeric:"tabular-nums",...a.style},"data-hovering":T.hovering||void 0};return o?o(v,T):_jsxruntime.jsx.call(void 0, "span",{ref:r,"data-hovering":T.hovering||void 0,...a,style:{position:u?"relative":void 0,userSelect:"none",fontVariantNumeric:"tabular-nums",...a.style},children:u?_jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment,{children:[_jsxruntime.jsx.call(void 0, "span",{"aria-hidden":!0,style:{visibility:"hidden"},children:x()}),_jsxruntime.jsx.call(void 0, "span",{style:wn(n),children:y()})]}):y()})});function wn(c){let e={position:"absolute"};switch(c){case"left":return{...e,left:0};case"right":return{...e,right:0};case"center":return{...e,left:"50%",transform:"translateX(-50%)"}}}function Pe(c){if(!Number.isFinite(c)||Number.isNaN(c))return"0:00";let e=Math.floor(c/3600),r=Math.floor(c%3600/60),l=Math.floor(c%60);return e>0?`${e}:${r.toString().padStart(2,"0")}:${l.toString().padStart(2,"0")}`:`${r}:${l.toString().padStart(2,"0")}`}function Ln(c){if(!Number.isFinite(c)||Number.isNaN(c)||c<=0)return"0:00";let e=Math.floor(c/3600),r=Math.floor(c%3600/60);if(e>0){let u=String(e).length;return`${"0".repeat(u)}:00:00`}let l=String(r).length;return`${"0".repeat(l)}:00`}var Fr=K.forwardRef(function(e,r){let{kind:l="captions",src:u,label:n,srcLang:o,default:a,...t}=e,{registerTrack:s,unregisterTrack:p,updateTrackRef:i,setTextTrack:f}=P("Track"),b=K.useRef(null),S=K.useId(),T=K.useCallback(y=>{typeof r=="function"?r(y):r&&(r.current=y),b.current=y},[r]);return K.useEffect(()=>(s({id:S,kind:l,label:n,srcLang:o,src:u,textTrack:null}),()=>{p(S)}),[S,l,n,o,u,s,p]),K.useEffect(()=>{let y=b.current;if(!y)return;let x=()=>{y.track&&(y.track.mode="disabled",i(S,y.track),a&&f(y.track))};return y.track&&x(),y.addEventListener("load",x),()=>{y.removeEventListener("load",x)}},[S,a,i,f]),_jsxruntime.jsx.call(void 0, "track",{ref:T,kind:l,src:u,label:n,srcLang:o,default:a,...t})});var Qr=de.forwardRef(function(e,r){let{toggleOnClick:l=!0,...u}=e,n=P("Video"),o=de.useRef(!1),a=de.useCallback(p=>{typeof r=="function"?r(p):r&&(r.current=p),n.videoRef.current=p,p&&!o.current&&(o.current=!0,n._handlers.onVideoMount(),p.readyState>=1&&p.duration&&(n._handlers.onLoadedMetadata(),n._handlers.onDurationChange()),p.readyState>=3&&n._handlers.onCanPlay())},[r,n.videoRef,n._handlers]),t={"data-playing":n.playing||void 0,"data-paused":n.paused||void 0,"data-ended":n.ended||void 0,"data-waiting":n.waiting||void 0,"data-seeking":n.seeking||void 0},s=_chunkSCDHQZFIcjs.a.call(void 0, {ref:a,preload:"metadata",...t,onClick(){l&&n.toggle()},onTimeUpdate:n._handlers.onTimeUpdate,onDurationChange:n._handlers.onDurationChange,onProgress:n._handlers.onProgress,onPlay:n._handlers.onPlay,onPause:n._handlers.onPause,onEnded:n._handlers.onEnded,onWaiting:n._handlers.onWaiting,onCanPlay:n._handlers.onCanPlay,onSeeking:n._handlers.onSeeking,onSeeked:n._handlers.onSeeked,onVolumeChange:n._handlers.onVolumeChange,onLoadedMetadata:n._handlers.onLoadedMetadata},u);return _jsxruntime.jsx.call(void 0, "video",{...s})});var rt=(r=>(r.volume="--volume",r.volumePercentage="--volume-percentage",r))(rt||{});var nt=(u=>(u.muted="data-muted",u.volume="data-volume",u.pressing="data-pressing",u.dragging="data-dragging",u))(nt||{});var $r=O.forwardRef(function(e,r){let{render:l,children:u,onPointerDown:n,...o}=e,a=P("VolumeSlider"),t=O.useRef(null),[s,p]=O.useState(!1),[i,f]=O.useState(!1),b=O.useRef(!1);O.useEffect(()=>{if(!s)return;let M=()=>{p(!1),f(!1),b.current=!1};return window.addEventListener("pointerup",M),()=>window.removeEventListener("pointerup",M)},[s]),O.useLayoutEffect(()=>{typeof r=="function"?r(t.current):r&&(r.current=t.current)});let S=a.volume*100,T={volume:a.volume,muted:a.muted,percentage:S,pressing:s,dragging:i},y=O.useCallback(M=>{let w=typeof M=="number"?M:M[0];if(w!==void 0){if(a.muted){let H=a.videoRef.current;H&&(H.muted=!1)}a.setVolume(w),a.resetIdle(),b.current&&f(!0)}},[a]),x=O.useCallback(M=>{_optionalChain([n, 'optionalCall', _34 => _34(M)]),p(!0),b.current=!0},[n]),v={"data-muted":a.muted||void 0,"data-volume":a.volume,"data-pressing":s||void 0,"data-dragging":i||void 0},k={position:"relative","--volume":a.volume,"--volume-percentage":`${S}%`,...o.style},L={"data-muted":a.muted||void 0,"data-volume":a.volume,"data-pressing":s||void 0,"data-dragging":i||void 0,style:k};return l?_jsxruntime.jsx.call(void 0, _slider.Slider.Root,{ref:t,min:0,max:1,step:.01,value:a.muted?0:a.volume,onValueChange:y,onPointerDown:x,"aria-label":"Volume",render:M=>l({...M,...L},T)}):_jsxruntime.jsx.call(void 0, _slider.Slider.Root,{ref:t,min:0,max:1,step:.01,value:a.muted?0:a.volume,onValueChange:y,onPointerDown:x,"aria-label":"Volume",...v,...o,style:k,children:_nullishCoalesce(u, () => (_jsxruntime.jsx.call(void 0, _slider.Slider.Control,{children:_jsxruntime.jsxs.call(void 0, _slider.Slider.Track,{children:[_jsxruntime.jsx.call(void 0, _slider.Slider.Indicator,{}),_jsxruntime.jsx.call(void 0, _slider.Slider.Thumb,{})]})})))})}),Nr=_slider.Slider.Control,jr=O.forwardRef(function(e,r){let{style:l,...u}=e,n={position:"relative",...l};return _jsxruntime.jsx.call(void 0, _slider.Slider.Track,{ref:r,style:n,...u})}),Ur=O.forwardRef(function(e,r){return _jsxruntime.jsx.call(void 0, _slider.Slider.Indicator,{ref:r,...e})}),_r=O.forwardRef(function(e,r){return _jsxruntime.jsx.call(void 0, _slider.Slider.Thumb,{ref:r,...e})});exports.VideoPlayer = Kr; exports.useVideoPlayer = ie;
|
|
3
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kianbazza/repos/bazzalabs/ui/packages/react/dist/video-player/index.cjs","../../src/video-player/contexts/video-player-context.ts","../../src/video-player/hooks/use-video-player.ts","../../src/video-player/index.parts.ts","../../src/video-player/components/buffered-indicator/buffered-indicator.tsx","../../src/video-player/hooks/use-transition-status.ts"],"names":["VideoPlayerContext","useVideoPlayerContext","component","context","useVideoPlayer","index_parts_exports","__export","BufferedIndicator","Captions","CaptionsButton","CaptionsDataAttributes","CaptionsMenu","CaptionsMenuItem","Controls","ControlsDataAttributes","FullscreenButton","MuteButton","Overlay","OverlayDataAttributes","PictureInPictureButton","PlayButton","PlaybackRateButton","PlaybackRateMenu","PlaybackRateMenuItem","Portal","Poster","QualityMenu","QualityMenuItem","VideoPlayerRoot","RootDataAttributes","SeekSlider","SeekSliderBuffered","SeekSliderControl","SeekSliderCssVars","SeekSliderDataAttributes","SeekSliderHover","SeekSliderPreviewThumb","SeekSliderPreviewThumbDataAttributes","SeekSliderPreviewTooltip","SeekSliderPreviewTooltipPopup","SeekSliderPreviewTooltipPortal","SeekSliderPreviewTooltipPositioner","SeekSliderProgress","SeekSliderThumb","SeekSliderTrack","Thumbnail","ThumbnailDataAttributes","TimeDisplay","TimeDisplayDataAttributes","Track","Video","VolumeSlider","VolumeSliderControl","VolumeSliderCssVars","VolumeSliderDataAttributes","VolumeSliderRange","VolumeSliderThumb","VolumeSliderTrack","useTransitionStatus","props","forwardedRef","render","divProps","bufferedEnd","bufferedPercentage","state","style"],"mappings":"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","file":"/Users/kianbazza/repos/bazzalabs/ui/packages/react/dist/video-player/index.cjs","sourcesContent":[null,"'use client'\n\nimport * as React from 'react'\nimport type { VideoPlayerContextValue } from '../types.js'\n\nexport const VideoPlayerContext =\n React.createContext<VideoPlayerContextValue | null>(null)\n\nexport function useVideoPlayerContext(\n component: string,\n): VideoPlayerContextValue {\n const context = React.useContext(VideoPlayerContext)\n if (!context) {\n throw new Error(\n `<VideoPlayer.${component}> must be used within <VideoPlayer.Root>`,\n )\n }\n return context\n}\n","'use client'\n\nimport { useVideoPlayerContext } from '../contexts/video-player-context.js'\nimport type { VideoPlayerContextValue } from '../types.js'\n\n/**\n * Hook to access the VideoPlayer context from custom components.\n *\n * @example\n * ```tsx\n * function CustomControl() {\n * const { playing, toggle, currentTime, duration } = useVideoPlayer()\n *\n * return (\n * <div>\n * {playing ? 'Playing' : 'Paused'} - {currentTime}s / {duration}s\n * <button onClick={toggle}>Toggle</button>\n * </div>\n * )\n * }\n * ```\n */\nexport function useVideoPlayer(): VideoPlayerContextValue {\n return useVideoPlayerContext('useVideoPlayer')\n}\n","// ============================================================================\n// VideoPlayer Composable Parts\n// ============================================================================\n//\n// Import like: import * as VideoPlayer from './video-player/index.parts.js'\n//\n// Usage:\n// <VideoPlayer.Root>\n// <VideoPlayer.Video src=\"...\" />\n// <VideoPlayer.Controls>\n// <VideoPlayer.PlayButton />\n// <VideoPlayer.SeekSlider />\n// <VideoPlayer.TimeDisplay />\n// </VideoPlayer.Controls>\n// </VideoPlayer.Root>\n//\n\nexport { BufferedIndicator } from './components/buffered-indicator/buffered-indicator.js'\nexport { CaptionsDataAttributes } from './components/captions/captions.data-attributes.js'\nexport { Captions } from './components/captions/captions.js'\n// Captions\nexport { CaptionsButton } from './components/captions-button/captions-button.js'\nexport {\n CaptionsMenu,\n CaptionsMenuItem,\n} from './components/captions-menu/captions-menu.js'\nexport { ControlsDataAttributes } from './components/controls/controls.data-attributes.js'\nexport { Controls } from './components/controls/controls.js'\n// Display Controls\nexport { FullscreenButton } from './components/fullscreen-button/fullscreen-button.js'\nexport { MuteButton } from './components/mute-button/mute-button.js'\nexport { OverlayDataAttributes } from './components/overlay/overlay.data-attributes.js'\nexport { Overlay } from './components/overlay/overlay.js'\nexport { PictureInPictureButton } from './components/picture-in-picture-button/picture-in-picture-button.js'\n// Playback Controls\nexport { PlayButton } from './components/play-button/play-button.js'\n// Playback Rate\nexport { PlaybackRateButton } from './components/playback-rate-button/playback-rate-button.js'\nexport {\n PlaybackRateMenu,\n PlaybackRateMenuItem,\n} from './components/playback-rate-menu/playback-rate-menu.js'\n// Layout\nexport { Portal } from './components/portal/portal.js'\nexport { Poster } from './components/poster/poster.js'\n// Quality\nexport {\n QualityMenu,\n QualityMenuItem,\n} from './components/quality-menu/quality-menu.js'\n// Data Attributes & CSS Variables\nexport { RootDataAttributes } from './components/root/root.data-attributes.js'\n// Core\nexport { VideoPlayerRoot as Root } from './components/root/root.js'\nexport { SeekSliderCssVars } from './components/seek-slider/seek-slider.css-vars.js'\nexport { SeekSliderDataAttributes } from './components/seek-slider/seek-slider.data-attributes.js'\nexport {\n SeekSlider,\n SeekSliderBuffered,\n SeekSliderControl,\n SeekSliderHover,\n SeekSliderPreviewThumb,\n SeekSliderPreviewTooltip,\n SeekSliderPreviewTooltipPopup,\n SeekSliderPreviewTooltipPortal,\n SeekSliderPreviewTooltipPositioner,\n SeekSliderProgress,\n SeekSliderThumb,\n SeekSliderTrack,\n} from './components/seek-slider/seek-slider.js'\nexport { SeekSliderPreviewThumbDataAttributes } from './components/seek-slider/seek-slider-preview-thumb.data-attributes.js'\nexport { ThumbnailDataAttributes } from './components/thumbnail/thumbnail.data-attributes.js'\nexport { Thumbnail } from './components/thumbnail/thumbnail.js'\nexport { TimeDisplayDataAttributes } from './components/time-display/time-display.data-attributes.js'\nexport { TimeDisplay } from './components/time-display/time-display.js'\nexport { Track } from './components/track/track.js'\nexport { Video } from './components/video/video.js'\nexport { VolumeSliderCssVars } from './components/volume-slider/volume-slider.css-vars.js'\nexport { VolumeSliderDataAttributes } from './components/volume-slider/volume-slider.data-attributes.js'\n// Audio Controls\nexport {\n VolumeSlider,\n VolumeSliderControl,\n VolumeSliderRange,\n VolumeSliderThumb,\n VolumeSliderTrack,\n} from './components/volume-slider/volume-slider.js'\nexport {\n type TransitionStatus,\n type UseTransitionStatusOptions,\n type UseTransitionStatusReturn,\n useTransitionStatus,\n} from './hooks/use-transition-status.js'\n// Hooks\nexport { useVideoPlayer } from './hooks/use-video-player.js'\n// Types\nexport type {\n PlaybackIntent,\n PlaybackStatus,\n RenderProp,\n TrackInfo,\n VideoPlayerActions,\n VideoPlayerContextValue,\n VideoPlayerRootProps,\n VideoPlayerState,\n VideoQuality,\n VideoTextTrack,\n} from './types.js'\n","'use client'\n\nimport * as React from 'react'\nimport { useVideoPlayerContext } from '../../contexts/video-player-context.js'\nimport type { RenderProp } from '../../types.js'\n\n// ============================================================================\n// BufferedIndicator Props\n// ============================================================================\n\nexport interface BufferedIndicatorProps\n extends React.ComponentPropsWithRef<'div'> {\n render?: RenderProp<BufferedIndicatorRenderProps, BufferedIndicatorState>\n}\n\nexport interface BufferedIndicatorRenderProps {\n ref: React.Ref<HTMLElement>\n style: React.CSSProperties\n 'aria-hidden': true\n}\n\nexport interface BufferedIndicatorState {\n buffered: TimeRanges | null\n duration: number\n bufferedPercentage: number\n bufferedEnd: number\n}\n\n// ============================================================================\n// BufferedIndicator Component\n// ============================================================================\n\nexport const BufferedIndicator = React.forwardRef<\n HTMLDivElement,\n BufferedIndicatorProps\n>(function BufferedIndicator(props, forwardedRef) {\n const { render, ...divProps } = props\n const context = useVideoPlayerContext('BufferedIndicator')\n\n // Calculate buffered end position (for progress bar display)\n const bufferedEnd = React.useMemo(() => {\n if (!context.buffered || context.buffered.length === 0) return 0\n\n // Find the buffer range that contains current playback position\n for (let i = 0; i < context.buffered.length; i++) {\n if (\n context.buffered.start(i) <= context.currentTime &&\n context.currentTime <= context.buffered.end(i)\n ) {\n return context.buffered.end(i)\n }\n }\n\n // Fallback to end of first range\n return context.buffered.end(0)\n }, [context.buffered, context.currentTime])\n\n const bufferedPercentage =\n context.duration > 0 ? (bufferedEnd / context.duration) * 100 : 0\n\n const state: BufferedIndicatorState = {\n buffered: context.buffered,\n duration: context.duration,\n bufferedPercentage,\n bufferedEnd,\n }\n\n // CSS custom properties for styling\n const style = {\n '--buffered-percentage': `${bufferedPercentage}%`,\n '--buffered-end': bufferedEnd,\n ...divProps.style,\n } as React.CSSProperties\n\n const renderProps: BufferedIndicatorRenderProps = {\n ref: forwardedRef,\n style,\n 'aria-hidden': true,\n }\n\n if (render) {\n return render(renderProps, state)\n }\n\n return (\n <div ref={forwardedRef} aria-hidden=\"true\" {...divProps} style={style} />\n )\n})\n\n// ============================================================================\n// Namespace\n// ============================================================================\n\nexport namespace BufferedIndicator {\n export type Props = BufferedIndicatorProps\n export type State = BufferedIndicatorState\n}\n","'use client'\n\nimport * as React from 'react'\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type TransitionStatus = 'starting' | 'ending' | undefined\n\nexport interface UseTransitionStatusOptions {\n /**\n * Whether the element should be visible/open.\n */\n open: boolean\n /**\n * Keep the element always mounted in the DOM, even when closed.\n * Only needed for JavaScript animation libraries (e.g., Framer Motion).\n * CSS transitions and animations work automatically without this.\n * @default false\n */\n keepMounted?: boolean\n}\n\nexport interface UseTransitionStatusReturn {\n /**\n * Whether the element should be rendered in the DOM.\n * Stays true during exit animations.\n */\n mounted: boolean\n /**\n * Current transition status:\n * - 'starting': First frame of enter animation\n * - 'ending': Exit animation in progress\n * - undefined: Idle state\n */\n transitionStatus: TransitionStatus\n /**\n * Ref to attach to the animated element.\n * Used to detect when CSS animations/transitions complete.\n */\n elementRef: React.RefObject<HTMLElement | null>\n}\n\n// ============================================================================\n// Utility: Wait for Animations\n// ============================================================================\n\n/**\n * Returns a promise that resolves when all CSS animations and transitions\n * on the element and its descendants have completed.\n */\nfunction waitForAnimations(element: HTMLElement): Promise<void> {\n // Collect animations from the element and all descendants\n const animations = [\n ...element.getAnimations(),\n ...Array.from(element.querySelectorAll('*')).flatMap((el) =>\n (el as HTMLElement).getAnimations(),\n ),\n ]\n\n if (animations.length === 0) {\n return Promise.resolve()\n }\n return Promise.all(animations.map((a) => a.finished))\n .then(() => {})\n .catch(() => {\n // Animation was cancelled (e.g., element removed or animation interrupted)\n })\n}\n\n// ============================================================================\n// Hook: useTransitionStatus\n// ============================================================================\n\nexport function useTransitionStatus(\n options: UseTransitionStatusOptions,\n): UseTransitionStatusReturn {\n const { open, keepMounted = false } = options\n\n const [mounted, setMounted] = React.useState(open || keepMounted)\n const [transitionStatus, setTransitionStatus] =\n React.useState<TransitionStatus>(open ? 'starting' : undefined)\n\n const elementRef = React.useRef<HTMLElement | null>(null)\n\n // Track if we're currently waiting for animations\n const waitingForAnimationsRef = React.useRef(false)\n\n // Handle open → true (enter)\n React.useEffect(() => {\n if (open) {\n // Cancel any pending exit\n waitingForAnimationsRef.current = false\n\n setMounted(true)\n setTransitionStatus('starting')\n\n // Clear starting style after first paint (double RAF for reliability)\n const raf = requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n setTransitionStatus(undefined)\n })\n })\n\n return () => cancelAnimationFrame(raf)\n }\n }, [open])\n\n // Handle open → false (exit)\n React.useEffect(() => {\n if (!open && mounted && !waitingForAnimationsRef.current) {\n setTransitionStatus('ending')\n\n const element = elementRef.current\n\n if (!element) {\n // No element ref, unmount immediately\n setTransitionStatus(undefined)\n if (!keepMounted) {\n setMounted(false)\n }\n return\n }\n\n waitingForAnimationsRef.current = true\n\n // Wait a frame for the browser to process style changes and start animations\n const raf = requestAnimationFrame(() => {\n // Double RAF for reliability (like enter animation)\n requestAnimationFrame(() => {\n waitForAnimations(element).then(() => {\n // Check if we're still supposed to be unmounting\n // (user might have re-opened during animation)\n if (!waitingForAnimationsRef.current) return\n\n waitingForAnimationsRef.current = false\n setTransitionStatus(undefined)\n\n if (!keepMounted) {\n setMounted(false)\n }\n })\n })\n })\n\n return () => {\n cancelAnimationFrame(raf)\n }\n }\n }, [open, mounted, keepMounted])\n\n // Handle keepMounted change\n React.useEffect(() => {\n if (keepMounted && !mounted && !open) {\n setMounted(true)\n }\n }, [keepMounted, mounted, open])\n\n return {\n mounted: mounted || keepMounted,\n transitionStatus,\n elementRef,\n }\n}\n"]}
|