@lucaismyname/ginger 0.0.54 → 0.0.56
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -1
- package/dist/GingerSplitContexts-DQ3rESBu.js +78 -0
- package/dist/GingerSplitContexts-DQ3rESBu.js.map +1 -0
- package/dist/GingerSplitContexts-KSB0vQ5F.cjs +2 -0
- package/dist/GingerSplitContexts-KSB0vQ5F.cjs.map +1 -0
- package/dist/analyzer/useGingerLiveAnalyzer.d.ts.map +1 -1
- package/dist/client.cjs +1 -1
- package/dist/client.js +28 -26
- package/dist/context/GingerProvider.d.ts +1 -1
- package/dist/context/GingerProvider.d.ts.map +1 -1
- package/dist/context/GingerSplitContexts.d.ts +22 -2
- package/dist/context/GingerSplitContexts.d.ts.map +1 -1
- package/dist/crossfade/index.cjs +1 -1
- package/dist/crossfade/index.cjs.map +1 -1
- package/dist/crossfade/index.js +116 -99
- package/dist/crossfade/index.js.map +1 -1
- package/dist/crossfade/useGingerCrossfade.d.ts.map +1 -1
- package/dist/devtools/GingerDevtools.d.ts +2 -0
- package/dist/devtools/GingerDevtools.d.ts.map +1 -0
- package/dist/devtools/index.cjs +2 -0
- package/dist/devtools/index.cjs.map +1 -0
- package/dist/devtools/index.d.ts +3 -0
- package/dist/devtools/index.d.ts.map +1 -0
- package/dist/devtools/index.js +465 -0
- package/dist/devtools/index.js.map +1 -0
- package/dist/devtools/registry.d.ts +49 -0
- package/dist/devtools/registry.d.ts.map +1 -0
- package/dist/equalizer/index.cjs +1 -1
- package/dist/equalizer/index.js +1 -1
- package/dist/experimental-gapless/index.cjs +1 -1
- package/dist/experimental-gapless/index.js +1 -1
- package/dist/formatTime-DUWvzW21.js +9 -0
- package/dist/formatTime-DUWvzW21.js.map +1 -0
- package/dist/formatTime-fm_QClmG.cjs +2 -0
- package/dist/formatTime-fm_QClmG.cjs.map +1 -0
- package/dist/ginger-B-W73LQC.cjs +2 -0
- package/dist/ginger-B-W73LQC.cjs.map +1 -0
- package/dist/ginger-BHu7Ofna.js +2177 -0
- package/dist/ginger-BHu7Ofna.js.map +1 -0
- package/dist/hooks/useGingerKeyboardShortcuts.d.ts.map +1 -1
- package/dist/hooks/useSeekDrag.d.ts.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -26
- package/dist/internal/formatTime.d.ts.map +1 -1
- package/dist/remote/index.cjs +1 -1
- package/dist/remote/index.js +1 -1
- package/dist/spatial/index.cjs +1 -1
- package/dist/spatial/index.js +1 -1
- package/dist/store.d.ts.map +1 -1
- package/dist/testing/index.cjs +1 -1
- package/dist/testing/index.js +1 -1
- package/dist/transcript/index.cjs +1 -1
- package/dist/transcript/index.js +1 -1
- package/dist/types.d.ts +26 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/{useGinger-4uvPoChz.cjs → useGinger-BMRLzjmr.cjs} +2 -2
- package/dist/{useGinger-4uvPoChz.cjs.map → useGinger-BMRLzjmr.cjs.map} +1 -1
- package/dist/{useGinger-Dz0cPyD1.js → useGinger-DKrHZ4NU.js} +2 -2
- package/dist/{useGinger-Dz0cPyD1.js.map → useGinger-DKrHZ4NU.js.map} +1 -1
- package/dist/useGingerChapterProgress-DAIWjAtG.js +343 -0
- package/dist/useGingerChapterProgress-DAIWjAtG.js.map +1 -0
- package/dist/useGingerChapterProgress-DLx-LayX.cjs +2 -0
- package/dist/useGingerChapterProgress-DLx-LayX.cjs.map +1 -0
- package/package.json +6 -1
- package/dist/GingerSplitContexts-BzBExb95.js +0 -64
- package/dist/GingerSplitContexts-BzBExb95.js.map +0 -1
- package/dist/GingerSplitContexts-C7puo0M7.cjs +0 -2
- package/dist/GingerSplitContexts-C7puo0M7.cjs.map +0 -1
- package/dist/ginger-9lWCvbHv.cjs +0 -2
- package/dist/ginger-9lWCvbHv.cjs.map +0 -1
- package/dist/ginger-XgXdGRB-.js +0 -2049
- package/dist/ginger-XgXdGRB-.js.map +0 -1
- package/dist/useGingerChapterProgress-Cqa9_CyH.cjs +0 -2
- package/dist/useGingerChapterProgress-Cqa9_CyH.cjs.map +0 -1
- package/dist/useGingerChapterProgress-DgqqoY5F.js +0 -324
- package/dist/useGingerChapterProgress-DgqqoY5F.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatTime.d.ts","sourceRoot":"","sources":["../../src/internal/formatTime.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"formatTime.d.ts","sourceRoot":"","sources":["../../src/internal/formatTime.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CASlD"}
|
package/dist/remote/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("react"),U=require("../useGinger-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("react"),U=require("../useGinger-BMRLzjmr.cjs"),C="ginger-remote",B=u=>u==="off"||u==="all"||u==="one",j=u=>u==="playlist"||u==="single";function x(u){if(!u||typeof u!="object")return!1;const e=u;if(!Array.isArray(e.tracks))return!1;for(const d of e.tracks){if(!d||typeof d!="object")return!1;const E=d;if(typeof E.title!="string"||typeof E.fileUrl!="string")return!1}return!(e.currentIndex!==void 0&&typeof e.currentIndex!="number"||e.isPaused!==void 0&&typeof e.isPaused!="boolean"||e.isShuffled!==void 0&&typeof e.isShuffled!="boolean"||e.repeatMode!==void 0&&!B(e.repeatMode)||e.playbackMode!==void 0&&!j(e.playbackMode)||e.volume!==void 0&&typeof e.volume!="number"||e.muted!==void 0&&typeof e.muted!="boolean"||e.playbackRate!==void 0&&typeof e.playbackRate!="number"||e.playlistMeta!==void 0&&e.playlistMeta!==null&&typeof e.playlistMeta!="object")}function F(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`ginger-tab-${Math.random().toString(36).slice(2)}`}function q(u={}){const{channelName:e=C,heartbeatMs:d=2e3,electionTimeoutMs:E=300}=u,{state:a,init:M}=U.useGinger(),t=c.useRef("");t.current===""&&(t.current=F());const[p,b]=c.useState("pending"),[_,T]=c.useState(0),[O,w]=c.useState(null),r=c.useRef(p);r.current=p;const S=c.useRef(M);S.current=M;const k=c.useRef(null),l=c.useRef(new Set),R=c.useRef(Date.now()),m=c.useRef(null),i=c.useRef(null),A=c.useRef(null),g=c.useCallback(s=>{var o;(o=k.current)==null||o.postMessage(s)},[]),y=c.useCallback(()=>{m.current&&(clearTimeout(m.current),m.current=null)},[]),N=c.useCallback(()=>{i.current&&(clearInterval(i.current),i.current=null)},[]);c.useEffect(()=>{if(typeof window>"u"||typeof BroadcastChannel>"u"){w("BroadcastChannel is not available in this environment");return}w(null);const s=new BroadcastChannel(e);k.current=s,l.current=new Set([t.current]);const o=I=>{s.postMessage(I)},v=()=>{i.current&&clearInterval(i.current),i.current=setInterval(()=>{const I=t.current;l.current.add(I);const n=l.current.size;T(n),o({type:"HEARTBEAT",tabId:I,connectedCount:n})},d)},h=()=>{y(),N(),b("follower"),r.current="follower"},H=()=>{y(),b("leader"),r.current="leader",l.current.add(t.current),o({type:"LEADER_ANNOUNCE",tabId:t.current}),v()},D=()=>{y(),m.current=setTimeout(()=>{r.current==="pending"&&(b("leader"),r.current="leader",l.current.add(t.current),o({type:"LEADER_ANNOUNCE",tabId:t.current}),v())},E)},L=I=>{const n=I.data;if(!n||typeof n!="object"||!("type"in n))return;const f=t.current;switch(n.type){case"PING":{l.current.add(n.tabId),r.current==="leader"&&o({type:"PONG",tabId:f,leaderTabId:f});break}case"PONG":{n.leaderTabId&&n.leaderTabId!==f&&(h(),R.current=Date.now());break}case"LEADER_ANNOUNCE":{if(n.tabId===f)break;l.current.add(n.tabId),n.tabId<f?(h(),R.current=Date.now()):n.tabId>f&&(r.current==="pending"||r.current==="leader")&&H();break}case"LEADER_RESIGN":{if(n.tabId===f)break;R.current=Date.now(),r.current==="follower"&&(b("pending"),r.current="pending",o({type:"PING",tabId:f}),D());break}case"HEARTBEAT":{r.current==="follower"&&(R.current=Date.now(),T(n.connectedCount));break}case"STATE_SNAPSHOT":{if(r.current==="follower"&&n.tabId!==f){if(process.env.NODE_ENV!=="production"&&!x(n.snapshot)){console.warn("[@lucaismyname/ginger] ignored STATE_SNAPSHOT: invalid GingerInitPayload");break}S.current(n.snapshot)}break}}};s.addEventListener("message",L),o({type:"PING",tabId:t.current}),m.current=setTimeout(()=>{r.current==="pending"&&(b("leader"),r.current="leader",l.current.add(t.current),o({type:"LEADER_ANNOUNCE",tabId:t.current}),v())},E),A.current=setInterval(()=>{r.current==="follower"&&Date.now()-R.current>d*2&&(b("pending"),r.current="pending",o({type:"PING",tabId:t.current}),D())},d);const P=()=>{r.current==="leader"&&o({type:"LEADER_RESIGN",tabId:t.current})};return window.addEventListener("pagehide",P),()=>{window.removeEventListener("pagehide",P),y(),N(),A.current&&(clearInterval(A.current),A.current=null),s.removeEventListener("message",L),r.current==="leader"&&o({type:"LEADER_RESIGN",tabId:t.current}),s.close(),k.current=null}},[e,y,E,d,N]),c.useEffect(()=>{if(p!=="leader")return;const s={tracks:a.tracks,currentIndex:a.currentIndex,playlistMeta:a.playlistMeta,isPaused:a.isPaused,isShuffled:!1,repeatMode:a.repeatMode,playbackMode:a.playbackMode,volume:a.volume,muted:a.muted,playbackRate:a.playbackRate};g({type:"STATE_SNAPSHOT",tabId:t.current,snapshot:s})},[p,a.tracks,a.currentIndex,a.isPaused,a.repeatMode,a.playbackMode,a.playlistMeta,a.volume,a.muted,a.playbackRate,g]);const G=c.useCallback(()=>{y(),N(),b("leader"),r.current="leader",l.current.add(t.current),g({type:"LEADER_ANNOUNCE",tabId:t.current}),i.current&&clearInterval(i.current),i.current=setInterval(()=>{const s=t.current;l.current.add(s);const o=l.current.size;T(o),g({type:"HEARTBEAT",tabId:s,connectedCount:o})},d)},[y,d,g,N]);return{isLeader:p==="leader",isFollower:p==="follower",isPending:p==="pending",connectedTabs:_,claimLeadership:G,error:O}}exports.DEFAULT_REMOTE_CHANNEL_NAME=C;exports.useGingerRemote=q;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/remote/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useRef as f, useState as M, useCallback as T, useEffect as O } from "react";
|
|
2
|
-
import { u as B } from "../useGinger-
|
|
2
|
+
import { u as B } from "../useGinger-DKrHZ4NU.js";
|
|
3
3
|
const j = "ginger-remote", F = (o) => o === "off" || o === "all" || o === "one", z = (o) => o === "playlist" || o === "single";
|
|
4
4
|
function V(o) {
|
|
5
5
|
if (!o || typeof o != "object") return !1;
|
package/dist/spatial/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react"),d=require("../liveAudioGraph-0cpHD_Ic.cjs"),k=require("../useGinger-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react"),d=require("../liveAudioGraph-0cpHD_Ic.cjs"),k=require("../useGinger-BMRLzjmr.cjs");function M(t,o,c,l){t.positionX.value=o,t.positionY.value=c,t.positionZ.value=l}function R(t,o,c,l){t.listener.positionX.value=o,t.listener.positionY.value=c,t.listener.positionZ.value=l}function q(t={}){const{enabled:o=!0,panningModel:c="HRTF",distanceModel:l="inverse",refDistance:g=1,position:S=[0,0,0],listenerPosition:A=[0,0,0]}=t,{audioRef:p}=k.useGinger(),[G,v]=r.useState(null),u=r.useRef(null),f=r.useRef(null),[P,h,m]=S,[b,y,C]=A;r.useEffect(()=>{const n=p.current;if(!(!n||typeof window>"u")){if(!o){d.setProcessingChain(n,[]),u.current=null,f.current=null;return}try{const e=d.attachLiveAnalyser(n,{fftSize:32,smoothingTimeConstant:0,minDecibels:-100,maxDecibels:0}),{context:s,id:i}=e,a=s.createPanner();a.panningModel=c,a.distanceModel=l,a.refDistance=g,M(a,P,h,m),R(s,b,y,C),u.current=a,f.current=s,d.setProcessingChain(n,[a]),d.detachLiveAnalyser(n,i),v(null)}catch(e){const s=e instanceof Error?e.message:"Failed to create spatial panner";v(s),u.current=null,f.current=null}return()=>{const e=p.current;e&&d.setProcessingChain(e,[]),u.current=null,f.current=null}}},[o,c,l,g,P,h,m,b,y,C,p]);const x=r.useCallback((n,e,s)=>{const i=u.current;i&&M(i,n,e,s)},[]),D=r.useCallback((n,e,s)=>{const i=f.current;i&&R(i,n,e,s)},[]),L=r.useCallback(n=>{const e=u.current;e&&(e.panningModel=n)},[]);return{setSourcePosition:x,setListenerPosition:D,setPanningModel:L,error:G}}exports.useGingerSpatialAudio=q;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/spatial/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useState as X, useRef as R, useEffect as Y, useCallback as p } from "react";
|
|
2
2
|
import { s as d, a as Z, d as w } from "../liveAudioGraph-DvPaxBCP.js";
|
|
3
|
-
import { u as F } from "../useGinger-
|
|
3
|
+
import { u as F } from "../useGinger-DKrHZ4NU.js";
|
|
4
4
|
function b(t, o, i, c) {
|
|
5
5
|
t.positionX.value = o, t.positionY.value = i, t.positionZ.value = c;
|
|
6
6
|
}
|
package/dist/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,WAAW,EAGZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,UAAU,EACV,KAAK,EACN,MAAM,SAAS,CAAC;AAEjB,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,YAAY,CAAC,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,WAAW,CAAC;IAC5B,8FAA8F;IAC9F,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IACzC;;;OAGG;IACH,SAAS,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;IAClE,mHAAmH;IACnH,IAAI,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC3C,iDAAiD;IACjD,WAAW,EAAE,OAAO,WAAW,CAAC;IAChC,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;CAC7C,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,kBAAuB,GAAG,WAAW,
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,WAAW,EAGZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,UAAU,EACV,KAAK,EACN,MAAM,SAAS,CAAC;AAEjB,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,YAAY,CAAC,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,WAAW,CAAC;IAC5B,8FAA8F;IAC9F,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IACzC;;;OAGG;IACH,SAAS,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;IAClE,mHAAmH;IACnH,IAAI,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC3C,iDAAiD;IACjD,WAAW,EAAE,OAAO,WAAW,CAAC;IAChC,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;CAC7C,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,kBAAuB,GAAG,WAAW,CAqD/E"}
|
package/dist/testing/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Al=require("react/jsx-runtime"),Xi=require("react"),yt=require("react-dom"),Il=require("../ginger-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Al=require("react/jsx-runtime"),Xi=require("react"),yt=require("react-dom"),Il=require("../ginger-B-W73LQC.cjs");function Pc(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:()=>e[r]})}}return t.default=e,Object.freeze(t)}const ur=Pc(Xi);function Tc(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var wi={exports:{}},ne={};/**
|
|
2
2
|
* @license React
|
|
3
3
|
* react-dom-test-utils.production.min.js
|
|
4
4
|
*
|
package/dist/testing/index.js
CHANGED
|
@@ -2,7 +2,7 @@ import { jsxs as Rc, jsx as Pc } from "react/jsx-runtime";
|
|
|
2
2
|
import * as ur from "react";
|
|
3
3
|
import Us from "react";
|
|
4
4
|
import yt from "react-dom";
|
|
5
|
-
import { G as Ml } from "../ginger-
|
|
5
|
+
import { G as Ml } from "../ginger-BHu7Ofna.js";
|
|
6
6
|
function Tc(e) {
|
|
7
7
|
return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, "default") ? e.default : e;
|
|
8
8
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("react"),F=require("../GingerSplitContexts-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("react"),F=require("../GingerSplitContexts-KSB0vQ5F.cjs");function g(n){return n.replace(/<[^>]+>/g,"").trim()}function T(n){const e=n.trim().replace(",",".").split(":");if(e.length===3){const i=Number(e[0]),t=Number(e[1]),s=Number(e[2]);return[i,t,s].every(Number.isFinite)?i*3600+t*60+s:Number.NaN}if(e.length===2){const i=Number(e[0]),t=Number(e[1]);return[i,t].every(Number.isFinite)?i*60+t:Number.NaN}return Number.NaN}function S(n){const r=n.indexOf("-->");if(r<0)return null;const e=n.slice(0,r).trim(),t=n.slice(r+3).trim().match(/^(\S+)/);return t?{start:e,end:t[1]}:null}function b(n){const r=[],e=n.replace(/\r\n/g,`
|
|
2
2
|
`).split(/\n\s*\n/);for(const i of e){const t=i.split(`
|
|
3
3
|
`).map(m=>m.trim()).filter(m=>m.length>0);if(t.length===0)continue;let s=0;/^\d+$/.test(t[0])&&(s=1);const c=t[s];if(!c)continue;const o=S(c);if(!o)continue;const a=T(o.start),u=T(o.end);if(!Number.isFinite(a)||!Number.isFinite(u))continue;const l=t.slice(s+1),f=g(l.join(`
|
|
4
4
|
`));f&&r.push({startTime:a,endTime:u,text:f})}return r.sort((i,t)=>i.startTime-t.startTime)}function N(n){const r=[];let e=n.replace(/\r\n/g,`
|
package/dist/transcript/index.js
CHANGED
package/dist/types.d.ts
CHANGED
|
@@ -65,12 +65,16 @@ export type PlaylistMeta = {
|
|
|
65
65
|
metadata?: Record<string, unknown>;
|
|
66
66
|
};
|
|
67
67
|
export type PlaybackUiState = "idle" | "loading" | "playing" | "paused" | "ended" | "error";
|
|
68
|
-
|
|
68
|
+
/** High-frequency time/progress fields updated on every time tick. */
|
|
69
|
+
export type GingerTimeSlice = {
|
|
69
70
|
currentTime: number;
|
|
70
71
|
duration: number;
|
|
71
72
|
bufferedFraction: number;
|
|
72
73
|
isBuffering: boolean;
|
|
73
74
|
errorMessage: string | null;
|
|
75
|
+
};
|
|
76
|
+
/** Low-frequency media control fields (volume, rate). */
|
|
77
|
+
export type GingerMediaControlSlice = {
|
|
74
78
|
/** 0…1, mirrored on HTMLMediaElement.volume */
|
|
75
79
|
volume: number;
|
|
76
80
|
/** Mirrored on HTMLMediaElement.muted */
|
|
@@ -78,6 +82,7 @@ export type GingerMediaSlice = {
|
|
|
78
82
|
/** Mirrored on HTMLMediaElement.playbackRate (typically 0.25–4) */
|
|
79
83
|
playbackRate: number;
|
|
80
84
|
};
|
|
85
|
+
export type GingerMediaSlice = GingerTimeSlice & GingerMediaControlSlice;
|
|
81
86
|
export type GingerPlaybackSlice = {
|
|
82
87
|
tracks: Track[];
|
|
83
88
|
currentIndex: number;
|
|
@@ -258,6 +263,11 @@ export type GingerProviderProps = {
|
|
|
258
263
|
mediaSession?: boolean | GingerMediaSessionOptions;
|
|
259
264
|
beforePlay?: () => boolean | Promise<boolean>;
|
|
260
265
|
onPlayBlocked?: () => void;
|
|
266
|
+
/**
|
|
267
|
+
* When set, automatically retries playback on transient media errors (e.g. network failures)
|
|
268
|
+
* using exponential backoff. Pass `true` for defaults or an object to configure.
|
|
269
|
+
*/
|
|
270
|
+
retryOnError?: boolean | GingerRetryConfig;
|
|
261
271
|
persistence?: GingerPersistenceAdapter;
|
|
262
272
|
hydrateOnMount?: boolean;
|
|
263
273
|
resumeOnTrackChange?: boolean;
|
|
@@ -293,11 +303,26 @@ export type GingerProviderProps = {
|
|
|
293
303
|
* instead of skipping to the prior one. Set to `0` to disable. Default: `3`.
|
|
294
304
|
*/
|
|
295
305
|
prevRestartThresholdSeconds?: number;
|
|
306
|
+
/** Human-readable label shown in the devtools tab when multiple providers exist. */
|
|
307
|
+
debugLabel?: string;
|
|
296
308
|
};
|
|
297
309
|
export type GingerPersistenceAdapter = {
|
|
298
310
|
get: (key: string) => unknown;
|
|
299
311
|
set: (key: string, value: unknown) => void;
|
|
300
312
|
};
|
|
313
|
+
export type GingerRetryConfig = {
|
|
314
|
+
/** Maximum number of retry attempts per track error. Default: 3. */
|
|
315
|
+
maxRetries?: number;
|
|
316
|
+
/** Initial delay in milliseconds before the first retry. Doubles on each subsequent attempt. Default: 1500. */
|
|
317
|
+
delayMs?: number;
|
|
318
|
+
/**
|
|
319
|
+
* Which error codes to retry. Default: `["MEDIA_ERR_NETWORK"]`.
|
|
320
|
+
* Non-retryable errors (e.g. `MEDIA_ERR_SRC_NOT_SUPPORTED`) skip immediately.
|
|
321
|
+
*/
|
|
322
|
+
retryableErrors?: string[];
|
|
323
|
+
/** When true, skip to next track on unrecoverable (non-retryable) errors instead of stopping. Default: false. */
|
|
324
|
+
skipOnUnrecoverable?: boolean;
|
|
325
|
+
};
|
|
301
326
|
export type DisplayBaseProps = {
|
|
302
327
|
className?: string;
|
|
303
328
|
style?: CSSProperties;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtD,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAC/C,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEjD,6EAA6E;AAC7E,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,YAAY,EAAE,MAAM,CAAC;IACrB,kFAAkF;IAClF,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACnC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CAC7C,CAAC;AAEF,8CAA8C;AAC9C,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,uFAAuF;AACvF,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG;IAClB,oEAAoE;IACpE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAC1B,wEAAwE;IACxE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;AAE5F,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const c=require("react"),s=require("./GingerSplitContexts-
|
|
2
|
-
//# sourceMappingURL=useGinger-
|
|
1
|
+
"use strict";const c=require("react"),s=require("./GingerSplitContexts-KSB0vQ5F.cjs"),r=require("./selectors-CEGlYoFu.cjs");function u(){const e=s.useGingerPlayback(),t=s.useGingerMedia();return c.useMemo(()=>{const a=s.gingerStateFromContextValues(e,t);return{state:a,currentTrack:r.getCurrentTrack(a),playbackUi:r.derivePlaybackUiState(a),duration:r.effectiveDuration(a),remaining:r.effectiveRemaining(a),progress:r.progressFraction(a),artworkUrl:r.resolvedArtwork(a),albumLine:r.resolvedAlbumLine(a),play:e.play,pause:e.pause,togglePlayPause:e.togglePlayPause,seek:t.seek,setVolume:t.setVolume,setMuted:t.setMuted,toggleMute:t.toggleMute,setPlaybackRate:t.setPlaybackRate,next:e.next,prev:e.prev,setRepeatMode:e.setRepeatMode,cycleRepeat:e.cycleRepeat,toggleShuffle:e.toggleShuffle,setQueue:e.setQueue,insertTrackAt:e.insertTrackAt,removeTrackAt:e.removeTrackAt,moveTrack:e.moveTrack,enqueueNext:e.enqueueNext,playTrackAt:e.playTrackAt,selectTrackAt:e.selectTrackAt,setPlaylistMeta:e.setPlaylistMeta,setPlaybackMode:e.setPlaybackMode,init:e.init,audioRef:t.audioRef,dispatch:e.dispatch}},[e,t])}exports.useGinger=u;
|
|
2
|
+
//# sourceMappingURL=useGinger-BMRLzjmr.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGinger-
|
|
1
|
+
{"version":3,"file":"useGinger-BMRLzjmr.cjs","sources":["../src/hooks/useGinger.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport {\n gingerStateFromContextValues,\n useGingerMedia,\n useGingerPlayback,\n} from \"../context/GingerSplitContexts\";\nimport {\n derivePlaybackUiState,\n effectiveDuration,\n effectiveRemaining,\n getCurrentTrack,\n progressFraction,\n resolvedAlbumLine,\n resolvedArtwork,\n} from \"../internal/selectors\";\n\nexport function useGinger() {\n const pb = useGingerPlayback();\n const md = useGingerMedia();\n\n return useMemo(() => {\n const state = gingerStateFromContextValues(pb, md);\n return {\n state,\n currentTrack: getCurrentTrack(state),\n playbackUi: derivePlaybackUiState(state),\n duration: effectiveDuration(state),\n remaining: effectiveRemaining(state),\n progress: progressFraction(state),\n artworkUrl: resolvedArtwork(state),\n albumLine: resolvedAlbumLine(state),\n play: pb.play,\n pause: pb.pause,\n togglePlayPause: pb.togglePlayPause,\n seek: md.seek,\n setVolume: md.setVolume,\n setMuted: md.setMuted,\n toggleMute: md.toggleMute,\n setPlaybackRate: md.setPlaybackRate,\n next: pb.next,\n prev: pb.prev,\n setRepeatMode: pb.setRepeatMode,\n cycleRepeat: pb.cycleRepeat,\n toggleShuffle: pb.toggleShuffle,\n setQueue: pb.setQueue,\n insertTrackAt: pb.insertTrackAt,\n removeTrackAt: pb.removeTrackAt,\n moveTrack: pb.moveTrack,\n enqueueNext: pb.enqueueNext,\n playTrackAt: pb.playTrackAt,\n selectTrackAt: pb.selectTrackAt,\n setPlaylistMeta: pb.setPlaylistMeta,\n setPlaybackMode: pb.setPlaybackMode,\n init: pb.init,\n audioRef: md.audioRef,\n dispatch: pb.dispatch,\n };\n }, [pb, md]);\n}\n"],"names":["useGinger","pb","useGingerPlayback","md","useGingerMedia","useMemo","state","gingerStateFromContextValues","getCurrentTrack","derivePlaybackUiState","effectiveDuration","effectiveRemaining","progressFraction","resolvedArtwork","resolvedAlbumLine"],"mappings":"4HAgBO,SAASA,GAAY,CAC1B,MAAMC,EAAKC,EAAAA,kBAAA,EACLC,EAAKC,EAAAA,eAAA,EAEX,OAAOC,EAAAA,QAAQ,IAAM,CACnB,MAAMC,EAAQC,EAAAA,6BAA6BN,EAAIE,CAAE,EACjD,MAAO,CACL,MAAAG,EACA,aAAcE,EAAAA,gBAAgBF,CAAK,EACnC,WAAYG,EAAAA,sBAAsBH,CAAK,EACvC,SAAUI,EAAAA,kBAAkBJ,CAAK,EACjC,UAAWK,EAAAA,mBAAmBL,CAAK,EACnC,SAAUM,EAAAA,iBAAiBN,CAAK,EAChC,WAAYO,EAAAA,gBAAgBP,CAAK,EACjC,UAAWQ,EAAAA,kBAAkBR,CAAK,EAClC,KAAML,EAAG,KACT,MAAOA,EAAG,MACV,gBAAiBA,EAAG,gBACpB,KAAME,EAAG,KACT,UAAWA,EAAG,UACd,SAAUA,EAAG,SACb,WAAYA,EAAG,WACf,gBAAiBA,EAAG,gBACpB,KAAMF,EAAG,KACT,KAAMA,EAAG,KACT,cAAeA,EAAG,cAClB,YAAaA,EAAG,YAChB,cAAeA,EAAG,cAClB,SAAUA,EAAG,SACb,cAAeA,EAAG,cAClB,cAAeA,EAAG,cAClB,UAAWA,EAAG,UACd,YAAaA,EAAG,YAChB,YAAaA,EAAG,YAChB,cAAeA,EAAG,cAClB,gBAAiBA,EAAG,gBACpB,gBAAiBA,EAAG,gBACpB,KAAMA,EAAG,KACT,SAAUE,EAAG,SACb,SAAUF,EAAG,QAAA,CAEjB,EAAG,CAACA,EAAIE,CAAE,CAAC,CACb"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useMemo as r } from "react";
|
|
2
|
-
import {
|
|
2
|
+
import { c as s, u as o, g as u } from "./GingerSplitContexts-DQ3rESBu.js";
|
|
3
3
|
import { r as l, a as c, p as i, e as n, b as g, d as k, g as p } from "./selectors-BT3WSsKN.js";
|
|
4
4
|
function f() {
|
|
5
5
|
const e = s(), t = o();
|
|
@@ -45,4 +45,4 @@ function f() {
|
|
|
45
45
|
export {
|
|
46
46
|
f as u
|
|
47
47
|
};
|
|
48
|
-
//# sourceMappingURL=useGinger-
|
|
48
|
+
//# sourceMappingURL=useGinger-DKrHZ4NU.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGinger-
|
|
1
|
+
{"version":3,"file":"useGinger-DKrHZ4NU.js","sources":["../src/hooks/useGinger.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport {\n gingerStateFromContextValues,\n useGingerMedia,\n useGingerPlayback,\n} from \"../context/GingerSplitContexts\";\nimport {\n derivePlaybackUiState,\n effectiveDuration,\n effectiveRemaining,\n getCurrentTrack,\n progressFraction,\n resolvedAlbumLine,\n resolvedArtwork,\n} from \"../internal/selectors\";\n\nexport function useGinger() {\n const pb = useGingerPlayback();\n const md = useGingerMedia();\n\n return useMemo(() => {\n const state = gingerStateFromContextValues(pb, md);\n return {\n state,\n currentTrack: getCurrentTrack(state),\n playbackUi: derivePlaybackUiState(state),\n duration: effectiveDuration(state),\n remaining: effectiveRemaining(state),\n progress: progressFraction(state),\n artworkUrl: resolvedArtwork(state),\n albumLine: resolvedAlbumLine(state),\n play: pb.play,\n pause: pb.pause,\n togglePlayPause: pb.togglePlayPause,\n seek: md.seek,\n setVolume: md.setVolume,\n setMuted: md.setMuted,\n toggleMute: md.toggleMute,\n setPlaybackRate: md.setPlaybackRate,\n next: pb.next,\n prev: pb.prev,\n setRepeatMode: pb.setRepeatMode,\n cycleRepeat: pb.cycleRepeat,\n toggleShuffle: pb.toggleShuffle,\n setQueue: pb.setQueue,\n insertTrackAt: pb.insertTrackAt,\n removeTrackAt: pb.removeTrackAt,\n moveTrack: pb.moveTrack,\n enqueueNext: pb.enqueueNext,\n playTrackAt: pb.playTrackAt,\n selectTrackAt: pb.selectTrackAt,\n setPlaylistMeta: pb.setPlaylistMeta,\n setPlaybackMode: pb.setPlaybackMode,\n init: pb.init,\n audioRef: md.audioRef,\n dispatch: pb.dispatch,\n };\n }, [pb, md]);\n}\n"],"names":["useGinger","pb","useGingerPlayback","md","useGingerMedia","useMemo","state","gingerStateFromContextValues","getCurrentTrack","derivePlaybackUiState","effectiveDuration","effectiveRemaining","progressFraction","resolvedArtwork","resolvedAlbumLine"],"mappings":";;;AAgBO,SAASA,IAAY;AAC1B,QAAMC,IAAKC,EAAA,GACLC,IAAKC,EAAA;AAEX,SAAOC,EAAQ,MAAM;AACnB,UAAMC,IAAQC,EAA6BN,GAAIE,CAAE;AACjD,WAAO;AAAA,MACL,OAAAG;AAAA,MACA,cAAcE,EAAgBF,CAAK;AAAA,MACnC,YAAYG,EAAsBH,CAAK;AAAA,MACvC,UAAUI,EAAkBJ,CAAK;AAAA,MACjC,WAAWK,EAAmBL,CAAK;AAAA,MACnC,UAAUM,EAAiBN,CAAK;AAAA,MAChC,YAAYO,EAAgBP,CAAK;AAAA,MACjC,WAAWQ,EAAkBR,CAAK;AAAA,MAClC,MAAML,EAAG;AAAA,MACT,OAAOA,EAAG;AAAA,MACV,iBAAiBA,EAAG;AAAA,MACpB,MAAME,EAAG;AAAA,MACT,WAAWA,EAAG;AAAA,MACd,UAAUA,EAAG;AAAA,MACb,YAAYA,EAAG;AAAA,MACf,iBAAiBA,EAAG;AAAA,MACpB,MAAMF,EAAG;AAAA,MACT,MAAMA,EAAG;AAAA,MACT,eAAeA,EAAG;AAAA,MAClB,aAAaA,EAAG;AAAA,MAChB,eAAeA,EAAG;AAAA,MAClB,UAAUA,EAAG;AAAA,MACb,eAAeA,EAAG;AAAA,MAClB,eAAeA,EAAG;AAAA,MAClB,WAAWA,EAAG;AAAA,MACd,aAAaA,EAAG;AAAA,MAChB,aAAaA,EAAG;AAAA,MAChB,eAAeA,EAAG;AAAA,MAClB,iBAAiBA,EAAG;AAAA,MACpB,iBAAiBA,EAAG;AAAA,MACpB,MAAMA,EAAG;AAAA,MACT,UAAUE,EAAG;AAAA,MACb,UAAUF,EAAG;AAAA,IAAA;AAAA,EAEjB,GAAG,CAACA,GAAIE,CAAE,CAAC;AACb;"}
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
import { useMemo as H, useState as P, useRef as h, useCallback as q, useLayoutEffect as Q, useEffect as E } from "react";
|
|
2
|
+
import { u as W } from "./useGinger-DKrHZ4NU.js";
|
|
3
|
+
import { a as Z, d as _ } from "./liveAudioGraph-DvPaxBCP.js";
|
|
4
|
+
import { c as C, u as B, d as $, g as ee } from "./GingerSplitContexts-DQ3rESBu.js";
|
|
5
|
+
import { p as te } from "./selectors-BT3WSsKN.js";
|
|
6
|
+
import { b as re } from "./transitions-CmNkf3sd.js";
|
|
7
|
+
import { m as ne, e as se, f as ae, n as ce } from "./ginger-BHu7Ofna.js";
|
|
8
|
+
const U = new Uint8Array(0), V = new Uint8Array(0);
|
|
9
|
+
function ge(s = {}) {
|
|
10
|
+
var S;
|
|
11
|
+
const {
|
|
12
|
+
enabled: e = !0,
|
|
13
|
+
fftSize: r = 2048,
|
|
14
|
+
smoothingTimeConstant: n = 0.8,
|
|
15
|
+
minDecibels: o = -100,
|
|
16
|
+
maxDecibels: c = -30
|
|
17
|
+
} = s, { audioRef: a, state: u } = W(), l = ((S = u.tracks[u.currentIndex]) == null ? void 0 : S.fileUrl) ?? "", i = H(
|
|
18
|
+
() => ({
|
|
19
|
+
fftSize: r,
|
|
20
|
+
smoothingTimeConstant: n,
|
|
21
|
+
minDecibels: o,
|
|
22
|
+
maxDecibels: c
|
|
23
|
+
}),
|
|
24
|
+
[r, n, o, c]
|
|
25
|
+
), [m, f] = P(0), [t, d] = P(null), [k, v] = P(!1), [x, w] = P({ frequencyBinCount: 0, sampleRate: 0 }), p = h(U), I = h(V), G = q(async () => {
|
|
26
|
+
const R = g.current;
|
|
27
|
+
R && R.state === "suspended" && await R.resume();
|
|
28
|
+
}, []), g = h(null), T = h(null);
|
|
29
|
+
return Q(() => {
|
|
30
|
+
if (!e || typeof window > "u")
|
|
31
|
+
return;
|
|
32
|
+
let R = !1, D = null, b = null, N = 0;
|
|
33
|
+
const K = () => {
|
|
34
|
+
const y = g.current;
|
|
35
|
+
y && v(y.state === "suspended");
|
|
36
|
+
};
|
|
37
|
+
let O = 0;
|
|
38
|
+
const j = 3, X = () => {
|
|
39
|
+
if (R) return;
|
|
40
|
+
const y = T.current, L = p.current, M = I.current;
|
|
41
|
+
y && L.length > 0 && M.length > 0 && (y.getByteFrequencyData(L), y.getByteTimeDomainData(M), O += 1, O % j === 0 && f((A) => A + 1)), N = requestAnimationFrame(X);
|
|
42
|
+
}, z = () => {
|
|
43
|
+
const y = a.current;
|
|
44
|
+
if (!y || R) return "no-element";
|
|
45
|
+
try {
|
|
46
|
+
const { id: L, context: M, analyser: A } = Z(y, i);
|
|
47
|
+
D = L, b = y, g.current = M, T.current = A, v(M.state === "suspended"), d(null), M.addEventListener("statechange", K);
|
|
48
|
+
const F = A.frequencyBinCount, J = A.fftSize;
|
|
49
|
+
return p.current = new Uint8Array(F), I.current = new Uint8Array(J), w({ frequencyBinCount: F, sampleRate: M.sampleRate }), N = requestAnimationFrame(X), "ok";
|
|
50
|
+
} catch (L) {
|
|
51
|
+
const M = L instanceof Error ? L.message : "Failed to attach live analyser";
|
|
52
|
+
return d(M), g.current = null, T.current = null, p.current = U, I.current = V, w({ frequencyBinCount: 0, sampleRate: 0 }), "error";
|
|
53
|
+
}
|
|
54
|
+
}, Y = z();
|
|
55
|
+
if (Y !== "ok") {
|
|
56
|
+
let y = 0;
|
|
57
|
+
const L = 120;
|
|
58
|
+
let M = 0;
|
|
59
|
+
const A = () => {
|
|
60
|
+
if (R) return;
|
|
61
|
+
const F = z();
|
|
62
|
+
F === "ok" || F === "error" || (M += 1, !(M >= L) && (y = requestAnimationFrame(A)));
|
|
63
|
+
};
|
|
64
|
+
return Y === "no-element" && (y = requestAnimationFrame(A)), () => {
|
|
65
|
+
var F;
|
|
66
|
+
R = !0, cancelAnimationFrame(y), cancelAnimationFrame(N), D != null && b && _(b, D), (F = g.current) == null || F.removeEventListener("statechange", K), g.current = null, T.current = null, p.current = U, I.current = V;
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
return () => {
|
|
70
|
+
var y;
|
|
71
|
+
R = !0, cancelAnimationFrame(N), D != null && b && _(b, D), (y = g.current) == null || y.removeEventListener("statechange", K), g.current = null, T.current = null, p.current = U, I.current = V, w({ frequencyBinCount: 0, sampleRate: 0 });
|
|
72
|
+
};
|
|
73
|
+
}, [e, a, i, l]), {
|
|
74
|
+
frequencyData: p.current,
|
|
75
|
+
timeDomainData: I.current,
|
|
76
|
+
frequencyBinCount: x.frequencyBinCount,
|
|
77
|
+
sampleRate: x.sampleRate,
|
|
78
|
+
isSuspended: k,
|
|
79
|
+
error: t,
|
|
80
|
+
resume: G,
|
|
81
|
+
frame: m
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
function ye(s = !0, e = {}) {
|
|
85
|
+
const { togglePlayPause: r, next: n, prev: o } = C(), { toggleMute: c, seek: a, currentTime: u, duration: l } = B(), i = h({ currentTime: 0, duration: 0 });
|
|
86
|
+
i.current = { currentTime: u, duration: l };
|
|
87
|
+
const {
|
|
88
|
+
mute: m,
|
|
89
|
+
seekForward: f,
|
|
90
|
+
seekBackward: t
|
|
91
|
+
} = e;
|
|
92
|
+
E(() => {
|
|
93
|
+
if (!s || typeof window > "u") return;
|
|
94
|
+
const d = (e.playPause ?? " ").toLowerCase(), k = (e.next ?? "ArrowRight").toLowerCase(), v = (e.previous ?? "ArrowLeft").toLowerCase(), x = m == null ? void 0 : m.toLowerCase(), w = f == null ? void 0 : f.toLowerCase(), p = t == null ? void 0 : t.toLowerCase(), I = e.seekSeconds ?? 5, G = (g) => {
|
|
95
|
+
const T = g.target;
|
|
96
|
+
if (T && (["INPUT", "TEXTAREA", "SELECT"].includes(T.tagName) || T.isContentEditable))
|
|
97
|
+
return;
|
|
98
|
+
const S = g.key.toLowerCase();
|
|
99
|
+
if (S === d)
|
|
100
|
+
g.preventDefault(), r();
|
|
101
|
+
else if (S === k)
|
|
102
|
+
g.preventDefault(), n();
|
|
103
|
+
else if (S === v)
|
|
104
|
+
g.preventDefault(), o();
|
|
105
|
+
else if (x && S === x)
|
|
106
|
+
g.preventDefault(), c();
|
|
107
|
+
else if (w && S === w) {
|
|
108
|
+
g.preventDefault();
|
|
109
|
+
const { currentTime: R, duration: D } = i.current, b = D > 0 ? D : Number.POSITIVE_INFINITY;
|
|
110
|
+
a(Math.min(b, R + I));
|
|
111
|
+
} else p && S === p && (g.preventDefault(), a(Math.max(0, i.current.currentTime - I)));
|
|
112
|
+
};
|
|
113
|
+
return window.addEventListener("keydown", G), () => window.removeEventListener("keydown", G);
|
|
114
|
+
}, [
|
|
115
|
+
e.next,
|
|
116
|
+
e.playPause,
|
|
117
|
+
e.previous,
|
|
118
|
+
e.seekSeconds,
|
|
119
|
+
s,
|
|
120
|
+
m,
|
|
121
|
+
n,
|
|
122
|
+
o,
|
|
123
|
+
a,
|
|
124
|
+
t,
|
|
125
|
+
f,
|
|
126
|
+
c,
|
|
127
|
+
r
|
|
128
|
+
]);
|
|
129
|
+
}
|
|
130
|
+
function he(s) {
|
|
131
|
+
const { durationMs: e, stopAfterTracks: r, respectPause: n = !0, enabled: o = !0, onFire: c } = s, { currentIndex: a, pause: u, isPaused: l } = C(), i = h(r ?? 0), m = h(a), f = h(e ?? 0), t = h(null);
|
|
132
|
+
E(() => {
|
|
133
|
+
i.current = r ?? 0;
|
|
134
|
+
}, [r]);
|
|
135
|
+
const d = h(e);
|
|
136
|
+
E(() => {
|
|
137
|
+
d.current !== e && (f.current = e ?? 0, d.current = e);
|
|
138
|
+
}, [e]), E(() => {
|
|
139
|
+
if (!o || !e || e <= 0) {
|
|
140
|
+
f.current = e ?? 0, t.current = null;
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
if (n && l) {
|
|
144
|
+
if (t.current !== null) {
|
|
145
|
+
const v = Date.now() - t.current;
|
|
146
|
+
f.current = Math.max(0, f.current - v), t.current = null;
|
|
147
|
+
}
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
t.current = Date.now();
|
|
151
|
+
const k = setTimeout(() => {
|
|
152
|
+
f.current = 0, t.current = null, u(), c == null || c();
|
|
153
|
+
}, f.current);
|
|
154
|
+
return () => {
|
|
155
|
+
if (clearTimeout(k), t.current !== null) {
|
|
156
|
+
const v = Date.now() - t.current;
|
|
157
|
+
f.current = Math.max(0, f.current - v), t.current = null;
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
}, [e, o, l, c, u, n]), E(() => {
|
|
161
|
+
if (!o || !r || r <= 0) return;
|
|
162
|
+
const k = m.current;
|
|
163
|
+
m.current = a, a !== k && (i.current -= 1, i.current <= 0 && (u(), c == null || c()));
|
|
164
|
+
}, [a, o, c, u, r]);
|
|
165
|
+
}
|
|
166
|
+
function ve(s = !1) {
|
|
167
|
+
const e = $(), r = h(e);
|
|
168
|
+
E(() => {
|
|
169
|
+
if (!s || typeof console > "u") return;
|
|
170
|
+
const n = r.current;
|
|
171
|
+
n !== e && console.debug("[ginger]", {
|
|
172
|
+
from: {
|
|
173
|
+
currentIndex: n.currentIndex,
|
|
174
|
+
isPaused: n.isPaused,
|
|
175
|
+
currentTime: n.currentTime,
|
|
176
|
+
repeatMode: n.repeatMode
|
|
177
|
+
},
|
|
178
|
+
to: {
|
|
179
|
+
currentIndex: e.currentIndex,
|
|
180
|
+
isPaused: e.isPaused,
|
|
181
|
+
currentTime: e.currentTime,
|
|
182
|
+
repeatMode: e.repeatMode
|
|
183
|
+
}
|
|
184
|
+
}), r.current = e;
|
|
185
|
+
}, [s, e]);
|
|
186
|
+
}
|
|
187
|
+
function oe(s) {
|
|
188
|
+
return Math.max(0, Math.min(1, s));
|
|
189
|
+
}
|
|
190
|
+
function xe(s) {
|
|
191
|
+
const e = B(), r = C(), { seek: n } = e, [o, c] = P(0), [a, u] = P(!1), l = h(null), i = te(ee(r, e)), m = a ? o : i;
|
|
192
|
+
E(() => () => {
|
|
193
|
+
const t = l.current;
|
|
194
|
+
if (t) {
|
|
195
|
+
t.target.removeEventListener("pointermove", t.onMove), t.target.removeEventListener("pointerup", t.onUp), t.target.removeEventListener("pointercancel", t.onUp);
|
|
196
|
+
try {
|
|
197
|
+
t.target.releasePointerCapture(t.pointerId);
|
|
198
|
+
} catch {
|
|
199
|
+
}
|
|
200
|
+
l.current = null;
|
|
201
|
+
}
|
|
202
|
+
}, []);
|
|
203
|
+
const f = q(
|
|
204
|
+
(t) => {
|
|
205
|
+
if (!(s > 0)) return;
|
|
206
|
+
const d = t.currentTarget, k = d.getBoundingClientRect(), v = (p) => {
|
|
207
|
+
const I = oe((p - k.left) / k.width);
|
|
208
|
+
c(I), n(I * s);
|
|
209
|
+
};
|
|
210
|
+
u(!0), d.setPointerCapture(t.pointerId), v(t.clientX);
|
|
211
|
+
const x = (p) => v(p.clientX), w = (p) => {
|
|
212
|
+
v(p.clientX), u(!1), d.releasePointerCapture(t.pointerId), d.removeEventListener("pointermove", x), d.removeEventListener("pointerup", w), d.removeEventListener("pointercancel", w), l.current = null;
|
|
213
|
+
};
|
|
214
|
+
l.current = { target: d, pointerId: t.pointerId, onMove: x, onUp: w }, d.addEventListener("pointermove", x), d.addEventListener("pointerup", w), d.addEventListener("pointercancel", w);
|
|
215
|
+
},
|
|
216
|
+
[s, n]
|
|
217
|
+
);
|
|
218
|
+
return { fraction: o, displayFraction: m, isDragging: a, onPointerDown: f };
|
|
219
|
+
}
|
|
220
|
+
function ke(s = {}) {
|
|
221
|
+
const { enabled: e = !0, crossOrigin: r } = s, { tracks: n, currentIndex: o, repeatMode: c, playbackMode: a } = C();
|
|
222
|
+
E(() => {
|
|
223
|
+
var m;
|
|
224
|
+
if (!e || typeof document > "u") return;
|
|
225
|
+
const u = re({ tracks: n, currentIndex: o, repeatMode: c, playbackMode: a });
|
|
226
|
+
if (u === o) return;
|
|
227
|
+
const l = ((m = n[u]) == null ? void 0 : m.fileUrl) ?? "";
|
|
228
|
+
if (!l) return;
|
|
229
|
+
const i = document.createElement("audio");
|
|
230
|
+
return i.preload = "auto", r && (i.crossOrigin = r), i.src = l, i.load(), () => {
|
|
231
|
+
i.removeAttribute("src"), i.load();
|
|
232
|
+
};
|
|
233
|
+
}, [e, r, n, o, c, a]);
|
|
234
|
+
}
|
|
235
|
+
function we(s = {}) {
|
|
236
|
+
let e = ne({
|
|
237
|
+
tracks: s.tracks ?? [],
|
|
238
|
+
currentIndex: s.currentIndex,
|
|
239
|
+
playlistMeta: s.playlistMeta,
|
|
240
|
+
isPaused: s.isPaused,
|
|
241
|
+
isShuffled: s.isShuffled,
|
|
242
|
+
repeatMode: s.repeatMode,
|
|
243
|
+
playbackMode: s.playbackMode,
|
|
244
|
+
volume: s.volume,
|
|
245
|
+
muted: s.muted,
|
|
246
|
+
playbackRate: s.playbackRate
|
|
247
|
+
});
|
|
248
|
+
const r = /* @__PURE__ */ new Set(), n = (a) => {
|
|
249
|
+
var l, i;
|
|
250
|
+
const u = ce(e, a);
|
|
251
|
+
if (u !== e) {
|
|
252
|
+
e = u;
|
|
253
|
+
for (const m of r)
|
|
254
|
+
try {
|
|
255
|
+
m(e);
|
|
256
|
+
} catch (f) {
|
|
257
|
+
typeof globalThis < "u" && ((i = (l = globalThis.process) == null ? void 0 : l.env) == null ? void 0 : i.NODE_ENV) !== "production" && console.error("[@lucaismyname/ginger] Store listener threw:", f);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
return {
|
|
262
|
+
getState: () => e,
|
|
263
|
+
dispatch: n,
|
|
264
|
+
subscribe: (a) => (r.add(a), () => r.delete(a)),
|
|
265
|
+
init: (a) => {
|
|
266
|
+
n({ type: "INIT", payload: a });
|
|
267
|
+
},
|
|
268
|
+
clampVolume: ae,
|
|
269
|
+
clampPlaybackRate: se
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
function Ie(s = {}) {
|
|
273
|
+
const { maxLength: e = 50 } = s, { tracks: r, currentIndex: n } = C(), [o, c] = P([]), a = h(null), u = h(r);
|
|
274
|
+
u.current = r, E(() => {
|
|
275
|
+
const i = r[n];
|
|
276
|
+
if (!i || a.current === n) return;
|
|
277
|
+
a.current = n;
|
|
278
|
+
const m = {
|
|
279
|
+
track: i,
|
|
280
|
+
index: n,
|
|
281
|
+
playedAt: Date.now()
|
|
282
|
+
};
|
|
283
|
+
c((f) => {
|
|
284
|
+
const t = [...f, m];
|
|
285
|
+
return t.length > e ? t.slice(t.length - e) : t;
|
|
286
|
+
});
|
|
287
|
+
}, [n, r, e]);
|
|
288
|
+
const l = q(() => c([]), []);
|
|
289
|
+
return { history: o, clearHistory: l };
|
|
290
|
+
}
|
|
291
|
+
function Me() {
|
|
292
|
+
const { setVolume: s, volume: e } = B(), [r, n] = P(!1), o = h(0), c = h(!1), a = q(() => {
|
|
293
|
+
cancelAnimationFrame(o.current), c.current = !0, n(!1);
|
|
294
|
+
}, []);
|
|
295
|
+
return { fadeVolumeTo: q(
|
|
296
|
+
({ targetVolume: l, durationMs: i, onComplete: m }) => {
|
|
297
|
+
cancelAnimationFrame(o.current), c.current = !1;
|
|
298
|
+
const f = (x) => Math.min(1, Math.max(0, x)), t = f(l), d = performance.now();
|
|
299
|
+
let k = e;
|
|
300
|
+
n(!0);
|
|
301
|
+
const v = (x) => {
|
|
302
|
+
if (c.current) return;
|
|
303
|
+
const w = x - d, p = Math.min(1, w / Math.max(1, i)), I = k + (t - k) * p;
|
|
304
|
+
s(f(I)), p < 1 ? o.current = requestAnimationFrame(v) : (n(!1), m == null || m());
|
|
305
|
+
};
|
|
306
|
+
o.current = requestAnimationFrame((x) => {
|
|
307
|
+
k = e, v(x);
|
|
308
|
+
});
|
|
309
|
+
},
|
|
310
|
+
[s, e]
|
|
311
|
+
), cancelFade: a, isFading: r };
|
|
312
|
+
}
|
|
313
|
+
function Re() {
|
|
314
|
+
const { tracks: s, currentIndex: e } = C(), { currentTime: r, duration: n } = B(), o = H(() => {
|
|
315
|
+
var a;
|
|
316
|
+
return [...((a = s[e]) == null ? void 0 : a.chapters) ?? []].filter((u) => u && Number.isFinite(u.startSeconds) && u.startSeconds >= 0).sort((u, l) => u.startSeconds - l.startSeconds);
|
|
317
|
+
}, [s, e]);
|
|
318
|
+
return H(() => {
|
|
319
|
+
if (o.length === 0) return { progress: 0, elapsed: 0, remaining: 0 };
|
|
320
|
+
let c = -1;
|
|
321
|
+
for (let d = o.length - 1; d >= 0; d--)
|
|
322
|
+
if (r >= o[d].startSeconds) {
|
|
323
|
+
c = d;
|
|
324
|
+
break;
|
|
325
|
+
}
|
|
326
|
+
if (c === -1) return { progress: 0, elapsed: 0, remaining: 0 };
|
|
327
|
+
const a = o[c], u = o[c + 1], l = (u == null ? void 0 : u.startSeconds) ?? (n > 0 ? n : r), i = Math.max(0, l - a.startSeconds), m = Math.max(0, r - a.startSeconds), f = Math.max(0, l - r);
|
|
328
|
+
return { progress: i > 0 ? Math.min(1, m / i) : 0, elapsed: m, remaining: f };
|
|
329
|
+
}, [o, r, n]);
|
|
330
|
+
}
|
|
331
|
+
export {
|
|
332
|
+
ve as a,
|
|
333
|
+
ye as b,
|
|
334
|
+
we as c,
|
|
335
|
+
ge as d,
|
|
336
|
+
Ie as e,
|
|
337
|
+
he as f,
|
|
338
|
+
Me as g,
|
|
339
|
+
ke as h,
|
|
340
|
+
xe as i,
|
|
341
|
+
Re as u
|
|
342
|
+
};
|
|
343
|
+
//# sourceMappingURL=useGingerChapterProgress-DAIWjAtG.js.map
|