@lucaismyname/ginger 0.0.41 → 0.0.43
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 +7 -1
- package/dist/client.cjs +1 -1
- package/dist/client.js +4 -4
- package/dist/crossfade/crossfadeGraph.d.ts +47 -0
- package/dist/crossfade/crossfadeGraph.d.ts.map +1 -0
- package/dist/crossfade/index.cjs +2 -0
- package/dist/crossfade/index.cjs.map +1 -0
- package/dist/crossfade/index.d.ts +5 -0
- package/dist/crossfade/index.d.ts.map +1 -0
- package/dist/crossfade/index.js +124 -0
- package/dist/crossfade/index.js.map +1 -0
- package/dist/crossfade/useGingerCrossfade.d.ts +66 -0
- package/dist/crossfade/useGingerCrossfade.d.ts.map +1 -0
- package/dist/equalizer/index.cjs +1 -1
- package/dist/equalizer/index.js +1 -1
- package/dist/{ginger-CgHqHrrG.js → ginger-B2DgE-2a.js} +5 -4
- package/dist/{ginger-CgHqHrrG.js.map → ginger-B2DgE-2a.js.map} +1 -1
- package/dist/ginger-Dv3iO_xQ.cjs +2 -0
- package/dist/{ginger-DFdZGaMi.cjs.map → ginger-Dv3iO_xQ.cjs.map} +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +4 -4
- package/dist/remote/index.cjs +1 -1
- package/dist/remote/index.js +1 -1
- package/dist/selectors-BT3WSsKN.js +42 -0
- package/dist/selectors-BT3WSsKN.js.map +1 -0
- package/dist/selectors-CEGlYoFu.cjs +2 -0
- package/dist/selectors-CEGlYoFu.cjs.map +1 -0
- package/dist/spatial/index.cjs +1 -1
- package/dist/spatial/index.js +1 -1
- package/dist/testing/index.cjs +1 -1
- package/dist/testing/index.js +1 -1
- package/dist/transitions-CmNkf3sd.js +90 -0
- package/dist/transitions-CmNkf3sd.js.map +1 -0
- package/dist/transitions-Dx08t68T.cjs +2 -0
- package/dist/transitions-Dx08t68T.cjs.map +1 -0
- package/dist/{useGinger-BXgia32v.cjs → useGinger-4uvPoChz.cjs} +2 -2
- package/dist/{useGinger-BXgia32v.cjs.map → useGinger-4uvPoChz.cjs.map} +1 -1
- package/dist/{useGinger-hpp2pAGY.js → useGinger-Dz0cPyD1.js} +2 -2
- package/dist/{useGinger-hpp2pAGY.js.map → useGinger-Dz0cPyD1.js.map} +1 -1
- package/dist/useGingerChapterProgress-D2pdmyjg.cjs +2 -0
- package/dist/{useGingerChapterProgress-COLWYX2-.cjs.map → useGingerChapterProgress-D2pdmyjg.cjs.map} +1 -1
- package/dist/{useGingerChapterProgress-Jj_zfnds.js → useGingerChapterProgress-wxAmN_uo.js} +25 -24
- package/dist/{useGingerChapterProgress-Jj_zfnds.js.map → useGingerChapterProgress-wxAmN_uo.js.map} +1 -1
- package/package.json +6 -1
- package/dist/ginger-DFdZGaMi.cjs +0 -2
- package/dist/selectors-BalBCc7X.js +0 -127
- package/dist/selectors-BalBCc7X.js.map +0 -1
- package/dist/selectors-YXnP8Y8g.cjs +0 -2
- package/dist/selectors-YXnP8Y8g.cjs.map +0 -1
- package/dist/useGingerChapterProgress-COLWYX2-.cjs +0 -2
package/dist/ginger-DFdZGaMi.cjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";const o=require("react/jsx-runtime"),l=require("react"),b=require("./GingerSplitContexts-C7puo0M7.cjs"),h=require("./selectors-YXnP8Y8g.cjs"),er=l.createContext(null);function Yr(){const e=l.useContext(er);if(!e)throw new Error("Ginger components must be used within <Ginger.Provider>");return e}function Je(e){const{buffered:r,duration:n}=e;return!(n>0)||r.length===0?0:Math.min(1,r.end(r.length-1)/n)}function Qr({className:e,style:r,preload:n="metadata",crossOrigin:i,respectReducedMotion:t=!1}){var M;const{audioRef:a,dispatch:s,state:c,notifyEnded:d}=Yr(),g=((M=c.tracks[c.currentIndex])==null?void 0:M.fileUrl)??"",y=l.useRef({currentTime:-1,duration:-1,bufferedFraction:-1}),x=l.useRef(""),[T,f]=l.useState(!1);l.useEffect(()=>{if(!t||typeof window>"u")return;const m=window.matchMedia("(prefers-reduced-motion: reduce)"),P=()=>f(m.matches);return P(),m.addEventListener("change",P),()=>m.removeEventListener("change",P)},[t]);const k=(m,P=!1)=>{const S={currentTime:m.currentTime,duration:m.duration,bufferedFraction:Je(m)},j=y.current,W=T?.5:.25,X=Math.abs(S.currentTime-j.currentTime)>=W||Math.abs(S.duration-j.duration)>=.01||Math.abs(S.bufferedFraction-j.bufferedFraction)>=.01;!P&&!X||(y.current=S,s({type:"MEDIA_TIME_UPDATE",payload:S}))};return l.useEffect(()=>{const m=a.current;m&&(m.volume=c.volume,m.muted=c.muted)},[a,c.volume,c.muted]),l.useEffect(()=>{const m=a.current;if(m){if(!g){m.removeAttribute("src"),y.current={currentTime:-1,duration:-1,bufferedFraction:-1},x.current!==""&&s({type:"MEDIA_SOURCE_CLEARED"}),x.current="";return}m.getAttribute("src")!==g&&(m.src=g,m.load(),y.current={currentTime:-1,duration:-1,bufferedFraction:-1}),x.current=g}},[a,s,c.currentIndex,c.tracks,g]),l.useEffect(()=>{const m=a.current;m&&(m.playbackRate=c.playbackRate)},[a,c.playbackRate,g]),o.jsx("audio",{"data-ginger-component":"Player",ref:a,className:e,style:r,preload:n,crossOrigin:i,controls:!1,playsInline:!0,onTimeUpdate:m=>{k(m.currentTarget)},onLoadedMetadata:m=>{const P=m.currentTarget;y.current={currentTime:-1,duration:-1,bufferedFraction:-1},s({type:"MEDIA_LOADED_METADATA",payload:{duration:P.duration,bufferedFraction:Je(P)}})},onSeeking:m=>k(m.currentTarget,!0),onSeeked:m=>k(m.currentTarget,!0),onEnded:()=>d(),onPlay:()=>s({type:"MEDIA_PLAY"}),onPause:()=>s({type:"MEDIA_PAUSE"}),onWaiting:()=>s({type:"MEDIA_WAITING"}),onCanPlay:()=>s({type:"MEDIA_CANPLAY"}),onProgress:m=>k(m.currentTarget,!0),onVolumeChange:m=>{const P=m.currentTarget;s({type:"MEDIA_VOLUME_SYNC",payload:{volume:P.volume,muted:P.muted}})},onError:()=>{var j;const m=a.current,P=(j=m==null?void 0:m.error)==null?void 0:j.code;s({type:"MEDIA_ERROR",payload:{message:P===1?"MEDIA_ERR_ABORTED":P===2?"MEDIA_ERR_NETWORK":P===3?"MEDIA_ERR_DECODE":P===4?"MEDIA_ERR_SRC_NOT_SUPPORTED":"MEDIA_ERR_UNKNOWN"}})}})}const Y={seek:"Seek",volume:"Volume",playbackSpeed:"Playback speed",chaptersList:"Chapters",syncedLyricsList:"Synced lyrics",nextTrack:"Next track",previousTrack:"Previous track",shuffle:"Shuffle",mute:"Mute",unmute:"Unmute",play:"Play",pause:"Pause",repeat:{off:"Repeat off",all:"Repeat all",one:"Repeat one"},playbackRateNormal:"1× normal",playbackRateTimes:e=>`${e}×`};function zr(e){return e?{...Y,...e,repeat:{...Y.repeat,...e.repeat}}:Y}const rr=l.createContext(Y);function Wr({locale:e,children:r}){const n=zr(e);return o.jsx(rr.Provider,{value:n,children:r})}function R(){return l.useContext(rr)}function Q(e){if(!Number.isFinite(e)||e<0)return"0:00";const r=Math.floor(e%60);return`${Math.floor(e/60)}:${r.toString().padStart(2,"0")}`}function tr(){const e=b.useGingerPlayback(),r=b.useGingerMedia(),n=R(),i=l.useMemo(()=>b.gingerStateFromContextValues(e,r),[e,r]),t=h.effectiveDuration(i),a=t>0?i.currentTime:0,s=Number.isFinite(a)?a:0,c=t>0?`${Q(s)} of ${Q(t)}`:Q(s),d=g=>{r.seek(Number(g.currentTarget.value))};return{state:i,value:s,min:0,max:t>0?t:1,step:"any",ariaValueText:c,ariaLabel:n.seek,onSeekInput:d,onSeekChange:d}}function nr(){const e=b.useGingerPlayback(),r=b.useGingerMedia(),n=R(),i=l.useMemo(()=>b.gingerStateFromContextValues(e,r),[e,r]),t=a=>{r.setVolume(Number(a.currentTarget.value))};return{state:i,value:i.volume,min:0,max:1,step:"any",ariaValueText:`${Math.round(i.volume*100)}%`,ariaLabel:n.volume,onVolumeInput:t,onVolumeChange:t}}function ar(e){const r=b.useGingerPlayback(),n=R(),i=(e==null?void 0:e.playAriaLabel)??n.play,t=(e==null?void 0:e.pauseAriaLabel)??n.pause;return{isPaused:r.isPaused,toggle:r.togglePlayPause,ariaLabel:r.isPaused?i:t}}function G(e){const{className:r,width:n,height:i,viewBox:t,fill:a,stroke:s,strokeWidth:c,strokeLinecap:d,strokeLinejoin:g,children:y,...x}=e;return o.jsx("svg",{"data-ginger-component":"Wrapper",xmlns:"http://www.w3.org/2000/svg",width:n??24,height:i??24,viewBox:t??"0 0 24 24",fill:"none",stroke:s??"currentColor",strokeWidth:c??2,strokeLinecap:d??"round",strokeLinejoin:g??"round",className:r,"aria-hidden":!0,role:"presentation",...x,children:y})}function Le(){return o.jsx(G,{children:o.jsx("path",{"data-ginger-component":"Pause",d:"M6 4h4v16H6zM14 4h4v16h-4z"})})}function Ne(){return o.jsx(G,{children:o.jsx("path",{"data-ginger-component":"Play",d:"M5 3L19 12 5 21 5 3z"})})}function Ce(){return o.jsxs(o.Fragment,{children:[o.jsx("path",{d:"m17 2 4 4-4 4"}),o.jsx("path",{d:"M3 11v-1a4 4 0 0 1 4-4h14"}),o.jsx("path",{d:"m7 22-4-4 4-4"}),o.jsx("path",{d:"M21 13v1a4 4 0 0 1-4 4H3"})]})}function _e({mode:e}){return e==="one"?o.jsxs(G,{children:[o.jsx(Ce,{}),o.jsx("path",{"data-ginger-component":"RepeatGlyph",d:"M11 10h1v4"})]}):e==="all"?o.jsx(G,{children:o.jsx(Ce,{})}):o.jsxs(G,{children:[o.jsx(Ce,{}),o.jsx("line",{"data-ginger-component":"RepeatGlyph",x1:"3",x2:"21",y1:"3",y2:"21"})]})}function De(){return o.jsxs(G,{children:[o.jsx("path",{d:"m18 14 4 4-4 4"}),o.jsx("path",{d:"m18 2 4 4-4 4"}),o.jsx("path",{"data-ginger-component":"ShuffleIcon",d:"M2 18h1.973a4 4 0 0 0 3.3-1.7l5.454-8.6a4 4 0 0 1 3.3-1.7H22"}),o.jsx("path",{d:"M2 6h1.972a4 4 0 0 1 3.6 2.2"}),o.jsx("path",{d:"M22 18h-6.041a4 4 0 0 1-3.3-1.8l-.359-.45"})]})}function Fe(){return o.jsxs(G,{children:[o.jsx("path",{"data-ginger-component":"SkipBack",d:"M17.971 4.285A2 2 0 0 1 21 6v12a2 2 0 0 1-3.029 1.715l-9.997-5.998a2 2 0 0 1-.003-3.432z"}),o.jsx("path",{d:"M3 20V4"})]})}function Ue(){return o.jsxs(G,{children:[o.jsx("path",{d:"M21 4v16"}),o.jsx("path",{"data-ginger-component":"SkipForward",d:"M6.029 4.285A2 2 0 0 0 3 6v12a2 2 0 0 0 3.029 1.715l9.997-5.998a2 2 0 0 0 .003-3.432z"})]})}function Be(){return o.jsxs(G,{children:[o.jsx("path",{"data-ginger-component":"Volume2",d:"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z"}),o.jsx("path",{d:"M16 9a5 5 0 0 1 0 6"}),o.jsx("path",{d:"M19.364 18.364a9 9 0 0 0 0-12.728"})]})}function Ve(){return o.jsxs(G,{children:[o.jsx("path",{"data-ginger-component":"VolumeX",d:"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z"}),o.jsx("line",{x1:"22",x2:"16",y1:"9",y2:"15"}),o.jsx("line",{x1:"16",x2:"22",y1:"9",y2:"15"})]})}function ir({playLabel:e="Play",pauseLabel:r="Pause",playAriaLabel:n,pauseAriaLabel:i,children:t,type:a="button",onClick:s,...c}){const d=R(),g=typeof e=="string"?e:d.play,y=typeof r=="string"?r:d.pause,x=ar({playAriaLabel:n??g,pauseAriaLabel:i??y});return o.jsx("button",{"data-ginger-component":"PlayPause",...c,type:a,"aria-label":x.ariaLabel,onClick:T=>{x.toggle(),s==null||s(T)},children:t??(x.isPaused?o.jsx(Ne,{}):o.jsx(Le,{}))})}ir.displayName="Ginger.Control.PlayPause";function or({type:e="button",ariaLabel:r,onClick:n,children:i,...t}){const{repeatMode:a,cycleRepeat:s}=b.useGingerPlayback(),d=R().repeat[a];return o.jsx("button",{"data-ginger-component":"Repeat",...t,type:e,"aria-label":r??d,onClick:g=>{s(),n==null||n(g)},children:i??o.jsx(_e,{mode:a})})}or.displayName="Ginger.Control.Repeat";function sr({type:e="button",children:r,ariaLabel:n,onClick:i,...t}){const{next:a}=b.useGingerPlayback(),s=R();return o.jsx("button",{"data-ginger-component":"Next",...t,type:e,"aria-label":n??s.nextTrack,onClick:c=>{a(),i==null||i(c)},children:r??o.jsx(Ue,{})})}sr.displayName="Ginger.Control.Next";function cr({type:e="button",children:r,ariaLabel:n,onClick:i,...t}){const{prev:a}=b.useGingerPlayback(),s=R();return o.jsx("button",{"data-ginger-component":"Previous",...t,type:e,"aria-label":n??s.previousTrack,onClick:c=>{a(),i==null||i(c)},children:r??o.jsx(Fe,{})})}cr.displayName="Ginger.Control.Previous";function ur({type:e="button",children:r,ariaLabel:n,onClick:i,...t}){const{isShuffled:a,toggleShuffle:s}=b.useGingerPlayback(),c=R();return o.jsx("button",{"data-ginger-component":"Shuffle",...t,type:e,"aria-pressed":a,"aria-label":n??c.shuffle,onClick:d=>{s(),i==null||i(d)},children:r??o.jsx(De,{})})}ur.displayName="Ginger.Control.Shuffle";function lr({inputStyle:e,style:r,unstyled:n=!1,ariaLabel:i,...t}){const a=tr(),s=n?{...r,...e}:{width:"100%",...r,...e};return o.jsx("input",{"data-ginger-component":"SeekBar",...t,type:"range",min:a.min,max:a.max,step:a.step,value:a.value,"aria-label":i??a.ariaLabel,"aria-valuetext":a.ariaValueText,onInput:a.onSeekInput,onChange:a.onSeekChange,style:s})}lr.displayName="Ginger.Control.SeekBar";function dr({inputStyle:e,style:r,unstyled:n=!1,ariaLabel:i,...t}){const a=nr(),s=n?{...r,...e}:{width:"100%",...r,...e};return o.jsx("input",{"data-ginger-component":"Volume",...t,type:"range",min:a.min,max:a.max,step:a.step,value:a.value,"aria-label":i??a.ariaLabel,"aria-valuetext":a.ariaValueText,onInput:a.onVolumeInput,onChange:a.onVolumeChange,style:s})}dr.displayName="Ginger.Control.Volume";function gr({ariaLabel:e,muteLabel:r,unmuteLabel:n,type:i="button",onClick:t,children:a,...s}){const{muted:c,toggleMute:d}=b.useGingerMedia(),g=R();return o.jsx("button",{"data-ginger-component":"Mute",...s,type:i,"aria-pressed":c,"aria-label":e??(c?g.unmute:g.mute),onClick:y=>{d(),t==null||t(y)},children:a??(c?n??o.jsx(Ve,{}):r??o.jsx(Be,{}))})}gr.displayName="Ginger.Control.Mute";const Xr=[.5,.75,1,1.25,1.5,2];function pr({rates:e=Xr,style:r,ariaLabel:n,children:i,...t}){const{playbackRate:a,setPlaybackRate:s}=b.useGingerMedia(),c=R(),d=l.useMemo(()=>Array.from(new Set([...e,a])).sort((g,y)=>g-y),[e,a]);return o.jsx("select",{"data-ginger-component":"PlaybackRate",...t,"aria-label":n??c.playbackSpeed,value:String(a),style:r,onChange:g=>s(Number(g.currentTarget.value)),children:i??d.map(g=>o.jsx("option",{value:String(g),children:g===1?c.playbackRateNormal:c.playbackRateTimes(g)},g))})}pr.displayName="Ginger.Control.PlaybackRate";function B(e,r){function n(i){const t=b.useGingerState(),s=(r(t)??"").trim(),{className:c,style:d,fallback:g,empty:y,children:x}=i;if(!s){const T=y??g??null;return T?o.jsx("span",{className:c,style:d,children:T}):null}return x?o.jsx("span",{className:c,style:d,children:x(s,t)}):o.jsx("span",{className:c,style:d,children:s})}return n.displayName=e,n}function V(e,r){return B(e,n=>r(h.getCurrentTrack(n)))}const Kr=V("Ginger.Current.Title",e=>e==null?void 0:e.title),qr=V("Ginger.Current.Artist",e=>e==null?void 0:e.artist),Jr=B("Ginger.Current.Album",e=>h.resolvedAlbumLine(e)),Zr=V("Ginger.Current.Description",e=>e==null?void 0:e.description),et=B("Ginger.Current.Copyright",e=>{var n;const r=h.getCurrentTrack(e);return(r==null?void 0:r.copyright)??((n=e.playlistMeta)==null?void 0:n.copyright)}),rt=V("Ginger.Current.Genre",e=>e==null?void 0:e.genre),tt=V("Ginger.Current.Label",e=>e==null?void 0:e.label),nt=V("Ginger.Current.Isrc",e=>e==null?void 0:e.isrc),at=V("Ginger.Current.TrackNumber",e=>(e==null?void 0:e.trackNumber)!=null?String(e.trackNumber):void 0);function fr({className:e,style:r,fallback:n,empty:i,children:t,format:a}){var g;const s=b.useGingerState(),c=(g=h.getCurrentTrack(s))==null?void 0:g.year;if(typeof c!="number"||!Number.isFinite(c)){const y=i??n??null;return y?o.jsx("span",{"data-ginger-component":"Year",className:e,style:r,children:y}):null}const d=a?a(c):String(c);return t?o.jsx("span",{"data-ginger-component":"Year",className:e,style:r,children:t(d,s)}):o.jsx("span",{"data-ginger-component":"Year",className:e,style:r,children:d})}fr.displayName="Ginger.Current.Year";function mr({className:e,style:r,fallback:n,empty:i,children:t,preserveWhitespace:a=!0,unstyled:s=!1}){var x;const c=b.useGingerState(),d=((x=h.getCurrentTrack(c))==null?void 0:x.lyrics)??"",g=a?d.replace(/^\s+|\s+$/g,""):d.trim();if(!g){const T=i??n??null;return T?o.jsx("span",{"data-ginger-component":"Lyrics",className:e,style:r,children:T}):null}const y=!s&&a?{whiteSpace:"pre-wrap"}:void 0;return t?o.jsx("span",{className:e,style:{...y,...r},children:t(g,c)}):o.jsx("span",{className:e,style:{...y,...r},children:g})}mr.displayName="Ginger.Current.Lyrics";const Ze=/\[(\d{1,2}):(\d{2})(?:\.(\d{1,3}))?\]/g;function yr(e){const r=[];for(const n of e.split(/\r?\n/)){const i=[...n.matchAll(Ze)];if(i.length===0)continue;const t=n.replace(Ze,"").trim();for(const a of i){const s=Number(a[1]??0),c=Number(a[2]??0),d=Number((a[3]??"0").padEnd(3,"0")),g=s*60+c+d/1e3;Number.isFinite(g)&&g>=0&&r.push({time:g,text:t})}}return r.sort((n,i)=>n.time-i.time)}function xr(){const{tracks:e,currentIndex:r}=b.useGingerPlayback(),{currentTime:n}=b.useGingerMedia(),i=e[r],t=l.useMemo(()=>i?Array.isArray(i.lyricsTimed)&&i.lyricsTimed.length>0?[...i.lyricsTimed].filter(s=>Number.isFinite(s.time)&&s.time>=0).sort((s,c)=>s.time-c.time):typeof i.lyrics=="string"?yr(i.lyrics):[]:[],[i]),a=l.useMemo(()=>{for(let s=t.length-1;s>=0;s-=1)if(n>=t[s].time)return s;return-1},[n,t]);return{lines:t,activeIndex:a,activeLine:a>=0?t[a]??null:null}}function Oe({className:e,style:r,fallback:n,empty:i,unstyled:t=!1,activeClassName:a,lineClassName:s,children:c}){const d=b.useGingerState(),g=R(),{lines:y,activeIndex:x}=xr();if(y.length===0){const f=i??n??null;return f?o.jsx("span",{"data-ginger-component":"LyricsSynced",className:e,style:r,children:f}):null}const T=t?{}:{listStyle:"none",margin:0,padding:0,fontFamily:"var(--ginger-font-family, system-ui, sans-serif)",fontSize:"var(--ginger-font-size, 14px)",color:"var(--ginger-primary-color, #111827)"};return o.jsx("ul",{className:e,style:{...T,...r},"aria-label":g.syncedLyricsList,children:y.map((f,k)=>{const M=k===x;return o.jsx("li",{"aria-current":M?"true":void 0,"data-ginger-active":M||void 0,className:[s,M?a:void 0].filter(Boolean).join(" ")||void 0,style:t?void 0:{padding:"var(--ginger-playlist-row-padding, 4px 8px)",fontWeight:M?600:400,opacity:M?1:.75},children:c?c(f,k,M,d):f.text},`${f.time}-${k}`)})})}Oe.displayName="Ginger.Current.LyricsSynced";function hr(){const{tracks:e,currentIndex:r}=b.useGingerPlayback(),{currentTime:n,seek:i}=b.useGingerMedia(),t=l.useMemo(()=>{var c;return[...((c=e[r])==null?void 0:c.chapters)??[]].filter(d=>d&&Number.isFinite(d.startSeconds)&&d.startSeconds>=0).sort((d,g)=>d.startSeconds-g.startSeconds)},[r,e]),a=l.useMemo(()=>{if(t.length===0)return-1;for(let s=t.length-1;s>=0;s-=1)if(n>=t[s].startSeconds)return s;return-1},[n,t]);return{list:t,activeIndex:a,active:a>=0?t[a]??null:null,seekTo:s=>{const c=t[s];c&&i(c.startSeconds)}}}function $e({className:e,style:r,fallback:n,empty:i,unstyled:t=!1,formatStart:a=Q,children:s}){const c=b.useGingerState(),d=R(),{list:g,activeIndex:y,seekTo:x}=hr();if(g.length===0){const f=i??n??null;return f?o.jsx("span",{"data-ginger-component":"Chapters",className:e,style:r,children:f}):null}const T=t?{}:{listStyle:"none",margin:0,padding:0,fontFamily:"var(--ginger-font-family, system-ui, sans-serif)",fontSize:"var(--ginger-font-size, 14px)",color:"var(--ginger-primary-color, #111827)"};return o.jsx("ul",{className:e,style:{...T,...r},"aria-label":d.chaptersList,children:g.map((f,k)=>{const M=k===y;return o.jsx("li",{children:o.jsx("button",{type:"button","aria-current":M?"true":void 0,"data-ginger-active":M||void 0,onClick:()=>x(k),style:{width:t?void 0:"100%",textAlign:t?void 0:"left",border:t?void 0:"none",background:t?void 0:M?"var(--ginger-playlist-active-bg, rgba(17, 24, 39, 0.06))":"transparent",color:t?void 0:"inherit",font:t?void 0:"inherit",cursor:t?void 0:"pointer",padding:t?void 0:"var(--ginger-playlist-row-padding, 6px 8px)"},children:s?s(f,k,M,c):t?o.jsxs(o.Fragment,{children:[a(f.startSeconds)," ",f.title]}):o.jsxs("span",{children:[o.jsx("span",{style:{opacity:.75,marginRight:"0.35em"},children:a(f.startSeconds)}),f.title]})})},`${f.startSeconds}-${f.title}`)})})}$e.displayName="Ginger.Current.Chapters";function kr({visible:e=!1,className:r,style:n,fallback:i,empty:t,children:a}){var d;const s=b.useGingerState();if(!e)return null;const c=((d=h.getCurrentTrack(s))==null?void 0:d.fileUrl)??"";if(!c){const g=t??i??null;return g?o.jsx("span",{className:r,style:n,children:g}):null}return a?o.jsx("span",{"data-ginger-component":"FileUrl",className:r,style:n,children:a(c,s)}):o.jsx("span",{className:r,style:n,children:c})}kr.displayName="Ginger.Current.FileUrl";function br({className:e,style:r,fallback:n,empty:i,sizes:t,loading:a,onError:s,decoding:c,unstyled:d=!1,imgStyle:g}){const y=b.useGingerState(),x=h.getCurrentTrack(y),T=h.resolvedArtwork(y);if(!T){const k=i??n??null;return k?o.jsx("span",{className:e,style:r,children:k}):null}const f=[x==null?void 0:x.title,x==null?void 0:x.artist].filter(Boolean).join(" — ")||"Artwork";return o.jsx("div",{"data-ginger-component":"Artwork",className:e,style:d?{...r}:{background:"var(--ginger-artwork-bg, transparent)",borderRadius:"var(--ginger-artwork-radius, 0)",overflow:"hidden",...r},children:o.jsx("img",{src:T,alt:f,sizes:t,loading:a,decoding:c,onError:s,style:{display:d?void 0:"block",width:d?void 0:"100%",height:d?void 0:"100%",objectFit:d?void 0:"cover",...g}})})}br.displayName="Ginger.Current.Artwork";function vr({base:e=0,className:r,style:n,fallback:i,empty:t,children:a}){const s=b.useGingerState();if(s.tracks.length===0){const g=t??i??null;return g?o.jsx("span",{"data-ginger-component":"QueueIndex",className:r,style:n,children:g}):null}const d=String(s.currentIndex+e);return a?o.jsx("span",{"data-ginger-component":"QueueIndex",className:r,style:n,children:a(d,s)}):o.jsx("span",{"data-ginger-component":"QueueIndex",className:r,style:n,children:d})}vr.displayName="Ginger.Current.QueueIndex";function Tr({className:e,style:r,fallback:n,empty:i,children:t}){const a=b.useGingerState(),s=String(a.tracks.length);if(a.tracks.length===0){const c=i??n??null;return c?o.jsx("span",{className:e,style:r,children:c}):null}return t?o.jsx("span",{"data-ginger-component":"QueueLength",className:e,style:r,children:t(s,a)}):o.jsx("span",{"data-ginger-component":"QueueLength",className:e,style:r,children:s})}Tr.displayName="Ginger.Current.QueueLength";function Mr({base:e=0,separator:r=" / ",className:n,style:i,fallback:t,empty:a,children:s}){const c=b.useGingerState(),d=c.tracks.length;if(d===0){const T=a??t??null;return T?o.jsx("span",{className:n,style:i,children:T}):null}const g=String(c.currentIndex+e),y=String(d),x=`${g}${r}${y}`;return s?o.jsx("span",{"data-ginger-component":"QueuePosition",className:n,style:i,children:s({index:g,length:y,label:x},c)}):o.jsx("span",{"data-ginger-component":"QueuePosition",className:n,style:i,children:x})}Mr.displayName="Ginger.Current.QueuePosition";function He(e,r,n){const{className:i,style:t,fallback:a,empty:s,children:c,format:d=Q}=n;if(!(e>=0)||!Number.isFinite(e)){const y=s??a??null;return y?o.jsx("span",{"data-ginger-component":"TimeText",className:i,style:t,children:y}):null}const g=d(e);return c?o.jsx("span",{"data-ginger-component":"TimeText",className:i,style:t,children:c(g,r)}):o.jsx("span",{"data-ginger-component":"TimeText",className:i,style:t,children:g})}function Er(e){const r=b.useGingerState();return He(r.currentTime,r,e)}Er.displayName="Ginger.Current.Elapsed";function Ir(e){const r=b.useGingerState();return He(h.effectiveDuration(r),r,e)}Ir.displayName="Ginger.Current.Duration";function Pr(e){const r=b.useGingerState();return He(h.effectiveRemaining(r),r,e)}Pr.displayName="Ginger.Current.Remaining";function Sr({className:e,style:r,fallback:n,empty:i,children:t}){const a=b.useGingerState(),s=h.effectiveDuration(a),c=h.progressFraction(a);if(!(s>0)){const d=i??n??null;return d?o.jsx("span",{"data-ginger-component":"Progress",className:e,style:r,children:d}):null}return t?o.jsx("span",{"data-ginger-component":"Progress",className:e,style:r,children:t({fraction:c,currentTime:a.currentTime,duration:s},a)}):o.jsx("span",{"data-ginger-component":"Progress",className:e,style:r,children:`${Math.round(c*100)}%`})}Sr.displayName="Ginger.Current.Progress";function Ar({className:e,style:r,height:n=4,showBuffered:i=!1,unstyled:t=!1}){const a=b.useGingerState(),s=`${Math.round(h.progressFraction(a)*100)}%`,c=`${Math.round(Math.min(1,Math.max(0,a.bufferedFraction))*100)}%`;return o.jsxs("div",{"data-ginger-component":"TimeRail",className:e,style:t?{...r}:{width:"100%",height:n,background:"var(--ginger-muted-color, #e5e7eb)",borderRadius:999,overflow:"hidden",position:"relative",...r},"aria-hidden":!0,children:[i?o.jsx("div",{"data-ginger-component":"TimeRail",style:{position:t?void 0:"absolute",left:t?void 0:0,top:t?void 0:0,height:t?void 0:"100%",width:c,background:t?void 0:"var(--ginger-buffer-color, rgba(107, 114, 128, 0.35))"}}):null,o.jsx("div",{"data-ginger-component":"TimeRail",style:{position:t?void 0:"relative",width:s,height:t?void 0:"100%",background:t?void 0:"var(--ginger-primary-color, #111827)"}})]})}Ar.displayName="Ginger.Current.TimeRail";function Rr({className:e,style:r,height:n=4,unstyled:i=!1}){const t=b.useGingerState(),a=`${Math.round(Math.min(1,Math.max(0,t.bufferedFraction))*100)}%`;return o.jsx("div",{"data-ginger-component":"BufferRail",className:e,style:i?{...r}:{width:"100%",height:n,background:"var(--ginger-muted-color, #e5e7eb)",borderRadius:999,overflow:"hidden",...r},"aria-hidden":!0,children:o.jsx("div",{"data-ginger-component":"BufferRail",style:{width:a,height:i?void 0:"100%",background:i?void 0:"var(--ginger-buffer-color, rgba(107, 114, 128, 0.35))"}})})}Rr.displayName="Ginger.Current.BufferRail";function jr({className:e,style:r,fallback:n,empty:i,children:t}){const a=b.useGingerState(),s=h.derivePlaybackUiState(a);return t?o.jsx("span",{"data-ginger-component":"PlaybackState",className:e,style:r,children:t(s,a)}):o.jsx("span",{"data-ginger-component":"PlaybackState",className:e,style:r,children:s})}jr.displayName="Ginger.Current.PlaybackState";function Gr({className:e,style:r,fallback:n,empty:i,live:t="polite",children:a}){const s=b.useGingerState(),c=s.errorMessage??"";if(!c){const d=i??n??null;return d?o.jsx("span",{"data-ginger-component":"ErrorMessage",className:e,style:r,children:d}):null}return a?o.jsx("span",{"data-ginger-component":"ErrorMessage",className:e,style:r,"aria-live":t,children:a(c,s)}):o.jsx("span",{"data-ginger-component":"ErrorMessage",className:e,style:r,"aria-live":t,children:c})}Gr.displayName="Ginger.Current.ErrorMessage";const we=l.createContext(null);function it(){const e=l.useContext(we);if(!e)throw new Error("Ginger.Playlist.Track must be used inside <Ginger.Playlist>");return e}function Cr({children:e,unstyled:r=!1,rowStyle:n,renderTrack:i,playOnSelect:t=!0,style:a,...s}){const{tracks:c,currentIndex:d,playTrackAt:g,selectTrackAt:y}=b.useGingerPlayback(),x=r?{...a}:{listStyle:"none",margin:0,padding:0,fontFamily:"var(--ginger-font-family, system-ui, sans-serif)",fontSize:"var(--ginger-font-size, 14px)",color:"var(--ginger-primary-color, #111827)",...a};return e!==void 0?o.jsx(we.Provider,{value:{playOnSelect:t},children:o.jsx("ul",{"data-ginger-component":"Playlist",style:x,...s,children:e})}):o.jsx(we.Provider,{value:{playOnSelect:t},children:o.jsx("ul",{"data-ginger-component":"Playlist",style:x,...s,children:c.map((f,k)=>{const M=k===d;return o.jsx("li",{children:o.jsx("button",{type:"button",onClick:()=>{t?g(k):y(k)},style:{width:r?void 0:"100%",textAlign:r?void 0:"left",border:r?void 0:"none",background:r?void 0:M?"var(--ginger-playlist-active-bg, rgba(17, 24, 39, 0.06))":"transparent",color:r?void 0:"inherit",font:r?void 0:"inherit",cursor:r?void 0:"pointer",padding:r?void 0:"var(--ginger-playlist-row-padding, 6px 8px)",...n},children:i?i(f,k,M):o.jsxs("span",{children:[f.title,f.artist?` — ${f.artist}`:""]})})},`${k}-${h.trackIdentity(f)}`)})})})}Cr.displayName="Ginger.Playlist";function wr({index:e,unstyled:r=!1,className:n,style:i,children:t,liProps:a,onClick:s,...c}){const{playOnSelect:d}=it(),{tracks:g,currentIndex:y,playTrackAt:x,selectTrackAt:T}=b.useGingerPlayback(),f=e===y,k=g[e],M=k!=null?o.jsxs("span",{"data-ginger-component":"PlaylistTrack",children:[k.title,k.artist?` — ${k.artist}`:""]}):null;return o.jsx("li",{...a,"data-ginger-component":"PlaylistTrack",children:o.jsx("button",{type:"button","data-ginger-component":"PlaylistTrackButton","aria-current":f?"true":void 0,"data-ginger-active":f||void 0,className:n,style:{width:r?void 0:"100%",textAlign:r?void 0:"left",border:r?void 0:"none",background:r?void 0:f?"var(--ginger-playlist-active-bg, rgba(17, 24, 39, 0.06))":"transparent",color:r?void 0:"inherit",font:r?void 0:"inherit",cursor:r?void 0:"pointer",padding:r?void 0:"var(--ginger-playlist-row-padding, 6px 8px)",...i},...c,onClick:m=>{s==null||s(m),!m.defaultPrevented&&(d?x(e):T(e))},children:t??M})})}wr.displayName="Ginger.Playlist.Track";const ot=Object.assign(Cr,{Track:wr}),st=B("Ginger.Queue.Title",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.title}),ct=B("Ginger.Queue.Subtitle",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.subtitle}),ut=B("Ginger.Queue.Description",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.description}),lt=B("Ginger.Queue.Copyright",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.copyright});function Lr({className:e,style:r,fallback:n,empty:i,unstyled:t=!1,imgStyle:a}){var g,y;const s=b.useGingerState(),c=(g=s.playlistMeta)==null?void 0:g.artworkUrl;if(!c){const x=i??n??null;return x?o.jsx("span",{"data-ginger-component":"Artwork",className:e,style:r,children:x}):null}const d=((y=s.playlistMeta)==null?void 0:y.title)??"Playlist artwork";return o.jsx("span",{"data-ginger-component":"Artwork",className:e,style:t?{...r}:{display:"inline-block",background:"var(--ginger-artwork-bg, #f3f4f6)",borderRadius:"var(--ginger-artwork-radius, 6px)",overflow:"hidden",...r},children:o.jsx("img",{src:c,alt:d,style:{display:t?void 0:"block",width:t?void 0:"100%",height:t?void 0:"100%",objectFit:t?void 0:"cover",...a}})})}Lr.displayName="Ginger.Queue.Artwork";function z(e){return Number.isFinite(e)?Math.min(1,Math.max(0,e)):1}function Ae(e){return Number.isFinite(e)?Math.min(4,Math.max(.25,e)):1}const U={currentTime:0,duration:0,bufferedFraction:0,isBuffering:!1,errorMessage:null},dt={...U,volume:1,muted:!1,playbackRate:1};function Ye(e){const r=[...e.tracks];let n=h.clampIndex(e.currentIndex??0,r.length),i=null,t=r;return e.isShuffled&&r.length>1&&(i=[...r],t=h.shuffleWithAnchor(r,n),n=0),{tracks:t,currentIndex:n,playbackMode:e.playbackMode??"playlist",isPaused:e.isPaused??!0,isShuffled:!!(e.isShuffled&&t.length>1),repeatMode:e.repeatMode??"off",originalTracks:i,playlistMeta:e.playlistMeta??null,...dt,volume:z(e.volume??1),muted:e.muted??!1,playbackRate:Ae(e.playbackRate??1)}}function Nr(e,r){switch(r.type){case"INIT":{const{tracks:n,currentIndex:i,playlistMeta:t,isPaused:a,isShuffled:s,repeatMode:c,playbackMode:d,volume:g,muted:y,playbackRate:x}=r.payload;return Ye({tracks:n,currentIndex:i,playlistMeta:t??null,isPaused:a??!0,isShuffled:s??!1,repeatMode:c??"off",playbackMode:d??"playlist",volume:g,muted:y,playbackRate:x})}case"SET_QUEUE":{const{tracks:n,currentIndex:i}=r.payload,t=[...n],a=h.clampIndex(i??e.currentIndex,t.length);return{...e,tracks:t,currentIndex:a,isShuffled:!1,originalTracks:null,...U}}case"INSERT_TRACK":{const n=r.payload.index??e.tracks.length,i=h.insertTrackAt(e.tracks,r.payload.track,n);if(r.payload.autoPlay){const s=h.clampIndex(n,i.length);return{...e,tracks:i,currentIndex:s,isShuffled:!1,originalTracks:null,isPaused:!1,...U}}const t=n<=e.currentIndex?e.currentIndex+1:e.currentIndex,a=e.isShuffled&&e.originalTracks?h.insertTrackAt(e.originalTracks,r.payload.track,e.originalTracks.length):e.originalTracks;return{...e,tracks:i,originalTracks:a,currentIndex:h.clampIndex(t,i.length)}}case"REMOVE_TRACK":{const n=r.payload.index,i=h.removeTrackAt(e.tracks,n),t=n<e.currentIndex?e.currentIndex-1:n===e.currentIndex?Math.min(e.currentIndex,Math.max(0,i.length-1)):e.currentIndex,a=e.isShuffled&&e.originalTracks?(()=>{const c=e.tracks[n],d=h.findIndexByTrackIdentity(e.originalTracks,c);return h.removeTrackAt(e.originalTracks,d)})():e.originalTracks,s=e.isShuffled&&i.length>1;return{...e,tracks:i,isShuffled:s,originalTracks:s?a:null,currentIndex:h.clampIndex(t,i.length),...n===e.currentIndex?U:{}}}case"MOVE_TRACK":{const{fromIndex:n,toIndex:i}=r.payload,t=h.moveTrack(e.tracks,n,i);let a=e.currentIndex;return e.currentIndex===n?a=i:n<e.currentIndex&&i>=e.currentIndex?a-=1:n>e.currentIndex&&i<=e.currentIndex&&(a+=1),{...e,tracks:t,isShuffled:!1,originalTracks:null,currentIndex:h.clampIndex(a,t.length)}}case"ADD_NEXT":{const n=h.addNextTrack(e.tracks,e.currentIndex,r.payload.track),i=e.isShuffled&&e.originalTracks?(()=>{const t=e.tracks[e.currentIndex],a=h.findIndexByTrackIdentity(e.originalTracks,t);return h.addNextTrack(e.originalTracks,a,r.payload.track)})():e.originalTracks;return{...e,tracks:n,originalTracks:i}}case"SET_INDEX":{const n=h.clampIndex(r.payload.index,e.tracks.length),i=r.payload.autoPlay,t=i===!0?!1:i===!1?!0:e.isPaused;return{...e,currentIndex:n,...U,isPaused:t}}case"PLAY":return{...e,isPaused:!1};case"PAUSE":return{...e,isPaused:!0};case"TOGGLE_PAUSE":return{...e,isPaused:!e.isPaused};case"SET_REPEAT":return{...e,repeatMode:r.payload};case"CYCLE_REPEAT":return{...e,repeatMode:h.cycleRepeatMode(e.repeatMode)};case"TOGGLE_SHUFFLE":{if(e.tracks.length<=1)return{...e,isShuffled:!1,originalTracks:null};if(!e.isShuffled){const a=[...e.tracks],s=h.shuffleWithAnchor(a,e.currentIndex);return{...e,isShuffled:!0,originalTracks:a,tracks:s,currentIndex:0}}const n=e.originalTracks?[...e.originalTracks]:[...e.tracks],i=e.tracks[e.currentIndex],t=h.findIndexByTrackIdentity(n,i);return{...e,isShuffled:!1,originalTracks:null,tracks:n,currentIndex:h.clampIndex(t,n.length)}}case"NEXT":{const n=h.computeNextIndex(e),i=n===e.currentIndex;return{...e,currentIndex:n,...i?{}:U,isPaused:i?e.isPaused:!1}}case"PREV":{const n=h.computePrevIndex(e),i=n===e.currentIndex;return{...e,currentIndex:n,...i?{}:U,isPaused:i?e.isPaused:!1}}case"MEDIA_TIME_UPDATE":return{...e,currentTime:r.payload.currentTime,duration:Number.isFinite(r.payload.duration)?r.payload.duration:e.duration,bufferedFraction:r.payload.bufferedFraction,isBuffering:!1};case"MEDIA_LOADED_METADATA":return{...e,duration:Number.isFinite(r.payload.duration)?r.payload.duration:e.duration,bufferedFraction:r.payload.bufferedFraction,errorMessage:null};case"SET_PLAYLIST_META":return{...e,playlistMeta:r.payload};case"SET_PLAYBACK_MODE":return{...e,playbackMode:r.payload};case"MEDIA_ERROR":return{...e,errorMessage:r.payload.message,isPaused:!0,isBuffering:!1};case"MEDIA_WAITING":return{...e,isBuffering:!0};case"MEDIA_CANPLAY":return{...e,isBuffering:!1,errorMessage:null};case"MEDIA_PLAY":return{...e,isPaused:!1,isBuffering:!1};case"MEDIA_PAUSE":return{...e,isPaused:!0};case"RESET_MEDIA_TIMES":return{...e,currentTime:0,duration:0,bufferedFraction:0};case"MEDIA_SOURCE_CLEARED":return{...e,...U};case"SET_VOLUME":return{...e,volume:z(r.payload)};case"SET_MUTED":return{...e,muted:r.payload};case"TOGGLE_MUTE":return{...e,muted:!e.muted};case"SET_PLAYBACK_RATE":return{...e,playbackRate:Ae(r.payload)};case"MEDIA_VOLUME_SYNC":{const{volume:n,muted:i}=r.payload,t=z(n);return t===e.volume&&i===e.muted?e:{...e,volume:t,muted:i}}default:return e}}function Se(){return typeof navigator>"u"||!("mediaSession"in navigator)?null:navigator.mediaSession}function gt(e,r,n,i={}){var T;const t=l.useRef(r);t.current=r;const a=r.tracks[r.currentIndex],s=a==null?void 0:a.title,c=a==null?void 0:a.artist,d=a==null?void 0:a.album,g=h.resolveArtworkUrl(a,(T=r.playlistMeta)==null?void 0:T.artworkUrl);l.useEffect(()=>{const f=Se();!e||!f||(f.metadata=new MediaMetadata({title:s??"Unknown track",artist:c,album:d,artwork:g?[{src:g}]:void 0}))},[e,s,c,d,g]),l.useEffect(()=>{const f=Se();!e||!f||(f.playbackState=r.isPaused?"paused":"playing")},[e,r.isPaused]);const y=i.seekForwardSeconds,x=i.seekBackwardSeconds;l.useEffect(()=>{const f=Se();if(!(!e||!f)){try{f.setActionHandler("play",n.play),f.setActionHandler("pause",n.pause),f.setActionHandler("nexttrack",n.next),f.setActionHandler("previoustrack",n.prev),f.setActionHandler("seekto",k=>{typeof k.seekTime=="number"&&Number.isFinite(k.seekTime)&&n.seek(k.seekTime)}),typeof y=="number"&&y>0?f.setActionHandler("seekforward",()=>{const k=t.current,M=k.currentTime+y,m=k.duration,P=Number.isFinite(m)&&m>0?m:M;n.seek(Math.min(M,P))}):f.setActionHandler("seekforward",null),typeof x=="number"&&x>0?f.setActionHandler("seekbackward",()=>{const k=t.current;n.seek(Math.max(0,k.currentTime-x))}):f.setActionHandler("seekbackward",null)}catch{}return()=>{try{f.setActionHandler("play",null),f.setActionHandler("pause",null),f.setActionHandler("nexttrack",null),f.setActionHandler("previoustrack",null),f.setActionHandler("seekto",null),f.setActionHandler("seekforward",null),f.setActionHandler("seekbackward",null)}catch{}}}},[e,n,y,x]),l.useEffect(()=>{var P,S;const f=Se();if(!e||!f||!i.positionState)return;const k=r.duration,M=r.currentTime,m=r.playbackRate;try{if(!Number.isFinite(k)||k<=0){(P=f.setPositionState)==null||P.call(f);return}(S=f.setPositionState)==null||S.call(f,{duration:k,playbackRate:Number.isFinite(m)&&m>0?m:1,position:Math.min(Math.max(0,M),k)})}catch{}return()=>{var j;try{(j=f.setPositionState)==null||j.call(f)}catch{}}},[e,i.positionState,r.currentTime,r.duration,r.playbackRate])}const pt={"--ginger-primary-color":"#111827","--ginger-muted-color":"#6b7280","--ginger-font-size":"14px","--ginger-font-family":"system-ui, sans-serif","--ginger-playlist-row-padding":"6px 8px","--ginger-artwork-radius":"6px","--ginger-artwork-bg":"#f3f4f6","--ginger-playlist-active-bg":"rgba(17, 24, 39, 0.06)","--ginger-buffer-color":"rgba(107, 114, 128, 0.35)","--ginger-focus-ring":"0 0 0 2px rgba(59, 130, 246, 0.45)"};function ft({children:e,initialTracks:r=[],initialIndex:n=0,initialPlaylistMeta:i=null,initialShuffle:t=!1,initialRepeatMode:a="off",initialPlaybackMode:s="playlist",initialPaused:c=!0,initialVolume:d=1,initialMuted:g=!1,initialPlaybackRate:y=1,initialStateKey:x,locale:T,mediaSession:f=!1,beforePlay:k,onPlayBlocked:M,persistence:m,hydrateOnMount:P=!1,resumeOnTrackChange:S=!1,unstyled:j=!1,asChild:W=!1,className:X,style:Re,dir:_r,prevRestartThresholdSeconds:Qe=3,onTrackChange:K,onPlay:q,onPause:J,onQueueEnd:Z,onError:ee,onVolumeChange:re,onPlaybackRateChange:te,onSeek:N}){var qe;const L=l.useRef(null),[u,v]=l.useReducer(Nr,void 0,()=>Ye({tracks:r,currentIndex:n,playlistMeta:i,isPaused:c,isShuffled:t,repeatMode:a,playbackMode:s,volume:d,muted:g,playbackRate:y})),je=l.useRef(u),Ge=l.useRef({tracks:r,currentIndex:n,playlistMeta:i,isPaused:c,isShuffled:t,repeatMode:a,playbackMode:s,volume:d,muted:g,playbackRate:y});Ge.current={tracks:r,currentIndex:n,playlistMeta:i,isPaused:c,isShuffled:t,repeatMode:a,playbackMode:s,volume:d,muted:g,playbackRate:y};const H=l.useRef(void 0);l.useEffect(()=>{if(x===void 0){H.current=void 0;return}if(H.current===void 0){H.current=x;return}if(H.current===x)return;H.current=x;const p=Ge.current;v({type:"INIT",payload:{tracks:p.tracks,currentIndex:p.currentIndex,playlistMeta:p.playlistMeta,isPaused:p.isPaused,isShuffled:p.isShuffled,repeatMode:p.repeatMode,playbackMode:p.playbackMode,volume:p.volume,muted:p.muted,playbackRate:p.playbackRate}})},[x,v]),l.useEffect(()=>{je.current=u},[u]);const ze=u.tracks[u.currentIndex]??null;l.useEffect(()=>{K==null||K(ze,u.currentIndex)},[ze,u.currentIndex,K]),l.useEffect(()=>{u.errorMessage&&(ee==null||ee(u.errorMessage))},[u.errorMessage,ee]);const ne=l.useRef(void 0);l.useEffect(()=>{if(ne.current===void 0){ne.current=u.isPaused;return}ne.current!==u.isPaused&&(u.isPaused?J==null||J():q==null||q()),ne.current=u.isPaused},[u.isPaused,J,q]);const ae=l.useRef(void 0),ie=l.useRef(void 0);l.useEffect(()=>{if(ae.current===void 0||ie.current===void 0){ae.current=u.volume,ie.current=u.muted;return}(ae.current!==u.volume||ie.current!==u.muted)&&(re==null||re(u.volume,u.muted)),ae.current=u.volume,ie.current=u.muted},[u.volume,u.muted,re]);const oe=l.useRef(void 0);l.useEffect(()=>{if(oe.current===void 0){oe.current=u.playbackRate;return}oe.current!==u.playbackRate&&(te==null||te(u.playbackRate)),oe.current=u.playbackRate},[u.playbackRate,te]);const _=l.useCallback(()=>{v({type:"PLAY"})},[]),D=l.useCallback(()=>{var p;v({type:"PAUSE"}),(p=L.current)==null||p.pause()},[]),se=l.useCallback(()=>{u.isPaused?_():D()},[D,_,u.isPaused]),F=l.useCallback(p=>{const E=L.current;E&&Number.isFinite(p)&&(E.currentTime=Math.max(0,p),N==null||N(Math.max(0,p)))},[N]),ce=l.useCallback(p=>{v({type:"SET_VOLUME",payload:z(p)})},[]),ue=l.useCallback(p=>{v({type:"SET_MUTED",payload:p})},[]),le=l.useCallback(()=>{v({type:"TOGGLE_MUTE"})},[]),de=l.useCallback(p=>{v({type:"SET_PLAYBACK_RATE",payload:Ae(p)})},[]),O=l.useCallback(()=>{v({type:"NEXT"})},[]),$=l.useCallback(()=>{const p=L.current,E=Qe??3;p&&E>0&&p.currentTime>E?(p.currentTime=0,N==null||N(0)):v({type:"PREV"})},[Qe,N]),ge=l.useCallback(p=>{v({type:"SET_REPEAT",payload:p})},[]),pe=l.useCallback(()=>{v({type:"CYCLE_REPEAT"})},[]),fe=l.useCallback(()=>{v({type:"TOGGLE_SHUFFLE"})},[]),me=l.useCallback((p,E)=>{v({type:"SET_QUEUE",payload:{tracks:p,currentIndex:E}})},[]),ye=l.useCallback((p,E,I)=>{v({type:"INSERT_TRACK",payload:{track:p,index:E,autoPlay:I}})},[]),xe=l.useCallback(p=>{v({type:"REMOVE_TRACK",payload:{index:p}})},[]),he=l.useCallback((p,E)=>{v({type:"MOVE_TRACK",payload:{fromIndex:p,toIndex:E}})},[]),ke=l.useCallback(p=>{v({type:"ADD_NEXT",payload:{track:p}})},[]),be=l.useCallback(p=>{v({type:"SET_INDEX",payload:{index:p,autoPlay:!0}})},[]),ve=l.useCallback(p=>{v({type:"SET_INDEX",payload:{index:p,autoPlay:!1}})},[]),Te=l.useCallback(p=>{v({type:"SET_PLAYLIST_META",payload:p})},[]),Me=l.useCallback(p=>{v({type:"SET_PLAYBACK_MODE",payload:p})},[]),Ee=l.useCallback(p=>{v({type:"INIT",payload:p})},[]);l.useEffect(()=>{if(!(!m||!P))try{const p=m.get("ginger:volume"),E=m.get("ginger:muted"),I=m.get("ginger:playbackRate"),A=m.get("ginger:repeatMode"),Pe=m.get("ginger:currentIndex"),w=Ge.current;v({type:"INIT",payload:{tracks:w.tracks,playlistMeta:w.playlistMeta,isPaused:w.isPaused,isShuffled:w.isShuffled,playbackMode:w.playbackMode,currentIndex:typeof Pe=="number"?Pe:w.currentIndex,repeatMode:A==="off"||A==="all"||A==="one"?A:w.repeatMode,volume:typeof p=="number"?p:w.volume,muted:typeof E=="boolean"?E:w.muted,playbackRate:typeof I=="number"?I:w.playbackRate}})}catch(p){process.env.NODE_ENV!=="production"&&console.warn("[@lucaismyname/ginger] persistence.get() threw during hydration:",p)}},[P,m]),l.useEffect(()=>{if(m)try{m.set("ginger:volume",u.volume),m.set("ginger:muted",u.muted),m.set("ginger:playbackRate",u.playbackRate),m.set("ginger:repeatMode",u.repeatMode),m.set("ginger:currentIndex",u.currentIndex)}catch(p){process.env.NODE_ENV!=="production"&&console.warn("[@lucaismyname/ginger] persistence.set() threw:",p)}},[m,u.volume,u.muted,u.playbackRate,u.repeatMode,u.currentIndex]),l.useEffect(()=>{if(!m||!S)return;const p=u.tracks[u.currentIndex];if(!p)return;const E=`ginger:resume:${h.trackIdentity(p)}`;try{const I=m.get(E);typeof I=="number"&&Number.isFinite(I)&&F(I)}catch(I){process.env.NODE_ENV!=="production"&&console.warn("[@lucaismyname/ginger] persistence.get() threw during resume:",I)}},[m,S,u.currentIndex,u.tracks,F]),l.useEffect(()=>{if(!m||!S)return;const p=u.tracks[u.currentIndex];if(!p||!(u.currentTime>=0))return;const E=`ginger:resume:${h.trackIdentity(p)}`,I=setTimeout(()=>{try{m.set(E,u.currentTime)}catch(A){process.env.NODE_ENV!=="production"&&console.warn("[@lucaismyname/ginger] persistence.set() threw during resume save:",A)}},250);return()=>clearTimeout(I)},[m,S,u.currentIndex,u.tracks,u.currentTime]);const Dr=(qe=u.tracks[u.currentIndex])==null?void 0:qe.fileUrl;l.useEffect(()=>{const p=L.current;if(!p)return;if(u.isPaused){p.pause();return}if(p.ended&&h.computeEndedTransition(je.current).kind==="stop"){v({type:"PAUSE"});return}let E=!1;return(async()=>{if(k){let I=!1;try{I=await k()}catch(A){const Pe=A instanceof Error?A.message:"beforePlay rejected";v({type:"MEDIA_ERROR",payload:{message:Pe}});return}if(!I){E||(v({type:"PAUSE"}),M==null||M());return}}E||p.play().catch(I=>{const A=I instanceof Error?I.message:typeof I=="string"?I:"Playback failed (e.g. autoplay blocked or unavailable source)";v({type:"MEDIA_ERROR",payload:{message:A}})})})(),()=>{E=!0}},[k,Dr,M,u.isPaused]);const Ie=l.useCallback(()=>{var I;const p=h.computeEndedTransition(je.current);if(p.kind==="replay_same"){const A=L.current;A&&(A.currentTime=0),v({type:"PLAY"});return}if(p.kind==="stop"){(I=L.current)==null||I.pause(),v({type:"PAUSE"}),Z==null||Z();return}const E=p.nextIndex;v({type:"SET_INDEX",payload:{index:E,autoPlay:!0}})},[Z]),Fr=l.useMemo(()=>({play:_,pause:D,next:O,prev:$,seek:F}),[_,D,O,$,F]),Ur=typeof f=="object"?!0:!!f,Br=l.useMemo(()=>typeof f=="object"?f:{},[f]);gt(Ur,u,Fr,Br);const We=_r??(T!=null&&T.seek&&/[\u0590-\u08FF]/.test(T.seek)?"rtl":"ltr"),Vr=l.useMemo(()=>({state:u,dispatch:v,audioRef:L,notifyEnded:Ie,init:Ee,play:_,pause:D,togglePlayPause:se,seek:F,setVolume:ce,setMuted:ue,toggleMute:le,setPlaybackRate:de,next:O,prev:$,setRepeatMode:ge,cycleRepeat:pe,toggleShuffle:fe,setQueue:me,insertTrackAt:ye,removeTrackAt:xe,moveTrack:he,enqueueNext:ke,playTrackAt:be,selectTrackAt:ve,setPlaylistMeta:Te,setPlaybackMode:Me}),[pe,v,Ee,O,Ie,D,_,be,ye,xe,he,ke,ve,$,F,ue,de,me,ge,Te,Me,ce,u,le,se,fe]),Or=l.useMemo(()=>({tracks:u.tracks,currentIndex:u.currentIndex,isPaused:u.isPaused,isShuffled:u.isShuffled,repeatMode:u.repeatMode,originalTracks:u.originalTracks,playlistMeta:u.playlistMeta,init:Ee,play:_,pause:D,togglePlayPause:se,next:O,prev:$,setRepeatMode:ge,cycleRepeat:pe,toggleShuffle:fe,playbackMode:u.playbackMode,setQueue:me,insertTrackAt:ye,removeTrackAt:xe,moveTrack:he,enqueueNext:ke,playTrackAt:be,selectTrackAt:ve,setPlaylistMeta:Te,setPlaybackMode:Me,dispatch:v}),[u.tracks,u.currentIndex,u.isPaused,u.isShuffled,u.repeatMode,u.playbackMode,u.originalTracks,u.playlistMeta,Ee,_,D,se,O,$,ge,pe,fe,me,ye,xe,he,ke,be,ve,Te,Me,v]),$r=l.useMemo(()=>({currentTime:u.currentTime,duration:u.duration,bufferedFraction:u.bufferedFraction,isBuffering:u.isBuffering,errorMessage:u.errorMessage,volume:u.volume,muted:u.muted,playbackRate:u.playbackRate,seek:F,setVolume:ce,setMuted:ue,toggleMute:le,setPlaybackRate:de,audioRef:L,notifyEnded:Ie,dispatch:v}),[u.currentTime,u.duration,u.bufferedFraction,u.isBuffering,u.errorMessage,u.volume,u.muted,u.playbackRate,F,ce,ue,le,de,L,Ie,v]),Xe=h.derivePlaybackUiState(u),Ke=l.useMemo(()=>j?Re:{...pt,...Re},[Re,j]),C=l.useMemo(()=>({className:X,style:Ke,"data-ginger-playback":Xe,dir:We}),[X,Ke,Xe,We]),Hr=l.useMemo(()=>{if(!W)return o.jsx("div",{className:C.className,style:C.style,"data-ginger-playback":C["data-ginger-playback"],dir:C.dir,children:e});const p=l.Children.only(e);if(!l.isValidElement(p))throw new Error("Ginger.Provider asChild expects a single React element child.");const E=p,I=E.props.style;return l.cloneElement(E,{className:mt(E.props.className,C.className),style:I&&typeof I=="object"?{...I,...C.style}:C.style,"data-ginger-playback":C["data-ginger-playback"],dir:C.dir})},[W,e,C]);return o.jsx(Wr,{locale:T,children:o.jsx(b.GingerPlaybackContext.Provider,{value:Or,children:o.jsx(b.GingerMediaContext.Provider,{value:$r,children:o.jsx(er.Provider,{value:Vr,children:Hr})})})})}function mt(e,r){const n=[e,r].filter(Boolean).join(" ");return n===""?void 0:n}const yt={Provider:ft,Player:Qr,Current:{Title:Kr,Artist:qr,Album:Jr,Description:Zr,Copyright:et,Genre:rt,Label:tt,Isrc:nt,TrackNumber:at,Year:fr,Lyrics:mr,LyricsSynced:Oe,Chapters:$e,FileUrl:kr,Artwork:br,QueueIndex:vr,QueueLength:Tr,QueuePosition:Mr,Elapsed:Er,Duration:Ir,Remaining:Pr,Progress:Sr,TimeRail:Ar,BufferRail:Rr,PlaybackState:jr,ErrorMessage:Gr},Queue:{Title:st,Subtitle:ct,Description:ut,Copyright:lt,Artwork:Lr},Control:{PlayPause:ir,Repeat:or,Next:sr,Previous:cr,Shuffle:ur,SeekBar:lr,Volume:dr,Mute:gr,PlaybackRate:pr},Icon:{Play:Ne,Pause:Le,SkipForward:Ue,SkipBack:Fe,Shuffle:De,Volume2:Be,VolumeX:Ve,RepeatGlyph:_e,Wrapper:G},Playlist:ot};exports.Chapters=$e;exports.Ginger=yt;exports.LyricsSynced=Oe;exports.Pause=Le;exports.Play=Ne;exports.RepeatGlyph=_e;exports.ShuffleIcon=De;exports.SkipBack=Fe;exports.SkipForward=Ue;exports.Volume2=Be;exports.VolumeX=Ve;exports.Wrapper=G;exports.clampPlaybackRate=Ae;exports.clampVolume=z;exports.createInitialState=Ye;exports.defaultGingerLocale=Y;exports.gingerReducer=Nr;exports.parseLrc=yr;exports.useGingerChapters=hr;exports.useGingerLocale=R;exports.useGingerLyricsSync=xr;exports.usePlayPauseBinding=ar;exports.useSeekBarBinding=tr;exports.useVolumeSlider=nr;
|
|
2
|
-
//# sourceMappingURL=ginger-DFdZGaMi.cjs.map
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
function l(n, e) {
|
|
2
|
-
return e <= 0 ? 0 : Math.max(0, Math.min(e - 1, n));
|
|
3
|
-
}
|
|
4
|
-
function g(n, e) {
|
|
5
|
-
if (n.length <= 1) return [...n];
|
|
6
|
-
const r = n[e];
|
|
7
|
-
if (!r) return [...n];
|
|
8
|
-
const t = n.filter((i, u) => u !== e);
|
|
9
|
-
for (let i = t.length - 1; i > 0; i--) {
|
|
10
|
-
const u = Math.floor(Math.random() * (i + 1));
|
|
11
|
-
[t[i], t[u]] = [t[u], t[i]];
|
|
12
|
-
}
|
|
13
|
-
return [r, ...t];
|
|
14
|
-
}
|
|
15
|
-
function c(n) {
|
|
16
|
-
return n ? n.id != null && n.id !== "" ? `id:${n.id}` : `file:${n.fileUrl}` : "";
|
|
17
|
-
}
|
|
18
|
-
function x(n, e) {
|
|
19
|
-
var f, s;
|
|
20
|
-
if (!e) return 0;
|
|
21
|
-
const r = n.findIndex((o) => o === e);
|
|
22
|
-
if (r !== -1) return r;
|
|
23
|
-
const t = c(e);
|
|
24
|
-
if (!t) return 0;
|
|
25
|
-
const i = [];
|
|
26
|
-
for (let o = 0; o < n.length; o += 1)
|
|
27
|
-
c(n[o]) === t && i.push(o);
|
|
28
|
-
if (i.length === 0) return 0;
|
|
29
|
-
if (i.length === 1) return i[0];
|
|
30
|
-
const u = typeof globalThis < "u" && "process" in globalThis ? (s = (f = globalThis.process) == null ? void 0 : f.env) == null ? void 0 : s.NODE_ENV : void 0;
|
|
31
|
-
return u != null && u !== "production" && console.warn(
|
|
32
|
-
"[@lucaismyname/ginger] Ambiguous track identity: multiple queue rows share the same fileUrl without a unique `id`. Resolving to the first match."
|
|
33
|
-
), i[0];
|
|
34
|
-
}
|
|
35
|
-
function h(n, e, r) {
|
|
36
|
-
const t = [...n], i = Math.max(0, Math.min(t.length, r ?? t.length));
|
|
37
|
-
return t.splice(i, 0, e), t;
|
|
38
|
-
}
|
|
39
|
-
function M(n, e) {
|
|
40
|
-
if (e < 0 || e >= n.length) return [...n];
|
|
41
|
-
const r = [...n];
|
|
42
|
-
return r.splice(e, 1), r;
|
|
43
|
-
}
|
|
44
|
-
function b(n, e, r) {
|
|
45
|
-
if (e === r || e < 0 || e >= n.length || r < 0 || r >= n.length)
|
|
46
|
-
return [...n];
|
|
47
|
-
const t = [...n], [i] = t.splice(e, 1);
|
|
48
|
-
return i ? (t.splice(r, 0, i), t) : [...n];
|
|
49
|
-
}
|
|
50
|
-
function y(n, e, r) {
|
|
51
|
-
return h(n, r, Math.max(0, Math.min(n.length, e + 1)));
|
|
52
|
-
}
|
|
53
|
-
function v(n) {
|
|
54
|
-
const { tracks: e, currentIndex: r, repeatMode: t, playbackMode: i } = n, u = e.length;
|
|
55
|
-
return u === 0 ? { kind: "stop", nextIndex: 0 } : t === "one" ? { kind: "replay_same" } : i === "single" ? { kind: "stop", nextIndex: l(r, u) } : r < u - 1 ? { kind: "advance", nextIndex: r + 1 } : t === "all" ? { kind: "wrap", nextIndex: 0 } : { kind: "stop", nextIndex: l(r, u) };
|
|
56
|
-
}
|
|
57
|
-
function T(n) {
|
|
58
|
-
const { tracks: e, currentIndex: r, repeatMode: t, playbackMode: i } = n, u = e.length;
|
|
59
|
-
return u === 0 ? 0 : i === "single" ? l(r, u) : r < u - 1 ? r + 1 : t === "all" ? 0 : l(r, u);
|
|
60
|
-
}
|
|
61
|
-
function I(n) {
|
|
62
|
-
const { tracks: e, currentIndex: r, repeatMode: t, playbackMode: i } = n, u = e.length;
|
|
63
|
-
return u === 0 ? 0 : i === "single" ? l(r, u) : r > 0 ? r - 1 : t === "all" ? u - 1 : 0;
|
|
64
|
-
}
|
|
65
|
-
function w(n) {
|
|
66
|
-
return n === "off" ? "all" : n === "all" ? "one" : "off";
|
|
67
|
-
}
|
|
68
|
-
function m(n, e) {
|
|
69
|
-
return (n == null ? void 0 : n.artworkUrl) ?? e ?? void 0;
|
|
70
|
-
}
|
|
71
|
-
function p(n, e) {
|
|
72
|
-
return (n == null ? void 0 : n.album) ?? e ?? void 0;
|
|
73
|
-
}
|
|
74
|
-
function a(n) {
|
|
75
|
-
return n.tracks[n.currentIndex] ?? null;
|
|
76
|
-
}
|
|
77
|
-
function A(n) {
|
|
78
|
-
return n.errorMessage ? "error" : n.tracks.length === 0 ? "idle" : n.isBuffering ? "loading" : n.isPaused ? Number.isFinite(n.duration) && n.duration > 0 && n.currentTime >= n.duration - 0.05 ? "ended" : "paused" : "playing";
|
|
79
|
-
}
|
|
80
|
-
function d(n) {
|
|
81
|
-
var t;
|
|
82
|
-
const e = n.duration;
|
|
83
|
-
if (Number.isFinite(e) && e > 0) return e;
|
|
84
|
-
const r = (t = n.tracks[n.currentIndex]) == null ? void 0 : t.durationSeconds;
|
|
85
|
-
return typeof r == "number" && Number.isFinite(r) && r > 0 ? r : 0;
|
|
86
|
-
}
|
|
87
|
-
function N(n) {
|
|
88
|
-
const r = d(n) - n.currentTime;
|
|
89
|
-
return Number.isFinite(r) ? Math.max(0, r) : 0;
|
|
90
|
-
}
|
|
91
|
-
function k(n) {
|
|
92
|
-
const e = d(n);
|
|
93
|
-
return e > 0 ? Math.min(1, Math.max(0, n.currentTime / e)) : 0;
|
|
94
|
-
}
|
|
95
|
-
function U(n) {
|
|
96
|
-
var r;
|
|
97
|
-
const e = a(n);
|
|
98
|
-
return m(e, (r = n.playlistMeta) == null ? void 0 : r.artworkUrl);
|
|
99
|
-
}
|
|
100
|
-
function F(n) {
|
|
101
|
-
var r;
|
|
102
|
-
const e = a(n);
|
|
103
|
-
return p(e, (r = n.playlistMeta) == null ? void 0 : r.subtitle);
|
|
104
|
-
}
|
|
105
|
-
export {
|
|
106
|
-
U as a,
|
|
107
|
-
d as b,
|
|
108
|
-
T as c,
|
|
109
|
-
A as d,
|
|
110
|
-
N as e,
|
|
111
|
-
I as f,
|
|
112
|
-
a as g,
|
|
113
|
-
x as h,
|
|
114
|
-
l as i,
|
|
115
|
-
w as j,
|
|
116
|
-
y as k,
|
|
117
|
-
M as l,
|
|
118
|
-
b as m,
|
|
119
|
-
h as n,
|
|
120
|
-
m as o,
|
|
121
|
-
k as p,
|
|
122
|
-
v as q,
|
|
123
|
-
F as r,
|
|
124
|
-
g as s,
|
|
125
|
-
c as t
|
|
126
|
-
};
|
|
127
|
-
//# sourceMappingURL=selectors-BalBCc7X.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"selectors-BalBCc7X.js","sources":["../src/core/queue.ts","../src/core/transitions.ts","../src/internal/selectors.ts"],"sourcesContent":["import type { Track } from \"../types\";\n\nexport function clampIndex(index: number, length: number): number {\n if (length <= 0) return 0;\n return Math.max(0, Math.min(length - 1, index));\n}\n\nexport function shuffleWithAnchor(tracks: Track[], anchorIndex: number): Track[] {\n if (tracks.length <= 1) return [...tracks];\n const anchor = tracks[anchorIndex];\n if (!anchor) return [...tracks];\n const rest = tracks.filter((_, i) => i !== anchorIndex);\n for (let i = rest.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [rest[i], rest[j]] = [rest[j]!, rest[i]!];\n }\n return [anchor, ...rest];\n}\n\nexport function trackIdentity(track: Track | null | undefined): string {\n if (!track) return \"\";\n return track.id != null && track.id !== \"\" ? `id:${track.id}` : `file:${track.fileUrl}`;\n}\n\nexport function findIndexByTrackIdentity(\n tracks: Track[],\n target: Track | null | undefined,\n): number {\n if (!target) return 0;\n const byRef = tracks.findIndex((t) => t === target);\n if (byRef !== -1) return byRef;\n\n const identity = trackIdentity(target);\n if (!identity) return 0;\n\n const matches: number[] = [];\n for (let i = 0; i < tracks.length; i += 1) {\n if (trackIdentity(tracks[i]) === identity) matches.push(i);\n }\n if (matches.length === 0) return 0;\n if (matches.length === 1) return matches[0]!;\n\n const nodeEnv =\n typeof globalThis !== \"undefined\" && \"process\" in globalThis\n ? (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env?.NODE_ENV\n : undefined;\n if (nodeEnv != null && nodeEnv !== \"production\") {\n console.warn(\n \"[@lucaismyname/ginger] Ambiguous track identity: multiple queue rows share the same fileUrl without a unique `id`. Resolving to the first match.\",\n );\n }\n return matches[0]!;\n}\n\nexport function insertTrackAt(tracks: Track[], track: Track, index?: number): Track[] {\n const next = [...tracks];\n const at = Math.max(0, Math.min(next.length, index ?? next.length));\n next.splice(at, 0, track);\n return next;\n}\n\nexport function removeTrackAt(tracks: Track[], index: number): Track[] {\n if (index < 0 || index >= tracks.length) return [...tracks];\n const next = [...tracks];\n next.splice(index, 1);\n return next;\n}\n\nexport function moveTrack(tracks: Track[], fromIndex: number, toIndex: number): Track[] {\n if (\n fromIndex === toIndex ||\n fromIndex < 0 ||\n fromIndex >= tracks.length ||\n toIndex < 0 ||\n toIndex >= tracks.length\n ) {\n return [...tracks];\n }\n const next = [...tracks];\n const [item] = next.splice(fromIndex, 1);\n if (!item) return [...tracks];\n next.splice(toIndex, 0, item);\n return next;\n}\n\nexport function addNextTrack(tracks: Track[], currentIndex: number, track: Track): Track[] {\n return insertTrackAt(tracks, track, Math.max(0, Math.min(tracks.length, currentIndex + 1)));\n}\n","import type { GingerState, RepeatMode, Track } from \"../types\";\nimport { clampIndex } from \"./queue\";\n\n/** Fields used by next/prev/ended navigation; avoids coupling helpers to full `GingerState`. */\nexport type GingerPlaybackNavigationSlice = Pick<\n GingerState,\n \"tracks\" | \"currentIndex\" | \"repeatMode\" | \"playbackMode\"\n>;\n\nexport type EndedTransition =\n | { kind: \"replay_same\" }\n | { kind: \"advance\"; nextIndex: number }\n | { kind: \"wrap\"; nextIndex: number }\n | { kind: \"stop\"; nextIndex: number };\n\nexport function computeEndedTransition(state: GingerPlaybackNavigationSlice): EndedTransition {\n const { tracks, currentIndex, repeatMode, playbackMode } = state;\n const len = tracks.length;\n if (len === 0) return { kind: \"stop\", nextIndex: 0 };\n if (repeatMode === \"one\") return { kind: \"replay_same\" };\n if (playbackMode === \"single\") return { kind: \"stop\", nextIndex: clampIndex(currentIndex, len) };\n if (currentIndex < len - 1) return { kind: \"advance\", nextIndex: currentIndex + 1 };\n if (repeatMode === \"all\") return { kind: \"wrap\", nextIndex: 0 };\n return { kind: \"stop\", nextIndex: clampIndex(currentIndex, len) };\n}\n\nexport function computeNextIndex(state: GingerPlaybackNavigationSlice): number {\n const { tracks, currentIndex, repeatMode, playbackMode } = state;\n const len = tracks.length;\n if (len === 0) return 0;\n if (playbackMode === \"single\") return clampIndex(currentIndex, len);\n if (currentIndex < len - 1) return currentIndex + 1;\n if (repeatMode === \"all\") return 0;\n return clampIndex(currentIndex, len);\n}\n\nexport function computePrevIndex(state: GingerPlaybackNavigationSlice): number {\n const { tracks, currentIndex, repeatMode, playbackMode } = state;\n const len = tracks.length;\n if (len === 0) return 0;\n if (playbackMode === \"single\") return clampIndex(currentIndex, len);\n if (currentIndex > 0) return currentIndex - 1;\n if (repeatMode === \"all\") return len - 1;\n return 0;\n}\n\nexport function cycleRepeatMode(mode: RepeatMode): RepeatMode {\n if (mode === \"off\") return \"all\";\n if (mode === \"all\") return \"one\";\n return \"off\";\n}\n\nexport function resolveArtworkUrl(\n track: Track | null,\n playlistArtwork?: string | null,\n): string | undefined {\n return track?.artworkUrl ?? playlistArtwork ?? undefined;\n}\n\nexport function resolveAlbumLine(\n track: Track | null,\n playlistSubtitle?: string | null,\n): string | undefined {\n return track?.album ?? playlistSubtitle ?? undefined;\n}\n","import { resolveAlbumLine, resolveArtworkUrl } from \"../core/transitions\";\nimport type { GingerState, PlaybackUiState, Track } from \"../types\";\n\nexport function getCurrentTrack(state: GingerState): Track | null {\n const t = state.tracks[state.currentIndex];\n return t ?? null;\n}\n\nexport function derivePlaybackUiState(state: GingerState): PlaybackUiState {\n if (state.errorMessage) return \"error\";\n if (state.tracks.length === 0) return \"idle\";\n if (state.isBuffering) return \"loading\";\n if (!state.isPaused) return \"playing\";\n if (\n Number.isFinite(state.duration) &&\n state.duration > 0 &&\n state.currentTime >= state.duration - 0.05\n ) {\n return \"ended\";\n }\n return \"paused\";\n}\n\nexport function effectiveDuration(state: GingerState): number {\n const d = state.duration;\n if (Number.isFinite(d) && d > 0) return d;\n const hint = state.tracks[state.currentIndex]?.durationSeconds;\n if (typeof hint === \"number\" && Number.isFinite(hint) && hint > 0) return hint;\n return 0;\n}\n\nexport function effectiveRemaining(state: GingerState): number {\n const dur = effectiveDuration(state);\n const rem = dur - state.currentTime;\n return Number.isFinite(rem) ? Math.max(0, rem) : 0;\n}\n\nexport function progressFraction(state: GingerState): number {\n const dur = effectiveDuration(state);\n if (!(dur > 0)) return 0;\n return Math.min(1, Math.max(0, state.currentTime / dur));\n}\n\nexport function resolvedArtwork(state: GingerState): string | undefined {\n const track = getCurrentTrack(state);\n return resolveArtworkUrl(track, state.playlistMeta?.artworkUrl);\n}\n\nexport function resolvedAlbumLine(state: GingerState): string | undefined {\n const track = getCurrentTrack(state);\n return resolveAlbumLine(track, state.playlistMeta?.subtitle);\n}\n"],"names":["clampIndex","index","length","shuffleWithAnchor","tracks","anchorIndex","anchor","rest","_","i","j","trackIdentity","track","findIndexByTrackIdentity","target","_a","_b","byRef","t","identity","matches","nodeEnv","insertTrackAt","next","at","removeTrackAt","moveTrack","fromIndex","toIndex","item","addNextTrack","currentIndex","computeEndedTransition","state","repeatMode","playbackMode","len","computeNextIndex","computePrevIndex","cycleRepeatMode","mode","resolveArtworkUrl","playlistArtwork","resolveAlbumLine","playlistSubtitle","getCurrentTrack","derivePlaybackUiState","effectiveDuration","d","hint","effectiveRemaining","rem","progressFraction","dur","resolvedArtwork","resolvedAlbumLine"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";function l(n,e){return e<=0?0:Math.max(0,Math.min(e-1,n))}function p(n,e){if(n.length<=1)return[...n];const r=n[e];if(!r)return[...n];const t=n.filter((i,u)=>u!==e);for(let i=t.length-1;i>0;i--){const u=Math.floor(Math.random()*(i+1));[t[i],t[u]]=[t[u],t[i]]}return[r,...t]}function c(n){return n?n.id!=null&&n.id!==""?`id:${n.id}`:`file:${n.fileUrl}`:""}function g(n,e){var a,s;if(!e)return 0;const r=n.findIndex(o=>o===e);if(r!==-1)return r;const t=c(e);if(!t)return 0;const i=[];for(let o=0;o<n.length;o+=1)c(n[o])===t&&i.push(o);if(i.length===0)return 0;if(i.length===1)return i[0];const u=typeof globalThis<"u"&&"process"in globalThis?(s=(a=globalThis.process)==null?void 0:a.env)==null?void 0:s.NODE_ENV:void 0;return u!=null&&u!=="production"&&console.warn("[@lucaismyname/ginger] Ambiguous track identity: multiple queue rows share the same fileUrl without a unique `id`. Resolving to the first match."),i[0]}function h(n,e,r){const t=[...n],i=Math.max(0,Math.min(t.length,r??t.length));return t.splice(i,0,e),t}function x(n,e){if(e<0||e>=n.length)return[...n];const r=[...n];return r.splice(e,1),r}function v(n,e,r){if(e===r||e<0||e>=n.length||r<0||r>=n.length)return[...n];const t=[...n],[i]=t.splice(e,1);return i?(t.splice(r,0,i),t):[...n]}function y(n,e,r){return h(n,r,Math.max(0,Math.min(n.length,e+1)))}function M(n){const{tracks:e,currentIndex:r,repeatMode:t,playbackMode:i}=n,u=e.length;return u===0?{kind:"stop",nextIndex:0}:t==="one"?{kind:"replay_same"}:i==="single"?{kind:"stop",nextIndex:l(r,u)}:r<u-1?{kind:"advance",nextIndex:r+1}:t==="all"?{kind:"wrap",nextIndex:0}:{kind:"stop",nextIndex:l(r,u)}}function b(n){const{tracks:e,currentIndex:r,repeatMode:t,playbackMode:i}=n,u=e.length;return u===0?0:i==="single"?l(r,u):r<u-1?r+1:t==="all"?0:l(r,u)}function T(n){const{tracks:e,currentIndex:r,repeatMode:t,playbackMode:i}=n,u=e.length;return u===0?0:i==="single"?l(r,u):r>0?r-1:t==="all"?u-1:0}function I(n){return n==="off"?"all":n==="all"?"one":"off"}function m(n,e){return(n==null?void 0:n.artworkUrl)??e??void 0}function k(n,e){return(n==null?void 0:n.album)??e??void 0}function f(n){return n.tracks[n.currentIndex]??null}function A(n){return n.errorMessage?"error":n.tracks.length===0?"idle":n.isBuffering?"loading":n.isPaused?Number.isFinite(n.duration)&&n.duration>0&&n.currentTime>=n.duration-.05?"ended":"paused":"playing"}function d(n){var t;const e=n.duration;if(Number.isFinite(e)&&e>0)return e;const r=(t=n.tracks[n.currentIndex])==null?void 0:t.durationSeconds;return typeof r=="number"&&Number.isFinite(r)&&r>0?r:0}function w(n){const r=d(n)-n.currentTime;return Number.isFinite(r)?Math.max(0,r):0}function N(n){const e=d(n);return e>0?Math.min(1,Math.max(0,n.currentTime/e)):0}function U(n){var r;const e=f(n);return m(e,(r=n.playlistMeta)==null?void 0:r.artworkUrl)}function F(n){var r;const e=f(n);return k(e,(r=n.playlistMeta)==null?void 0:r.subtitle)}exports.addNextTrack=y;exports.clampIndex=l;exports.computeEndedTransition=M;exports.computeNextIndex=b;exports.computePrevIndex=T;exports.cycleRepeatMode=I;exports.derivePlaybackUiState=A;exports.effectiveDuration=d;exports.effectiveRemaining=w;exports.findIndexByTrackIdentity=g;exports.getCurrentTrack=f;exports.insertTrackAt=h;exports.moveTrack=v;exports.progressFraction=N;exports.removeTrackAt=x;exports.resolveArtworkUrl=m;exports.resolvedAlbumLine=F;exports.resolvedArtwork=U;exports.shuffleWithAnchor=p;exports.trackIdentity=c;
|
|
2
|
-
//# sourceMappingURL=selectors-YXnP8Y8g.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"selectors-YXnP8Y8g.cjs","sources":["../src/core/queue.ts","../src/core/transitions.ts","../src/internal/selectors.ts"],"sourcesContent":["import type { Track } from \"../types\";\n\nexport function clampIndex(index: number, length: number): number {\n if (length <= 0) return 0;\n return Math.max(0, Math.min(length - 1, index));\n}\n\nexport function shuffleWithAnchor(tracks: Track[], anchorIndex: number): Track[] {\n if (tracks.length <= 1) return [...tracks];\n const anchor = tracks[anchorIndex];\n if (!anchor) return [...tracks];\n const rest = tracks.filter((_, i) => i !== anchorIndex);\n for (let i = rest.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [rest[i], rest[j]] = [rest[j]!, rest[i]!];\n }\n return [anchor, ...rest];\n}\n\nexport function trackIdentity(track: Track | null | undefined): string {\n if (!track) return \"\";\n return track.id != null && track.id !== \"\" ? `id:${track.id}` : `file:${track.fileUrl}`;\n}\n\nexport function findIndexByTrackIdentity(\n tracks: Track[],\n target: Track | null | undefined,\n): number {\n if (!target) return 0;\n const byRef = tracks.findIndex((t) => t === target);\n if (byRef !== -1) return byRef;\n\n const identity = trackIdentity(target);\n if (!identity) return 0;\n\n const matches: number[] = [];\n for (let i = 0; i < tracks.length; i += 1) {\n if (trackIdentity(tracks[i]) === identity) matches.push(i);\n }\n if (matches.length === 0) return 0;\n if (matches.length === 1) return matches[0]!;\n\n const nodeEnv =\n typeof globalThis !== \"undefined\" && \"process\" in globalThis\n ? (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env?.NODE_ENV\n : undefined;\n if (nodeEnv != null && nodeEnv !== \"production\") {\n console.warn(\n \"[@lucaismyname/ginger] Ambiguous track identity: multiple queue rows share the same fileUrl without a unique `id`. Resolving to the first match.\",\n );\n }\n return matches[0]!;\n}\n\nexport function insertTrackAt(tracks: Track[], track: Track, index?: number): Track[] {\n const next = [...tracks];\n const at = Math.max(0, Math.min(next.length, index ?? next.length));\n next.splice(at, 0, track);\n return next;\n}\n\nexport function removeTrackAt(tracks: Track[], index: number): Track[] {\n if (index < 0 || index >= tracks.length) return [...tracks];\n const next = [...tracks];\n next.splice(index, 1);\n return next;\n}\n\nexport function moveTrack(tracks: Track[], fromIndex: number, toIndex: number): Track[] {\n if (\n fromIndex === toIndex ||\n fromIndex < 0 ||\n fromIndex >= tracks.length ||\n toIndex < 0 ||\n toIndex >= tracks.length\n ) {\n return [...tracks];\n }\n const next = [...tracks];\n const [item] = next.splice(fromIndex, 1);\n if (!item) return [...tracks];\n next.splice(toIndex, 0, item);\n return next;\n}\n\nexport function addNextTrack(tracks: Track[], currentIndex: number, track: Track): Track[] {\n return insertTrackAt(tracks, track, Math.max(0, Math.min(tracks.length, currentIndex + 1)));\n}\n","import type { GingerState, RepeatMode, Track } from \"../types\";\nimport { clampIndex } from \"./queue\";\n\n/** Fields used by next/prev/ended navigation; avoids coupling helpers to full `GingerState`. */\nexport type GingerPlaybackNavigationSlice = Pick<\n GingerState,\n \"tracks\" | \"currentIndex\" | \"repeatMode\" | \"playbackMode\"\n>;\n\nexport type EndedTransition =\n | { kind: \"replay_same\" }\n | { kind: \"advance\"; nextIndex: number }\n | { kind: \"wrap\"; nextIndex: number }\n | { kind: \"stop\"; nextIndex: number };\n\nexport function computeEndedTransition(state: GingerPlaybackNavigationSlice): EndedTransition {\n const { tracks, currentIndex, repeatMode, playbackMode } = state;\n const len = tracks.length;\n if (len === 0) return { kind: \"stop\", nextIndex: 0 };\n if (repeatMode === \"one\") return { kind: \"replay_same\" };\n if (playbackMode === \"single\") return { kind: \"stop\", nextIndex: clampIndex(currentIndex, len) };\n if (currentIndex < len - 1) return { kind: \"advance\", nextIndex: currentIndex + 1 };\n if (repeatMode === \"all\") return { kind: \"wrap\", nextIndex: 0 };\n return { kind: \"stop\", nextIndex: clampIndex(currentIndex, len) };\n}\n\nexport function computeNextIndex(state: GingerPlaybackNavigationSlice): number {\n const { tracks, currentIndex, repeatMode, playbackMode } = state;\n const len = tracks.length;\n if (len === 0) return 0;\n if (playbackMode === \"single\") return clampIndex(currentIndex, len);\n if (currentIndex < len - 1) return currentIndex + 1;\n if (repeatMode === \"all\") return 0;\n return clampIndex(currentIndex, len);\n}\n\nexport function computePrevIndex(state: GingerPlaybackNavigationSlice): number {\n const { tracks, currentIndex, repeatMode, playbackMode } = state;\n const len = tracks.length;\n if (len === 0) return 0;\n if (playbackMode === \"single\") return clampIndex(currentIndex, len);\n if (currentIndex > 0) return currentIndex - 1;\n if (repeatMode === \"all\") return len - 1;\n return 0;\n}\n\nexport function cycleRepeatMode(mode: RepeatMode): RepeatMode {\n if (mode === \"off\") return \"all\";\n if (mode === \"all\") return \"one\";\n return \"off\";\n}\n\nexport function resolveArtworkUrl(\n track: Track | null,\n playlistArtwork?: string | null,\n): string | undefined {\n return track?.artworkUrl ?? playlistArtwork ?? undefined;\n}\n\nexport function resolveAlbumLine(\n track: Track | null,\n playlistSubtitle?: string | null,\n): string | undefined {\n return track?.album ?? playlistSubtitle ?? undefined;\n}\n","import { resolveAlbumLine, resolveArtworkUrl } from \"../core/transitions\";\nimport type { GingerState, PlaybackUiState, Track } from \"../types\";\n\nexport function getCurrentTrack(state: GingerState): Track | null {\n const t = state.tracks[state.currentIndex];\n return t ?? null;\n}\n\nexport function derivePlaybackUiState(state: GingerState): PlaybackUiState {\n if (state.errorMessage) return \"error\";\n if (state.tracks.length === 0) return \"idle\";\n if (state.isBuffering) return \"loading\";\n if (!state.isPaused) return \"playing\";\n if (\n Number.isFinite(state.duration) &&\n state.duration > 0 &&\n state.currentTime >= state.duration - 0.05\n ) {\n return \"ended\";\n }\n return \"paused\";\n}\n\nexport function effectiveDuration(state: GingerState): number {\n const d = state.duration;\n if (Number.isFinite(d) && d > 0) return d;\n const hint = state.tracks[state.currentIndex]?.durationSeconds;\n if (typeof hint === \"number\" && Number.isFinite(hint) && hint > 0) return hint;\n return 0;\n}\n\nexport function effectiveRemaining(state: GingerState): number {\n const dur = effectiveDuration(state);\n const rem = dur - state.currentTime;\n return Number.isFinite(rem) ? Math.max(0, rem) : 0;\n}\n\nexport function progressFraction(state: GingerState): number {\n const dur = effectiveDuration(state);\n if (!(dur > 0)) return 0;\n return Math.min(1, Math.max(0, state.currentTime / dur));\n}\n\nexport function resolvedArtwork(state: GingerState): string | undefined {\n const track = getCurrentTrack(state);\n return resolveArtworkUrl(track, state.playlistMeta?.artworkUrl);\n}\n\nexport function resolvedAlbumLine(state: GingerState): string | undefined {\n const track = getCurrentTrack(state);\n return resolveAlbumLine(track, state.playlistMeta?.subtitle);\n}\n"],"names":["clampIndex","index","length","shuffleWithAnchor","tracks","anchorIndex","anchor","rest","_","i","j","trackIdentity","track","findIndexByTrackIdentity","target","byRef","t","identity","matches","nodeEnv","_b","_a","insertTrackAt","next","at","removeTrackAt","moveTrack","fromIndex","toIndex","item","addNextTrack","currentIndex","computeEndedTransition","state","repeatMode","playbackMode","len","computeNextIndex","computePrevIndex","cycleRepeatMode","mode","resolveArtworkUrl","playlistArtwork","resolveAlbumLine","playlistSubtitle","getCurrentTrack","derivePlaybackUiState","effectiveDuration","d","hint","effectiveRemaining","rem","progressFraction","dur","resolvedArtwork","resolvedAlbumLine"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";const t=require("react"),z=require("./useGinger-BXgia32v.cjs"),N=require("./liveAudioGraph-0cpHD_Ic.cjs"),w=require("./GingerSplitContexts-C7puo0M7.cjs"),U=require("./selectors-YXnP8Y8g.cjs"),D=require("./ginger-DFdZGaMi.cjs"),C=new Uint8Array(0),F=new Uint8Array(0);function X(s={}){const{enabled:e=!0,fftSize:r=2048,smoothingTimeConstant:n=.8,minDecibels:u=-100,maxDecibels:c=-30}=s,{audioRef:a,state:o}=z.useGinger(),d=t.useMemo(()=>({fftSize:r,smoothingTimeConstant:n,minDecibels:u,maxDecibels:c}),[r,n,u,c]),[l,m]=t.useState(0),[f,i]=t.useState(null),[h,R]=t.useState(!1),[S,p]=t.useState({frequencyBinCount:0,sampleRate:0}),g=t.useRef(C),v=t.useRef(F),E=t.useCallback(async()=>{const x=y.current;x&&x.state==="suspended"&&await x.resume()},[]),y=t.useRef(null),I=t.useRef(null);return t.useLayoutEffect(()=>{if(!e||typeof window>"u")return;let x=!1,b=null,A=null,T=0;const q=()=>{const k=y.current;k&&R(k.state==="suspended")},V=()=>{if(x)return;const k=I.current,P=g.current,M=v.current;k&&P.length>0&&M.length>0&&(k.getByteFrequencyData(P),k.getByteTimeDomainData(M),m(G=>G+1)),T=requestAnimationFrame(V)},B=()=>{const k=a.current;if(!k||x)return"no-element";try{const{id:P,context:M,analyser:G}=N.attachLiveAnalyser(k,d);b=P,A=k,y.current=M,I.current=G,R(M.state==="suspended"),i(null),M.addEventListener("statechange",q);const L=G.frequencyBinCount,H=G.fftSize;return g.current=new Uint8Array(L),v.current=new Uint8Array(H),p({frequencyBinCount:L,sampleRate:M.sampleRate}),T=requestAnimationFrame(V),"ok"}catch(P){const M=P instanceof Error?P.message:"Failed to attach live analyser";return i(M),y.current=null,I.current=null,g.current=C,v.current=F,p({frequencyBinCount:0,sampleRate:0}),"error"}},K=B();if(K!=="ok"){let k=0;const P=120;let M=0;const G=()=>{if(x)return;const L=B();L==="ok"||L==="error"||(M+=1,!(M>=P)&&(k=requestAnimationFrame(G)))};return K==="no-element"&&(k=requestAnimationFrame(G)),()=>{var L;x=!0,cancelAnimationFrame(k),cancelAnimationFrame(T),b!=null&&A&&N.detachLiveAnalyser(A,b),(L=y.current)==null||L.removeEventListener("statechange",q),y.current=null,I.current=null,g.current=C,v.current=F}}return()=>{var k;x=!0,cancelAnimationFrame(T),b!=null&&A&&N.detachLiveAnalyser(A,b),(k=y.current)==null||k.removeEventListener("statechange",q),y.current=null,I.current=null,g.current=C,v.current=F,p({frequencyBinCount:0,sampleRate:0})}},[e,a,d,o.currentIndex]),{frequencyData:g.current,timeDomainData:v.current,frequencyBinCount:S.frequencyBinCount,sampleRate:S.sampleRate,isSuspended:h,error:f,resume:E,frame:l}}function O(s=!0,e={}){const{togglePlayPause:r,next:n,prev:u}=w.useGingerPlayback(),{toggleMute:c,seek:a,currentTime:o,duration:d}=w.useGingerMedia(),{mute:l,seekForward:m,seekBackward:f}=e;t.useEffect(()=>{if(!s||typeof window>"u")return;const i=(e.playPause??" ").toLowerCase(),h=(e.next??"ArrowRight").toLowerCase(),R=(e.previous??"ArrowLeft").toLowerCase(),S=l==null?void 0:l.toLowerCase(),p=m==null?void 0:m.toLowerCase(),g=f==null?void 0:f.toLowerCase(),v=e.seekSeconds??5,E=y=>{const I=y.target;if(I&&(["INPUT","TEXTAREA","SELECT"].includes(I.tagName)||I.isContentEditable))return;const x=y.key.toLowerCase();if(x===i)y.preventDefault(),r();else if(x===h)y.preventDefault(),n();else if(x===R)y.preventDefault(),u();else if(S&&x===S)y.preventDefault(),c();else if(p&&x===p){y.preventDefault();const b=d>0?d:Number.POSITIVE_INFINITY;a(Math.min(b,o+v))}else g&&x===g&&(y.preventDefault(),a(Math.max(0,o-v)))};return window.addEventListener("keydown",E),()=>window.removeEventListener("keydown",E)},[e.next,e.playPause,e.previous,e.seekSeconds,o,d,s,l,n,u,a,f,m,c,r])}function Y(s){const{durationMs:e,stopAfterTracks:r,respectPause:n=!0,enabled:u=!0,onFire:c}=s,{currentIndex:a,pause:o,isPaused:d}=w.useGingerPlayback(),l=t.useRef(r??0),m=t.useRef(a),f=t.useRef(e??0),i=t.useRef(null);t.useEffect(()=>{l.current=r??0},[r]);const h=t.useRef(e);t.useEffect(()=>{h.current!==e&&(f.current=e??0,h.current=e)},[e]),t.useEffect(()=>{if(!u||!e||e<=0){f.current=e??0,i.current=null;return}if(n&&d){if(i.current!==null){const S=Date.now()-i.current;f.current=Math.max(0,f.current-S),i.current=null}return}i.current=Date.now();const R=setTimeout(()=>{f.current=0,i.current=null,o(),c==null||c()},f.current);return()=>{if(clearTimeout(R),i.current!==null){const S=Date.now()-i.current;f.current=Math.max(0,f.current-S),i.current=null}}},[e,u,d,c,o,n]),t.useEffect(()=>{if(!u||!r||r<=0)return;const R=m.current;m.current=a,a!==R&&(l.current-=1,l.current<=0&&(o(),c==null||c()))},[a,u,c,o,r])}function _(s=!1){const e=w.useGingerState(),r=t.useRef(e);t.useEffect(()=>{if(!s||typeof console>"u")return;const n=r.current;n!==e&&console.debug("[ginger]",{from:{currentIndex:n.currentIndex,isPaused:n.isPaused,currentTime:n.currentTime,repeatMode:n.repeatMode},to:{currentIndex:e.currentIndex,isPaused:e.isPaused,currentTime:e.currentTime,repeatMode:e.repeatMode}}),r.current=e},[s,e])}function j(s){return Math.max(0,Math.min(1,s))}function J(s){const e=w.useGingerMedia(),r=w.useGingerPlayback(),{seek:n}=e,[u,c]=t.useState(0),[a,o]=t.useState(!1),d=U.progressFraction(w.gingerStateFromContextValues(r,e)),l=a?u:d,m=t.useCallback(f=>{if(!(s>0))return;const i=f.currentTarget,h=i.getBoundingClientRect(),R=g=>{const v=j((g-h.left)/h.width);c(v),n(v*s)};o(!0),i.setPointerCapture(f.pointerId),R(f.clientX);const S=g=>R(g.clientX),p=g=>{R(g.clientX),o(!1),i.releasePointerCapture(f.pointerId),i.removeEventListener("pointermove",S),i.removeEventListener("pointerup",p),i.removeEventListener("pointercancel",p)};i.addEventListener("pointermove",S),i.addEventListener("pointerup",p),i.addEventListener("pointercancel",p)},[s,n]);return{fraction:u,displayFraction:l,isDragging:a,onPointerDown:m}}function Q(s={}){const{enabled:e=!0,crossOrigin:r}=s,{tracks:n,currentIndex:u,repeatMode:c,playbackMode:a}=w.useGingerPlayback();t.useEffect(()=>{var m;if(!e||typeof document>"u")return;const o=U.computeNextIndex({tracks:n,currentIndex:u,repeatMode:c,playbackMode:a});if(o===u)return;const d=((m=n[o])==null?void 0:m.fileUrl)??"";if(!d)return;const l=document.createElement("audio");return l.preload="auto",r&&(l.crossOrigin=r),l.src=d,l.load(),()=>{l.removeAttribute("src"),l.load()}},[e,r,n,u,c,a])}function W(s={}){let e=D.createInitialState({tracks:s.tracks??[],currentIndex:s.currentIndex,playlistMeta:s.playlistMeta,isPaused:s.isPaused,isShuffled:s.isShuffled,repeatMode:s.repeatMode,playbackMode:s.playbackMode,volume:s.volume,muted:s.muted,playbackRate:s.playbackRate});const r=new Set,n=a=>{const o=D.gingerReducer(e,a);if(o!==e){e=o;for(const d of r)d(e)}};return{getState:()=>e,dispatch:n,subscribe:a=>(r.add(a),()=>r.delete(a)),init:a=>{n({type:"INIT",payload:a})},clampVolume:D.clampVolume,clampPlaybackRate:D.clampPlaybackRate}}function Z(s={}){const{maxLength:e=50}=s,{tracks:r,currentIndex:n}=w.useGingerPlayback(),[u,c]=t.useState([]),a=t.useRef(null),o=t.useRef(r);o.current=r,t.useEffect(()=>{const l=r[n];if(!l||a.current===n)return;a.current=n;const m={track:l,index:n,playedAt:Date.now()};c(f=>{const i=[...f,m];return i.length>e?i.slice(i.length-e):i})},[n,r,e]);const d=t.useCallback(()=>c([]),[]);return{history:u,clearHistory:d}}function $(){const{setVolume:s,volume:e}=w.useGingerMedia(),[r,n]=t.useState(!1),u=t.useRef(0),c=t.useRef(!1),a=t.useCallback(()=>{cancelAnimationFrame(u.current),c.current=!0,n(!1)},[]);return{fadeVolumeTo:t.useCallback(({targetVolume:d,durationMs:l,onComplete:m})=>{cancelAnimationFrame(u.current),c.current=!1;const f=p=>Math.min(1,Math.max(0,p)),i=f(d),h=performance.now();let R=e;n(!0);const S=p=>{if(c.current)return;const g=p-h,v=Math.min(1,g/Math.max(1,l)),E=R+(i-R)*v;s(f(E)),v<1?u.current=requestAnimationFrame(S):(n(!1),m==null||m())};u.current=requestAnimationFrame(p=>{R=e,S(p)})},[s,e]),cancelFade:a,isFading:r}}function ee(){const{tracks:s,currentIndex:e}=w.useGingerPlayback(),{currentTime:r,duration:n}=w.useGingerMedia(),u=t.useMemo(()=>{var a;return[...((a=s[e])==null?void 0:a.chapters)??[]].filter(o=>o&&Number.isFinite(o.startSeconds)&&o.startSeconds>=0).sort((o,d)=>o.startSeconds-d.startSeconds)},[s,e]);return t.useMemo(()=>{if(u.length===0)return{progress:0,elapsed:0,remaining:0};let c=-1;for(let h=u.length-1;h>=0;h--)if(r>=u[h].startSeconds){c=h;break}if(c===-1)return{progress:0,elapsed:0,remaining:0};const a=u[c],o=u[c+1],d=(o==null?void 0:o.startSeconds)??(n>0?n:r),l=Math.max(0,d-a.startSeconds),m=Math.max(0,r-a.startSeconds),f=Math.max(0,d-r);return{progress:l>0?Math.min(1,m/l):0,elapsed:m,remaining:f}},[u,r,n])}exports.createGingerStore=W;exports.useGingerChapterProgress=ee;exports.useGingerDebugLog=_;exports.useGingerKeyboardShortcuts=O;exports.useGingerLiveAnalyzer=X;exports.useGingerPlaybackHistory=Z;exports.useGingerSleepTimer=Y;exports.useGingerVolumeFade=$;exports.useNextTrackPrefetch=Q;exports.useSeekDrag=J;
|
|
2
|
-
//# sourceMappingURL=useGingerChapterProgress-COLWYX2-.cjs.map
|