markdown-flow-ui 0.1.128 → 0.1.129

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.
Files changed (68) hide show
  1. package/dist/_virtual/index.cjs8.js +1 -1
  2. package/dist/_virtual/index.cjs9.js +1 -1
  3. package/dist/_virtual/index.es8.js +2 -2
  4. package/dist/_virtual/index.es9.js +2 -2
  5. package/dist/components/MarkdownFlowEditor/components/EditorToolbar.cjs.js.map +1 -1
  6. package/dist/components/MarkdownFlowEditor/components/EditorToolbar.es.js.map +1 -1
  7. package/dist/components/Slide/Player.cjs.js +1 -1
  8. package/dist/components/Slide/Player.cjs.js.map +1 -1
  9. package/dist/components/Slide/Player.d.ts +17 -1
  10. package/dist/components/Slide/Player.es.js +614 -543
  11. package/dist/components/Slide/Player.es.js.map +1 -1
  12. package/dist/components/Slide/Slide.cjs.js +1 -1
  13. package/dist/components/Slide/Slide.cjs.js.map +1 -1
  14. package/dist/components/Slide/Slide.es.js +673 -595
  15. package/dist/components/Slide/Slide.es.js.map +1 -1
  16. package/dist/components/Slide/constants.cjs.js +1 -1
  17. package/dist/components/Slide/constants.cjs.js.map +1 -1
  18. package/dist/components/Slide/constants.d.ts +2 -2
  19. package/dist/components/Slide/constants.es.js +2 -2
  20. package/dist/components/Slide/constants.es.js.map +1 -1
  21. package/dist/components/Slide/useSlide.cjs.js +1 -1
  22. package/dist/components/Slide/useSlide.cjs.js.map +1 -1
  23. package/dist/components/Slide/useSlide.d.ts +2 -0
  24. package/dist/components/Slide/useSlide.es.js +124 -105
  25. package/dist/components/Slide/useSlide.es.js.map +1 -1
  26. package/dist/components/Slide/utils/audioSegments.cjs.js +2 -0
  27. package/dist/components/Slide/utils/audioSegments.cjs.js.map +1 -0
  28. package/dist/components/Slide/utils/audioSegments.d.ts +2 -0
  29. package/dist/components/Slide/utils/audioSegments.es.js +21 -0
  30. package/dist/components/Slide/utils/audioSegments.es.js.map +1 -0
  31. package/dist/components/Slide/utils/audioSegments.test.d.ts +1 -0
  32. package/dist/components/Slide/utils/playbackSequence.cjs.js +1 -1
  33. package/dist/components/Slide/utils/playbackSequence.cjs.js.map +1 -1
  34. package/dist/components/Slide/utils/playbackSequence.d.ts +10 -0
  35. package/dist/components/Slide/utils/playbackSequence.es.js +15 -6
  36. package/dist/components/Slide/utils/playbackSequence.es.js.map +1 -1
  37. package/dist/components/Slide/utils/subtitleCue.cjs.js +2 -2
  38. package/dist/components/Slide/utils/subtitleCue.cjs.js.map +1 -1
  39. package/dist/components/Slide/utils/subtitleCue.d.ts +21 -0
  40. package/dist/components/Slide/utils/subtitleCue.es.js +146 -49
  41. package/dist/components/Slide/utils/subtitleCue.es.js.map +1 -1
  42. package/dist/components/Slide/utils/subtitleJumpNavigation.cjs.js +2 -0
  43. package/dist/components/Slide/utils/subtitleJumpNavigation.cjs.js.map +1 -0
  44. package/dist/components/Slide/utils/subtitleJumpNavigation.d.ts +10 -0
  45. package/dist/components/Slide/utils/subtitleJumpNavigation.es.js +22 -0
  46. package/dist/components/Slide/utils/subtitleJumpNavigation.es.js.map +1 -0
  47. package/dist/components/Slide/utils/subtitleJumpNavigation.test.d.ts +1 -0
  48. package/dist/node_modules/@braintree/sanitize-url/dist/index.cjs.js +1 -1
  49. package/dist/node_modules/@braintree/sanitize-url/dist/index.es.js +1 -1
  50. package/dist/node_modules/classnames/index.cjs.js +1 -1
  51. package/dist/node_modules/classnames/index.es.js +1 -1
  52. package/dist/node_modules/lucide-react/dist/esm/icons/fast-forward.cjs.js +7 -0
  53. package/dist/node_modules/lucide-react/dist/esm/icons/fast-forward.cjs.js.map +1 -0
  54. package/dist/node_modules/lucide-react/dist/esm/icons/fast-forward.es.js +16 -0
  55. package/dist/node_modules/lucide-react/dist/esm/icons/fast-forward.es.js.map +1 -0
  56. package/dist/node_modules/lucide-react/dist/esm/icons/rewind.cjs.js +7 -0
  57. package/dist/node_modules/lucide-react/dist/esm/icons/rewind.cjs.js.map +1 -0
  58. package/dist/node_modules/lucide-react/dist/esm/icons/rewind.es.js +16 -0
  59. package/dist/node_modules/lucide-react/dist/esm/icons/rewind.es.js.map +1 -0
  60. package/package.json +1 -1
  61. package/dist/node_modules/lucide-react/dist/esm/icons/rotate-ccw.cjs.js +0 -7
  62. package/dist/node_modules/lucide-react/dist/esm/icons/rotate-ccw.cjs.js.map +0 -1
  63. package/dist/node_modules/lucide-react/dist/esm/icons/rotate-ccw.es.js +0 -16
  64. package/dist/node_modules/lucide-react/dist/esm/icons/rotate-ccw.es.js.map +0 -1
  65. package/dist/node_modules/lucide-react/dist/esm/icons/rotate-cw.cjs.js +0 -7
  66. package/dist/node_modules/lucide-react/dist/esm/icons/rotate-cw.cjs.js.map +0 -1
  67. package/dist/node_modules/lucide-react/dist/esm/icons/rotate-cw.es.js +0 -16
  68. package/dist/node_modules/lucide-react/dist/esm/icons/rotate-cw.es.js.map +0 -1
