markdown-flow-ui 0.1.128 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ContentRender/ContentRender.cjs.js +2 -2
- package/dist/components/ContentRender/ContentRender.cjs.js.map +1 -1
- package/dist/components/ContentRender/ContentRender.d.ts +4 -0
- package/dist/components/ContentRender/ContentRender.es.js +217 -211
- package/dist/components/ContentRender/ContentRender.es.js.map +1 -1
- package/dist/components/ContentRender/IframeSandbox.cjs.js +3 -3
- package/dist/components/ContentRender/IframeSandbox.cjs.js.map +1 -1
- package/dist/components/ContentRender/IframeSandbox.d.ts +3 -0
- package/dist/components/ContentRender/IframeSandbox.es.js +199 -186
- package/dist/components/ContentRender/IframeSandbox.es.js.map +1 -1
- package/dist/components/ContentRender/MarkdownFlowInput.cjs.js +1 -1
- package/dist/components/ContentRender/MarkdownFlowInput.cjs.js.map +1 -1
- package/dist/components/ContentRender/MarkdownFlowInput.d.ts +3 -0
- package/dist/components/ContentRender/MarkdownFlowInput.es.js +35 -32
- package/dist/components/ContentRender/MarkdownFlowInput.es.js.map +1 -1
- package/dist/components/ContentRender/MarkdownFlowInput.stories.d.ts +6 -0
- package/dist/components/ContentRender/SandboxApp.cjs.js +2 -2
- package/dist/components/ContentRender/SandboxApp.cjs.js.map +1 -1
- package/dist/components/ContentRender/SandboxApp.d.ts +3 -0
- package/dist/components/ContentRender/SandboxApp.es.js +117 -104
- package/dist/components/ContentRender/SandboxApp.es.js.map +1 -1
- package/dist/components/ContentRender/contentRenderI18n.cjs.js +2 -0
- package/dist/components/ContentRender/contentRenderI18n.cjs.js.map +1 -0
- package/dist/components/ContentRender/contentRenderI18n.d.ts +15 -0
- package/dist/components/ContentRender/contentRenderI18n.es.js +59 -0
- package/dist/components/ContentRender/contentRenderI18n.es.js.map +1 -0
- package/dist/components/ContentRender/index.cjs.js +1 -1
- package/dist/components/ContentRender/index.d.ts +1 -0
- package/dist/components/ContentRender/index.es.js +1 -0
- package/dist/components/ContentRender/index.es.js.map +1 -1
- package/dist/components/ContentRender/plugins/CustomVariable.cjs.js +1 -1
- package/dist/components/ContentRender/plugins/CustomVariable.cjs.js.map +1 -1
- package/dist/components/ContentRender/plugins/CustomVariable.d.ts +3 -1
- package/dist/components/ContentRender/plugins/CustomVariable.es.js +131 -124
- package/dist/components/ContentRender/plugins/CustomVariable.es.js.map +1 -1
- package/dist/components/MarkdownFlow/MarkdownFlow.cjs.js +1 -1
- package/dist/components/MarkdownFlow/MarkdownFlow.cjs.js.map +1 -1
- package/dist/components/MarkdownFlow/MarkdownFlow.d.ts +3 -0
- package/dist/components/MarkdownFlow/MarkdownFlow.es.js +18 -15
- package/dist/components/MarkdownFlow/MarkdownFlow.es.js.map +1 -1
- package/dist/components/MarkdownFlow/MarkdownFlow.stories.d.ts +6 -0
- package/dist/components/MarkdownFlow/ScrollableMarkdownFlow.d.ts +1 -0
- package/dist/components/MarkdownFlow/index.cjs.js +1 -1
- package/dist/components/MarkdownFlow/index.es.js +1 -0
- package/dist/components/MarkdownFlow/index.es.js.map +1 -1
- package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.cjs.js +1 -1
- package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.cjs.js.map +1 -1
- package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.d.ts +2 -2
- package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.es.js +23 -22
- package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.es.js.map +1 -1
- package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.stories.d.ts +1 -1
- package/dist/components/MarkdownFlowEditor/components/EditorToolbar.cjs.js.map +1 -1
- package/dist/components/MarkdownFlowEditor/components/EditorToolbar.es.js.map +1 -1
- package/dist/components/MarkdownFlowEditor/editorI18n.cjs.js +1 -1
- package/dist/components/MarkdownFlowEditor/editorI18n.cjs.js.map +1 -1
- package/dist/components/MarkdownFlowEditor/editorI18n.d.ts +0 -2
- package/dist/components/MarkdownFlowEditor/editorI18n.es.js +12 -24
- package/dist/components/MarkdownFlowEditor/editorI18n.es.js.map +1 -1
- package/dist/components/MarkdownFlowEditor/index.d.ts +1 -1
- package/dist/components/Slide/Player.cjs.js +1 -1
- package/dist/components/Slide/Player.cjs.js.map +1 -1
- package/dist/components/Slide/Player.d.ts +30 -30
- package/dist/components/Slide/Player.es.js +721 -638
- package/dist/components/Slide/Player.es.js.map +1 -1
- package/dist/components/Slide/Slide.cjs.js +1 -1
- package/dist/components/Slide/Slide.cjs.js.map +1 -1
- package/dist/components/Slide/Slide.d.ts +22 -4
- package/dist/components/Slide/Slide.es.js +758 -638
- package/dist/components/Slide/Slide.es.js.map +1 -1
- package/dist/components/Slide/Slide.stories.d.ts +19 -20
- package/dist/components/Slide/constants.d.ts +0 -24
- package/dist/components/Slide/index.d.ts +2 -1
- package/dist/components/Slide/slideI18n.cjs.js +2 -0
- package/dist/components/Slide/slideI18n.cjs.js.map +1 -0
- package/dist/components/Slide/slideI18n.d.ts +44 -0
- package/dist/components/Slide/slideI18n.es.js +162 -0
- package/dist/components/Slide/slideI18n.es.js.map +1 -0
- package/dist/components/Slide/useSlide.cjs.js +1 -1
- package/dist/components/Slide/useSlide.cjs.js.map +1 -1
- package/dist/components/Slide/useSlide.d.ts +2 -0
- package/dist/components/Slide/useSlide.es.js +124 -105
- package/dist/components/Slide/useSlide.es.js.map +1 -1
- package/dist/components/Slide/utils/audioSegments.cjs.js +2 -0
- package/dist/components/Slide/utils/audioSegments.cjs.js.map +1 -0
- package/dist/components/Slide/utils/audioSegments.d.ts +2 -0
- package/dist/components/Slide/utils/audioSegments.es.js +21 -0
- package/dist/components/Slide/utils/audioSegments.es.js.map +1 -0
- package/dist/components/Slide/utils/audioSegments.test.d.ts +1 -0
- package/dist/components/Slide/utils/playbackSequence.cjs.js +1 -1
- package/dist/components/Slide/utils/playbackSequence.cjs.js.map +1 -1
- package/dist/components/Slide/utils/playbackSequence.d.ts +10 -0
- package/dist/components/Slide/utils/playbackSequence.es.js +15 -6
- package/dist/components/Slide/utils/playbackSequence.es.js.map +1 -1
- package/dist/components/Slide/utils/playerVisibility.cjs.js +2 -0
- package/dist/components/Slide/utils/playerVisibility.cjs.js.map +1 -0
- package/dist/components/Slide/utils/playerVisibility.d.ts +10 -0
- package/dist/components/Slide/utils/playerVisibility.es.js +11 -0
- package/dist/components/Slide/utils/playerVisibility.es.js.map +1 -0
- package/dist/components/Slide/utils/playerVisibility.test.d.ts +1 -0
- package/dist/components/Slide/utils/subtitleCue.cjs.js +2 -2
- package/dist/components/Slide/utils/subtitleCue.cjs.js.map +1 -1
- package/dist/components/Slide/utils/subtitleCue.d.ts +21 -0
- package/dist/components/Slide/utils/subtitleCue.es.js +146 -49
- package/dist/components/Slide/utils/subtitleCue.es.js.map +1 -1
- package/dist/components/Slide/utils/subtitleJumpNavigation.cjs.js +2 -0
- package/dist/components/Slide/utils/subtitleJumpNavigation.cjs.js.map +1 -0
- package/dist/components/Slide/utils/subtitleJumpNavigation.d.ts +10 -0
- package/dist/components/Slide/utils/subtitleJumpNavigation.es.js +22 -0
- package/dist/components/Slide/utils/subtitleJumpNavigation.es.js.map +1 -0
- package/dist/components/Slide/utils/subtitleJumpNavigation.test.d.ts +1 -0
- package/dist/components/index.d.ts +2 -1
- package/dist/editor.d.ts +3 -2
- package/dist/index.cjs.js +1 -1
- package/dist/index.es.js +14 -13
- package/dist/index.es.js.map +1 -1
- package/dist/lib/locale.cjs.js +2 -0
- package/dist/lib/locale.cjs.js.map +1 -0
- package/dist/lib/locale.d.ts +4 -0
- package/dist/lib/locale.es.js +19 -0
- package/dist/lib/locale.es.js.map +1 -0
- package/dist/lib/localeTextMap.cjs.js +2 -0
- package/dist/lib/localeTextMap.cjs.js.map +1 -0
- package/dist/lib/localeTextMap.d.ts +4 -0
- package/dist/lib/localeTextMap.es.js +5 -0
- package/dist/lib/localeTextMap.es.js.map +1 -0
- package/dist/markdown-flow-ui-lib.css +1 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/fast-forward.cjs.js +7 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/fast-forward.cjs.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/fast-forward.es.js +16 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/fast-forward.es.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/rewind.cjs.js +7 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/rewind.cjs.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/rewind.es.js +16 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/rewind.es.js.map +1 -0
- package/dist/renderer.cjs.js +1 -1
- package/dist/renderer.d.ts +1 -0
- package/dist/renderer.es.js +15 -14
- package/dist/renderer.es.js.map +1 -1
- package/dist/slide.d.ts +1 -0
- package/package.json +1 -1
- package/dist/components/Slide/constants.cjs.js +0 -2
- package/dist/components/Slide/constants.cjs.js.map +0 -1
- package/dist/components/Slide/constants.es.js +0 -28
- package/dist/components/Slide/constants.es.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/rotate-ccw.cjs.js +0 -7
- package/dist/node_modules/lucide-react/dist/esm/icons/rotate-ccw.cjs.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/rotate-ccw.es.js +0 -16
- package/dist/node_modules/lucide-react/dist/esm/icons/rotate-ccw.es.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/rotate-cw.cjs.js +0 -7
- package/dist/node_modules/lucide-react/dist/esm/icons/rotate-cw.cjs.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/rotate-cw.es.js +0 -16
- package/dist/node_modules/lucide-react/dist/esm/icons/rotate-cw.es.js.map +0 -1
|
@@ -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
|
|
2
|
-
|
|
3
|
-
).
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
|
14
|
-
},
|
|
15
|
-
let
|
|
16
|
-
for (const
|
|
17
|
-
const
|
|
18
|
-
if (
|
|
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 =
|
|
21
|
-
|
|
26
|
+
const r = a(n);
|
|
27
|
+
s >= e && s < r && (i = e);
|
|
22
28
|
}
|
|
23
|
-
return
|
|
24
|
-
},
|
|
25
|
-
let
|
|
26
|
-
for (const
|
|
27
|
-
const
|
|
28
|
-
if (
|
|
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
|
-
|
|
36
|
+
i = e;
|
|
31
37
|
}
|
|
32
|
-
return
|
|
33
|
-
}, S = (
|
|
34
|
-
const
|
|
35
|
-
(
|
|
38
|
+
return i;
|
|
39
|
+
}, S = (t, s) => {
|
|
40
|
+
const i = t.find(
|
|
41
|
+
(n) => l(n) > s
|
|
36
42
|
);
|
|
37
|
-
return
|
|
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
|
-
|
|
41
|
-
|
|
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 (
|
|
61
|
+
if (e === null)
|
|
44
62
|
return null;
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
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
|
|
56
|
-
|
|
57
|
-
r ??
|
|
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
|
-
|
|
62
|
-
|
|
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;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -6,9 +6,10 @@ export { default as Slide } from './Slide';
|
|
|
6
6
|
export { Player, useSlide } from './Slide';
|
|
7
7
|
export { getInteractionDefaultValues, getInteractionDefaultSelectedValues, } from '../lib/interaction-defaults';
|
|
8
8
|
export type { ContentRenderProps } from './ContentRender/ContentRender';
|
|
9
|
+
export type { MarkdownFlowLocale } from '../lib/locale';
|
|
9
10
|
export type { OnSendContentParams, CustomRenderBarProps } from './types';
|
|
10
11
|
export type { EditMode, UploadProps, ImageResource, } from './MarkdownFlowEditor';
|
|
11
|
-
export type { Element, ElementSubtitleCue, SlideInteractionTexts, SlideProps, } from './Slide';
|
|
12
|
+
export type { Element, ElementSubtitleCue, SlideInteractionTexts, SlidePlayerControlsVisibility, SlideProps, } from './Slide';
|
|
12
13
|
export type { InteractionDefaultResolver, InteractionDefaultResolverParams, InteractionDefaultValueOptions, InteractionDefaultValues, InteractionParseResult, } from '../lib/interaction-defaults';
|
|
13
14
|
export type { PlayerProps, SlidePlayerNavigationContext } from './Slide';
|
|
14
15
|
export type { UseSlideResult } from './Slide';
|
package/dist/editor.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import { default as MarkdownFlowEditor, EditMode,
|
|
1
|
+
import { default as MarkdownFlowEditor, EditMode, UploadProps, ImageResource } from './components/MarkdownFlowEditor';
|
|
2
2
|
export { MarkdownFlowEditor };
|
|
3
|
-
export type { EditMode,
|
|
3
|
+
export type { EditMode, UploadProps, ImageResource };
|
|
4
|
+
export type { MarkdownFlowLocale } from './lib/locale';
|
package/dist/index.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./components/MarkdownFlowEditor/MarkdownFlowEditor.cjs.js"),n=require("./components/MarkdownFlow/MarkdownFlow.cjs.js");require("./_virtual/jsx-runtime.cjs.js");require("react");;/* empty css */const r=require("./components/ContentRender/ContentRender.cjs.js"),o=require("./components/ContentRender/IframeSandbox.cjs.js"),a=require("./components/ContentRender/utils/split-content.cjs.js"),u=require("./components/ContentRender/MarkdownFlowInput.cjs.js"),e=require("./lib/interaction-defaults.cjs.js");exports.MarkdownFlowEditor=t.default;exports.MarkdownFlow=n.default;exports.ContentRender=r.default;exports.IframeSandbox=o.default;exports.splitContentSegments=a.splitContentSegments;exports.MarkdownFlowInput=u.default;exports.getInteractionDefaultSelectedValues=e.getInteractionDefaultSelectedValues;exports.getInteractionDefaultValues=e.getInteractionDefaultValues;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./components/MarkdownFlowEditor/MarkdownFlowEditor.cjs.js"),n=require("./components/MarkdownFlow/MarkdownFlow.cjs.js");require("./_virtual/jsx-runtime.cjs.js");require("react");require("./components/ContentRender/contentRenderI18n.cjs.js");;/* empty css */const r=require("./components/ContentRender/ContentRender.cjs.js"),o=require("./components/ContentRender/IframeSandbox.cjs.js"),a=require("./components/ContentRender/utils/split-content.cjs.js"),u=require("./components/ContentRender/MarkdownFlowInput.cjs.js"),e=require("./lib/interaction-defaults.cjs.js");exports.MarkdownFlowEditor=t.default;exports.MarkdownFlow=n.default;exports.ContentRender=r.default;exports.IframeSandbox=o.default;exports.splitContentSegments=a.splitContentSegments;exports.MarkdownFlowInput=u.default;exports.getInteractionDefaultSelectedValues=e.getInteractionDefaultSelectedValues;exports.getInteractionDefaultValues=e.getInteractionDefaultValues;
|
|
2
2
|
//# sourceMappingURL=index.cjs.js.map
|
package/dist/index.es.js
CHANGED
|
@@ -1,21 +1,22 @@
|
|
|
1
|
-
import { default as
|
|
2
|
-
import { default as
|
|
1
|
+
import { default as n } from "./components/MarkdownFlowEditor/MarkdownFlowEditor.es.js";
|
|
2
|
+
import { default as m } from "./components/MarkdownFlow/MarkdownFlow.es.js";
|
|
3
3
|
import "./_virtual/jsx-runtime.es.js";
|
|
4
4
|
import "react";
|
|
5
|
+
import "./components/ContentRender/contentRenderI18n.es.js";
|
|
5
6
|
/* empty css */
|
|
6
|
-
import { default as
|
|
7
|
-
import { default as
|
|
7
|
+
import { default as d } from "./components/ContentRender/ContentRender.es.js";
|
|
8
|
+
import { default as s } from "./components/ContentRender/IframeSandbox.es.js";
|
|
8
9
|
import { splitContentSegments as x } from "./components/ContentRender/utils/split-content.es.js";
|
|
9
|
-
import { default as
|
|
10
|
-
import { getInteractionDefaultSelectedValues as
|
|
10
|
+
import { default as I } from "./components/ContentRender/MarkdownFlowInput.es.js";
|
|
11
|
+
import { getInteractionDefaultSelectedValues as g, getInteractionDefaultValues as k } from "./lib/interaction-defaults.es.js";
|
|
11
12
|
export {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
d as ContentRender,
|
|
14
|
+
s as IframeSandbox,
|
|
15
|
+
m as MarkdownFlow,
|
|
16
|
+
n as MarkdownFlowEditor,
|
|
17
|
+
I as MarkdownFlowInput,
|
|
18
|
+
g as getInteractionDefaultSelectedValues,
|
|
19
|
+
k as getInteractionDefaultValues,
|
|
19
20
|
x as splitContentSegments
|
|
20
21
|
};
|
|
21
22
|
//# sourceMappingURL=index.es.js.map
|
package/dist/index.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o="en-US",r=["en-US","fr-FR","zh-CN"],t={en:"en-US",fr:"fr-FR",zh:"zh-CN"},l=n=>{if(!n)return o;const e=n.split("_").join("-");if(r.includes(e))return e;const L=e.split("-")[0]?.toLowerCase();return t[L]??o};exports.DEFAULT_MARKDOWN_FLOW_LOCALE=o;exports.MARKDOWN_FLOW_LOCALES=r;exports.normalizeMarkdownFlowLocale=l;
|
|
2
|
+
//# sourceMappingURL=locale.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locale.cjs.js","sources":["../../src/lib/locale.ts"],"sourcesContent":["export const DEFAULT_MARKDOWN_FLOW_LOCALE = \"en-US\";\n\nexport const MARKDOWN_FLOW_LOCALES = [\"en-US\", \"fr-FR\", \"zh-CN\"] as const;\n\nexport type MarkdownFlowLocale = (typeof MARKDOWN_FLOW_LOCALES)[number];\n\nconst localeAliasMap: Record<string, MarkdownFlowLocale> = {\n en: \"en-US\",\n fr: \"fr-FR\",\n zh: \"zh-CN\",\n};\n\nexport const normalizeMarkdownFlowLocale = (\n locale?: string | null\n): MarkdownFlowLocale => {\n if (!locale) {\n return DEFAULT_MARKDOWN_FLOW_LOCALE;\n }\n\n const normalizedLocale = locale.split(\"_\").join(\"-\");\n if (MARKDOWN_FLOW_LOCALES.includes(normalizedLocale as MarkdownFlowLocale)) {\n return normalizedLocale as MarkdownFlowLocale;\n }\n\n const baseLocale = normalizedLocale.split(\"-\")[0]?.toLowerCase();\n return localeAliasMap[baseLocale] ?? DEFAULT_MARKDOWN_FLOW_LOCALE;\n};\n"],"names":["DEFAULT_MARKDOWN_FLOW_LOCALE","MARKDOWN_FLOW_LOCALES","localeAliasMap","normalizeMarkdownFlowLocale","locale","normalizedLocale","baseLocale"],"mappings":"gFAAO,MAAMA,EAA+B,QAE/BC,EAAwB,CAAC,QAAS,QAAS,OAAO,EAIzDC,EAAqD,CACzD,GAAI,QACJ,GAAI,QACJ,GAAI,OACN,EAEaC,EACXC,GACuB,CACvB,GAAI,CAACA,EACH,OAAOJ,EAGT,MAAMK,EAAmBD,EAAO,MAAM,GAAG,EAAE,KAAK,GAAG,EACnD,GAAIH,EAAsB,SAASI,CAAsC,EACvE,OAAOA,EAGT,MAAMC,EAAaD,EAAiB,MAAM,GAAG,EAAE,CAAC,GAAG,YAAA,EACnD,OAAOH,EAAeI,CAAU,GAAKN,CACvC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const DEFAULT_MARKDOWN_FLOW_LOCALE = "en-US";
|
|
2
|
+
export declare const MARKDOWN_FLOW_LOCALES: readonly ["en-US", "fr-FR", "zh-CN"];
|
|
3
|
+
export type MarkdownFlowLocale = (typeof MARKDOWN_FLOW_LOCALES)[number];
|
|
4
|
+
export declare const normalizeMarkdownFlowLocale: (locale?: string | null) => MarkdownFlowLocale;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const o = "en-US", t = ["en-US", "fr-FR", "zh-CN"], s = {
|
|
2
|
+
en: "en-US",
|
|
3
|
+
fr: "fr-FR",
|
|
4
|
+
zh: "zh-CN"
|
|
5
|
+
}, L = (e) => {
|
|
6
|
+
if (!e)
|
|
7
|
+
return o;
|
|
8
|
+
const n = e.split("_").join("-");
|
|
9
|
+
if (t.includes(n))
|
|
10
|
+
return n;
|
|
11
|
+
const r = n.split("-")[0]?.toLowerCase();
|
|
12
|
+
return s[r] ?? o;
|
|
13
|
+
};
|
|
14
|
+
export {
|
|
15
|
+
o as DEFAULT_MARKDOWN_FLOW_LOCALE,
|
|
16
|
+
t as MARKDOWN_FLOW_LOCALES,
|
|
17
|
+
L as normalizeMarkdownFlowLocale
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=locale.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locale.es.js","sources":["../../src/lib/locale.ts"],"sourcesContent":["export const DEFAULT_MARKDOWN_FLOW_LOCALE = \"en-US\";\n\nexport const MARKDOWN_FLOW_LOCALES = [\"en-US\", \"fr-FR\", \"zh-CN\"] as const;\n\nexport type MarkdownFlowLocale = (typeof MARKDOWN_FLOW_LOCALES)[number];\n\nconst localeAliasMap: Record<string, MarkdownFlowLocale> = {\n en: \"en-US\",\n fr: \"fr-FR\",\n zh: \"zh-CN\",\n};\n\nexport const normalizeMarkdownFlowLocale = (\n locale?: string | null\n): MarkdownFlowLocale => {\n if (!locale) {\n return DEFAULT_MARKDOWN_FLOW_LOCALE;\n }\n\n const normalizedLocale = locale.split(\"_\").join(\"-\");\n if (MARKDOWN_FLOW_LOCALES.includes(normalizedLocale as MarkdownFlowLocale)) {\n return normalizedLocale as MarkdownFlowLocale;\n }\n\n const baseLocale = normalizedLocale.split(\"-\")[0]?.toLowerCase();\n return localeAliasMap[baseLocale] ?? DEFAULT_MARKDOWN_FLOW_LOCALE;\n};\n"],"names":["DEFAULT_MARKDOWN_FLOW_LOCALE","MARKDOWN_FLOW_LOCALES","localeAliasMap","normalizeMarkdownFlowLocale","locale","normalizedLocale","baseLocale"],"mappings":"AAAO,MAAMA,IAA+B,SAE/BC,IAAwB,CAAC,SAAS,SAAS,OAAO,GAIzDC,IAAqD;AAAA,EACzD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEaC,IAA8B,CACzCC,MACuB;AACvB,MAAI,CAACA;AACH,WAAOJ;AAGT,QAAMK,IAAmBD,EAAO,MAAM,GAAG,EAAE,KAAK,GAAG;AACnD,MAAIH,EAAsB,SAASI,CAAsC;AACvE,WAAOA;AAGT,QAAMC,IAAaD,EAAiB,MAAM,GAAG,EAAE,CAAC,GAAG,YAAA;AACnD,SAAOH,EAAeI,CAAU,KAAKN;AACvC;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localeTextMap.cjs.js","sources":["../../src/lib/localeTextMap.ts"],"sourcesContent":["export type LocaleTextValues<T extends readonly unknown[]> = {\n readonly [Index in keyof T]: string;\n};\n\nexport const buildLocaleTexts = <const TKeys extends readonly string[]>(\n keys: TKeys,\n values: LocaleTextValues<TKeys>\n): Record<TKeys[number], string> =>\n Object.fromEntries(keys.map((key, index) => [key, values[index]])) as Record<\n TKeys[number],\n string\n >;\n"],"names":["buildLocaleTexts","keys","values","key","index"],"mappings":"gFAIO,MAAMA,EAAmB,CAC9BC,EACAC,IAEA,OAAO,YAAYD,EAAK,IAAI,CAACE,EAAKC,IAAU,CAACD,EAAKD,EAAOE,CAAK,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localeTextMap.es.js","sources":["../../src/lib/localeTextMap.ts"],"sourcesContent":["export type LocaleTextValues<T extends readonly unknown[]> = {\n readonly [Index in keyof T]: string;\n};\n\nexport const buildLocaleTexts = <const TKeys extends readonly string[]>(\n keys: TKeys,\n values: LocaleTextValues<TKeys>\n): Record<TKeys[number], string> =>\n Object.fromEntries(keys.map((key, index) => [key, values[index]])) as Record<\n TKeys[number],\n string\n >;\n"],"names":["buildLocaleTexts","keys","values","key","index"],"mappings":"AAIO,MAAMA,IAAmB,CAC9BC,GACAC,MAEA,OAAO,YAAYD,EAAK,IAAI,CAACE,GAAKC,MAAU,CAACD,GAAKD,EAAOE,CAAK,CAAC,CAAC,CAAC;"}
|