@hanifhan1f/vidstack-react 1.12.33 → 1.12.35
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/dev/chunks/{vidstack-3rdEWplD.js → vidstack-B-DU-_xu.js} +55 -3
- package/dev/chunks/{vidstack-CniPzPQc.js → vidstack-C3VHrHPf.js} +155 -15
- package/dev/chunks/{vidstack-BOPSNTgH.js → vidstack-CjLj3q5w.js} +5 -57
- package/dev/chunks/{vidstack-BNwnoM-l.js → vidstack-DpWioszb.js} +1 -1
- package/dev/chunks/{vidstack-S_S6XDnL.js → vidstack-t48GJbb5.js} +1 -1
- package/dev/player/vidstack-default-components.js +4 -4
- package/dev/player/vidstack-default-layout.js +4 -4
- package/dev/player/vidstack-plyr-layout.js +3 -3
- package/dev/vidstack.js +5 -5
- package/package.json +1 -1
- package/player/layouts/default.d.ts +9 -1
- package/prod/chunks/{vidstack-BlPINAXN.js → vidstack-BI5-IK9v.js} +55 -3
- package/prod/chunks/{vidstack-CbejzCJs.js → vidstack-BgAMJr1Y.js} +155 -15
- package/prod/chunks/{vidstack-Bh7M8kL6.js → vidstack-DKWmxvB4.js} +5 -57
- package/prod/chunks/{vidstack-DhSvljmQ.js → vidstack-NR84X5HE.js} +1 -1
- package/prod/chunks/{vidstack-BS445j5D.js → vidstack-jSJ0Meez.js} +1 -1
- package/prod/player/vidstack-default-components.js +4 -4
- package/prod/player/vidstack-default-layout.js +4 -4
- package/prod/player/vidstack-plyr-layout.js +3 -3
- package/prod/vidstack.js +5 -5
- package/{dev/chunks/vidstack-DTow20pt.js → server/chunks/vidstack-CSX6ausI.js} +55 -3
- package/server/chunks/{vidstack-CoGzBr_V.js → vidstack-CePUWLrW.js} +5 -57
- package/{dev/chunks/vidstack-CvWDiSTs.js → server/chunks/vidstack-D7sOBYbw.js} +1 -1
- package/server/chunks/{vidstack-VGPw_CQP.js → vidstack-DqUb8JgU.js} +1 -1
- package/server/chunks/{vidstack-i9a2TQLO.js → vidstack-Dvh6BtYs.js} +155 -15
- package/server/player/vidstack-default-components.js +4 -4
- package/server/player/vidstack-default-layout.js +4 -4
- package/server/player/vidstack-plyr-layout.js +3 -3
- package/server/vidstack.js +5 -5
- package/dev/chunks/vidstack-B-FM4-oZ.js +0 -668
- package/dev/chunks/vidstack-B92UncBI.js +0 -61
- package/dev/chunks/vidstack-BDiAEW1N.js +0 -11691
- package/dev/chunks/vidstack-BPymmnxm.js +0 -551
- package/dev/chunks/vidstack-BSZY6sbC.js +0 -180
- package/dev/chunks/vidstack-BSpAxhO6.js +0 -643
- package/dev/chunks/vidstack-BVVxkUlq.js +0 -288
- package/dev/chunks/vidstack-BXgKy_7V.js +0 -11693
- package/dev/chunks/vidstack-BalWqr4j.js +0 -1422
- package/dev/chunks/vidstack-Bfi_jCvb.js +0 -476
- package/dev/chunks/vidstack-BoLZuw80.js +0 -34
- package/dev/chunks/vidstack-BrqDQG-r.js +0 -643
- package/dev/chunks/vidstack-C3QPOZNd.js +0 -476
- package/dev/chunks/vidstack-C7BwfK5c.js +0 -1537
- package/dev/chunks/vidstack-CEUjDh4x.js +0 -34
- package/dev/chunks/vidstack-CFOPpDTy.js +0 -476
- package/dev/chunks/vidstack-CFZ0rYJz.js +0 -34
- package/dev/chunks/vidstack-CKsUl4ll.js +0 -1384
- package/dev/chunks/vidstack-CM82l-7o.js +0 -551
- package/dev/chunks/vidstack-CQSHFVu7.js +0 -401
- package/dev/chunks/vidstack-CXrXBlpD.js +0 -11692
- package/dev/chunks/vidstack-CevuS08D.js +0 -1504
- package/dev/chunks/vidstack-CkRXb9Ia.js +0 -1537
- package/dev/chunks/vidstack-CqNX679o.js +0 -669
- package/dev/chunks/vidstack-Csfg08VS.js +0 -551
- package/dev/chunks/vidstack-CzU-uC5f.js +0 -189
- package/dev/chunks/vidstack-D2Bi2Td9.js +0 -1537
- package/dev/chunks/vidstack-D3ZXOE4d.js +0 -643
- package/dev/chunks/vidstack-D6_9yy0x.js +0 -643
- package/dev/chunks/vidstack-DJQOTrl6.js +0 -180
- package/dev/chunks/vidstack-DNbKNc4R.js +0 -288
- package/dev/chunks/vidstack-DOtIyh4c.js +0 -288
- package/dev/chunks/vidstack-DY2iivhG.js +0 -84
- package/dev/chunks/vidstack-DjqYvkVp.js +0 -84
- package/dev/chunks/vidstack-Dov8gjdq.js +0 -401
- package/dev/chunks/vidstack-DqaqkU4T.js +0 -9
- package/dev/chunks/vidstack-DwdhbP5c.js +0 -189
- package/dev/chunks/vidstack-DweQYzVw.js +0 -180
- package/dev/chunks/vidstack-FuCbl228.js +0 -226
- package/dev/chunks/vidstack-H9OdEKUQ.js +0 -375
- package/dev/chunks/vidstack-KntYDWMe.js +0 -668
- package/dev/chunks/vidstack-L5mw2iPb.js +0 -375
- package/dev/chunks/vidstack-NCBSBZE-.js +0 -61
- package/dev/chunks/vidstack-PREbBNMG.js +0 -125
- package/dev/chunks/vidstack-UWMPvwsa.js +0 -1537
- package/dev/chunks/vidstack-f6WXkmfP.js +0 -375
- package/dev/chunks/vidstack-gqKBE4xH.js +0 -376
- package/dev/chunks/vidstack-iRuTLfhk.js +0 -61
- package/dev/chunks/vidstack-lYFZKRUc.js +0 -401
- package/dev/chunks/vidstack-oOGofWSl.js +0 -668
- package/dev/chunks/vidstack-vh0BKYWJ.js +0 -84
- package/prod/chunks/vidstack-0Foyib2F.js +0 -34
- package/prod/chunks/vidstack-58ZavMvv.js +0 -159
- package/prod/chunks/vidstack-B0SSIHIv.js +0 -1537
- package/prod/chunks/vidstack-B9nEslvl.js +0 -11197
- package/prod/chunks/vidstack-BCBskRpc.js +0 -664
- package/prod/chunks/vidstack-BOObgZd8.js +0 -504
- package/prod/chunks/vidstack-BZVrgeRF.js +0 -9
- package/prod/chunks/vidstack-B_9VGrZQ.js +0 -504
- package/prod/chunks/vidstack-B_wD853-.js +0 -386
- package/prod/chunks/vidstack-BbPEqH3g.js +0 -11196
- package/prod/chunks/vidstack-Bm2UemPE.js +0 -470
- package/prod/chunks/vidstack-Bp_hAwzI.js +0 -61
- package/prod/chunks/vidstack-C4tNkfXj.js +0 -470
- package/prod/chunks/vidstack-C4tuISYG.js +0 -1504
- package/prod/chunks/vidstack-C5Rzkyfp.js +0 -375
- package/prod/chunks/vidstack-CKapDFwB.js +0 -376
- package/prod/chunks/vidstack-CNJwYQRW.js +0 -84
- package/prod/chunks/vidstack-CQll06Hv.js +0 -34
- package/prod/chunks/vidstack-CVzVtf1j.js +0 -61
- package/prod/chunks/vidstack-CYK75vJF.js +0 -1382
- package/prod/chunks/vidstack-CZNlvfmV.js +0 -288
- package/prod/chunks/vidstack-CiQEyk_l.js +0 -189
- package/prod/chunks/vidstack-CiTWSpv_.js +0 -34
- package/prod/chunks/vidstack-CikQpsuo.js +0 -1537
- package/prod/chunks/vidstack-CtxjO6HG.js +0 -84
- package/prod/chunks/vidstack-CzjHdPIT.js +0 -375
- package/prod/chunks/vidstack-D0XCUWbp.js +0 -159
- package/prod/chunks/vidstack-D3cSYtez.js +0 -663
- package/prod/chunks/vidstack-D91K36KQ.js +0 -206
- package/prod/chunks/vidstack-DJThTSEm.js +0 -125
- package/prod/chunks/vidstack-DTyDOhwS.js +0 -504
- package/prod/chunks/vidstack-DVMwXUgY.js +0 -189
- package/prod/chunks/vidstack-DXSNXDnS.js +0 -1384
- package/prod/chunks/vidstack-D_Sd7838.js +0 -663
- package/prod/chunks/vidstack-D_ijTIbV.js +0 -11198
- package/prod/chunks/vidstack-DdiGCJVp.js +0 -504
- package/prod/chunks/vidstack-DgGDsAKh.js +0 -375
- package/prod/chunks/vidstack-DgsBXr1J.js +0 -84
- package/prod/chunks/vidstack-DhC5F6c8.js +0 -470
- package/prod/chunks/vidstack-Djmla_FM.js +0 -545
- package/prod/chunks/vidstack-DpQw1Y33.js +0 -663
- package/prod/chunks/vidstack-DrEorv9m.js +0 -189
- package/prod/chunks/vidstack-Ma9rwtR0.js +0 -386
- package/prod/chunks/vidstack-VTpvHAdU.js +0 -1537
- package/prod/chunks/vidstack-dbLRgf2L.js +0 -159
- package/prod/chunks/vidstack-ehqxnvc9.js +0 -1537
- package/prod/chunks/vidstack-jIPoNqhj.js +0 -545
- package/prod/chunks/vidstack-lc8NHly9.js +0 -288
- package/prod/chunks/vidstack-rHvQ8f6c.js +0 -288
- package/prod/chunks/vidstack-rKV98aQH.js +0 -545
- package/prod/chunks/vidstack-uA7h-Bsq.js +0 -386
- package/prod/chunks/vidstack-xo_SmgiV.js +0 -84
- package/prod/chunks/vidstack-xvxeRtaN.js +0 -61
- package/server/chunks/vidstack--ufi23Q6.js +0 -1537
- package/server/chunks/vidstack-B3AXUfgF.js +0 -189
- package/server/chunks/vidstack-B4rJ1ZKK.js +0 -376
- package/server/chunks/vidstack-BJCx78pm.js +0 -386
- package/server/chunks/vidstack-BTdEfKqV.js +0 -84
- package/server/chunks/vidstack-BV_VpWlJ.js +0 -1537
- package/server/chunks/vidstack-BtitkRvR.js +0 -11198
- package/server/chunks/vidstack-BtqWstSj.js +0 -375
- package/server/chunks/vidstack-BweZhuNd.js +0 -1537
- package/server/chunks/vidstack-ByG5MvLs.js +0 -545
- package/server/chunks/vidstack-C-HdFsZi.js +0 -84
- package/server/chunks/vidstack-C0xOpWYR.js +0 -470
- package/server/chunks/vidstack-C481iXqe.js +0 -386
- package/server/chunks/vidstack-C4iWXMC-.js +0 -545
- package/server/chunks/vidstack-C5zFBMwg.js +0 -386
- package/server/chunks/vidstack-CEh38XpD.js +0 -288
- package/server/chunks/vidstack-CSiPajWY.js +0 -470
- package/server/chunks/vidstack-CbNRZgUA.js +0 -11197
- package/server/chunks/vidstack-CgXa6YO3.js +0 -61
- package/server/chunks/vidstack-CkMAeO-e.js +0 -34
- package/server/chunks/vidstack-Cm0qnRvu.js +0 -11196
- package/server/chunks/vidstack-Ct1NFlBa.js +0 -1537
- package/server/chunks/vidstack-CyFwkPiu.js +0 -470
- package/server/chunks/vidstack-D4t_SZbb.js +0 -1416
- package/server/chunks/vidstack-D7D9kiW6.js +0 -34
- package/server/chunks/vidstack-DH6N0AoF.js +0 -375
- package/server/chunks/vidstack-DJJmNib6.js +0 -504
- package/server/chunks/vidstack-DKr7br9D.js +0 -34
- package/server/chunks/vidstack-DM-5dPT-.js +0 -663
- package/server/chunks/vidstack-DOIUveQF.js +0 -504
- package/server/chunks/vidstack-DTn72IA8.js +0 -1504
- package/server/chunks/vidstack-DWfS9vAY.js +0 -84
- package/server/chunks/vidstack-DWt5LAKE.js +0 -375
- package/server/chunks/vidstack-DY51lx0R.js +0 -189
- package/server/chunks/vidstack-DbNoKLjz.js +0 -664
- package/server/chunks/vidstack-Dbs_rXUT.js +0 -663
- package/server/chunks/vidstack-DeS67_gx.js +0 -9
- package/server/chunks/vidstack-DiHlnSws.js +0 -1384
- package/server/chunks/vidstack-DnoqxmOs.js +0 -125
- package/server/chunks/vidstack-DsZKgA8y.js +0 -663
- package/server/chunks/vidstack-DtQSvsQr.js +0 -189
- package/server/chunks/vidstack-E7eUOyFt.js +0 -288
- package/server/chunks/vidstack-JkJEYEQM.js +0 -159
- package/server/chunks/vidstack-KhtuR229.js +0 -504
- package/server/chunks/vidstack-NXcLNXxO.js +0 -84
- package/server/chunks/vidstack-OKdxH1xx.js +0 -189
- package/server/chunks/vidstack-SkX-mSrw.js +0 -206
- package/server/chunks/vidstack-X1Hex9PH.js +0 -84
- package/server/chunks/vidstack-iVN8uBAv.js +0 -288
- package/server/chunks/vidstack-jlaBqZq5.js +0 -61
- package/server/chunks/vidstack-m8aA99tE.js +0 -159
- package/server/chunks/vidstack-rUHVQoo3.js +0 -61
- package/server/chunks/vidstack-rWs25cS9.js +0 -159
- package/server/chunks/vidstack-uyCXITen.js +0 -504
- package/server/chunks/vidstack-yf18YVAb.js +0 -545
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
|
|
3
3
|
import * as React from 'react';
|
|
4
|
-
import { RadioGroupController, useMediaContext, menuContext, MediaRemoteControl, MediaPlayerInstance, sortVideoQualities } from './vidstack-C5tZAkKo.js';
|
|
5
|
-
import { useMediaContext as useMediaContext$1 } from './vidstack-
|
|
4
|
+
import { RadioGroupController, useMediaContext, menuContext, MediaRemoteControl, MediaPlayerInstance, isTrackCaptionKind, sortVideoQualities } from './vidstack-C5tZAkKo.js';
|
|
5
|
+
import { useMediaContext as useMediaContext$1 } from './vidstack-CjLj3q5w.js';
|
|
6
6
|
import { prop, method, Component, hasProvidedContext, useContext, effect, useSignal, isString } from './vidstack-D_bWd66h.js';
|
|
7
7
|
|
|
8
8
|
const DEFAULT_PLAYBACK_RATES = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];
|
|
@@ -83,6 +83,58 @@ function useMediaRemote(target) {
|
|
|
83
83
|
return remote.current;
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
+
function useCaptionOptions({ off = true } = {}) {
|
|
87
|
+
const media = useMediaContext$1(), { textTracks, textTrack } = media.$state, $textTracks = useSignal(textTracks);
|
|
88
|
+
useSignal(textTrack);
|
|
89
|
+
return React.useMemo(() => {
|
|
90
|
+
const captionTracks = $textTracks.filter(isTrackCaptionKind), options = captionTracks.map((track) => ({
|
|
91
|
+
track,
|
|
92
|
+
label: track.label,
|
|
93
|
+
value: getTrackValue(track),
|
|
94
|
+
get selected() {
|
|
95
|
+
return textTrack() === track;
|
|
96
|
+
},
|
|
97
|
+
select(trigger) {
|
|
98
|
+
const index = textTracks().indexOf(track);
|
|
99
|
+
if (index >= 0) media.remote.changeTextTrackMode(index, "showing", trigger);
|
|
100
|
+
}
|
|
101
|
+
}));
|
|
102
|
+
if (off) {
|
|
103
|
+
options.unshift({
|
|
104
|
+
track: null,
|
|
105
|
+
label: isString(off) ? off : "Off",
|
|
106
|
+
value: "off",
|
|
107
|
+
get selected() {
|
|
108
|
+
return !textTrack();
|
|
109
|
+
},
|
|
110
|
+
select(trigger) {
|
|
111
|
+
media.remote.toggleCaptions(trigger);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
Object.defineProperty(options, "disabled", {
|
|
116
|
+
get() {
|
|
117
|
+
return !captionTracks.length;
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
Object.defineProperty(options, "selectedTrack", {
|
|
121
|
+
get() {
|
|
122
|
+
return textTrack();
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
Object.defineProperty(options, "selectedValue", {
|
|
126
|
+
get() {
|
|
127
|
+
const track = textTrack();
|
|
128
|
+
return track ? getTrackValue(track) : "off";
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
return options;
|
|
132
|
+
}, [$textTracks]);
|
|
133
|
+
}
|
|
134
|
+
function getTrackValue(track) {
|
|
135
|
+
return track.id + ":" + track.kind + "-" + track.label.toLowerCase();
|
|
136
|
+
}
|
|
137
|
+
|
|
86
138
|
function useVideoQualityOptions({
|
|
87
139
|
auto = true,
|
|
88
140
|
sort = "descending"
|
|
@@ -186,4 +238,4 @@ function usePlaybackRateOptions({
|
|
|
186
238
|
}, [rates]);
|
|
187
239
|
}
|
|
188
240
|
|
|
189
|
-
export { DEFAULT_PLAYBACK_RATES, useMediaRemote, usePlaybackRateOptions, useVideoQualityOptions };
|
|
241
|
+
export { DEFAULT_PLAYBACK_RATES, useCaptionOptions, useMediaRemote, usePlaybackRateOptions, useVideoQualityOptions };
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { useSignal, composeRefs, isBoolean, uppercaseFirstChar, isUndefined, isString, signal, camelToKebabCase, onDispose, scoped, keysOf, effect, isArray, isKeyboardClick, listenEvent, toggleClass, useContext } from './vidstack-D_bWd66h.js';
|
|
5
|
-
import { createComputed, createSignal, MediaAnnouncer, Root, Trigger, Content, GoogleCastButton, Captions, useChapterOptions, Root$1 as Root$5, Root$2 as Root$6, Root$3 as Root$7, useScoped, Root$4 as Root$a, Group, useChapterTitle, createEffect, useActiveTextTrack, ChapterTitle as ChapterTitle$1, Title, Root$5 as Root$b, Track as Track$1, TrackFill as TrackFill$1 } from './vidstack-
|
|
6
|
-
import { useColorSchemePreference, useActive, useResizeObserver, useLayoutName, useTransitionActive } from './vidstack-
|
|
7
|
-
import { useMediaContext, MuteButton, SeekButton, LiveButton, PlayButton, CaptionButton, appendParamsToURL, PIPButton, FullscreenButton, AirPlayButton, Items, Root$3 as Root$1, Item, Root as Root$2, Img, Root$2 as Root$3, Button, Portal, Track, TrackFill, Thumb, Steps, useMediaPlayer, Root$5 as Root$4, useAudioOptions,
|
|
5
|
+
import { createComputed, createSignal, MediaAnnouncer, Root, Trigger, Content, GoogleCastButton, Captions, useChapterOptions, Root$1 as Root$5, Root$2 as Root$6, Root$3 as Root$7, useScoped, Root$4 as Root$a, Group, useChapterTitle, createEffect, useActiveTextTrack, ChapterTitle as ChapterTitle$1, Title, Root$5 as Root$b, Track as Track$1, TrackFill as TrackFill$1 } from './vidstack-t48GJbb5.js';
|
|
6
|
+
import { useColorSchemePreference, useActive, useResizeObserver, useLayoutName, useTransitionActive } from './vidstack-DpWioszb.js';
|
|
7
|
+
import { useMediaContext, MuteButton, SeekButton, LiveButton, PlayButton, CaptionButton, appendParamsToURL, PIPButton, FullscreenButton, AirPlayButton, Items, Root$3 as Root$1, Item, Root as Root$2, Img, Root$2 as Root$3, Button, Portal, Track, TrackFill, Thumb, Steps, useMediaPlayer, Root$5 as Root$4, useAudioOptions, Root$4 as Root$8, Preview, Value, Root$1 as Root$9, Chapters, Progress, Thumbnail, ChapterTitle, Time, Gesture } from './vidstack-CjLj3q5w.js';
|
|
8
8
|
import { useMediaState, isTrackCaptionKind, getDownloadFile, isRemotionSrc, IS_SERVER, useMediaContext as useMediaContext$1, sortVideoQualities, Primitive, mediaContext } from './vidstack-C5tZAkKo.js';
|
|
9
9
|
import { flushSync } from 'react-dom';
|
|
10
10
|
import { RemotionThumbnail, RemotionSliderThumbnail } from './vidstack-D-hQD1eE.js';
|
|
@@ -862,35 +862,175 @@ function DefaultAudioTracksMenu() {
|
|
|
862
862
|
}
|
|
863
863
|
DefaultAudioTracksMenu.displayName = "DefaultAudioTracksMenu";
|
|
864
864
|
|
|
865
|
+
const LANG_FLAGS = {
|
|
866
|
+
en: "gb",
|
|
867
|
+
eng: "gb",
|
|
868
|
+
english: "gb",
|
|
869
|
+
id: "id",
|
|
870
|
+
ind: "id",
|
|
871
|
+
indonesian: "id",
|
|
872
|
+
ja: "jp",
|
|
873
|
+
jpn: "jp",
|
|
874
|
+
japanese: "jp",
|
|
875
|
+
ko: "kr",
|
|
876
|
+
kor: "kr",
|
|
877
|
+
korean: "kr",
|
|
878
|
+
zh: "cn",
|
|
879
|
+
zho: "cn",
|
|
880
|
+
chi: "cn",
|
|
881
|
+
chinese: "cn",
|
|
882
|
+
es: "es",
|
|
883
|
+
spa: "es",
|
|
884
|
+
spanish: "es",
|
|
885
|
+
fr: "fr",
|
|
886
|
+
fra: "fr",
|
|
887
|
+
french: "fr",
|
|
888
|
+
de: "de",
|
|
889
|
+
deu: "de",
|
|
890
|
+
ger: "de",
|
|
891
|
+
german: "de",
|
|
892
|
+
pt: "br",
|
|
893
|
+
por: "br",
|
|
894
|
+
portuguese: "br",
|
|
895
|
+
ru: "ru",
|
|
896
|
+
rus: "ru",
|
|
897
|
+
russian: "ru",
|
|
898
|
+
ar: "sa",
|
|
899
|
+
ara: "sa",
|
|
900
|
+
arabic: "sa",
|
|
901
|
+
hi: "in",
|
|
902
|
+
hin: "in",
|
|
903
|
+
hindi: "in",
|
|
904
|
+
th: "th",
|
|
905
|
+
tha: "th",
|
|
906
|
+
thai: "th",
|
|
907
|
+
vi: "vn",
|
|
908
|
+
vie: "vn",
|
|
909
|
+
vietnamese: "vn",
|
|
910
|
+
it: "it",
|
|
911
|
+
ita: "it",
|
|
912
|
+
italian: "it",
|
|
913
|
+
tr: "tr",
|
|
914
|
+
tur: "tr",
|
|
915
|
+
turkish: "tr",
|
|
916
|
+
pl: "pl",
|
|
917
|
+
pol: "pl",
|
|
918
|
+
polish: "pl",
|
|
919
|
+
nl: "nl",
|
|
920
|
+
nld: "nl",
|
|
921
|
+
dutch: "nl",
|
|
922
|
+
ms: "my",
|
|
923
|
+
msa: "my",
|
|
924
|
+
malay: "my"
|
|
925
|
+
};
|
|
926
|
+
function getFlagCode(label) {
|
|
927
|
+
const lower = label.toLowerCase().replace(/\s\d+$/, "").trim();
|
|
928
|
+
if (LANG_FLAGS[lower]) return LANG_FLAGS[lower];
|
|
929
|
+
for (const [key, code] of Object.entries(LANG_FLAGS)) {
|
|
930
|
+
if (lower.startsWith(key) || lower.includes(key)) return code;
|
|
931
|
+
}
|
|
932
|
+
return null;
|
|
933
|
+
}
|
|
865
934
|
function DefaultCaptionMenu({ slots }) {
|
|
866
|
-
const { icons: Icons } = useDefaultLayoutContext(), label = useDefaultLayoutWord("Captions"), offText = useDefaultLayoutWord("Off"),
|
|
867
|
-
if (
|
|
935
|
+
const { icons: Icons } = useDefaultLayoutContext(), label = useDefaultLayoutWord("Captions"), offText = useDefaultLayoutWord("Off"), media = useMediaContext(), hasCaptions = useMediaState("hasCaptions"), textTracks = useMediaState("textTracks"), activeTrack = useMediaState("textTrack");
|
|
936
|
+
if (!hasCaptions) return null;
|
|
937
|
+
const tracks = textTracks.filter(isTrackCaptionKind);
|
|
938
|
+
const grouped = /* @__PURE__ */ new Map();
|
|
939
|
+
for (const track of tracks) {
|
|
940
|
+
const normalizedLabel = track.label.replace(/\s\d+$/, "").trim();
|
|
941
|
+
if (!grouped.has(normalizedLabel)) {
|
|
942
|
+
grouped.set(normalizedLabel, []);
|
|
943
|
+
}
|
|
944
|
+
grouped.get(normalizedLabel).push(track);
|
|
945
|
+
}
|
|
946
|
+
const priorities = ["indonesian", "english", "japanese", "korean", "chinese"];
|
|
947
|
+
const getPriority = (lbl) => {
|
|
948
|
+
const lower = lbl.toLowerCase();
|
|
949
|
+
const pIndex = priorities.findIndex((p) => lower.includes(p));
|
|
950
|
+
return pIndex !== -1 ? pIndex : 999;
|
|
951
|
+
};
|
|
952
|
+
const sortedGroups = Array.from(grouped.entries()).sort((a, b) => {
|
|
953
|
+
const pa = getPriority(a[0]);
|
|
954
|
+
const pb = getPriority(b[0]);
|
|
955
|
+
if (pa !== pb) return pa - pb;
|
|
956
|
+
return a[0].localeCompare(b[0]);
|
|
957
|
+
});
|
|
958
|
+
const isOff = tracks.every((t) => t.mode !== "showing");
|
|
959
|
+
const onOffSelect = (e) => {
|
|
960
|
+
const selected = media.textTracks.selected;
|
|
961
|
+
if (selected) {
|
|
962
|
+
const idx = media.textTracks.indexOf(selected);
|
|
963
|
+
media.remote.changeTextTrackMode(idx, "disabled", e);
|
|
964
|
+
}
|
|
965
|
+
};
|
|
868
966
|
return /* @__PURE__ */ React.createElement(Root$3, { className: "vds-captions-menu vds-menu" }, /* @__PURE__ */ React.createElement(
|
|
869
967
|
DefaultMenuButton,
|
|
870
968
|
{
|
|
871
969
|
label,
|
|
872
|
-
hint,
|
|
873
|
-
disabled:
|
|
970
|
+
hint: activeTrack?.label ?? offText,
|
|
971
|
+
disabled: false,
|
|
874
972
|
Icon: Icons.Menu.Captions
|
|
875
973
|
}
|
|
876
974
|
), /* @__PURE__ */ React.createElement(Items, { className: "vds-menu-items" }, slot(slots, "captionsMenuItemsStart", null), /* @__PURE__ */ React.createElement(
|
|
877
975
|
Root$1,
|
|
878
976
|
{
|
|
879
977
|
className: "vds-captions-radio-group vds-radio-group",
|
|
880
|
-
value:
|
|
978
|
+
value: isOff ? "off" : "none"
|
|
881
979
|
},
|
|
882
|
-
|
|
980
|
+
/* @__PURE__ */ React.createElement(
|
|
883
981
|
Item,
|
|
884
982
|
{
|
|
885
983
|
className: "vds-caption-radio vds-radio",
|
|
886
|
-
value,
|
|
887
|
-
onSelect:
|
|
888
|
-
key: value
|
|
984
|
+
value: "off",
|
|
985
|
+
onSelect: onOffSelect
|
|
889
986
|
},
|
|
890
987
|
/* @__PURE__ */ React.createElement(Icons.Menu.RadioCheck, { className: "vds-icon" }),
|
|
891
|
-
/* @__PURE__ */ React.createElement("span", { className: "vds-radio-label" },
|
|
892
|
-
)
|
|
893
|
-
),
|
|
988
|
+
/* @__PURE__ */ React.createElement("span", { className: "vds-radio-label" }, offText)
|
|
989
|
+
)
|
|
990
|
+
), sortedGroups.map(([groupLabel, groupTracks]) => {
|
|
991
|
+
const flagCode = getFlagCode(groupLabel);
|
|
992
|
+
const activeIndex = groupTracks.findIndex((t) => t === activeTrack);
|
|
993
|
+
return /* @__PURE__ */ React.createElement(Root$3, { key: groupLabel, className: "vds-captions-group-menu vds-menu" }, /* @__PURE__ */ React.createElement(Button, { className: "vds-menu-item" }, /* @__PURE__ */ React.createElement(Icons.Menu.ArrowLeft, { className: "vds-menu-close-icon vds-icon" }), /* @__PURE__ */ React.createElement("span", { className: "vds-menu-item-label", style: { display: "flex", alignItems: "center", gap: "8px" } }, flagCode ? /* @__PURE__ */ React.createElement(
|
|
994
|
+
"span",
|
|
995
|
+
{
|
|
996
|
+
className: `fi fi-${flagCode}`,
|
|
997
|
+
style: {
|
|
998
|
+
fontSize: "1.25em",
|
|
999
|
+
borderRadius: "2px",
|
|
1000
|
+
width: "1.33em",
|
|
1001
|
+
height: "1em",
|
|
1002
|
+
display: "inline-block",
|
|
1003
|
+
backgroundImage: `url('https://cdnjs.cloudflare.com/ajax/libs/flag-icons/7.1.0/flags/4x3/${flagCode}.svg')`,
|
|
1004
|
+
backgroundSize: "cover",
|
|
1005
|
+
backgroundPosition: "center"
|
|
1006
|
+
}
|
|
1007
|
+
}
|
|
1008
|
+
) : null, /* @__PURE__ */ React.createElement("span", null, groupLabel)), /* @__PURE__ */ React.createElement("span", { className: "vds-menu-item-hint" }, activeIndex !== -1 ? `${activeIndex + 1}/${groupTracks.length}` : ""), /* @__PURE__ */ React.createElement(Icons.Menu.ArrowRight, { className: "vds-menu-open-icon vds-icon" })), /* @__PURE__ */ React.createElement(Items, { className: "vds-menu-items" }, /* @__PURE__ */ React.createElement(
|
|
1009
|
+
Root$1,
|
|
1010
|
+
{
|
|
1011
|
+
className: "vds-captions-radio-group vds-radio-group",
|
|
1012
|
+
value: String(activeIndex)
|
|
1013
|
+
},
|
|
1014
|
+
groupTracks.map((track, idx) => {
|
|
1015
|
+
const displayLabel = groupTracks.length > 1 ? `${groupLabel} ${idx + 1}` : groupLabel;
|
|
1016
|
+
const onSelect = (e) => {
|
|
1017
|
+
const globalIdx = media.textTracks.indexOf(track);
|
|
1018
|
+
media.remote.changeTextTrackMode(globalIdx, "showing", e);
|
|
1019
|
+
};
|
|
1020
|
+
return /* @__PURE__ */ React.createElement(
|
|
1021
|
+
Item,
|
|
1022
|
+
{
|
|
1023
|
+
key: idx,
|
|
1024
|
+
className: "vds-caption-radio vds-radio",
|
|
1025
|
+
value: String(idx),
|
|
1026
|
+
onSelect
|
|
1027
|
+
},
|
|
1028
|
+
/* @__PURE__ */ React.createElement(Icons.Menu.RadioCheck, { className: "vds-icon" }),
|
|
1029
|
+
/* @__PURE__ */ React.createElement("span", { className: "vds-radio-label" }, displayLabel)
|
|
1030
|
+
);
|
|
1031
|
+
})
|
|
1032
|
+
)));
|
|
1033
|
+
}), slot(slots, "captionsMenuItemsEnd", null)));
|
|
894
1034
|
}
|
|
895
1035
|
DefaultCaptionMenu.displayName = "DefaultCaptionMenu";
|
|
896
1036
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { useReactContext, createReactComponent, composeRefs, useSignal, noop, useStateContext, signal, effect, isString } from './vidstack-D_bWd66h.js';
|
|
5
|
-
import { mediaContext, AirPlayButtonInstance, Primitive, PlayButtonInstance, CaptionButtonInstance, FullscreenButtonInstance, MuteButtonInstance, PIPButtonInstance, SeekButtonInstance, LiveButtonInstance, SliderValueInstance, SliderInstance, SliderPreviewInstance, useSliderState, VolumeSliderInstance, IS_SERVER, ThumbnailInstance, TimeSliderInstance, SliderChaptersInstance, SliderThumbnailInstance, SliderVideoInstance, mediaState, RadioGroupInstance, RadioInstance, MenuInstance, MenuButtonInstance, useMediaState, MenuItemsInstance, MenuItemInstance, GestureInstance, TimeInstance
|
|
5
|
+
import { mediaContext, AirPlayButtonInstance, Primitive, PlayButtonInstance, CaptionButtonInstance, FullscreenButtonInstance, MuteButtonInstance, PIPButtonInstance, SeekButtonInstance, LiveButtonInstance, SliderValueInstance, SliderInstance, SliderPreviewInstance, useSliderState, VolumeSliderInstance, IS_SERVER, ThumbnailInstance, TimeSliderInstance, SliderChaptersInstance, SliderThumbnailInstance, SliderVideoInstance, mediaState, RadioGroupInstance, RadioInstance, MenuInstance, MenuButtonInstance, useMediaState, MenuItemsInstance, MenuItemInstance, GestureInstance, TimeInstance } from './vidstack-C5tZAkKo.js';
|
|
6
6
|
import { createPortal } from 'react-dom';
|
|
7
7
|
|
|
8
8
|
function useMediaContext() {
|
|
@@ -581,7 +581,7 @@ function useAudioOptions() {
|
|
|
581
581
|
const options = $audioTracks.map((track) => ({
|
|
582
582
|
track,
|
|
583
583
|
label: track.label,
|
|
584
|
-
value: getTrackValue
|
|
584
|
+
value: getTrackValue(track),
|
|
585
585
|
get selected() {
|
|
586
586
|
return audioTrack() === track;
|
|
587
587
|
},
|
|
@@ -603,66 +603,14 @@ function useAudioOptions() {
|
|
|
603
603
|
Object.defineProperty(options, "selectedValue", {
|
|
604
604
|
get() {
|
|
605
605
|
const track = audioTrack();
|
|
606
|
-
return track ? getTrackValue
|
|
606
|
+
return track ? getTrackValue(track) : void 0;
|
|
607
607
|
}
|
|
608
608
|
});
|
|
609
609
|
return options;
|
|
610
610
|
}, [$audioTracks]);
|
|
611
611
|
}
|
|
612
|
-
function getTrackValue$1(track) {
|
|
613
|
-
return track.label.toLowerCase();
|
|
614
|
-
}
|
|
615
|
-
|
|
616
|
-
function useCaptionOptions({ off = true } = {}) {
|
|
617
|
-
const media = useMediaContext(), { textTracks, textTrack } = media.$state, $textTracks = useSignal(textTracks);
|
|
618
|
-
useSignal(textTrack);
|
|
619
|
-
return React.useMemo(() => {
|
|
620
|
-
const captionTracks = $textTracks.filter(isTrackCaptionKind), options = captionTracks.map((track) => ({
|
|
621
|
-
track,
|
|
622
|
-
label: track.label,
|
|
623
|
-
value: getTrackValue(track),
|
|
624
|
-
get selected() {
|
|
625
|
-
return textTrack() === track;
|
|
626
|
-
},
|
|
627
|
-
select(trigger) {
|
|
628
|
-
const index = textTracks().indexOf(track);
|
|
629
|
-
if (index >= 0) media.remote.changeTextTrackMode(index, "showing", trigger);
|
|
630
|
-
}
|
|
631
|
-
}));
|
|
632
|
-
if (off) {
|
|
633
|
-
options.unshift({
|
|
634
|
-
track: null,
|
|
635
|
-
label: isString(off) ? off : "Off",
|
|
636
|
-
value: "off",
|
|
637
|
-
get selected() {
|
|
638
|
-
return !textTrack();
|
|
639
|
-
},
|
|
640
|
-
select(trigger) {
|
|
641
|
-
media.remote.toggleCaptions(trigger);
|
|
642
|
-
}
|
|
643
|
-
});
|
|
644
|
-
}
|
|
645
|
-
Object.defineProperty(options, "disabled", {
|
|
646
|
-
get() {
|
|
647
|
-
return !captionTracks.length;
|
|
648
|
-
}
|
|
649
|
-
});
|
|
650
|
-
Object.defineProperty(options, "selectedTrack", {
|
|
651
|
-
get() {
|
|
652
|
-
return textTrack();
|
|
653
|
-
}
|
|
654
|
-
});
|
|
655
|
-
Object.defineProperty(options, "selectedValue", {
|
|
656
|
-
get() {
|
|
657
|
-
const track = textTrack();
|
|
658
|
-
return track ? getTrackValue(track) : "off";
|
|
659
|
-
}
|
|
660
|
-
});
|
|
661
|
-
return options;
|
|
662
|
-
}, [$textTracks]);
|
|
663
|
-
}
|
|
664
612
|
function getTrackValue(track) {
|
|
665
|
-
return track.
|
|
613
|
+
return track.label.toLowerCase();
|
|
666
614
|
}
|
|
667
615
|
|
|
668
|
-
export { AirPlayButton, Button, CaptionButton, ChapterTitle, Chapters, FullscreenButton, Gesture, Img, Item$1 as Item, Items, LiveButton, MuteButton, PIPButton, PlayButton, Portal, Preview, Progress, Root$3 as Root, Root$2 as Root$1, Root as Root$2, Root$1 as Root$3, Root$4, Root$5, SeekButton, Steps, Thumb, Thumbnail, Time, Track, TrackFill, Value, appendParamsToURL, menu, radioGroup, slider, sliderCallbacks, thumbnail, timeSlider, useAudioOptions,
|
|
616
|
+
export { AirPlayButton, Button, CaptionButton, ChapterTitle, Chapters, FullscreenButton, Gesture, Img, Item$1 as Item, Items, LiveButton, MuteButton, PIPButton, PlayButton, Portal, Preview, Progress, Root$3 as Root, Root$2 as Root$1, Root as Root$2, Root$1 as Root$3, Root$4, Root$5, SeekButton, Steps, Thumb, Thumbnail, Time, Track, TrackFill, Value, appendParamsToURL, menu, radioGroup, slider, sliderCallbacks, thumbnail, timeSlider, useAudioOptions, useMediaContext, useMediaPlayer, volumeSlider };
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { listenEvent, EventsController, animationFrameThrottle, effect } from './vidstack-D_bWd66h.js';
|
|
5
|
-
import { useMediaPlayer } from './vidstack-
|
|
5
|
+
import { useMediaPlayer } from './vidstack-CjLj3q5w.js';
|
|
6
6
|
|
|
7
7
|
function useClassName(el, className) {
|
|
8
8
|
React.useEffect(() => {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { createReactComponent, composeRefs, listenEvent, useReactScope, scoped, computed, signal, effect, EventsController, useSignal } from './vidstack-D_bWd66h.js';
|
|
5
5
|
import { MediaAnnouncerInstance, Primitive, ControlsInstance, ControlsGroupInstance, TooltipInstance, TooltipTriggerInstance, TooltipContentInstance, GoogleCastButtonInstance, QualitySliderInstance, AudioGainSliderInstance, SpeedSliderInstance, useMediaState, watchActiveTextTrack, CaptionsInstance, formatSpokenTime, formatTime } from './vidstack-C5tZAkKo.js';
|
|
6
|
-
import { sliderCallbacks, Preview, Steps, Thumb, Track as Track$1, TrackFill as TrackFill$1, Value, useMediaContext } from './vidstack-
|
|
6
|
+
import { sliderCallbacks, Preview, Steps, Thumb, Track as Track$1, TrackFill as TrackFill$1, Value, useMediaContext } from './vidstack-CjLj3q5w.js';
|
|
7
7
|
|
|
8
8
|
const MediaAnnouncerBridge = createReactComponent(MediaAnnouncerInstance, {
|
|
9
9
|
events: ["onChange"]
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
|
|
3
|
-
export { DefaultAudioLayout, DefaultBufferingIndicator, DefaultKeyboardDisplay, DefaultMenuButton, DefaultMenuCheckbox, DefaultMenuItem, DefaultMenuRadioGroup, DefaultMenuSection, DefaultMenuSliderItem, DefaultSliderParts, DefaultSliderSteps, DefaultTooltip, DefaultVideoGestures, DefaultVideoLargeLayout, DefaultVideoLayout, DefaultVideoSmallLayout, createRadioOptions } from '../chunks/vidstack-
|
|
3
|
+
export { DefaultAudioLayout, DefaultBufferingIndicator, DefaultKeyboardDisplay, DefaultMenuButton, DefaultMenuCheckbox, DefaultMenuItem, DefaultMenuRadioGroup, DefaultMenuSection, DefaultMenuSliderItem, DefaultSliderParts, DefaultSliderSteps, DefaultTooltip, DefaultVideoGestures, DefaultVideoLargeLayout, DefaultVideoLayout, DefaultVideoSmallLayout, createRadioOptions } from '../chunks/vidstack-C3VHrHPf.js';
|
|
4
4
|
export { defaultLayoutIcons } from './vidstack-default-icons.js';
|
|
5
5
|
import 'react';
|
|
6
6
|
import '../chunks/vidstack-D_bWd66h.js';
|
|
7
|
-
import '../chunks/vidstack-
|
|
7
|
+
import '../chunks/vidstack-t48GJbb5.js';
|
|
8
8
|
import '../chunks/vidstack-C5tZAkKo.js';
|
|
9
9
|
import '@floating-ui/dom';
|
|
10
|
-
import '../chunks/vidstack-
|
|
10
|
+
import '../chunks/vidstack-CjLj3q5w.js';
|
|
11
11
|
import 'react-dom';
|
|
12
|
-
import '../chunks/vidstack-
|
|
12
|
+
import '../chunks/vidstack-DpWioszb.js';
|
|
13
13
|
import '../chunks/vidstack-D-hQD1eE.js';
|
|
14
14
|
import '../chunks/vidstack-CBF7iUqu.js';
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
|
|
3
|
-
export { DefaultAudioLayout, DefaultBufferingIndicator, DefaultKeyboardDisplay, DefaultLayoutContext, DefaultMenuButton, DefaultMenuCheckbox, DefaultMenuItem, DefaultMenuRadioGroup, DefaultMenuSection, DefaultMenuSliderItem, DefaultSliderParts, DefaultSliderSteps, DefaultTooltip, DefaultVideoGestures, DefaultVideoLargeLayout, DefaultVideoLayout, DefaultVideoSmallLayout, createRadioOptions, i18n, useDefaultLayoutContext, useDefaultLayoutWord } from '../chunks/vidstack-
|
|
3
|
+
export { DefaultAudioLayout, DefaultBufferingIndicator, DefaultKeyboardDisplay, DefaultLayoutContext, DefaultMenuButton, DefaultMenuCheckbox, DefaultMenuItem, DefaultMenuRadioGroup, DefaultMenuSection, DefaultMenuSliderItem, DefaultSliderParts, DefaultSliderSteps, DefaultTooltip, DefaultVideoGestures, DefaultVideoLargeLayout, DefaultVideoLayout, DefaultVideoSmallLayout, createRadioOptions, i18n, useDefaultLayoutContext, useDefaultLayoutWord } from '../chunks/vidstack-C3VHrHPf.js';
|
|
4
4
|
export { defaultLayoutIcons } from './vidstack-default-icons.js';
|
|
5
5
|
import 'react';
|
|
6
6
|
import '../chunks/vidstack-D_bWd66h.js';
|
|
7
|
-
import '../chunks/vidstack-
|
|
7
|
+
import '../chunks/vidstack-t48GJbb5.js';
|
|
8
8
|
import '../chunks/vidstack-C5tZAkKo.js';
|
|
9
9
|
import '@floating-ui/dom';
|
|
10
|
-
import '../chunks/vidstack-
|
|
10
|
+
import '../chunks/vidstack-CjLj3q5w.js';
|
|
11
11
|
import 'react-dom';
|
|
12
|
-
import '../chunks/vidstack-
|
|
12
|
+
import '../chunks/vidstack-DpWioszb.js';
|
|
13
13
|
import '../chunks/vidstack-D-hQD1eE.js';
|
|
14
14
|
import '../chunks/vidstack-CBF7iUqu.js';
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
import { useMediaState, Primitive, IS_SERVER, isRemotionSrc, getDownloadFile } from '../chunks/vidstack-C5tZAkKo.js';
|
|
4
4
|
import * as React from 'react';
|
|
5
5
|
import { effect, createDisposalBin, uppercaseFirstChar, isUndefined, signal, composeRefs, useSignal, isNumber, listenEvent, isString, isKeyboardEvent, isKeyboardClick } from '../chunks/vidstack-D_bWd66h.js';
|
|
6
|
-
import { useMediaContext, PlayButton, Root, Img, Gesture, AirPlayButton, CaptionButton, FullscreenButton, PIPButton, SeekButton, Root$1, Value, Preview, Thumbnail, LiveButton, Time, appendParamsToURL, Root$2, Button, Items, useAudioOptions, Root$3, Item,
|
|
7
|
-
import { useMediaRemote, useVideoQualityOptions, usePlaybackRateOptions } from '../chunks/vidstack-
|
|
8
|
-
import { useLayoutName, useClassName } from '../chunks/vidstack-
|
|
6
|
+
import { useMediaContext, PlayButton, Root, Img, Gesture, AirPlayButton, CaptionButton, FullscreenButton, PIPButton, SeekButton, Root$1, Value, Preview, Thumbnail, LiveButton, Time, appendParamsToURL, Root$2, Button, Items, useAudioOptions, Root$3, Item, MuteButton, Root$4 } from '../chunks/vidstack-CjLj3q5w.js';
|
|
7
|
+
import { useMediaRemote, useCaptionOptions, useVideoQualityOptions, usePlaybackRateOptions } from '../chunks/vidstack-B-DU-_xu.js';
|
|
8
|
+
import { useLayoutName, useClassName } from '../chunks/vidstack-DpWioszb.js';
|
|
9
9
|
import { RemotionThumbnail, RemotionPoster, RemotionSliderThumbnail } from '../chunks/vidstack-D-hQD1eE.js';
|
|
10
10
|
export { plyrLayoutIcons } from './vidstack-plyr-icons.js';
|
|
11
11
|
import '@floating-ui/dom';
|
package/dev/vidstack.js
CHANGED
|
@@ -5,12 +5,12 @@ export { ARIAKeyShortcuts, AUDIO_EXTENSIONS, AUDIO_TYPES, AirPlayButtonInstance,
|
|
|
5
5
|
import * as React from 'react';
|
|
6
6
|
import { isString, EventsController, DOMEvent, prop, method, Component, hasProvidedContext, useContext, effect, createReactComponent, useStateContext, useSignal, composeRefs, useSignalRecord, useReactScope, signal } from './chunks/vidstack-D_bWd66h.js';
|
|
7
7
|
export { appendTriggerEvent, findTriggerEvent, hasTriggerEvent, isKeyboardClick, isKeyboardEvent, isPointerEvent, walkTriggerEventChain } from './chunks/vidstack-D_bWd66h.js';
|
|
8
|
-
import { createSignal, useScoped } from './chunks/vidstack-
|
|
9
|
-
export { audioGainSlider as AudioGainSlider, Captions, ChapterTitle, controls as Controls, GoogleCastButton, MediaAnnouncer, qualitySlider as QualitySlider, speedSlider as SpeedSlider, spinner as Spinner, Title, tooltip as Tooltip, useActiveTextCues, useActiveTextTrack, useChapterOptions, useChapterTitle, useTextCues } from './chunks/vidstack-
|
|
10
|
-
import { useMediaContext as useMediaContext$1 } from './chunks/vidstack-
|
|
11
|
-
export { AirPlayButton, CaptionButton, FullscreenButton, Gesture, LiveButton, menu as Menu, MuteButton, PIPButton, PlayButton, radioGroup as RadioGroup, SeekButton, slider as Slider, thumbnail as Thumbnail, Time, timeSlider as TimeSlider, volumeSlider as VolumeSlider, useAudioOptions,
|
|
8
|
+
import { createSignal, useScoped } from './chunks/vidstack-t48GJbb5.js';
|
|
9
|
+
export { audioGainSlider as AudioGainSlider, Captions, ChapterTitle, controls as Controls, GoogleCastButton, MediaAnnouncer, qualitySlider as QualitySlider, speedSlider as SpeedSlider, spinner as Spinner, Title, tooltip as Tooltip, useActiveTextCues, useActiveTextTrack, useChapterOptions, useChapterTitle, useTextCues } from './chunks/vidstack-t48GJbb5.js';
|
|
10
|
+
import { useMediaContext as useMediaContext$1 } from './chunks/vidstack-CjLj3q5w.js';
|
|
11
|
+
export { AirPlayButton, CaptionButton, FullscreenButton, Gesture, LiveButton, menu as Menu, MuteButton, PIPButton, PlayButton, radioGroup as RadioGroup, SeekButton, slider as Slider, thumbnail as Thumbnail, Time, timeSlider as TimeSlider, volumeSlider as VolumeSlider, useAudioOptions, useMediaPlayer } from './chunks/vidstack-CjLj3q5w.js';
|
|
12
12
|
import { Icon } from './chunks/vidstack-CBF7iUqu.js';
|
|
13
|
-
export { DEFAULT_PLAYBACK_RATES, useMediaRemote, usePlaybackRateOptions, useVideoQualityOptions } from './chunks/vidstack-
|
|
13
|
+
export { DEFAULT_PLAYBACK_RATES, useCaptionOptions, useMediaRemote, usePlaybackRateOptions, useVideoQualityOptions } from './chunks/vidstack-B-DU-_xu.js';
|
|
14
14
|
import '@floating-ui/dom';
|
|
15
15
|
import 'react-dom';
|
|
16
16
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hanifhan1f/vidstack-react",
|
|
3
3
|
"description": "UI component library for building high-quality, accessible video and audio experiences on the web.",
|
|
4
|
-
"version": "1.12.
|
|
4
|
+
"version": "1.12.35",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"types": "index.d.ts",
|
|
@@ -1994,6 +1994,7 @@ interface VideoSrcMeta {
|
|
|
1994
1994
|
bitrate?: number;
|
|
1995
1995
|
framerate?: number;
|
|
1996
1996
|
codec?: string;
|
|
1997
|
+
label?: string;
|
|
1997
1998
|
}
|
|
1998
1999
|
interface HLSSrc {
|
|
1999
2000
|
src: string;
|
|
@@ -2013,7 +2014,7 @@ interface VimeoSrc {
|
|
|
2013
2014
|
src: string;
|
|
2014
2015
|
type: 'video/vimeo';
|
|
2015
2016
|
}
|
|
2016
|
-
declare function isVideoQualitySrc(src: Src): src is SetRequired<VideoSrc, '
|
|
2017
|
+
declare function isVideoQualitySrc(src: Src): src is SetRequired<VideoSrc, 'height' | 'label'>;
|
|
2017
2018
|
|
|
2018
2019
|
/**
|
|
2019
2020
|
* A simple facade for dispatching media requests to the nearest media player element.
|
|
@@ -2456,6 +2457,7 @@ interface VideoQuality extends SelectListItem {
|
|
|
2456
2457
|
readonly height: number;
|
|
2457
2458
|
readonly bitrate: number | null;
|
|
2458
2459
|
readonly codec: string | null;
|
|
2460
|
+
readonly label?: string;
|
|
2459
2461
|
}
|
|
2460
2462
|
|
|
2461
2463
|
declare class MediaPlayerDelegate {
|
|
@@ -10790,6 +10792,12 @@ interface DefaultLayoutEpisode {
|
|
|
10790
10792
|
runtime?: number;
|
|
10791
10793
|
episodeNumber?: number;
|
|
10792
10794
|
seasonNumber?: number;
|
|
10795
|
+
/** Highlights this row as the episode currently playing (e.g. in fullscreen episode list). */
|
|
10796
|
+
isActive?: boolean;
|
|
10797
|
+
/** Watch progress 0–100 for a progress bar on the thumbnail. */
|
|
10798
|
+
progressPercent?: number;
|
|
10799
|
+
/** Approximate whole minutes remaining (used when not the active playing row). */
|
|
10800
|
+
timeLeft?: number;
|
|
10793
10801
|
}
|
|
10794
10802
|
|
|
10795
10803
|
declare const DefaultLayoutContext: React.Context<DefaultLayoutContext>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
|
|
3
3
|
import * as React from 'react';
|
|
4
|
-
import { RadioGroupController, useMediaContext, menuContext, MediaRemoteControl, MediaPlayerInstance, sortVideoQualities } from './vidstack-
|
|
5
|
-
import { useMediaContext as useMediaContext$1 } from './vidstack-
|
|
4
|
+
import { RadioGroupController, useMediaContext, menuContext, MediaRemoteControl, MediaPlayerInstance, isTrackCaptionKind, sortVideoQualities } from './vidstack-C48MQkXV.js';
|
|
5
|
+
import { useMediaContext as useMediaContext$1 } from './vidstack-DKWmxvB4.js';
|
|
6
6
|
import { prop, method, Component, hasProvidedContext, useContext, effect, useSignal, isString } from './vidstack-CZgUA94N.js';
|
|
7
7
|
|
|
8
8
|
const DEFAULT_PLAYBACK_RATES = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];
|
|
@@ -83,6 +83,58 @@ function useMediaRemote(target) {
|
|
|
83
83
|
return remote.current;
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
+
function useCaptionOptions({ off = true } = {}) {
|
|
87
|
+
const media = useMediaContext$1(), { textTracks, textTrack } = media.$state, $textTracks = useSignal(textTracks);
|
|
88
|
+
useSignal(textTrack);
|
|
89
|
+
return React.useMemo(() => {
|
|
90
|
+
const captionTracks = $textTracks.filter(isTrackCaptionKind), options = captionTracks.map((track) => ({
|
|
91
|
+
track,
|
|
92
|
+
label: track.label,
|
|
93
|
+
value: getTrackValue(track),
|
|
94
|
+
get selected() {
|
|
95
|
+
return textTrack() === track;
|
|
96
|
+
},
|
|
97
|
+
select(trigger) {
|
|
98
|
+
const index = textTracks().indexOf(track);
|
|
99
|
+
if (index >= 0) media.remote.changeTextTrackMode(index, "showing", trigger);
|
|
100
|
+
}
|
|
101
|
+
}));
|
|
102
|
+
if (off) {
|
|
103
|
+
options.unshift({
|
|
104
|
+
track: null,
|
|
105
|
+
label: isString(off) ? off : "Off",
|
|
106
|
+
value: "off",
|
|
107
|
+
get selected() {
|
|
108
|
+
return !textTrack();
|
|
109
|
+
},
|
|
110
|
+
select(trigger) {
|
|
111
|
+
media.remote.toggleCaptions(trigger);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
Object.defineProperty(options, "disabled", {
|
|
116
|
+
get() {
|
|
117
|
+
return !captionTracks.length;
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
Object.defineProperty(options, "selectedTrack", {
|
|
121
|
+
get() {
|
|
122
|
+
return textTrack();
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
Object.defineProperty(options, "selectedValue", {
|
|
126
|
+
get() {
|
|
127
|
+
const track = textTrack();
|
|
128
|
+
return track ? getTrackValue(track) : "off";
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
return options;
|
|
132
|
+
}, [$textTracks]);
|
|
133
|
+
}
|
|
134
|
+
function getTrackValue(track) {
|
|
135
|
+
return track.id + ":" + track.kind + "-" + track.label.toLowerCase();
|
|
136
|
+
}
|
|
137
|
+
|
|
86
138
|
function useVideoQualityOptions({
|
|
87
139
|
auto = true,
|
|
88
140
|
sort = "descending"
|
|
@@ -186,4 +238,4 @@ function usePlaybackRateOptions({
|
|
|
186
238
|
}, [rates]);
|
|
187
239
|
}
|
|
188
240
|
|
|
189
|
-
export { DEFAULT_PLAYBACK_RATES, useMediaRemote, usePlaybackRateOptions, useVideoQualityOptions };
|
|
241
|
+
export { DEFAULT_PLAYBACK_RATES, useCaptionOptions, useMediaRemote, usePlaybackRateOptions, useVideoQualityOptions };
|