@@ -1,3 +1,3 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=(s=[],i)=>s.filter(t=>i>=t.start_ms&&i<t.end_ms).sort((t,e)=>(t.position??0)-(e.position??0)||t.segment_index-e.segment_index||t.start_ms-e.start_ms||t.end_ms-e.end_ms).map(t=>t.text.trim()).filter(Boolean).join(`
2
- `),o=s=>Math.max(Number(s.start_ms??0),0),m=s=>Math.max(Number(s.end_ms??0),0),a=new WeakMap,u=(s=[])=>{const i=a.get(s);if(i)return i;const t=[...s].sort((e,n)=>o(e)-o(n)||m(e)-m(n)||(e.position??0)-(n.position??0)||(e.segment_index??0)-(n.segment_index??0));return a.set(s,t),t},c=(s,i)=>{let t=null;for(const e of s){const n=o(e);if(n>i)break;const r=m(e);i>=n&&i<r&&(t=n)}return t},S=(s,i)=>{let t=null;for(const e of s){const n=o(e);if(n>=i)break;t=n}return t},b=(s,i)=>{const t=s.find(e=>o(e)>i);return t?o(t):null},d=({currentTimeMs:s,direction:i,subtitleCues:t=[]})=>{if(t.length===0)return null;const e=u(t),n=Math.max(Number(s),0);if(i==="next")return b(e,n);const r=c(e,n);return S(e,r??n)};exports.getSubtitleCueJumpTime=d;exports.getVisibleSubtitleText=l;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=t=>{const s=Number(t);return Number.isFinite(s)?Math.max(s,0):0},d=(t=[],s)=>{const n=m(s);return t.filter(i=>n>=i.start_ms&&n<i.end_ms).sort((i,e)=>(i.position??0)-(e.position??0)||i.segment_index-e.segment_index||i.start_ms-e.start_ms||i.end_ms-e.end_ms).map(i=>i.text.trim()).filter(Boolean).join(`
2
+ `)},l=t=>Math.max(Number(t.start_ms??0),0),a=t=>Math.max(Number(t.end_ms??0),0),b=new WeakMap,c=(t=[])=>{const s=b.get(t);if(s)return s;const n=[...t].sort((i,e)=>l(i)-l(e)||a(i)-a(e)||(i.position??0)-(e.position??0)||(i.segment_index??0)-(e.segment_index??0));return b.set(t,n),n},f=(t,s)=>{let n=null;for(const i of t){const e=l(i);if(e>s)break;const u=a(i);s>=e&&s<u&&(n=e)}return n},g=(t,s)=>{let n=null;for(const i of t){const e=l(i);if(e>=s)break;n=e}return n},S=(t,s)=>{const n=t.find(i=>l(i)>s);return n?l(n):null},C=t=>{const s=t[0];return s?l(s):null},p=t=>{const s=t[t.length-1];return s?l(s):null},h=(t,s)=>t?.audioIndex===s.audioIndex&&t.timeMs===s.timeMs,_=({currentAudioIndex:t,currentTimeMs:s,target:n})=>n?.audioIndex===t&&n.timeMs!==m(s),T=({audioIndex:t,excludeTarget:s,getFallbackTimeMs:n,sortedSubtitleCues:i,timeMs:e})=>{if(e===null)return null;const u={audioIndex:t,timeMs:e};if(!h(s,u))return u;const r=n(i,e);return r!==null?{audioIndex:t,timeMs:r}:null},M=({currentTimeMs:t,direction:s,subtitleCues:n=[]})=>{if(n.length===0)return null;const i=c(n),e=m(t),u=f(i,e);return g(i,u??e)},J=({currentAudioIndex:t,currentTimeMs:s,excludeTarget:n,tracks:i})=>{for(let e=t;e<i.length;e+=1){const u=c(i[e]?.subtitleCues??[]),r=e===t?S(u,s):C(u),o=T({audioIndex:e,excludeTarget:n,getFallbackTimeMs:S,sortedSubtitleCues:u,timeMs:r});if(o)return o}return null},N=({currentAudioIndex:t,currentTimeMs:s,excludeTarget:n,tracks:i})=>{for(let e=t;e>=0;e-=1){const u=c(i[e]?.subtitleCues??[]),r=e===t?M({currentTimeMs:s,direction:"previous",subtitleCues:u}):p(u),o=T({audioIndex:e,excludeTarget:n,getFallbackTimeMs:g,sortedSubtitleCues:u,timeMs:r});if(o)return o}return null},x=({currentAudioIndex:t,currentTimeMs:s,direction:n,excludeTarget:i=null,tracks:e=[]})=>{if(e.length===0||t<0||t>=e.length)return null;const u=m(s);return n==="next"?J({currentAudioIndex:t,currentTimeMs:u,excludeTarget:i,tracks:e}):N({currentAudioIndex:t,currentTimeMs:u,excludeTarget:i,tracks:e})};exports.getSubtitleCueJumpTarget=x;exports.getSubtitleCueJumpTime=M;exports.getVisibleSubtitleText=d;exports.shouldClearSubtitleCueJumpTarget=_;
3
3
  //# sourceMappingURL=subtitleCue.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"subtitleCue.cjs.js","sources":["../../../../src/components/Slide/utils/subtitleCue.ts"],"sourcesContent":["import type { ElementSubtitleCue } from \"../types\";\n\n/** Direction for subtitle cue jump navigation. */\nexport type SubtitleCueJumpDirection = \"previous\" | \"next\";\n\nexport const getVisibleSubtitleText = (\n subtitleCues: ElementSubtitleCue[] = [],\n currentTimeMs: number\n) =>\n subtitleCues\n .filter(\n (subtitleCue) =>\n currentTimeMs >= subtitleCue.start_ms &&\n currentTimeMs < subtitleCue.end_ms\n )\n .sort(\n (prevCue, nextCue) =>\n (prevCue.position ?? 0) - (nextCue.position ?? 0) ||\n prevCue.segment_index - nextCue.segment_index ||\n prevCue.start_ms - nextCue.start_ms ||\n prevCue.end_ms - nextCue.end_ms\n )\n .map((subtitleCue) => subtitleCue.text.trim())\n .filter(Boolean)\n .join(\"\\n\");\n\nconst getSubtitleCueStartTimeMs = (subtitleCue: ElementSubtitleCue) =>\n Math.max(Number(subtitleCue.start_ms ?? 0), 0);\n\nconst getSubtitleCueEndTimeMs = (subtitleCue: ElementSubtitleCue) =>\n Math.max(Number(subtitleCue.end_ms ?? 0), 0);\n\nconst sortedSubtitleCuesCache = new WeakMap<\n ElementSubtitleCue[],\n ElementSubtitleCue[]\n>();\n\nconst sortSubtitleCuesByPlaybackTime = (\n subtitleCues: ElementSubtitleCue[] = []\n) => {\n const cachedSubtitleCues = sortedSubtitleCuesCache.get(subtitleCues);\n\n if (cachedSubtitleCues) {\n return cachedSubtitleCues;\n }\n\n const sortedSubtitleCues = [...subtitleCues].sort(\n (previousCue, nextCue) =>\n getSubtitleCueStartTimeMs(previousCue) -\n getSubtitleCueStartTimeMs(nextCue) ||\n getSubtitleCueEndTimeMs(previousCue) - getSubtitleCueEndTimeMs(nextCue) ||\n (previousCue.position ?? 0) - (nextCue.position ?? 0) ||\n (previousCue.segment_index ?? 0) - (nextCue.segment_index ?? 0)\n );\n\n sortedSubtitleCuesCache.set(subtitleCues, sortedSubtitleCues);\n\n return sortedSubtitleCues;\n};\n\nconst getActiveSubtitleCueStartTimeMs = (\n subtitleCues: ElementSubtitleCue[],\n currentTimeMs: number\n) => {\n let activeStartTimeMs: number | null = null;\n\n for (const subtitleCue of subtitleCues) {\n const startTimeMs = getSubtitleCueStartTimeMs(subtitleCue);\n\n if (startTimeMs > currentTimeMs) {\n break;\n }\n\n const endTimeMs = getSubtitleCueEndTimeMs(subtitleCue);\n\n if (currentTimeMs >= startTimeMs && currentTimeMs < endTimeMs) {\n activeStartTimeMs = startTimeMs;\n }\n }\n\n return activeStartTimeMs;\n};\n\nconst getPreviousSubtitleCueStartTimeMs = (\n subtitleCues: ElementSubtitleCue[],\n currentTimeMs: number\n) => {\n let previousStartTimeMs: number | null = null;\n\n for (const subtitleCue of subtitleCues) {\n const startTimeMs = getSubtitleCueStartTimeMs(subtitleCue);\n\n if (startTimeMs >= currentTimeMs) {\n break;\n }\n\n previousStartTimeMs = startTimeMs;\n }\n\n return previousStartTimeMs;\n};\n\nconst getNextSubtitleCueStartTimeMs = (\n subtitleCues: ElementSubtitleCue[],\n currentTimeMs: number\n) => {\n const nextSubtitleCue = subtitleCues.find(\n (subtitleCue) => getSubtitleCueStartTimeMs(subtitleCue) > currentTimeMs\n );\n\n return nextSubtitleCue ? getSubtitleCueStartTimeMs(nextSubtitleCue) : null;\n};\n\n/** Options used to resolve a subtitle cue jump target. */\nexport interface GetSubtitleCueJumpTimeOptions {\n currentTimeMs: number;\n direction: SubtitleCueJumpDirection;\n subtitleCues?: ElementSubtitleCue[];\n}\n\n/** Returns the target cue start time in milliseconds, or `null` when no target exists. */\nexport const getSubtitleCueJumpTime = ({\n currentTimeMs,\n direction,\n subtitleCues = [],\n}: GetSubtitleCueJumpTimeOptions): number | null => {\n if (subtitleCues.length === 0) {\n return null;\n }\n\n const sortedSubtitleCues = sortSubtitleCuesByPlaybackTime(subtitleCues);\n const normalizedCurrentTimeMs = Math.max(Number(currentTimeMs), 0);\n\n if (direction === \"next\") {\n return getNextSubtitleCueStartTimeMs(\n sortedSubtitleCues,\n normalizedCurrentTimeMs\n );\n }\n\n const activeStartTimeMs = getActiveSubtitleCueStartTimeMs(\n sortedSubtitleCues,\n normalizedCurrentTimeMs\n );\n\n return getPreviousSubtitleCueStartTimeMs(\n sortedSubtitleCues,\n activeStartTimeMs ?? normalizedCurrentTimeMs\n );\n};\n"],"names":["getVisibleSubtitleText","subtitleCues","currentTimeMs","subtitleCue","prevCue","nextCue","getSubtitleCueStartTimeMs","getSubtitleCueEndTimeMs","sortedSubtitleCuesCache","sortSubtitleCuesByPlaybackTime","cachedSubtitleCues","sortedSubtitleCues","previousCue","getActiveSubtitleCueStartTimeMs","activeStartTimeMs","startTimeMs","endTimeMs","getPreviousSubtitleCueStartTimeMs","previousStartTimeMs","getNextSubtitleCueStartTimeMs","nextSubtitleCue","getSubtitleCueJumpTime","direction","normalizedCurrentTimeMs"],"mappings":"gFAKO,MAAMA,EAAyB,CACpCC,EAAqC,CAAA,EACrCC,IAEAD,EACG,OACEE,GACCD,GAAiBC,EAAY,UAC7BD,EAAgBC,EAAY,MAChC,EACC,KACC,CAACC,EAASC,KACPD,EAAQ,UAAY,IAAMC,EAAQ,UAAY,IAC/CD,EAAQ,cAAgBC,EAAQ,eAChCD,EAAQ,SAAWC,EAAQ,UAC3BD,EAAQ,OAASC,EAAQ,MAC7B,EACC,IAAKF,GAAgBA,EAAY,KAAK,KAAA,CAAM,EAC5C,OAAO,OAAO,EACd,KAAK;AAAA,CAAI,EAERG,EAA6BH,GACjC,KAAK,IAAI,OAAOA,EAAY,UAAY,CAAC,EAAG,CAAC,EAEzCI,EAA2BJ,GAC/B,KAAK,IAAI,OAAOA,EAAY,QAAU,CAAC,EAAG,CAAC,EAEvCK,MAA8B,QAK9BC,EAAiC,CACrCR,EAAqC,KAClC,CACH,MAAMS,EAAqBF,EAAwB,IAAIP,CAAY,EAEnE,GAAIS,EACF,OAAOA,EAGT,MAAMC,EAAqB,CAAC,GAAGV,CAAY,EAAE,KAC3C,CAACW,EAAaP,IACZC,EAA0BM,CAAW,EACnCN,EAA0BD,CAAO,GACnCE,EAAwBK,CAAW,EAAIL,EAAwBF,CAAO,IACrEO,EAAY,UAAY,IAAMP,EAAQ,UAAY,KAClDO,EAAY,eAAiB,IAAMP,EAAQ,eAAiB,EAAA,EAGjE,OAAAG,EAAwB,IAAIP,EAAcU,CAAkB,EAErDA,CACT,EAEME,EAAkC,CACtCZ,EACAC,IACG,CACH,IAAIY,EAAmC,KAEvC,UAAWX,KAAeF,EAAc,CACtC,MAAMc,EAAcT,EAA0BH,CAAW,EAEzD,GAAIY,EAAcb,EAChB,MAGF,MAAMc,EAAYT,EAAwBJ,CAAW,EAEjDD,GAAiBa,GAAeb,EAAgBc,IAClDF,EAAoBC,EAExB,CAEA,OAAOD,CACT,EAEMG,EAAoC,CACxChB,EACAC,IACG,CACH,IAAIgB,EAAqC,KAEzC,UAAWf,KAAeF,EAAc,CACtC,MAAMc,EAAcT,EAA0BH,CAAW,EAEzD,GAAIY,GAAeb,EACjB,MAGFgB,EAAsBH,CACxB,CAEA,OAAOG,CACT,EAEMC,EAAgC,CACpClB,EACAC,IACG,CACH,MAAMkB,EAAkBnB,EAAa,KAClCE,GAAgBG,EAA0BH,CAAW,EAAID,CAAA,EAG5D,OAAOkB,EAAkBd,EAA0Bc,CAAe,EAAI,IACxE,EAUaC,EAAyB,CAAC,CACrC,cAAAnB,EACA,UAAAoB,EACA,aAAArB,EAAe,CAAA,CACjB,IAAoD,CAClD,GAAIA,EAAa,SAAW,EAC1B,OAAO,KAGT,MAAMU,EAAqBF,EAA+BR,CAAY,EAChEsB,EAA0B,KAAK,IAAI,OAAOrB,CAAa,EAAG,CAAC,EAEjE,GAAIoB,IAAc,OAChB,OAAOH,EACLR,EACAY,CAAA,EAIJ,MAAMT,EAAoBD,EACxBF,EACAY,CAAA,EAGF,OAAON,EACLN,EACAG,GAAqBS,CAAA,CAEzB"}
1
+ {"version":3,"file":"subtitleCue.cjs.js","sources":["../../../../src/components/Slide/utils/subtitleCue.ts"],"sourcesContent":["import type { ElementSubtitleCue } from \"../types\";\n\n/** Direction for subtitle cue jump navigation. */\nexport type SubtitleCueJumpDirection = \"previous\" | \"next\";\n\nexport interface SubtitleCueJumpTrack {\n subtitleCues?: ElementSubtitleCue[];\n}\n\nexport interface SubtitleCueJumpTarget {\n audioIndex: number;\n timeMs: number;\n}\n\nexport interface ShouldClearSubtitleCueJumpTargetOptions {\n currentAudioIndex: number;\n currentTimeMs: number;\n target: SubtitleCueJumpTarget | null | undefined;\n}\n\nconst normalizePlaybackTimeMs = (timeMs: number) => {\n const parsedTimeMs = Number(timeMs);\n\n return Number.isFinite(parsedTimeMs) ? Math.max(parsedTimeMs, 0) : 0;\n};\n\nexport const getVisibleSubtitleText = (\n subtitleCues: ElementSubtitleCue[] = [],\n currentTimeMs: number\n): string => {\n const normalizedCurrentTimeMs = normalizePlaybackTimeMs(currentTimeMs);\n\n return subtitleCues\n .filter(\n (subtitleCue) =>\n normalizedCurrentTimeMs >= subtitleCue.start_ms &&\n normalizedCurrentTimeMs < subtitleCue.end_ms\n )\n .sort(\n (prevCue, nextCue) =>\n (prevCue.position ?? 0) - (nextCue.position ?? 0) ||\n prevCue.segment_index - nextCue.segment_index ||\n prevCue.start_ms - nextCue.start_ms ||\n prevCue.end_ms - nextCue.end_ms\n )\n .map((subtitleCue) => subtitleCue.text.trim())\n .filter(Boolean)\n .join(\"\\n\");\n};\n\nconst getSubtitleCueStartTimeMs = (subtitleCue: ElementSubtitleCue) =>\n Math.max(Number(subtitleCue.start_ms ?? 0), 0);\n\nconst getSubtitleCueEndTimeMs = (subtitleCue: ElementSubtitleCue) =>\n Math.max(Number(subtitleCue.end_ms ?? 0), 0);\n\nconst sortedSubtitleCuesCache = new WeakMap<\n ElementSubtitleCue[],\n ElementSubtitleCue[]\n>();\n\nconst sortSubtitleCuesByPlaybackTime = (\n subtitleCues: ElementSubtitleCue[] = []\n) => {\n const cachedSubtitleCues = sortedSubtitleCuesCache.get(subtitleCues);\n\n if (cachedSubtitleCues) {\n return cachedSubtitleCues;\n }\n\n const sortedSubtitleCues = [...subtitleCues].sort(\n (previousCue, nextCue) =>\n getSubtitleCueStartTimeMs(previousCue) -\n getSubtitleCueStartTimeMs(nextCue) ||\n getSubtitleCueEndTimeMs(previousCue) - getSubtitleCueEndTimeMs(nextCue) ||\n (previousCue.position ?? 0) - (nextCue.position ?? 0) ||\n (previousCue.segment_index ?? 0) - (nextCue.segment_index ?? 0)\n );\n\n sortedSubtitleCuesCache.set(subtitleCues, sortedSubtitleCues);\n\n return sortedSubtitleCues;\n};\n\nconst getActiveSubtitleCueStartTimeMs = (\n subtitleCues: ElementSubtitleCue[],\n currentTimeMs: number\n) => {\n let activeStartTimeMs: number | null = null;\n\n for (const subtitleCue of subtitleCues) {\n const startTimeMs = getSubtitleCueStartTimeMs(subtitleCue);\n\n if (startTimeMs > currentTimeMs) {\n break;\n }\n\n const endTimeMs = getSubtitleCueEndTimeMs(subtitleCue);\n\n if (currentTimeMs >= startTimeMs && currentTimeMs < endTimeMs) {\n activeStartTimeMs = startTimeMs;\n }\n }\n\n return activeStartTimeMs;\n};\n\nconst getPreviousSubtitleCueStartTimeMs = (\n subtitleCues: ElementSubtitleCue[],\n currentTimeMs: number\n) => {\n let previousStartTimeMs: number | null = null;\n\n for (const subtitleCue of subtitleCues) {\n const startTimeMs = getSubtitleCueStartTimeMs(subtitleCue);\n\n if (startTimeMs >= currentTimeMs) {\n break;\n }\n\n previousStartTimeMs = startTimeMs;\n }\n\n return previousStartTimeMs;\n};\n\nconst getNextSubtitleCueStartTimeMs = (\n subtitleCues: ElementSubtitleCue[],\n currentTimeMs: number\n) => {\n const nextSubtitleCue = subtitleCues.find(\n (subtitleCue) => getSubtitleCueStartTimeMs(subtitleCue) > currentTimeMs\n );\n\n return nextSubtitleCue ? getSubtitleCueStartTimeMs(nextSubtitleCue) : null;\n};\n\nconst getFirstSubtitleCueStartTimeMs = (subtitleCues: ElementSubtitleCue[]) => {\n const firstSubtitleCue = subtitleCues[0];\n\n return firstSubtitleCue ? getSubtitleCueStartTimeMs(firstSubtitleCue) : null;\n};\n\nconst getLastSubtitleCueStartTimeMs = (subtitleCues: ElementSubtitleCue[]) => {\n const lastSubtitleCue = subtitleCues[subtitleCues.length - 1];\n\n return lastSubtitleCue ? getSubtitleCueStartTimeMs(lastSubtitleCue) : null;\n};\n\nconst isSameSubtitleCueJumpTarget = (\n previousTarget: SubtitleCueJumpTarget | null | undefined,\n nextTarget: SubtitleCueJumpTarget\n) =>\n previousTarget?.audioIndex === nextTarget.audioIndex &&\n previousTarget.timeMs === nextTarget.timeMs;\n\nexport const shouldClearSubtitleCueJumpTarget = ({\n currentAudioIndex,\n currentTimeMs,\n target,\n}: ShouldClearSubtitleCueJumpTargetOptions) =>\n target?.audioIndex === currentAudioIndex &&\n target.timeMs !== normalizePlaybackTimeMs(currentTimeMs);\n\nconst resolveSubtitleCueJumpTargetCandidate = ({\n audioIndex,\n excludeTarget,\n getFallbackTimeMs,\n sortedSubtitleCues,\n timeMs,\n}: {\n audioIndex: number;\n excludeTarget: SubtitleCueJumpTarget | null;\n getFallbackTimeMs: (\n subtitleCues: ElementSubtitleCue[],\n timeMs: number\n ) => number | null;\n sortedSubtitleCues: ElementSubtitleCue[];\n timeMs: number | null;\n}): SubtitleCueJumpTarget | null => {\n if (timeMs === null) {\n return null;\n }\n\n const target = {\n audioIndex,\n timeMs,\n };\n\n if (!isSameSubtitleCueJumpTarget(excludeTarget, target)) {\n return target;\n }\n\n const fallbackTimeMs = getFallbackTimeMs(sortedSubtitleCues, timeMs);\n\n return fallbackTimeMs !== null\n ? {\n audioIndex,\n timeMs: fallbackTimeMs,\n }\n : null;\n};\n\n/** Options used to resolve a subtitle cue jump target. */\nexport interface GetSubtitleCueJumpTimeOptions {\n currentTimeMs: number;\n direction: SubtitleCueJumpDirection;\n subtitleCues?: ElementSubtitleCue[];\n}\n\n/** Returns the target cue start time in milliseconds, or `null` when no target exists. */\nexport const getSubtitleCueJumpTime = ({\n currentTimeMs,\n direction,\n subtitleCues = [],\n}: GetSubtitleCueJumpTimeOptions): number | null => {\n if (subtitleCues.length === 0) {\n return null;\n }\n\n const sortedSubtitleCues = sortSubtitleCuesByPlaybackTime(subtitleCues);\n const normalizedCurrentTimeMs = normalizePlaybackTimeMs(currentTimeMs);\n\n if (direction === \"next\") {\n return getNextSubtitleCueStartTimeMs(\n sortedSubtitleCues,\n normalizedCurrentTimeMs\n );\n }\n\n const activeStartTimeMs = getActiveSubtitleCueStartTimeMs(\n sortedSubtitleCues,\n normalizedCurrentTimeMs\n );\n\n return getPreviousSubtitleCueStartTimeMs(\n sortedSubtitleCues,\n activeStartTimeMs ?? normalizedCurrentTimeMs\n );\n};\n\nexport interface GetSubtitleCueJumpTargetOptions {\n currentAudioIndex: number;\n currentTimeMs: number;\n direction: SubtitleCueJumpDirection;\n excludeTarget?: SubtitleCueJumpTarget | null;\n tracks?: SubtitleCueJumpTrack[];\n}\n\nconst getNextSubtitleCueJumpTarget = ({\n currentAudioIndex,\n currentTimeMs,\n excludeTarget,\n tracks,\n}: {\n currentAudioIndex: number;\n currentTimeMs: number;\n excludeTarget: SubtitleCueJumpTarget | null;\n tracks: SubtitleCueJumpTrack[];\n}) => {\n for (\n let audioIndex = currentAudioIndex;\n audioIndex < tracks.length;\n audioIndex += 1\n ) {\n const sortedSubtitleCues = sortSubtitleCuesByPlaybackTime(\n tracks[audioIndex]?.subtitleCues ?? []\n );\n const timeMs =\n audioIndex === currentAudioIndex\n ? getNextSubtitleCueStartTimeMs(sortedSubtitleCues, currentTimeMs)\n : getFirstSubtitleCueStartTimeMs(sortedSubtitleCues);\n const target = resolveSubtitleCueJumpTargetCandidate({\n audioIndex,\n excludeTarget,\n getFallbackTimeMs: getNextSubtitleCueStartTimeMs,\n sortedSubtitleCues,\n timeMs,\n });\n\n if (target) {\n return target;\n }\n }\n\n return null;\n};\n\nconst getPreviousSubtitleCueJumpTarget = ({\n currentAudioIndex,\n currentTimeMs,\n excludeTarget,\n tracks,\n}: {\n currentAudioIndex: number;\n currentTimeMs: number;\n excludeTarget: SubtitleCueJumpTarget | null;\n tracks: SubtitleCueJumpTrack[];\n}) => {\n for (let audioIndex = currentAudioIndex; audioIndex >= 0; audioIndex -= 1) {\n const sortedSubtitleCues = sortSubtitleCuesByPlaybackTime(\n tracks[audioIndex]?.subtitleCues ?? []\n );\n const timeMs =\n audioIndex === currentAudioIndex\n ? getSubtitleCueJumpTime({\n currentTimeMs,\n direction: \"previous\",\n subtitleCues: sortedSubtitleCues,\n })\n : getLastSubtitleCueStartTimeMs(sortedSubtitleCues);\n const target = resolveSubtitleCueJumpTargetCandidate({\n audioIndex,\n excludeTarget,\n getFallbackTimeMs: getPreviousSubtitleCueStartTimeMs,\n sortedSubtitleCues,\n timeMs,\n });\n\n if (target) {\n return target;\n }\n }\n\n return null;\n};\n\nexport const getSubtitleCueJumpTarget = ({\n currentAudioIndex,\n currentTimeMs,\n direction,\n excludeTarget = null,\n tracks = [],\n}: GetSubtitleCueJumpTargetOptions): SubtitleCueJumpTarget | null => {\n if (\n tracks.length === 0 ||\n currentAudioIndex < 0 ||\n currentAudioIndex >= tracks.length\n ) {\n return null;\n }\n\n const normalizedCurrentTimeMs = normalizePlaybackTimeMs(currentTimeMs);\n\n if (direction === \"next\") {\n return getNextSubtitleCueJumpTarget({\n currentAudioIndex,\n currentTimeMs: normalizedCurrentTimeMs,\n excludeTarget,\n tracks,\n });\n }\n\n return getPreviousSubtitleCueJumpTarget({\n currentAudioIndex,\n currentTimeMs: normalizedCurrentTimeMs,\n excludeTarget,\n tracks,\n });\n};\n"],"names":["normalizePlaybackTimeMs","timeMs","parsedTimeMs","getVisibleSubtitleText","subtitleCues","currentTimeMs","normalizedCurrentTimeMs","subtitleCue","prevCue","nextCue","getSubtitleCueStartTimeMs","getSubtitleCueEndTimeMs","sortedSubtitleCuesCache","sortSubtitleCuesByPlaybackTime","cachedSubtitleCues","sortedSubtitleCues","previousCue","getActiveSubtitleCueStartTimeMs","activeStartTimeMs","startTimeMs","endTimeMs","getPreviousSubtitleCueStartTimeMs","previousStartTimeMs","getNextSubtitleCueStartTimeMs","nextSubtitleCue","getFirstSubtitleCueStartTimeMs","firstSubtitleCue","getLastSubtitleCueStartTimeMs","lastSubtitleCue","isSameSubtitleCueJumpTarget","previousTarget","nextTarget","shouldClearSubtitleCueJumpTarget","currentAudioIndex","target","resolveSubtitleCueJumpTargetCandidate","audioIndex","excludeTarget","getFallbackTimeMs","fallbackTimeMs","getSubtitleCueJumpTime","direction","getNextSubtitleCueJumpTarget","tracks","getPreviousSubtitleCueJumpTarget","getSubtitleCueJumpTarget"],"mappings":"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"}
@@ -1,7 +1,20 @@
1
1
  import { ElementSubtitleCue } from '../types';
2
2
  /** Direction for subtitle cue jump navigation. */
3
3
  export type SubtitleCueJumpDirection = "previous" | "next";
4
+ export interface SubtitleCueJumpTrack {
5
+ subtitleCues?: ElementSubtitleCue[];
6
+ }
7
+ export interface SubtitleCueJumpTarget {
8
+ audioIndex: number;
9
+ timeMs: number;
10
+ }
11
+ export interface ShouldClearSubtitleCueJumpTargetOptions {
12
+ currentAudioIndex: number;
13
+ currentTimeMs: number;
14
+ target: SubtitleCueJumpTarget | null | undefined;
15
+ }
4
16
  export declare const getVisibleSubtitleText: (subtitleCues: ElementSubtitleCue[] | undefined, currentTimeMs: number) => string;
17
+ export declare const shouldClearSubtitleCueJumpTarget: ({ currentAudioIndex, currentTimeMs, target, }: ShouldClearSubtitleCueJumpTargetOptions) => boolean;
5
18
  /** Options used to resolve a subtitle cue jump target. */
6
19
  export interface GetSubtitleCueJumpTimeOptions {
7
20
  currentTimeMs: number;
@@ -10,3 +23,11 @@ export interface GetSubtitleCueJumpTimeOptions {
10
23
  }
11
24
  /** Returns the target cue start time in milliseconds, or `null` when no target exists. */
12
25
  export declare const getSubtitleCueJumpTime: ({ currentTimeMs, direction, subtitleCues, }: GetSubtitleCueJumpTimeOptions) => number | null;
26
+ export interface GetSubtitleCueJumpTargetOptions {
27
+ currentAudioIndex: number;
28
+ currentTimeMs: number;
29
+ direction: SubtitleCueJumpDirection;
30
+ excludeTarget?: SubtitleCueJumpTarget | null;
31
+ tracks?: SubtitleCueJumpTrack[];
32
+ }
33
+ export declare const getSubtitleCueJumpTarget: ({ currentAudioIndex, currentTimeMs, direction, excludeTarget, tracks, }: GetSubtitleCueJumpTargetOptions) => SubtitleCueJumpTarget | null;
@@ -1,64 +1,161 @@
1
- const b = (s = [], n) => s.filter(
2
- (t) => n >= t.start_ms && n < t.end_ms
3
- ).sort(
4
- (t, e) => (t.position ?? 0) - (e.position ?? 0) || t.segment_index - e.segment_index || t.start_ms - e.start_ms || t.end_ms - e.end_ms
5
- ).map((t) => t.text.trim()).filter(Boolean).join(`
6
- `), o = (s) => Math.max(Number(s.start_ms ?? 0), 0), m = (s) => Math.max(Number(s.end_ms ?? 0), 0), a = /* @__PURE__ */ new WeakMap(), l = (s = []) => {
7
- const n = a.get(s);
8
- if (n)
9
- return n;
10
- const t = [...s].sort(
11
- (e, i) => o(e) - o(i) || m(e) - m(i) || (e.position ?? 0) - (i.position ?? 0) || (e.segment_index ?? 0) - (i.segment_index ?? 0)
1
+ const m = (t) => {
2
+ const s = Number(t);
3
+ return Number.isFinite(s) ? Math.max(s, 0) : 0;
4
+ }, J = (t = [], s) => {
5
+ const i = m(s);
6
+ return t.filter(
7
+ (n) => i >= n.start_ms && i < n.end_ms
8
+ ).sort(
9
+ (n, e) => (n.position ?? 0) - (e.position ?? 0) || n.segment_index - e.segment_index || n.start_ms - e.start_ms || n.end_ms - e.end_ms
10
+ ).map((n) => n.text.trim()).filter(Boolean).join(`
11
+ `);
12
+ }, l = (t) => Math.max(Number(t.start_ms ?? 0), 0), a = (t) => Math.max(Number(t.end_ms ?? 0), 0), b = /* @__PURE__ */ new WeakMap(), c = (t = []) => {
13
+ const s = b.get(t);
14
+ if (s)
15
+ return s;
16
+ const i = [...t].sort(
17
+ (n, e) => l(n) - l(e) || a(n) - a(e) || (n.position ?? 0) - (e.position ?? 0) || (n.segment_index ?? 0) - (e.segment_index ?? 0)
12
18
  );
13
- return a.set(s, t), t;
14
- }, c = (s, n) => {
15
- let t = null;
16
- for (const e of s) {
17
- const i = o(e);
18
- if (i > n)
19
+ return b.set(t, i), i;
20
+ }, T = (t, s) => {
21
+ let i = null;
22
+ for (const n of t) {
23
+ const e = l(n);
24
+ if (e > s)
19
25
  break;
20
- const r = m(e);
21
- n >= i && n < r && (t = i);
26
+ const r = a(n);
27
+ s >= e && s < r && (i = e);
22
28
  }
23
- return t;
24
- }, u = (s, n) => {
25
- let t = null;
26
- for (const e of s) {
27
- const i = o(e);
28
- if (i >= n)
29
+ return i;
30
+ }, g = (t, s) => {
31
+ let i = null;
32
+ for (const n of t) {
33
+ const e = l(n);
34
+ if (e >= s)
29
35
  break;
30
- t = i;
36
+ i = e;
31
37
  }
32
- return t;
33
- }, S = (s, n) => {
34
- const t = s.find(
35
- (e) => o(e) > n
38
+ return i;
39
+ }, S = (t, s) => {
40
+ const i = t.find(
41
+ (n) => l(n) > s
36
42
  );
37
- return t ? o(t) : null;
38
- }, d = ({
43
+ return i ? l(i) : null;
44
+ }, d = (t) => {
45
+ const s = t[0];
46
+ return s ? l(s) : null;
47
+ }, f = (t) => {
48
+ const s = t[t.length - 1];
49
+ return s ? l(s) : null;
50
+ }, C = (t, s) => t?.audioIndex === s.audioIndex && t.timeMs === s.timeMs, N = ({
51
+ currentAudioIndex: t,
39
52
  currentTimeMs: s,
40
- direction: n,
41
- subtitleCues: t = []
53
+ target: i
54
+ }) => i?.audioIndex === t && i.timeMs !== m(s), M = ({
55
+ audioIndex: t,
56
+ excludeTarget: s,
57
+ getFallbackTimeMs: i,
58
+ sortedSubtitleCues: n,
59
+ timeMs: e
42
60
  }) => {
43
- if (t.length === 0)
61
+ if (e === null)
44
62
  return null;
45
- const e = l(t), i = Math.max(Number(s), 0);
46
- if (n === "next")
47
- return S(
48
- e,
49
- i
50
- );
51
- const r = c(
52
- e,
53
- i
63
+ const r = {
64
+ audioIndex: t,
65
+ timeMs: e
66
+ };
67
+ if (!C(s, r))
68
+ return r;
69
+ const u = i(n, e);
70
+ return u !== null ? {
71
+ audioIndex: t,
72
+ timeMs: u
73
+ } : null;
74
+ }, _ = ({
75
+ currentTimeMs: t,
76
+ direction: s,
77
+ subtitleCues: i = []
78
+ }) => {
79
+ if (i.length === 0)
80
+ return null;
81
+ const n = c(i), e = m(t), r = T(
82
+ n,
83
+ e
54
84
  );
55
- return u(
56
- e,
57
- r ?? i
85
+ return g(
86
+ n,
87
+ r ?? e
58
88
  );
89
+ }, h = ({
90
+ currentAudioIndex: t,
91
+ currentTimeMs: s,
92
+ excludeTarget: i,
93
+ tracks: n
94
+ }) => {
95
+ for (let e = t; e < n.length; e += 1) {
96
+ const r = c(
97
+ n[e]?.subtitleCues ?? []
98
+ ), u = e === t ? S(r, s) : d(r), o = M({
99
+ audioIndex: e,
100
+ excludeTarget: i,
101
+ getFallbackTimeMs: S,
102
+ sortedSubtitleCues: r,
103
+ timeMs: u
104
+ });
105
+ if (o)
106
+ return o;
107
+ }
108
+ return null;
109
+ }, p = ({
110
+ currentAudioIndex: t,
111
+ currentTimeMs: s,
112
+ excludeTarget: i,
113
+ tracks: n
114
+ }) => {
115
+ for (let e = t; e >= 0; e -= 1) {
116
+ const r = c(
117
+ n[e]?.subtitleCues ?? []
118
+ ), u = e === t ? _({
119
+ currentTimeMs: s,
120
+ direction: "previous",
121
+ subtitleCues: r
122
+ }) : f(r), o = M({
123
+ audioIndex: e,
124
+ excludeTarget: i,
125
+ getFallbackTimeMs: g,
126
+ sortedSubtitleCues: r,
127
+ timeMs: u
128
+ });
129
+ if (o)
130
+ return o;
131
+ }
132
+ return null;
133
+ }, x = ({
134
+ currentAudioIndex: t,
135
+ currentTimeMs: s,
136
+ direction: i,
137
+ excludeTarget: n = null,
138
+ tracks: e = []
139
+ }) => {
140
+ if (e.length === 0 || t < 0 || t >= e.length)
141
+ return null;
142
+ const r = m(s);
143
+ return i === "next" ? h({
144
+ currentAudioIndex: t,
145
+ currentTimeMs: r,
146
+ excludeTarget: n,
147
+ tracks: e
148
+ }) : p({
149
+ currentAudioIndex: t,
150
+ currentTimeMs: r,
151
+ excludeTarget: n,
152
+ tracks: e
153
+ });
59
154
  };
60
155
  export {
61
- d as getSubtitleCueJumpTime,
62
- b as getVisibleSubtitleText
156
+ x as getSubtitleCueJumpTarget,
157
+ _ as getSubtitleCueJumpTime,
158
+ J as getVisibleSubtitleText,
159
+ N as shouldClearSubtitleCueJumpTarget
63
160
  };
64
161
  //# sourceMappingURL=subtitleCue.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"subtitleCue.es.js","sources":["../../../../src/components/Slide/utils/subtitleCue.ts"],"sourcesContent":["import type { ElementSubtitleCue } from \"../types\";\n\n/** Direction for subtitle cue jump navigation. */\nexport type SubtitleCueJumpDirection = \"previous\" | \"next\";\n\nexport const getVisibleSubtitleText = (\n subtitleCues: ElementSubtitleCue[] = [],\n currentTimeMs: number\n) =>\n subtitleCues\n .filter(\n (subtitleCue) =>\n currentTimeMs >= subtitleCue.start_ms &&\n currentTimeMs < subtitleCue.end_ms\n )\n .sort(\n (prevCue, nextCue) =>\n (prevCue.position ?? 0) - (nextCue.position ?? 0) ||\n prevCue.segment_index - nextCue.segment_index ||\n prevCue.start_ms - nextCue.start_ms ||\n prevCue.end_ms - nextCue.end_ms\n )\n .map((subtitleCue) => subtitleCue.text.trim())\n .filter(Boolean)\n .join(\"\\n\");\n\nconst getSubtitleCueStartTimeMs = (subtitleCue: ElementSubtitleCue) =>\n Math.max(Number(subtitleCue.start_ms ?? 0), 0);\n\nconst getSubtitleCueEndTimeMs = (subtitleCue: ElementSubtitleCue) =>\n Math.max(Number(subtitleCue.end_ms ?? 0), 0);\n\nconst sortedSubtitleCuesCache = new WeakMap<\n ElementSubtitleCue[],\n ElementSubtitleCue[]\n>();\n\nconst sortSubtitleCuesByPlaybackTime = (\n subtitleCues: ElementSubtitleCue[] = []\n) => {\n const cachedSubtitleCues = sortedSubtitleCuesCache.get(subtitleCues);\n\n if (cachedSubtitleCues) {\n return cachedSubtitleCues;\n }\n\n const sortedSubtitleCues = [...subtitleCues].sort(\n (previousCue, nextCue) =>\n getSubtitleCueStartTimeMs(previousCue) -\n getSubtitleCueStartTimeMs(nextCue) ||\n getSubtitleCueEndTimeMs(previousCue) - getSubtitleCueEndTimeMs(nextCue) ||\n (previousCue.position ?? 0) - (nextCue.position ?? 0) ||\n (previousCue.segment_index ?? 0) - (nextCue.segment_index ?? 0)\n );\n\n sortedSubtitleCuesCache.set(subtitleCues, sortedSubtitleCues);\n\n return sortedSubtitleCues;\n};\n\nconst getActiveSubtitleCueStartTimeMs = (\n subtitleCues: ElementSubtitleCue[],\n currentTimeMs: number\n) => {\n let activeStartTimeMs: number | null = null;\n\n for (const subtitleCue of subtitleCues) {\n const startTimeMs = getSubtitleCueStartTimeMs(subtitleCue);\n\n if (startTimeMs > currentTimeMs) {\n break;\n }\n\n const endTimeMs = getSubtitleCueEndTimeMs(subtitleCue);\n\n if (currentTimeMs >= startTimeMs && currentTimeMs < endTimeMs) {\n activeStartTimeMs = startTimeMs;\n }\n }\n\n return activeStartTimeMs;\n};\n\nconst getPreviousSubtitleCueStartTimeMs = (\n subtitleCues: ElementSubtitleCue[],\n currentTimeMs: number\n) => {\n let previousStartTimeMs: number | null = null;\n\n for (const subtitleCue of subtitleCues) {\n const startTimeMs = getSubtitleCueStartTimeMs(subtitleCue);\n\n if (startTimeMs >= currentTimeMs) {\n break;\n }\n\n previousStartTimeMs = startTimeMs;\n }\n\n return previousStartTimeMs;\n};\n\nconst getNextSubtitleCueStartTimeMs = (\n subtitleCues: ElementSubtitleCue[],\n currentTimeMs: number\n) => {\n const nextSubtitleCue = subtitleCues.find(\n (subtitleCue) => getSubtitleCueStartTimeMs(subtitleCue) > currentTimeMs\n );\n\n return nextSubtitleCue ? getSubtitleCueStartTimeMs(nextSubtitleCue) : null;\n};\n\n/** Options used to resolve a subtitle cue jump target. */\nexport interface GetSubtitleCueJumpTimeOptions {\n currentTimeMs: number;\n direction: SubtitleCueJumpDirection;\n subtitleCues?: ElementSubtitleCue[];\n}\n\n/** Returns the target cue start time in milliseconds, or `null` when no target exists. */\nexport const getSubtitleCueJumpTime = ({\n currentTimeMs,\n direction,\n subtitleCues = [],\n}: GetSubtitleCueJumpTimeOptions): number | null => {\n if (subtitleCues.length === 0) {\n return null;\n }\n\n const sortedSubtitleCues = sortSubtitleCuesByPlaybackTime(subtitleCues);\n const normalizedCurrentTimeMs = Math.max(Number(currentTimeMs), 0);\n\n if (direction === \"next\") {\n return getNextSubtitleCueStartTimeMs(\n sortedSubtitleCues,\n normalizedCurrentTimeMs\n );\n }\n\n const activeStartTimeMs = getActiveSubtitleCueStartTimeMs(\n sortedSubtitleCues,\n normalizedCurrentTimeMs\n );\n\n return getPreviousSubtitleCueStartTimeMs(\n sortedSubtitleCues,\n activeStartTimeMs ?? normalizedCurrentTimeMs\n );\n};\n"],"names":["getVisibleSubtitleText","subtitleCues","currentTimeMs","subtitleCue","prevCue","nextCue","getSubtitleCueStartTimeMs","getSubtitleCueEndTimeMs","sortedSubtitleCuesCache","sortSubtitleCuesByPlaybackTime","cachedSubtitleCues","sortedSubtitleCues","previousCue","getActiveSubtitleCueStartTimeMs","activeStartTimeMs","startTimeMs","endTimeMs","getPreviousSubtitleCueStartTimeMs","previousStartTimeMs","getNextSubtitleCueStartTimeMs","nextSubtitleCue","getSubtitleCueJumpTime","direction","normalizedCurrentTimeMs"],"mappings":"AAKO,MAAMA,IAAyB,CACpCC,IAAqC,CAAA,GACrCC,MAEAD,EACG;AAAA,EACC,CAACE,MACCD,KAAiBC,EAAY,YAC7BD,IAAgBC,EAAY;AAChC,EACC;AAAA,EACC,CAACC,GAASC,OACPD,EAAQ,YAAY,MAAMC,EAAQ,YAAY,MAC/CD,EAAQ,gBAAgBC,EAAQ,iBAChCD,EAAQ,WAAWC,EAAQ,YAC3BD,EAAQ,SAASC,EAAQ;AAC7B,EACC,IAAI,CAACF,MAAgBA,EAAY,KAAK,KAAA,CAAM,EAC5C,OAAO,OAAO,EACd,KAAK;AAAA,CAAI,GAERG,IAA4B,CAACH,MACjC,KAAK,IAAI,OAAOA,EAAY,YAAY,CAAC,GAAG,CAAC,GAEzCI,IAA0B,CAACJ,MAC/B,KAAK,IAAI,OAAOA,EAAY,UAAU,CAAC,GAAG,CAAC,GAEvCK,wBAA8B,QAAA,GAK9BC,IAAiC,CACrCR,IAAqC,OAClC;AACH,QAAMS,IAAqBF,EAAwB,IAAIP,CAAY;AAEnE,MAAIS;AACF,WAAOA;AAGT,QAAMC,IAAqB,CAAC,GAAGV,CAAY,EAAE;AAAA,IAC3C,CAACW,GAAaP,MACZC,EAA0BM,CAAW,IACnCN,EAA0BD,CAAO,KACnCE,EAAwBK,CAAW,IAAIL,EAAwBF,CAAO,MACrEO,EAAY,YAAY,MAAMP,EAAQ,YAAY,OAClDO,EAAY,iBAAiB,MAAMP,EAAQ,iBAAiB;AAAA,EAAA;AAGjE,SAAAG,EAAwB,IAAIP,GAAcU,CAAkB,GAErDA;AACT,GAEME,IAAkC,CACtCZ,GACAC,MACG;AACH,MAAIY,IAAmC;AAEvC,aAAWX,KAAeF,GAAc;AACtC,UAAMc,IAAcT,EAA0BH,CAAW;AAEzD,QAAIY,IAAcb;AAChB;AAGF,UAAMc,IAAYT,EAAwBJ,CAAW;AAErD,IAAID,KAAiBa,KAAeb,IAAgBc,MAClDF,IAAoBC;AAAA,EAExB;AAEA,SAAOD;AACT,GAEMG,IAAoC,CACxChB,GACAC,MACG;AACH,MAAIgB,IAAqC;AAEzC,aAAWf,KAAeF,GAAc;AACtC,UAAMc,IAAcT,EAA0BH,CAAW;AAEzD,QAAIY,KAAeb;AACjB;AAGF,IAAAgB,IAAsBH;AAAA,EACxB;AAEA,SAAOG;AACT,GAEMC,IAAgC,CACpClB,GACAC,MACG;AACH,QAAMkB,IAAkBnB,EAAa;AAAA,IACnC,CAACE,MAAgBG,EAA0BH,CAAW,IAAID;AAAA,EAAA;AAG5D,SAAOkB,IAAkBd,EAA0Bc,CAAe,IAAI;AACxE,GAUaC,IAAyB,CAAC;AAAA,EACrC,eAAAnB;AAAA,EACA,WAAAoB;AAAA,EACA,cAAArB,IAAe,CAAA;AACjB,MAAoD;AAClD,MAAIA,EAAa,WAAW;AAC1B,WAAO;AAGT,QAAMU,IAAqBF,EAA+BR,CAAY,GAChEsB,IAA0B,KAAK,IAAI,OAAOrB,CAAa,GAAG,CAAC;AAEjE,MAAIoB,MAAc;AAChB,WAAOH;AAAA,MACLR;AAAA,MACAY;AAAA,IAAA;AAIJ,QAAMT,IAAoBD;AAAA,IACxBF;AAAA,IACAY;AAAA,EAAA;AAGF,SAAON;AAAA,IACLN;AAAA,IACAG,KAAqBS;AAAA,EAAA;AAEzB;"}
1
+ {"version":3,"file":"subtitleCue.es.js","sources":["../../../../src/components/Slide/utils/subtitleCue.ts"],"sourcesContent":["import type { ElementSubtitleCue } from \"../types\";\n\n/** Direction for subtitle cue jump navigation. */\nexport type SubtitleCueJumpDirection = \"previous\" | \"next\";\n\nexport interface SubtitleCueJumpTrack {\n subtitleCues?: ElementSubtitleCue[];\n}\n\nexport interface SubtitleCueJumpTarget {\n audioIndex: number;\n timeMs: number;\n}\n\nexport interface ShouldClearSubtitleCueJumpTargetOptions {\n currentAudioIndex: number;\n currentTimeMs: number;\n target: SubtitleCueJumpTarget | null | undefined;\n}\n\nconst normalizePlaybackTimeMs = (timeMs: number) => {\n const parsedTimeMs = Number(timeMs);\n\n return Number.isFinite(parsedTimeMs) ? Math.max(parsedTimeMs, 0) : 0;\n};\n\nexport const getVisibleSubtitleText = (\n subtitleCues: ElementSubtitleCue[] = [],\n currentTimeMs: number\n): string => {\n const normalizedCurrentTimeMs = normalizePlaybackTimeMs(currentTimeMs);\n\n return subtitleCues\n .filter(\n (subtitleCue) =>\n normalizedCurrentTimeMs >= subtitleCue.start_ms &&\n normalizedCurrentTimeMs < subtitleCue.end_ms\n )\n .sort(\n (prevCue, nextCue) =>\n (prevCue.position ?? 0) - (nextCue.position ?? 0) ||\n prevCue.segment_index - nextCue.segment_index ||\n prevCue.start_ms - nextCue.start_ms ||\n prevCue.end_ms - nextCue.end_ms\n )\n .map((subtitleCue) => subtitleCue.text.trim())\n .filter(Boolean)\n .join(\"\\n\");\n};\n\nconst getSubtitleCueStartTimeMs = (subtitleCue: ElementSubtitleCue) =>\n Math.max(Number(subtitleCue.start_ms ?? 0), 0);\n\nconst getSubtitleCueEndTimeMs = (subtitleCue: ElementSubtitleCue) =>\n Math.max(Number(subtitleCue.end_ms ?? 0), 0);\n\nconst sortedSubtitleCuesCache = new WeakMap<\n ElementSubtitleCue[],\n ElementSubtitleCue[]\n>();\n\nconst sortSubtitleCuesByPlaybackTime = (\n subtitleCues: ElementSubtitleCue[] = []\n) => {\n const cachedSubtitleCues = sortedSubtitleCuesCache.get(subtitleCues);\n\n if (cachedSubtitleCues) {\n return cachedSubtitleCues;\n }\n\n const sortedSubtitleCues = [...subtitleCues].sort(\n (previousCue, nextCue) =>\n getSubtitleCueStartTimeMs(previousCue) -\n getSubtitleCueStartTimeMs(nextCue) ||\n getSubtitleCueEndTimeMs(previousCue) - getSubtitleCueEndTimeMs(nextCue) ||\n (previousCue.position ?? 0) - (nextCue.position ?? 0) ||\n (previousCue.segment_index ?? 0) - (nextCue.segment_index ?? 0)\n );\n\n sortedSubtitleCuesCache.set(subtitleCues, sortedSubtitleCues);\n\n return sortedSubtitleCues;\n};\n\nconst getActiveSubtitleCueStartTimeMs = (\n subtitleCues: ElementSubtitleCue[],\n currentTimeMs: number\n) => {\n let activeStartTimeMs: number | null = null;\n\n for (const subtitleCue of subtitleCues) {\n const startTimeMs = getSubtitleCueStartTimeMs(subtitleCue);\n\n if (startTimeMs > currentTimeMs) {\n break;\n }\n\n const endTimeMs = getSubtitleCueEndTimeMs(subtitleCue);\n\n if (currentTimeMs >= startTimeMs && currentTimeMs < endTimeMs) {\n activeStartTimeMs = startTimeMs;\n }\n }\n\n return activeStartTimeMs;\n};\n\nconst getPreviousSubtitleCueStartTimeMs = (\n subtitleCues: ElementSubtitleCue[],\n currentTimeMs: number\n) => {\n let previousStartTimeMs: number | null = null;\n\n for (const subtitleCue of subtitleCues) {\n const startTimeMs = getSubtitleCueStartTimeMs(subtitleCue);\n\n if (startTimeMs >= currentTimeMs) {\n break;\n }\n\n previousStartTimeMs = startTimeMs;\n }\n\n return previousStartTimeMs;\n};\n\nconst getNextSubtitleCueStartTimeMs = (\n subtitleCues: ElementSubtitleCue[],\n currentTimeMs: number\n) => {\n const nextSubtitleCue = subtitleCues.find(\n (subtitleCue) => getSubtitleCueStartTimeMs(subtitleCue) > currentTimeMs\n );\n\n return nextSubtitleCue ? getSubtitleCueStartTimeMs(nextSubtitleCue) : null;\n};\n\nconst getFirstSubtitleCueStartTimeMs = (subtitleCues: ElementSubtitleCue[]) => {\n const firstSubtitleCue = subtitleCues[0];\n\n return firstSubtitleCue ? getSubtitleCueStartTimeMs(firstSubtitleCue) : null;\n};\n\nconst getLastSubtitleCueStartTimeMs = (subtitleCues: ElementSubtitleCue[]) => {\n const lastSubtitleCue = subtitleCues[subtitleCues.length - 1];\n\n return lastSubtitleCue ? getSubtitleCueStartTimeMs(lastSubtitleCue) : null;\n};\n\nconst isSameSubtitleCueJumpTarget = (\n previousTarget: SubtitleCueJumpTarget | null | undefined,\n nextTarget: SubtitleCueJumpTarget\n) =>\n previousTarget?.audioIndex === nextTarget.audioIndex &&\n previousTarget.timeMs === nextTarget.timeMs;\n\nexport const shouldClearSubtitleCueJumpTarget = ({\n currentAudioIndex,\n currentTimeMs,\n target,\n}: ShouldClearSubtitleCueJumpTargetOptions) =>\n target?.audioIndex === currentAudioIndex &&\n target.timeMs !== normalizePlaybackTimeMs(currentTimeMs);\n\nconst resolveSubtitleCueJumpTargetCandidate = ({\n audioIndex,\n excludeTarget,\n getFallbackTimeMs,\n sortedSubtitleCues,\n timeMs,\n}: {\n audioIndex: number;\n excludeTarget: SubtitleCueJumpTarget | null;\n getFallbackTimeMs: (\n subtitleCues: ElementSubtitleCue[],\n timeMs: number\n ) => number | null;\n sortedSubtitleCues: ElementSubtitleCue[];\n timeMs: number | null;\n}): SubtitleCueJumpTarget | null => {\n if (timeMs === null) {\n return null;\n }\n\n const target = {\n audioIndex,\n timeMs,\n };\n\n if (!isSameSubtitleCueJumpTarget(excludeTarget, target)) {\n return target;\n }\n\n const fallbackTimeMs = getFallbackTimeMs(sortedSubtitleCues, timeMs);\n\n return fallbackTimeMs !== null\n ? {\n audioIndex,\n timeMs: fallbackTimeMs,\n }\n : null;\n};\n\n/** Options used to resolve a subtitle cue jump target. */\nexport interface GetSubtitleCueJumpTimeOptions {\n currentTimeMs: number;\n direction: SubtitleCueJumpDirection;\n subtitleCues?: ElementSubtitleCue[];\n}\n\n/** Returns the target cue start time in milliseconds, or `null` when no target exists. */\nexport const getSubtitleCueJumpTime = ({\n currentTimeMs,\n direction,\n subtitleCues = [],\n}: GetSubtitleCueJumpTimeOptions): number | null => {\n if (subtitleCues.length === 0) {\n return null;\n }\n\n const sortedSubtitleCues = sortSubtitleCuesByPlaybackTime(subtitleCues);\n const normalizedCurrentTimeMs = normalizePlaybackTimeMs(currentTimeMs);\n\n if (direction === \"next\") {\n return getNextSubtitleCueStartTimeMs(\n sortedSubtitleCues,\n normalizedCurrentTimeMs\n );\n }\n\n const activeStartTimeMs = getActiveSubtitleCueStartTimeMs(\n sortedSubtitleCues,\n normalizedCurrentTimeMs\n );\n\n return getPreviousSubtitleCueStartTimeMs(\n sortedSubtitleCues,\n activeStartTimeMs ?? normalizedCurrentTimeMs\n );\n};\n\nexport interface GetSubtitleCueJumpTargetOptions {\n currentAudioIndex: number;\n currentTimeMs: number;\n direction: SubtitleCueJumpDirection;\n excludeTarget?: SubtitleCueJumpTarget | null;\n tracks?: SubtitleCueJumpTrack[];\n}\n\nconst getNextSubtitleCueJumpTarget = ({\n currentAudioIndex,\n currentTimeMs,\n excludeTarget,\n tracks,\n}: {\n currentAudioIndex: number;\n currentTimeMs: number;\n excludeTarget: SubtitleCueJumpTarget | null;\n tracks: SubtitleCueJumpTrack[];\n}) => {\n for (\n let audioIndex = currentAudioIndex;\n audioIndex < tracks.length;\n audioIndex += 1\n ) {\n const sortedSubtitleCues = sortSubtitleCuesByPlaybackTime(\n tracks[audioIndex]?.subtitleCues ?? []\n );\n const timeMs =\n audioIndex === currentAudioIndex\n ? getNextSubtitleCueStartTimeMs(sortedSubtitleCues, currentTimeMs)\n : getFirstSubtitleCueStartTimeMs(sortedSubtitleCues);\n const target = resolveSubtitleCueJumpTargetCandidate({\n audioIndex,\n excludeTarget,\n getFallbackTimeMs: getNextSubtitleCueStartTimeMs,\n sortedSubtitleCues,\n timeMs,\n });\n\n if (target) {\n return target;\n }\n }\n\n return null;\n};\n\nconst getPreviousSubtitleCueJumpTarget = ({\n currentAudioIndex,\n currentTimeMs,\n excludeTarget,\n tracks,\n}: {\n currentAudioIndex: number;\n currentTimeMs: number;\n excludeTarget: SubtitleCueJumpTarget | null;\n tracks: SubtitleCueJumpTrack[];\n}) => {\n for (let audioIndex = currentAudioIndex; audioIndex >= 0; audioIndex -= 1) {\n const sortedSubtitleCues = sortSubtitleCuesByPlaybackTime(\n tracks[audioIndex]?.subtitleCues ?? []\n );\n const timeMs =\n audioIndex === currentAudioIndex\n ? getSubtitleCueJumpTime({\n currentTimeMs,\n direction: \"previous\",\n subtitleCues: sortedSubtitleCues,\n })\n : getLastSubtitleCueStartTimeMs(sortedSubtitleCues);\n const target = resolveSubtitleCueJumpTargetCandidate({\n audioIndex,\n excludeTarget,\n getFallbackTimeMs: getPreviousSubtitleCueStartTimeMs,\n sortedSubtitleCues,\n timeMs,\n });\n\n if (target) {\n return target;\n }\n }\n\n return null;\n};\n\nexport const getSubtitleCueJumpTarget = ({\n currentAudioIndex,\n currentTimeMs,\n direction,\n excludeTarget = null,\n tracks = [],\n}: GetSubtitleCueJumpTargetOptions): SubtitleCueJumpTarget | null => {\n if (\n tracks.length === 0 ||\n currentAudioIndex < 0 ||\n currentAudioIndex >= tracks.length\n ) {\n return null;\n }\n\n const normalizedCurrentTimeMs = normalizePlaybackTimeMs(currentTimeMs);\n\n if (direction === \"next\") {\n return getNextSubtitleCueJumpTarget({\n currentAudioIndex,\n currentTimeMs: normalizedCurrentTimeMs,\n excludeTarget,\n tracks,\n });\n }\n\n return getPreviousSubtitleCueJumpTarget({\n currentAudioIndex,\n currentTimeMs: normalizedCurrentTimeMs,\n excludeTarget,\n tracks,\n });\n};\n"],"names":["normalizePlaybackTimeMs","timeMs","parsedTimeMs","getVisibleSubtitleText","subtitleCues","currentTimeMs","normalizedCurrentTimeMs","subtitleCue","prevCue","nextCue","getSubtitleCueStartTimeMs","getSubtitleCueEndTimeMs","sortedSubtitleCuesCache","sortSubtitleCuesByPlaybackTime","cachedSubtitleCues","sortedSubtitleCues","previousCue","getActiveSubtitleCueStartTimeMs","activeStartTimeMs","startTimeMs","endTimeMs","getPreviousSubtitleCueStartTimeMs","previousStartTimeMs","getNextSubtitleCueStartTimeMs","nextSubtitleCue","getFirstSubtitleCueStartTimeMs","firstSubtitleCue","getLastSubtitleCueStartTimeMs","lastSubtitleCue","isSameSubtitleCueJumpTarget","previousTarget","nextTarget","shouldClearSubtitleCueJumpTarget","currentAudioIndex","target","resolveSubtitleCueJumpTargetCandidate","audioIndex","excludeTarget","getFallbackTimeMs","fallbackTimeMs","getSubtitleCueJumpTime","direction","getNextSubtitleCueJumpTarget","tracks","getPreviousSubtitleCueJumpTarget","getSubtitleCueJumpTarget"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=e=>!!(e?.readonly||e?.user_input?.trim()),a=e=>e?.type==="interaction"&&!o(e),c=({currentIndex:e,resolvedCurrentInteractionElement:s,slideElementList:r,targetSlideIndex:n})=>{if(n==null||n<0)return!1;if(n<e)return!0;const i=Math.max(e,0);for(let t=i;t<=n;t+=1)if(!(t===e&&r[t]?.type==="interaction"&&o(s))&&a(r[t]))return!1;return!0};exports.canReachSubtitleJumpTarget=c;exports.hasResolvedInteractionElement=o;exports.isUnresolvedInteractionElement=a;
2
+ //# sourceMappingURL=subtitleJumpNavigation.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subtitleJumpNavigation.cjs.js","sources":["../../../../src/components/Slide/utils/subtitleJumpNavigation.ts"],"sourcesContent":["import type { Element } from \"../types\";\n\nexport const hasResolvedInteractionElement = (element?: Element) =>\n Boolean(element?.readonly || element?.user_input?.trim());\n\nexport const isUnresolvedInteractionElement = (element?: Element) =>\n element?.type === \"interaction\" && !hasResolvedInteractionElement(element);\n\nexport interface CanReachSubtitleJumpTargetOptions {\n currentIndex: number;\n resolvedCurrentInteractionElement?: Element;\n slideElementList: Element[];\n targetSlideIndex: number | undefined;\n}\n\nexport const canReachSubtitleJumpTarget = ({\n currentIndex,\n resolvedCurrentInteractionElement,\n slideElementList,\n targetSlideIndex,\n}: CanReachSubtitleJumpTargetOptions) => {\n if (targetSlideIndex == null || targetSlideIndex < 0) {\n return false;\n }\n\n if (targetSlideIndex < currentIndex) {\n return true;\n }\n\n const firstCheckedIndex = Math.max(currentIndex, 0);\n\n for (\n let slideIndex = firstCheckedIndex;\n slideIndex <= targetSlideIndex;\n slideIndex += 1\n ) {\n const isLocallyResolvedCurrentInteraction =\n slideIndex === currentIndex &&\n slideElementList[slideIndex]?.type === \"interaction\" &&\n hasResolvedInteractionElement(resolvedCurrentInteractionElement);\n\n if (\n !isLocallyResolvedCurrentInteraction &&\n isUnresolvedInteractionElement(slideElementList[slideIndex])\n ) {\n return false;\n }\n }\n\n return true;\n};\n"],"names":["hasResolvedInteractionElement","element","isUnresolvedInteractionElement","canReachSubtitleJumpTarget","currentIndex","resolvedCurrentInteractionElement","slideElementList","targetSlideIndex","firstCheckedIndex","slideIndex"],"mappings":"gFAEO,MAAMA,EAAiCC,GAC5C,GAAQA,GAAS,UAAYA,GAAS,YAAY,KAAA,GAEvCC,EAAkCD,GAC7CA,GAAS,OAAS,eAAiB,CAACD,EAA8BC,CAAO,EAS9DE,EAA6B,CAAC,CACzC,aAAAC,EACA,kCAAAC,EACA,iBAAAC,EACA,iBAAAC,CACF,IAAyC,CACvC,GAAIA,GAAoB,MAAQA,EAAmB,EACjD,MAAO,GAGT,GAAIA,EAAmBH,EACrB,MAAO,GAGT,MAAMI,EAAoB,KAAK,IAAIJ,EAAc,CAAC,EAElD,QACMK,EAAaD,EACjBC,GAAcF,EACdE,GAAc,EAOd,GACE,EALAA,IAAeL,GACfE,EAAiBG,CAAU,GAAG,OAAS,eACvCT,EAA8BK,CAAiC,IAI/DH,EAA+BI,EAAiBG,CAAU,CAAC,EAE3D,MAAO,GAIX,MAAO,EACT"}
@@ -0,0 +1,10 @@
1
+ import { Element } from '../types';
2
+ export declare const hasResolvedInteractionElement: (element?: Element) => boolean;
3
+ export declare const isUnresolvedInteractionElement: (element?: Element) => boolean;
4
+ export interface CanReachSubtitleJumpTargetOptions {
5
+ currentIndex: number;
6
+ resolvedCurrentInteractionElement?: Element;
7
+ slideElementList: Element[];
8
+ targetSlideIndex: number | undefined;
9
+ }
10
+ export declare const canReachSubtitleJumpTarget: ({ currentIndex, resolvedCurrentInteractionElement, slideElementList, targetSlideIndex, }: CanReachSubtitleJumpTargetOptions) => boolean;
@@ -0,0 +1,22 @@
1
+ const r = (t) => !!(t?.readonly || t?.user_input?.trim()), c = (t) => t?.type === "interaction" && !r(t), l = ({
2
+ currentIndex: t,
3
+ resolvedCurrentInteractionElement: s,
4
+ slideElementList: e,
5
+ targetSlideIndex: o
6
+ }) => {
7
+ if (o == null || o < 0)
8
+ return !1;
9
+ if (o < t)
10
+ return !0;
11
+ const a = Math.max(t, 0);
12
+ for (let n = a; n <= o; n += 1)
13
+ if (!(n === t && e[n]?.type === "interaction" && r(s)) && c(e[n]))
14
+ return !1;
15
+ return !0;
16
+ };
17
+ export {
18
+ l as canReachSubtitleJumpTarget,
19
+ r as hasResolvedInteractionElement,
20
+ c as isUnresolvedInteractionElement
21
+ };
22
+ //# sourceMappingURL=subtitleJumpNavigation.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subtitleJumpNavigation.es.js","sources":["../../../../src/components/Slide/utils/subtitleJumpNavigation.ts"],"sourcesContent":["import type { Element } from \"../types\";\n\nexport const hasResolvedInteractionElement = (element?: Element) =>\n Boolean(element?.readonly || element?.user_input?.trim());\n\nexport const isUnresolvedInteractionElement = (element?: Element) =>\n element?.type === \"interaction\" && !hasResolvedInteractionElement(element);\n\nexport interface CanReachSubtitleJumpTargetOptions {\n currentIndex: number;\n resolvedCurrentInteractionElement?: Element;\n slideElementList: Element[];\n targetSlideIndex: number | undefined;\n}\n\nexport const canReachSubtitleJumpTarget = ({\n currentIndex,\n resolvedCurrentInteractionElement,\n slideElementList,\n targetSlideIndex,\n}: CanReachSubtitleJumpTargetOptions) => {\n if (targetSlideIndex == null || targetSlideIndex < 0) {\n return false;\n }\n\n if (targetSlideIndex < currentIndex) {\n return true;\n }\n\n const firstCheckedIndex = Math.max(currentIndex, 0);\n\n for (\n let slideIndex = firstCheckedIndex;\n slideIndex <= targetSlideIndex;\n slideIndex += 1\n ) {\n const isLocallyResolvedCurrentInteraction =\n slideIndex === currentIndex &&\n slideElementList[slideIndex]?.type === \"interaction\" &&\n hasResolvedInteractionElement(resolvedCurrentInteractionElement);\n\n if (\n !isLocallyResolvedCurrentInteraction &&\n isUnresolvedInteractionElement(slideElementList[slideIndex])\n ) {\n return false;\n }\n }\n\n return true;\n};\n"],"names":["hasResolvedInteractionElement","element","isUnresolvedInteractionElement","canReachSubtitleJumpTarget","currentIndex","resolvedCurrentInteractionElement","slideElementList","targetSlideIndex","firstCheckedIndex","slideIndex"],"mappings":"AAEO,MAAMA,IAAgC,CAACC,MAC5C,GAAQA,GAAS,YAAYA,GAAS,YAAY,KAAA,IAEvCC,IAAiC,CAACD,MAC7CA,GAAS,SAAS,iBAAiB,CAACD,EAA8BC,CAAO,GAS9DE,IAA6B,CAAC;AAAA,EACzC,cAAAC;AAAA,EACA,mCAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,kBAAAC;AACF,MAAyC;AACvC,MAAIA,KAAoB,QAAQA,IAAmB;AACjD,WAAO;AAGT,MAAIA,IAAmBH;AACrB,WAAO;AAGT,QAAMI,IAAoB,KAAK,IAAIJ,GAAc,CAAC;AAElD,WACMK,IAAaD,GACjBC,KAAcF,GACdE,KAAc;AAOd,QACE,EALAA,MAAeL,KACfE,EAAiBG,CAAU,GAAG,SAAS,iBACvCT,EAA8BK,CAAiC,MAI/DH,EAA+BI,EAAiBG,CAAU,CAAC;AAE3D,aAAO;AAIX,SAAO;AACT;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("../../../../_virtual/index.cjs8.js"),v=require("./constants.cjs.js");var d;function x(){if(d)return c.__exports;d=1,Object.defineProperty(c.__exports,"__esModule",{value:!0}),c.__exports.sanitizeUrl=void 0;var e=v.__require();function m(r){return e.relativeFirstCharacters.indexOf(r[0])>-1}function p(r){var i=r.replace(e.ctrlCharactersRegex,"");return i.replace(e.htmlEntitiesRegex,function(t,a){return String.fromCharCode(a)})}function R(r){return URL.canParse(r)}function l(r){try{return decodeURIComponent(r)}catch{return r}}function f(r){if(!r)return e.BLANK_URL;var i,t=l(r.trim());do t=p(t).replace(e.htmlCtrlEntityRegex,"").replace(e.ctrlCharactersRegex,"").replace(e.whitespaceEscapeCharsRegex,"").trim(),t=l(t),i=t.match(e.ctrlCharactersRegex)||t.match(e.htmlEntitiesRegex)||t.match(e.htmlCtrlEntityRegex)||t.match(e.whitespaceEscapeCharsRegex);while(i&&i.length>0);var a=t;if(!a)return e.BLANK_URL;if(m(a))return a;var u=a.trimStart(),h=u.match(e.urlSchemeRegex);if(!h)return a;var n=h[0].toLowerCase().trim();if(e.invalidProtocolRegex.test(n))return e.BLANK_URL;var s=u.replace(/\\/g,"/");if(n==="mailto:"||n.includes("://"))return s;if(n==="http:"||n==="https:"){if(!R(s))return e.BLANK_URL;var o=new URL(s);return o.protocol=o.protocol.toLowerCase(),o.hostname=o.hostname.toLowerCase(),o.toString()}return s}return c.__exports.sanitizeUrl=f,c.__exports}exports.__require=x;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("../../../../_virtual/index.cjs9.js"),v=require("./constants.cjs.js");var d;function x(){if(d)return c.__exports;d=1,Object.defineProperty(c.__exports,"__esModule",{value:!0}),c.__exports.sanitizeUrl=void 0;var e=v.__require();function m(r){return e.relativeFirstCharacters.indexOf(r[0])>-1}function p(r){var i=r.replace(e.ctrlCharactersRegex,"");return i.replace(e.htmlEntitiesRegex,function(t,a){return String.fromCharCode(a)})}function R(r){return URL.canParse(r)}function l(r){try{return decodeURIComponent(r)}catch{return r}}function f(r){if(!r)return e.BLANK_URL;var i,t=l(r.trim());do t=p(t).replace(e.htmlCtrlEntityRegex,"").replace(e.ctrlCharactersRegex,"").replace(e.whitespaceEscapeCharsRegex,"").trim(),t=l(t),i=t.match(e.ctrlCharactersRegex)||t.match(e.htmlEntitiesRegex)||t.match(e.htmlCtrlEntityRegex)||t.match(e.whitespaceEscapeCharsRegex);while(i&&i.length>0);var a=t;if(!a)return e.BLANK_URL;if(m(a))return a;var u=a.trimStart(),h=u.match(e.urlSchemeRegex);if(!h)return a;var n=h[0].toLowerCase().trim();if(e.invalidProtocolRegex.test(n))return e.BLANK_URL;var s=u.replace(/\\/g,"/");if(n==="mailto:"||n.includes("://"))return s;if(n==="http:"||n==="https:"){if(!R(s))return e.BLANK_URL;var o=new URL(s);return o.protocol=o.protocol.toLowerCase(),o.hostname=o.hostname.toLowerCase(),o.toString()}return s}return c.__exports.sanitizeUrl=f,c.__exports}exports.__require=x;
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -1,4 +1,4 @@
1
- import { __exports as c } from "../../../../_virtual/index.es8.js";
1
+ import { __exports as c } from "../../../../_virtual/index.es9.js";
2
2
  import { __require as v } from "./constants.es.js";
3
3
  var m;
4
4
  function g() {
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("../../_virtual/index.cjs9.js");/*!
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("../../_virtual/index.cjs8.js");/*!
2
2
  Copyright (c) 2018 Jed Watson.
3
3
  Licensed under the MIT License (MIT), see
4
4
  http://jedwatson.github.io/classnames
@@ -1,4 +1,4 @@
1
- import { __module as s } from "../../_virtual/index.es9.js";
1
+ import { __module as s } from "../../_virtual/index.es8.js";
2
2
  /*!
3
3
  Copyright (c) 2018 Jed Watson.
4
4
  Licensed under the MIT License (MIT), see
@@ -0,0 +1,7 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const o=require("../createLucideIcon.cjs.js");/**
2
+ * @license lucide-react v0.525.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const e=[["polygon",{points:"13 19 22 12 13 5 13 19",key:"587y9g"}],["polygon",{points:"2 19 11 12 2 5 2 19",key:"3pweh0"}]],t=o.default("fast-forward",e);exports.__iconNode=e;exports.default=t;
7
+ //# sourceMappingURL=fast-forward.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fast-forward.cjs.js","sources":["../../../../../../node_modules/lucide-react/dist/esm/icons/fast-forward.js"],"sourcesContent":["/**\n * @license lucide-react v0.525.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"polygon\", { points: \"13 19 22 12 13 5 13 19\", key: \"587y9g\" }],\n [\"polygon\", { points: \"2 19 11 12 2 5 2 19\", key: \"3pweh0\" }]\n];\nconst FastForward = createLucideIcon(\"fast-forward\", __iconNode);\n\nexport { __iconNode, FastForward as default };\n//# sourceMappingURL=fast-forward.js.map\n"],"names":["__iconNode","FastForward","createLucideIcon"],"mappings":"0JAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAAa,CACjB,CAAC,UAAW,CAAE,OAAQ,yBAA0B,IAAK,QAAQ,CAAE,EAC/D,CAAC,UAAW,CAAE,OAAQ,sBAAuB,IAAK,QAAQ,CAAE,CAC9D,EACMC,EAAcC,EAAAA,QAAiB,eAAgBF,CAAU","x_google_ignoreList":[0]}
@@ -0,0 +1,16 @@
1
+ import o from "../createLucideIcon.es.js";
2
+ /**
3
+ * @license lucide-react v0.525.0 - ISC
4
+ *
5
+ * This source code is licensed under the ISC license.
6
+ * See the LICENSE file in the root directory of this source tree.
7
+ */
8
+ const t = [
9
+ ["polygon", { points: "13 19 22 12 13 5 13 19", key: "587y9g" }],
10
+ ["polygon", { points: "2 19 11 12 2 5 2 19", key: "3pweh0" }]
11
+ ], n = o("fast-forward", t);
12
+ export {
13
+ t as __iconNode,
14
+ n as default
15
+ };
16
+ //# sourceMappingURL=fast-forward.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fast-forward.es.js","sources":["../../../../../../node_modules/lucide-react/dist/esm/icons/fast-forward.js"],"sourcesContent":["/**\n * @license lucide-react v0.525.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"polygon\", { points: \"13 19 22 12 13 5 13 19\", key: \"587y9g\" }],\n [\"polygon\", { points: \"2 19 11 12 2 5 2 19\", key: \"3pweh0\" }]\n];\nconst FastForward = createLucideIcon(\"fast-forward\", __iconNode);\n\nexport { __iconNode, FastForward as default };\n//# sourceMappingURL=fast-forward.js.map\n"],"names":["__iconNode","FastForward","createLucideIcon"],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASK,MAACA,IAAa;AAAA,EACjB,CAAC,WAAW,EAAE,QAAQ,0BAA0B,KAAK,SAAQ,CAAE;AAAA,EAC/D,CAAC,WAAW,EAAE,QAAQ,uBAAuB,KAAK,SAAQ,CAAE;AAC9D,GACMC,IAAcC,EAAiB,gBAAgBF,CAAU;","x_google_ignoreList":[0]}
@@ -0,0 +1,7 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const o=require("../createLucideIcon.cjs.js");/**
2
+ * @license lucide-react v0.525.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const e=[["polygon",{points:"11 19 2 12 11 5 11 19",key:"14yba5"}],["polygon",{points:"22 19 13 12 22 5 22 19",key:"1pi1cj"}]],t=o.default("rewind",e);exports.__iconNode=e;exports.default=t;
7
+ //# sourceMappingURL=rewind.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rewind.cjs.js","sources":["../../../../../../node_modules/lucide-react/dist/esm/icons/rewind.js"],"sourcesContent":["/**\n * @license lucide-react v0.525.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"polygon\", { points: \"11 19 2 12 11 5 11 19\", key: \"14yba5\" }],\n [\"polygon\", { points: \"22 19 13 12 22 5 22 19\", key: \"1pi1cj\" }]\n];\nconst Rewind = createLucideIcon(\"rewind\", __iconNode);\n\nexport { __iconNode, Rewind as default };\n//# sourceMappingURL=rewind.js.map\n"],"names":["__iconNode","Rewind","createLucideIcon"],"mappings":"0JAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAAa,CACjB,CAAC,UAAW,CAAE,OAAQ,wBAAyB,IAAK,QAAQ,CAAE,EAC9D,CAAC,UAAW,CAAE,OAAQ,yBAA0B,IAAK,QAAQ,CAAE,CACjE,EACMC,EAASC,EAAAA,QAAiB,SAAUF,CAAU","x_google_ignoreList":[0]}
@@ -0,0 +1,16 @@
1
+ import o from "../createLucideIcon.es.js";
2
+ /**
3
+ * @license lucide-react v0.525.0 - ISC
4
+ *
5
+ * This source code is licensed under the ISC license.
6
+ * See the LICENSE file in the root directory of this source tree.
7
+ */
8
+ const e = [
9
+ ["polygon", { points: "11 19 2 12 11 5 11 19", key: "14yba5" }],
10
+ ["polygon", { points: "22 19 13 12 22 5 22 19", key: "1pi1cj" }]
11
+ ], i = o("rewind", e);
12
+ export {
13
+ e as __iconNode,
14
+ i as default
15
+ };
16
+ //# sourceMappingURL=rewind.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rewind.es.js","sources":["../../../../../../node_modules/lucide-react/dist/esm/icons/rewind.js"],"sourcesContent":["/**\n * @license lucide-react v0.525.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"polygon\", { points: \"11 19 2 12 11 5 11 19\", key: \"14yba5\" }],\n [\"polygon\", { points: \"22 19 13 12 22 5 22 19\", key: \"1pi1cj\" }]\n];\nconst Rewind = createLucideIcon(\"rewind\", __iconNode);\n\nexport { __iconNode, Rewind as default };\n//# sourceMappingURL=rewind.js.map\n"],"names":["__iconNode","Rewind","createLucideIcon"],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASK,MAACA,IAAa;AAAA,EACjB,CAAC,WAAW,EAAE,QAAQ,yBAAyB,KAAK,SAAQ,CAAE;AAAA,EAC9D,CAAC,WAAW,EAAE,QAAQ,0BAA0B,KAAK,SAAQ,CAAE;AACjE,GACMC,IAASC,EAAiB,UAAUF,CAAU;","x_google_ignoreList":[0]}
package/package.json CHANGED
@@ -174,7 +174,7 @@
174
174
  ]
175
175
  }
176
176
  },
177
- "version": "0.1.128",
177
+ "version": "0.1.129",
178
178
  "type": "module",
179
179
  "exports": {
180
180
  ".": {
@@ -1,7 +0,0 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("../createLucideIcon.cjs.js");/**
2
- * @license lucide-react v0.525.0 - ISC
3
- *
4
- * This source code is licensed under the ISC license.
5
- * See the LICENSE file in the root directory of this source tree.
6
- */const e=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]],o=t.default("rotate-ccw",e);exports.__iconNode=e;exports.default=o;
7
- //# sourceMappingURL=rotate-ccw.cjs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rotate-ccw.cjs.js","sources":["../../../../../../node_modules/lucide-react/dist/esm/icons/rotate-ccw.js"],"sourcesContent":["/**\n * @license lucide-react v0.525.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\", key: \"1357e3\" }],\n [\"path\", { d: \"M3 3v5h5\", key: \"1xhq8a\" }]\n];\nconst RotateCcw = createLucideIcon(\"rotate-ccw\", __iconNode);\n\nexport { __iconNode, RotateCcw as default };\n//# sourceMappingURL=rotate-ccw.js.map\n"],"names":["__iconNode","RotateCcw","createLucideIcon"],"mappings":"0JAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAAa,CACjB,CAAC,OAAQ,CAAE,EAAG,oDAAqD,IAAK,QAAQ,CAAE,EAClF,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,CAC3C,EACMC,EAAYC,EAAAA,QAAiB,aAAcF,CAAU","x_google_ignoreList":[0]}
@@ -1,16 +0,0 @@
1
- import t from "../createLucideIcon.es.js";
2
- /**
3
- * @license lucide-react v0.525.0 - ISC
4
- *
5
- * This source code is licensed under the ISC license.
6
- * See the LICENSE file in the root directory of this source tree.
7
- */
8
- const e = [
9
- ["path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8", key: "1357e3" }],
10
- ["path", { d: "M3 3v5h5", key: "1xhq8a" }]
11
- ], a = t("rotate-ccw", e);
12
- export {
13
- e as __iconNode,
14
- a as default
15
- };
16
- //# sourceMappingURL=rotate-ccw.es.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rotate-ccw.es.js","sources":["../../../../../../node_modules/lucide-react/dist/esm/icons/rotate-ccw.js"],"sourcesContent":["/**\n * @license lucide-react v0.525.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\", key: \"1357e3\" }],\n [\"path\", { d: \"M3 3v5h5\", key: \"1xhq8a\" }]\n];\nconst RotateCcw = createLucideIcon(\"rotate-ccw\", __iconNode);\n\nexport { __iconNode, RotateCcw as default };\n//# sourceMappingURL=rotate-ccw.js.map\n"],"names":["__iconNode","RotateCcw","createLucideIcon"],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASK,MAACA,IAAa;AAAA,EACjB,CAAC,QAAQ,EAAE,GAAG,qDAAqD,KAAK,SAAQ,CAAE;AAAA,EAClF,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,SAAQ,CAAE;AAC3C,GACMC,IAAYC,EAAiB,cAAcF,CAAU;","x_google_ignoreList":[0]}
@@ -1,7 +0,0 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("../createLucideIcon.cjs.js");/**
2
- * @license lucide-react v0.525.0 - ISC
3
- *
4
- * This source code is licensed under the ISC license.
5
- * See the LICENSE file in the root directory of this source tree.
6
- */const e=[["path",{d:"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8",key:"1p45f6"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}]],o=t.default("rotate-cw",e);exports.__iconNode=e;exports.default=o;
7
- //# sourceMappingURL=rotate-cw.cjs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rotate-cw.cjs.js","sources":["../../../../../../node_modules/lucide-react/dist/esm/icons/rotate-cw.js"],"sourcesContent":["/**\n * @license lucide-react v0.525.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\", key: \"1p45f6\" }],\n [\"path\", { d: \"M21 3v5h-5\", key: \"1q7to0\" }]\n];\nconst RotateCw = createLucideIcon(\"rotate-cw\", __iconNode);\n\nexport { __iconNode, RotateCw as default };\n//# sourceMappingURL=rotate-cw.js.map\n"],"names":["__iconNode","RotateCw","createLucideIcon"],"mappings":"0JAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAAa,CACjB,CAAC,OAAQ,CAAE,EAAG,oDAAqD,IAAK,QAAQ,CAAE,EAClF,CAAC,OAAQ,CAAE,EAAG,aAAc,IAAK,QAAQ,CAAE,CAC7C,EACMC,EAAWC,EAAAA,QAAiB,YAAaF,CAAU","x_google_ignoreList":[0]}
@@ -1,16 +0,0 @@
1
- import t from "../createLucideIcon.es.js";
2
- /**
3
- * @license lucide-react v0.525.0 - ISC
4
- *
5
- * This source code is licensed under the ISC license.
6
- * See the LICENSE file in the root directory of this source tree.
7
- */
8
- const o = [
9
- ["path", { d: "M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8", key: "1p45f6" }],
10
- ["path", { d: "M21 3v5h-5", key: "1q7to0" }]
11
- ], a = t("rotate-cw", o);
12
- export {
13
- o as __iconNode,
14
- a as default
15
- };
16
- //# sourceMappingURL=rotate-cw.es.js.map