markdown-flow-ui 0.1.99 → 0.1.100-beta.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/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/ellipsis-vertical.cjs.js +7 -0
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/ellipsis-vertical.cjs.js.map +1 -0
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/ellipsis-vertical.es.js +17 -0
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/ellipsis-vertical.es.js.map +1 -0
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/file-pen-line.cjs.js +7 -0
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/file-pen-line.cjs.js.map +1 -0
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/file-pen-line.es.js +29 -0
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/file-pen-line.es.js.map +1 -0
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/maximize.cjs.js +7 -0
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/maximize.cjs.js.map +1 -0
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/maximize.es.js +18 -0
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/maximize.es.js.map +1 -0
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/rotate-ccw.cjs.js +7 -0
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/rotate-ccw.cjs.js.map +1 -0
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/rotate-ccw.es.js +16 -0
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/rotate-ccw.es.js.map +1 -0
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/rotate-cw.cjs.js +7 -0
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/rotate-cw.cjs.js.map +1 -0
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/rotate-cw.es.js +16 -0
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/rotate-cw.es.js.map +1 -0
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/volume-2.cjs.js +7 -0
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/volume-2.cjs.js.map +1 -0
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/volume-2.es.js +23 -0
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/volume-2.es.js.map +1 -0
- package/dist/_virtual/index.cjs.js +1 -1
- package/dist/_virtual/index.es.js +1 -0
- package/dist/assets/markdown-flow-ui.css +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.es.js +212 -164
- package/dist/components/ContentRender/IframeSandbox.es.js.map +1 -1
- package/dist/components/ContentRender/SandboxApp.cjs.js +2 -2
- package/dist/components/ContentRender/SandboxApp.cjs.js.map +1 -1
- package/dist/components/ContentRender/SandboxApp.es.js +21 -21
- package/dist/components/ContentRender/SandboxApp.es.js.map +1 -1
- package/dist/components/ContentRender/index.cjs.js +1 -1
- package/dist/components/ContentRender/index.es.js +6 -5
- package/dist/components/MarkdownFlow/MarkdownFlow.cjs.js +1 -1
- package/dist/components/MarkdownFlow/MarkdownFlow.cjs.js.map +1 -1
- package/dist/components/MarkdownFlow/MarkdownFlow.es.js +2 -2
- package/dist/components/Slide/Player.cjs.js +2 -0
- package/dist/components/Slide/Player.cjs.js.map +1 -0
- package/dist/components/Slide/Player.d.ts +19 -0
- package/dist/components/Slide/Player.es.js +327 -0
- package/dist/components/Slide/Player.es.js.map +1 -0
- package/dist/components/Slide/Slide.cjs.js +2 -0
- package/dist/components/Slide/Slide.cjs.js.map +1 -0
- package/dist/components/Slide/Slide.d.ts +12 -0
- package/dist/components/Slide/Slide.es.js +394 -0
- package/dist/components/Slide/Slide.es.js.map +1 -0
- package/dist/components/Slide/Slide.stories.d.ts +47 -0
- package/dist/components/Slide/diff-utils.cjs.js +5 -0
- package/dist/components/Slide/diff-utils.cjs.js.map +1 -0
- package/dist/components/Slide/diff-utils.d.ts +18 -0
- package/dist/components/Slide/diff-utils.es.js +113 -0
- package/dist/components/Slide/diff-utils.es.js.map +1 -0
- package/dist/components/Slide/index.d.ts +12 -0
- package/dist/components/Slide/interaction-defaults.cjs.js +2 -0
- package/dist/components/Slide/interaction-defaults.cjs.js.map +1 -0
- package/dist/components/Slide/interaction-defaults.d.ts +23 -0
- package/dist/components/Slide/interaction-defaults.es.js +85 -0
- package/dist/components/Slide/interaction-defaults.es.js.map +1 -0
- package/dist/components/Slide/types.d.ts +24 -0
- package/dist/components/Slide/useSlide.cjs.js +2 -0
- package/dist/components/Slide/useSlide.cjs.js.map +1 -0
- package/dist/components/Slide/useSlide.d.ts +21 -0
- package/dist/components/Slide/useSlide.es.js +102 -0
- package/dist/components/Slide/useSlide.es.js.map +1 -0
- package/dist/components/index.d.ts +5 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.es.js +21 -9
- package/dist/index.es.js.map +1 -1
- package/dist/lib/browserUserActivation.cjs.js +2 -0
- package/dist/lib/browserUserActivation.cjs.js.map +1 -0
- package/dist/lib/browserUserActivation.d.ts +5 -0
- package/dist/lib/browserUserActivation.es.js +13 -0
- package/dist/lib/browserUserActivation.es.js.map +1 -0
- package/dist/markdown-flow-ui-lib.css +1 -1
- package/dist/renderer.cjs.js +1 -1
- package/dist/renderer.d.ts +3 -2
- package/dist/renderer.es.js +20 -8
- package/dist/renderer.es.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff-utils.es.js","sources":["../../../src/components/Slide/diff-utils.ts"],"sourcesContent":["import type { Element } from \"./types\";\n\ntype DiffHunk = {\n oldStart: number;\n lines: string[];\n};\n\ntype ParsedUnifiedDiff = {\n targetIndex: number;\n hunks: DiffHunk[];\n};\n\ntype DiffContentParts = {\n patchText?: string;\n trailingContent?: string;\n};\n\nconst DIFF_BLOCK_PATTERN = /!\\+\\+\\+\\s*([\\s\\S]*?)\\s*!\\+\\+\\+/;\nconst HUNK_HEADER_PATTERN = /^@@\\s+-(\\d+)(?:,(\\d+))?\\s+\\+(\\d+)(?:,(\\d+))?\\s+@@/;\n\nconst isComparableLineMatch = (sourceLine: string, expectedLine: string) =>\n sourceLine === expectedLine || sourceLine.trim() === expectedLine.trim();\n\nexport const splitDiffContent = (content?: string): DiffContentParts => {\n if (!content) {\n return {};\n }\n\n const matched = content.match(DIFF_BLOCK_PATTERN);\n\n if (!matched) {\n return {\n trailingContent: content.trim() || undefined,\n };\n }\n\n const patchText = matched[1]?.trim();\n const trailingContent = content\n .slice(matched.index + matched[0].length)\n .trim();\n\n return {\n patchText: patchText || undefined,\n trailingContent: trailingContent || undefined,\n };\n};\n\nexport const parseUnifiedDiff = (\n patchText: string\n): ParsedUnifiedDiff | null => {\n const lines = patchText.split(\"\\n\");\n const targetMatch = lines[0]?.match(/^---\\s+a\\/(\\d+)/);\n const nextMatch = lines[1]?.match(/^\\+\\+\\+\\s+b\\/(\\d+)/);\n\n if (!targetMatch || !nextMatch || targetMatch[1] !== nextMatch[1]) {\n return null;\n }\n\n const hunks: DiffHunk[] = [];\n let currentHunk: DiffHunk | null = null;\n\n lines.slice(2).forEach((line) => {\n const headerMatch = line.match(HUNK_HEADER_PATTERN);\n\n if (headerMatch) {\n if (currentHunk) {\n hunks.push(currentHunk);\n }\n\n currentHunk = {\n oldStart: Number.parseInt(headerMatch[1], 10),\n lines: [],\n };\n return;\n }\n\n if (currentHunk) {\n currentHunk.lines.push(line);\n }\n });\n\n if (currentHunk) {\n hunks.push(currentHunk);\n }\n\n if (hunks.length === 0) {\n return null;\n }\n\n return {\n targetIndex: Number.parseInt(targetMatch[1], 10),\n hunks,\n };\n};\n\nexport const applyUnifiedDiff = (\n source: string,\n patchText: string\n): string | null => {\n const parsed = parseUnifiedDiff(patchText);\n\n if (!parsed) {\n return null;\n }\n\n const sourceLines = source.split(\"\\n\");\n const resultLines: string[] = [];\n let sourceCursor = 0;\n\n for (const hunk of parsed.hunks) {\n const hunkStartIndex = Math.max(hunk.oldStart - 1, 0);\n\n while (sourceCursor < hunkStartIndex && sourceCursor < sourceLines.length) {\n resultLines.push(sourceLines[sourceCursor]);\n sourceCursor += 1;\n }\n\n for (const line of hunk.lines) {\n const marker = line[0];\n const expectedLine = line.slice(1);\n\n if (marker === \" \") {\n const currentLine = sourceLines[sourceCursor];\n\n if (\n currentLine == null ||\n !isComparableLineMatch(currentLine, expectedLine)\n ) {\n return null;\n }\n\n resultLines.push(currentLine);\n sourceCursor += 1;\n continue;\n }\n\n if (marker === \"-\") {\n const currentLine = sourceLines[sourceCursor];\n\n if (\n currentLine == null ||\n !isComparableLineMatch(currentLine, expectedLine)\n ) {\n return null;\n }\n\n sourceCursor += 1;\n continue;\n }\n\n if (marker === \"+\") {\n resultLines.push(expectedLine);\n continue;\n }\n\n if (marker === \"\\\\\") {\n continue;\n }\n }\n }\n\n while (sourceCursor < sourceLines.length) {\n resultLines.push(sourceLines[sourceCursor]);\n sourceCursor += 1;\n }\n\n return resultLines.join(\"\\n\");\n};\n\nexport const applyDiffElement = (\n currentList: Element[],\n diffElement: Element\n): Element[] | null => {\n const content =\n typeof diffElement.content === \"string\" ? diffElement.content : undefined;\n const { patchText, trailingContent } = splitDiffContent(content);\n\n if (!patchText) {\n return trailingContent\n ? [\n ...currentList,\n {\n ...diffElement,\n type: \"text\",\n content: trailingContent,\n },\n ]\n : null;\n }\n\n const parsed = parseUnifiedDiff(patchText);\n\n if (!parsed) {\n return null;\n }\n\n const targetElement = currentList[parsed.targetIndex];\n const targetContent =\n typeof targetElement?.content === \"string\"\n ? targetElement.content\n : undefined;\n\n if (!targetElement || !targetContent) {\n return null;\n }\n\n const patchedContent = applyUnifiedDiff(targetContent, patchText);\n\n if (!patchedContent) {\n return null;\n }\n\n const nextList = currentList.map((element, index) =>\n index === parsed.targetIndex\n ? {\n ...element,\n content: patchedContent,\n }\n : element\n );\n\n if (!trailingContent) {\n return nextList;\n }\n\n return [\n ...nextList,\n {\n ...diffElement,\n type: \"text\",\n content: trailingContent,\n },\n ];\n};\n"],"names":["DIFF_BLOCK_PATTERN","HUNK_HEADER_PATTERN","isComparableLineMatch","sourceLine","expectedLine","splitDiffContent","content","matched","patchText","trailingContent","parseUnifiedDiff","lines","targetMatch","nextMatch","hunks","currentHunk","line","headerMatch","applyUnifiedDiff","source","parsed","sourceLines","resultLines","sourceCursor","hunk","hunkStartIndex","marker","currentLine","applyDiffElement","currentList","diffElement","targetElement","targetContent","patchedContent","nextList","element","index"],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { default as Slide } from './Slide';
|
|
2
|
+
import { default as Player } from './Player';
|
|
3
|
+
import { applyDiffElement, applyUnifiedDiff, parseUnifiedDiff, splitDiffContent } from './diff-utils';
|
|
4
|
+
import { getInteractionDefaultSelectedValues, getInteractionDefaultValues } from './interaction-defaults';
|
|
5
|
+
import { default as useSlide } from './useSlide';
|
|
6
|
+
export default Slide;
|
|
7
|
+
export { Slide, applyDiffElement, applyUnifiedDiff, parseUnifiedDiff, splitDiffContent, Player, useSlide, getInteractionDefaultValues, getInteractionDefaultSelectedValues, };
|
|
8
|
+
export type { SlideProps } from './Slide';
|
|
9
|
+
export type { InteractionDefaultResolver, InteractionDefaultResolverParams, InteractionDefaultValueOptions, InteractionDefaultValues, InteractionParseResult, } from './interaction-defaults';
|
|
10
|
+
export type { Element, ElementAudioSegment } from './types';
|
|
11
|
+
export type { PlayerProps } from './Player';
|
|
12
|
+
export type { UseSlideResult } from './useSlide';
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=require("../../_virtual/index.cjs.js"),x=m.distExports.createInteractionParser(),v=e=>{if(!e)return null;try{return x.parseToRemarkFormat(e)}catch(n){return console.warn("Failed to parse interaction block",n),null}},f=(e,n)=>{if(!e)return null;const u=e.trim(),t=n.buttonValues||[],r=n.buttonTexts||[],s=t.indexOf(u);if(s>-1)return{value:t[s],display:r[s]};const l=r.indexOf(u);return l>-1?{value:t[l]||r[l],display:r[l]}:null},I=e=>e.split(/[,,\n]/).map(n=>n.trim()).filter(Boolean),T=(e,n,u,t)=>t?.resolveDefaultValues?.({content:e,rawValue:n,interactionInfo:u})??null,p=(e,n,u)=>{const t=n?.toString().trim();if(!t)return{};const r=v(e),s=T(e,t,r,u);if(s)return s;if(!r)return{buttonText:t,inputText:t};if(r.isMultiSelect){const c=I(t);if(!c.length)return{};const o=[],a=[];return c.forEach(i=>{const d=f(i,r);if(d){o.push(d.value);return}if(r.placeholder){a.push(i);return}o.push(i)}),{selectedValues:o.length?o:void 0,inputText:a.length?a.join(", "):void 0}}const l=f(t,r);return l?{buttonText:l.value||l.display||t}:r.placeholder?{inputText:t}:{buttonText:t,inputText:t}},V=(e,n,u)=>{const t=p(e,n,u);return t.selectedValues?t.selectedValues:n?n.split(",").map(r=>r.trim()).filter(Boolean):void 0};exports.getInteractionDefaultSelectedValues=V;exports.getInteractionDefaultValues=p;
|
|
2
|
+
//# sourceMappingURL=interaction-defaults.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interaction-defaults.cjs.js","sources":["../../../src/components/Slide/interaction-defaults.ts"],"sourcesContent":["import { createInteractionParser } from \"remark-flow\";\n\nexport interface InteractionParseResult {\n buttonTexts?: string[];\n buttonValues?: string[];\n placeholder?: string;\n variableName?: string;\n isMultiSelect?: boolean;\n}\n\nexport interface InteractionDefaultValues {\n buttonText?: string;\n inputText?: string;\n selectedValues?: string[];\n}\n\nexport interface InteractionDefaultResolverParams {\n content?: string | null;\n rawValue?: string | null;\n interactionInfo?: InteractionParseResult | null;\n}\n\nexport type InteractionDefaultResolver = (\n params: InteractionDefaultResolverParams\n) => InteractionDefaultValues | null | undefined;\n\nexport interface InteractionDefaultValueOptions {\n resolveDefaultValues?: InteractionDefaultResolver;\n}\n\nconst interactionParser = createInteractionParser();\n\nconst parseInteractionBlock = (\n content?: string | null\n): InteractionParseResult | null => {\n if (!content) {\n return null;\n }\n\n try {\n return interactionParser.parseToRemarkFormat(\n content\n ) as InteractionParseResult;\n } catch (error) {\n console.warn(\"Failed to parse interaction block\", error);\n return null;\n }\n};\n\nconst normalizeButtonValue = (\n token: string,\n info: InteractionParseResult\n): { value: string; display?: string } | null => {\n if (!token) {\n return null;\n }\n\n const cleaned = token.trim();\n const buttonValues = info.buttonValues || [];\n const buttonTexts = info.buttonTexts || [];\n const valueIndex = buttonValues.indexOf(cleaned);\n\n if (valueIndex > -1) {\n return {\n value: buttonValues[valueIndex],\n display: buttonTexts[valueIndex],\n };\n }\n\n const textIndex = buttonTexts.indexOf(cleaned);\n\n if (textIndex > -1) {\n return {\n value: buttonValues[textIndex] || buttonTexts[textIndex],\n display: buttonTexts[textIndex],\n };\n }\n\n return null;\n};\n\nconst splitPresetValues = (raw: string) => {\n return raw\n .split(/[,,\\n]/)\n .map((item) => item.trim())\n .filter(Boolean);\n};\n\nconst resolveCustomInteractionDefaults = (\n content?: string | null,\n rawValue?: string | null,\n interactionInfo?: InteractionParseResult | null,\n options?: InteractionDefaultValueOptions\n) => {\n return (\n options?.resolveDefaultValues?.({\n content,\n rawValue,\n interactionInfo,\n }) ?? null\n );\n};\n\nexport const getInteractionDefaultValues = (\n content?: string | null,\n rawValue?: string | null,\n options?: InteractionDefaultValueOptions\n): InteractionDefaultValues => {\n const normalized = rawValue?.toString().trim();\n\n if (!normalized) {\n return {};\n }\n\n const interactionInfo = parseInteractionBlock(content);\n const customDefaults = resolveCustomInteractionDefaults(\n content,\n normalized,\n interactionInfo,\n options\n );\n\n if (customDefaults) {\n return customDefaults;\n }\n\n if (!interactionInfo) {\n return {\n buttonText: normalized,\n inputText: normalized,\n };\n }\n\n if (interactionInfo.isMultiSelect) {\n const tokens = splitPresetValues(normalized);\n\n if (!tokens.length) {\n return {};\n }\n\n const selectedValues: string[] = [];\n const customInputs: string[] = [];\n\n tokens.forEach((token) => {\n const mapped = normalizeButtonValue(token, interactionInfo);\n\n if (mapped) {\n selectedValues.push(mapped.value);\n return;\n }\n\n if (interactionInfo.placeholder) {\n customInputs.push(token);\n return;\n }\n\n selectedValues.push(token);\n });\n\n return {\n selectedValues: selectedValues.length ? selectedValues : undefined,\n inputText: customInputs.length ? customInputs.join(\", \") : undefined,\n };\n }\n\n const mapped = normalizeButtonValue(normalized, interactionInfo);\n\n if (mapped) {\n return {\n buttonText: mapped.value || mapped.display || normalized,\n };\n }\n\n if (interactionInfo.placeholder) {\n return {\n inputText: normalized,\n };\n }\n\n return {\n buttonText: normalized,\n inputText: normalized,\n };\n};\n\nexport const getInteractionDefaultSelectedValues = (\n content?: string | null,\n rawValue?: string | null,\n options?: InteractionDefaultValueOptions\n) => {\n const defaults = getInteractionDefaultValues(content, rawValue, options);\n\n if (defaults.selectedValues) {\n return defaults.selectedValues;\n }\n\n return rawValue\n ? rawValue\n .split(\",\")\n .map((value) => value.trim())\n .filter(Boolean)\n : undefined;\n};\n"],"names":["interactionParser","createInteractionParser","parseInteractionBlock","content","error","normalizeButtonValue","token","info","cleaned","buttonValues","buttonTexts","valueIndex","textIndex","splitPresetValues","raw","item","resolveCustomInteractionDefaults","rawValue","interactionInfo","options","getInteractionDefaultValues","normalized","customDefaults","tokens","selectedValues","customInputs","mapped","getInteractionDefaultSelectedValues","defaults","value"],"mappings":"+HA8BMA,EAAoBC,EAAAA,YAAAA,wBAAA,EAEpBC,EACJC,GACkC,CAClC,GAAI,CAACA,EACH,OAAO,KAGT,GAAI,CACF,OAAOH,EAAkB,oBACvBG,CAAA,CAEJ,OAASC,EAAO,CACd,eAAQ,KAAK,oCAAqCA,CAAK,EAChD,IACT,CACF,EAEMC,EAAuB,CAC3BC,EACAC,IAC+C,CAC/C,GAAI,CAACD,EACH,OAAO,KAGT,MAAME,EAAUF,EAAM,KAAA,EAChBG,EAAeF,EAAK,cAAgB,CAAA,EACpCG,EAAcH,EAAK,aAAe,CAAA,EAClCI,EAAaF,EAAa,QAAQD,CAAO,EAE/C,GAAIG,EAAa,GACf,MAAO,CACL,MAAOF,EAAaE,CAAU,EAC9B,QAASD,EAAYC,CAAU,CAAA,EAInC,MAAMC,EAAYF,EAAY,QAAQF,CAAO,EAE7C,OAAII,EAAY,GACP,CACL,MAAOH,EAAaG,CAAS,GAAKF,EAAYE,CAAS,EACvD,QAASF,EAAYE,CAAS,CAAA,EAI3B,IACT,EAEMC,EAAqBC,GAClBA,EACJ,MAAM,QAAQ,EACd,IAAKC,GAASA,EAAK,KAAA,CAAM,EACzB,OAAO,OAAO,EAGbC,EAAmC,CACvCb,EACAc,EACAC,EACAC,IAGEA,GAAS,uBAAuB,CAC9B,QAAAhB,EACA,SAAAc,EACA,gBAAAC,CAAA,CACD,GAAK,KAIGE,EAA8B,CACzCjB,EACAc,EACAE,IAC6B,CAC7B,MAAME,EAAaJ,GAAU,SAAA,EAAW,KAAA,EAExC,GAAI,CAACI,EACH,MAAO,CAAA,EAGT,MAAMH,EAAkBhB,EAAsBC,CAAO,EAC/CmB,EAAiBN,EACrBb,EACAkB,EACAH,EACAC,CAAA,EAGF,GAAIG,EACF,OAAOA,EAGT,GAAI,CAACJ,EACH,MAAO,CACL,WAAYG,EACZ,UAAWA,CAAA,EAIf,GAAIH,EAAgB,cAAe,CACjC,MAAMK,EAASV,EAAkBQ,CAAU,EAE3C,GAAI,CAACE,EAAO,OACV,MAAO,CAAA,EAGT,MAAMC,EAA2B,CAAA,EAC3BC,EAAyB,CAAA,EAE/B,OAAAF,EAAO,QAASjB,GAAU,CACxB,MAAMoB,EAASrB,EAAqBC,EAAOY,CAAe,EAE1D,GAAIQ,EAAQ,CACVF,EAAe,KAAKE,EAAO,KAAK,EAChC,MACF,CAEA,GAAIR,EAAgB,YAAa,CAC/BO,EAAa,KAAKnB,CAAK,EACvB,MACF,CAEAkB,EAAe,KAAKlB,CAAK,CAC3B,CAAC,EAEM,CACL,eAAgBkB,EAAe,OAASA,EAAiB,OACzD,UAAWC,EAAa,OAASA,EAAa,KAAK,IAAI,EAAI,MAAA,CAE/D,CAEA,MAAMC,EAASrB,EAAqBgB,EAAYH,CAAe,EAE/D,OAAIQ,EACK,CACL,WAAYA,EAAO,OAASA,EAAO,SAAWL,CAAA,EAI9CH,EAAgB,YACX,CACL,UAAWG,CAAA,EAIR,CACL,WAAYA,EACZ,UAAWA,CAAA,CAEf,EAEaM,EAAsC,CACjDxB,EACAc,EACAE,IACG,CACH,MAAMS,EAAWR,EAA4BjB,EAASc,EAAUE,CAAO,EAEvE,OAAIS,EAAS,eACJA,EAAS,eAGXX,EACHA,EACG,MAAM,GAAG,EACT,IAAKY,GAAUA,EAAM,KAAA,CAAM,EAC3B,OAAO,OAAO,EACjB,MACN"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface InteractionParseResult {
|
|
2
|
+
buttonTexts?: string[];
|
|
3
|
+
buttonValues?: string[];
|
|
4
|
+
placeholder?: string;
|
|
5
|
+
variableName?: string;
|
|
6
|
+
isMultiSelect?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface InteractionDefaultValues {
|
|
9
|
+
buttonText?: string;
|
|
10
|
+
inputText?: string;
|
|
11
|
+
selectedValues?: string[];
|
|
12
|
+
}
|
|
13
|
+
export interface InteractionDefaultResolverParams {
|
|
14
|
+
content?: string | null;
|
|
15
|
+
rawValue?: string | null;
|
|
16
|
+
interactionInfo?: InteractionParseResult | null;
|
|
17
|
+
}
|
|
18
|
+
export type InteractionDefaultResolver = (params: InteractionDefaultResolverParams) => InteractionDefaultValues | null | undefined;
|
|
19
|
+
export interface InteractionDefaultValueOptions {
|
|
20
|
+
resolveDefaultValues?: InteractionDefaultResolver;
|
|
21
|
+
}
|
|
22
|
+
export declare const getInteractionDefaultValues: (content?: string | null, rawValue?: string | null, options?: InteractionDefaultValueOptions) => InteractionDefaultValues;
|
|
23
|
+
export declare const getInteractionDefaultSelectedValues: (content?: string | null, rawValue?: string | null, options?: InteractionDefaultValueOptions) => string[] | undefined;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { d } from "../../_virtual/index.es.js";
|
|
2
|
+
const m = d.createInteractionParser(), x = (e) => {
|
|
3
|
+
if (!e)
|
|
4
|
+
return null;
|
|
5
|
+
try {
|
|
6
|
+
return m.parseToRemarkFormat(
|
|
7
|
+
e
|
|
8
|
+
);
|
|
9
|
+
} catch (n) {
|
|
10
|
+
return console.warn("Failed to parse interaction block", n), null;
|
|
11
|
+
}
|
|
12
|
+
}, f = (e, n) => {
|
|
13
|
+
if (!e)
|
|
14
|
+
return null;
|
|
15
|
+
const s = e.trim(), t = n.buttonValues || [], r = n.buttonTexts || [], o = t.indexOf(s);
|
|
16
|
+
if (o > -1)
|
|
17
|
+
return {
|
|
18
|
+
value: t[o],
|
|
19
|
+
display: r[o]
|
|
20
|
+
};
|
|
21
|
+
const u = r.indexOf(s);
|
|
22
|
+
return u > -1 ? {
|
|
23
|
+
value: t[u] || r[u],
|
|
24
|
+
display: r[u]
|
|
25
|
+
} : null;
|
|
26
|
+
}, h = (e) => e.split(/[,,\n]/).map((n) => n.trim()).filter(Boolean), v = (e, n, s, t) => t?.resolveDefaultValues?.({
|
|
27
|
+
content: e,
|
|
28
|
+
rawValue: n,
|
|
29
|
+
interactionInfo: s
|
|
30
|
+
}) ?? null, T = (e, n, s) => {
|
|
31
|
+
const t = n?.toString().trim();
|
|
32
|
+
if (!t)
|
|
33
|
+
return {};
|
|
34
|
+
const r = x(e), o = v(
|
|
35
|
+
e,
|
|
36
|
+
t,
|
|
37
|
+
r,
|
|
38
|
+
s
|
|
39
|
+
);
|
|
40
|
+
if (o)
|
|
41
|
+
return o;
|
|
42
|
+
if (!r)
|
|
43
|
+
return {
|
|
44
|
+
buttonText: t,
|
|
45
|
+
inputText: t
|
|
46
|
+
};
|
|
47
|
+
if (r.isMultiSelect) {
|
|
48
|
+
const c = h(t);
|
|
49
|
+
if (!c.length)
|
|
50
|
+
return {};
|
|
51
|
+
const l = [], i = [];
|
|
52
|
+
return c.forEach((a) => {
|
|
53
|
+
const p = f(a, r);
|
|
54
|
+
if (p) {
|
|
55
|
+
l.push(p.value);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (r.placeholder) {
|
|
59
|
+
i.push(a);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
l.push(a);
|
|
63
|
+
}), {
|
|
64
|
+
selectedValues: l.length ? l : void 0,
|
|
65
|
+
inputText: i.length ? i.join(", ") : void 0
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
const u = f(t, r);
|
|
69
|
+
return u ? {
|
|
70
|
+
buttonText: u.value || u.display || t
|
|
71
|
+
} : r.placeholder ? {
|
|
72
|
+
inputText: t
|
|
73
|
+
} : {
|
|
74
|
+
buttonText: t,
|
|
75
|
+
inputText: t
|
|
76
|
+
};
|
|
77
|
+
}, V = (e, n, s) => {
|
|
78
|
+
const t = T(e, n, s);
|
|
79
|
+
return t.selectedValues ? t.selectedValues : n ? n.split(",").map((r) => r.trim()).filter(Boolean) : void 0;
|
|
80
|
+
};
|
|
81
|
+
export {
|
|
82
|
+
V as getInteractionDefaultSelectedValues,
|
|
83
|
+
T as getInteractionDefaultValues
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=interaction-defaults.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interaction-defaults.es.js","sources":["../../../src/components/Slide/interaction-defaults.ts"],"sourcesContent":["import { createInteractionParser } from \"remark-flow\";\n\nexport interface InteractionParseResult {\n buttonTexts?: string[];\n buttonValues?: string[];\n placeholder?: string;\n variableName?: string;\n isMultiSelect?: boolean;\n}\n\nexport interface InteractionDefaultValues {\n buttonText?: string;\n inputText?: string;\n selectedValues?: string[];\n}\n\nexport interface InteractionDefaultResolverParams {\n content?: string | null;\n rawValue?: string | null;\n interactionInfo?: InteractionParseResult | null;\n}\n\nexport type InteractionDefaultResolver = (\n params: InteractionDefaultResolverParams\n) => InteractionDefaultValues | null | undefined;\n\nexport interface InteractionDefaultValueOptions {\n resolveDefaultValues?: InteractionDefaultResolver;\n}\n\nconst interactionParser = createInteractionParser();\n\nconst parseInteractionBlock = (\n content?: string | null\n): InteractionParseResult | null => {\n if (!content) {\n return null;\n }\n\n try {\n return interactionParser.parseToRemarkFormat(\n content\n ) as InteractionParseResult;\n } catch (error) {\n console.warn(\"Failed to parse interaction block\", error);\n return null;\n }\n};\n\nconst normalizeButtonValue = (\n token: string,\n info: InteractionParseResult\n): { value: string; display?: string } | null => {\n if (!token) {\n return null;\n }\n\n const cleaned = token.trim();\n const buttonValues = info.buttonValues || [];\n const buttonTexts = info.buttonTexts || [];\n const valueIndex = buttonValues.indexOf(cleaned);\n\n if (valueIndex > -1) {\n return {\n value: buttonValues[valueIndex],\n display: buttonTexts[valueIndex],\n };\n }\n\n const textIndex = buttonTexts.indexOf(cleaned);\n\n if (textIndex > -1) {\n return {\n value: buttonValues[textIndex] || buttonTexts[textIndex],\n display: buttonTexts[textIndex],\n };\n }\n\n return null;\n};\n\nconst splitPresetValues = (raw: string) => {\n return raw\n .split(/[,,\\n]/)\n .map((item) => item.trim())\n .filter(Boolean);\n};\n\nconst resolveCustomInteractionDefaults = (\n content?: string | null,\n rawValue?: string | null,\n interactionInfo?: InteractionParseResult | null,\n options?: InteractionDefaultValueOptions\n) => {\n return (\n options?.resolveDefaultValues?.({\n content,\n rawValue,\n interactionInfo,\n }) ?? null\n );\n};\n\nexport const getInteractionDefaultValues = (\n content?: string | null,\n rawValue?: string | null,\n options?: InteractionDefaultValueOptions\n): InteractionDefaultValues => {\n const normalized = rawValue?.toString().trim();\n\n if (!normalized) {\n return {};\n }\n\n const interactionInfo = parseInteractionBlock(content);\n const customDefaults = resolveCustomInteractionDefaults(\n content,\n normalized,\n interactionInfo,\n options\n );\n\n if (customDefaults) {\n return customDefaults;\n }\n\n if (!interactionInfo) {\n return {\n buttonText: normalized,\n inputText: normalized,\n };\n }\n\n if (interactionInfo.isMultiSelect) {\n const tokens = splitPresetValues(normalized);\n\n if (!tokens.length) {\n return {};\n }\n\n const selectedValues: string[] = [];\n const customInputs: string[] = [];\n\n tokens.forEach((token) => {\n const mapped = normalizeButtonValue(token, interactionInfo);\n\n if (mapped) {\n selectedValues.push(mapped.value);\n return;\n }\n\n if (interactionInfo.placeholder) {\n customInputs.push(token);\n return;\n }\n\n selectedValues.push(token);\n });\n\n return {\n selectedValues: selectedValues.length ? selectedValues : undefined,\n inputText: customInputs.length ? customInputs.join(\", \") : undefined,\n };\n }\n\n const mapped = normalizeButtonValue(normalized, interactionInfo);\n\n if (mapped) {\n return {\n buttonText: mapped.value || mapped.display || normalized,\n };\n }\n\n if (interactionInfo.placeholder) {\n return {\n inputText: normalized,\n };\n }\n\n return {\n buttonText: normalized,\n inputText: normalized,\n };\n};\n\nexport const getInteractionDefaultSelectedValues = (\n content?: string | null,\n rawValue?: string | null,\n options?: InteractionDefaultValueOptions\n) => {\n const defaults = getInteractionDefaultValues(content, rawValue, options);\n\n if (defaults.selectedValues) {\n return defaults.selectedValues;\n }\n\n return rawValue\n ? rawValue\n .split(\",\")\n .map((value) => value.trim())\n .filter(Boolean)\n : undefined;\n};\n"],"names":["interactionParser","createInteractionParser","parseInteractionBlock","content","error","normalizeButtonValue","token","info","cleaned","buttonValues","buttonTexts","valueIndex","textIndex","splitPresetValues","raw","item","resolveCustomInteractionDefaults","rawValue","interactionInfo","options","getInteractionDefaultValues","normalized","customDefaults","tokens","selectedValues","customInputs","mapped","getInteractionDefaultSelectedValues","defaults","value"],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
export type ElementType = "slot" | "html" | "svg" | "diff" | "img" | "interaction" | "tables" | "code" | "latex" | "md_img" | "mermaid" | "title" | "text" | "link" | string;
|
|
3
|
+
export type SlideOperation = "new" | "append" | string;
|
|
4
|
+
export interface ElementAudioSegment {
|
|
5
|
+
segment_index: number;
|
|
6
|
+
audio_data: string;
|
|
7
|
+
duration_ms: number;
|
|
8
|
+
is_final: boolean;
|
|
9
|
+
position?: number;
|
|
10
|
+
slide_id?: string;
|
|
11
|
+
av_contract?: Record<string, unknown> | null;
|
|
12
|
+
}
|
|
13
|
+
export interface Element {
|
|
14
|
+
content: React.ReactNode;
|
|
15
|
+
type: ElementType;
|
|
16
|
+
is_show?: boolean;
|
|
17
|
+
operation?: SlideOperation;
|
|
18
|
+
is_checkpoint?: boolean;
|
|
19
|
+
serial_number?: number;
|
|
20
|
+
is_read?: boolean;
|
|
21
|
+
audio_url?: string;
|
|
22
|
+
user_input?: string;
|
|
23
|
+
audio_segments?: ElementAudioSegment[];
|
|
24
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const u=require("react"),I=require("./diff-utils.cjs.js"),A=t=>t.filter(n=>n.is_checkpoint),y=t=>t.reduce((n,e,o)=>(e.is_checkpoint&&n.push(o),n),[]),h=t=>!!(t?.is_read&&(t.audio_url||(t.audio_segments?.length??0)>0)),w=(t=[])=>t.length>0&&!t.some(n=>n.is_final),k=t=>t.reduce((n,e)=>(h(e)&&n.push({serialNumber:e.serial_number,audioUrl:e.audio_url,audioSegments:e.audio_segments,isAudioStreaming:w(e.audio_segments)}),n),[]),q=t=>{const n=new Map;let e=0;return t.forEach((o,r)=>{h(o)&&(n.set(r,e),e+=1)}),n},C=(t,n,e)=>n.reduce((o,r,c)=>{const l=n[c+1]??t.length,a=[];for(let s=r;s<l;s+=1){const d=t[s];if(!h(d))continue;const f=e.get(s);f!=null&&a.push(f)}return o.set(c,a),o},new Map),m=t=>{const n=t.findIndex(e=>e.is_show===!0);return n>=0?n:t.findIndex(e=>e.is_show!==!1)},M=t=>({...t,is_show:!0}),P=(t,n)=>n<0?[]:t.slice(0,n+1).reduce((e,o)=>{if(o.type==="interaction")return e;const r=M(o);return r.type==="diff"?I.applyDiffElement(e,r)??[...e,r]:o.operation==="new"?[r]:e.length===0?[r]:[...e,r]},[]),R=(t,n)=>t.length===n.length&&t.every((e,o)=>e===n[o]),v=(t=[])=>{const n=u.useRef(t),e=u.useMemo(()=>R(n.current,t)?n.current:(n.current=t,t),[t]),o=u.useMemo(()=>A(e),[e]),r=u.useMemo(()=>y(e),[e]),c=u.useMemo(()=>k(e),[e]),l=u.useMemo(()=>q(e),[e]),a=u.useMemo(()=>C(e,r,l),[l,r,e]),[s,d]=u.useState(()=>m(o));u.useEffect(()=>{d(i=>o.length===0?-1:i>=0&&i<o.length?i:m(o))},[o]);const f=u.useCallback(()=>{d(i=>i<=0?Math.max(i,0):Math.max(i-1,0))},[]),S=u.useCallback(()=>{d(i=>i<0?i:Math.min(i+1,o.length-1))},[o.length]),_=s>0,p=s>=0&&s<o.length-1,g=u.useMemo(()=>{if(s<0)return;const i=o[s];if(i)return M(i)},[s,o]),x=u.useMemo(()=>P(o,s),[s,o]),b=u.useMemo(()=>a.get(s)??[],[s,a]),E=u.useMemo(()=>g?.type==="interaction"?g:void 0,[g]);return{currentElementList:x,slideElementList:o,currentIndex:s,audioList:c,currentAudioSequenceIndexes:b,currentInteractionElement:E,canGoPrev:_,canGoNext:p,handlePrev:f,handleNext:S}};exports.default=v;
|
|
2
|
+
//# sourceMappingURL=useSlide.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSlide.cjs.js","sources":["../../../src/components/Slide/useSlide.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nimport { applyDiffElement } from \"./diff-utils\";\nimport type { Element, ElementAudioSegment } from \"./types\";\n\nexport interface SlideAudioItem {\n serialNumber?: number;\n audioUrl?: string;\n audioSegments?: ElementAudioSegment[];\n isAudioStreaming?: boolean;\n}\n\nexport interface UseSlideResult {\n currentElementList: Element[];\n slideElementList: Element[];\n currentIndex: number;\n audioList: SlideAudioItem[];\n currentAudioSequenceIndexes: number[];\n currentInteractionElement?: Element;\n canGoPrev: boolean;\n canGoNext: boolean;\n handlePrev: () => void;\n handleNext: () => void;\n}\n\nconst getSlideElementList = (elementList: Element[]) =>\n elementList.filter((element) => element.is_checkpoint);\n\nconst getSlideElementIndexes = (elementList: Element[]) =>\n elementList.reduce<number[]>((indexes, element, index) => {\n if (element.is_checkpoint) {\n indexes.push(index);\n }\n\n return indexes;\n }, []);\n\nconst hasPlayableAudio = (element?: Element) =>\n Boolean(\n element?.is_read &&\n (element.audio_url || (element.audio_segments?.length ?? 0) > 0)\n );\n\nconst isStreamingAudio = (segments: ElementAudioSegment[] = []) =>\n segments.length > 0 && !segments.some((segment) => segment.is_final);\n\nconst getAudioList = (elementList: Element[]) =>\n elementList.reduce<SlideAudioItem[]>((list, element) => {\n if (hasPlayableAudio(element)) {\n list.push({\n serialNumber: element.serial_number,\n audioUrl: element.audio_url,\n audioSegments: element.audio_segments,\n isAudioStreaming: isStreamingAudio(element.audio_segments),\n });\n }\n\n return list;\n }, []);\n\nconst getAudioIndexMap = (elementList: Element[]) => {\n const audioIndexMap = new Map<number, number>();\n let audioIndex = 0;\n\n elementList.forEach((element, index) => {\n if (hasPlayableAudio(element)) {\n audioIndexMap.set(index, audioIndex);\n audioIndex += 1;\n }\n });\n\n return audioIndexMap;\n};\n\nconst getSlideAudioSequenceMap = (\n elementList: Element[],\n slideElementIndexes: number[],\n audioIndexMap: Map<number, number>\n) =>\n slideElementIndexes.reduce<Map<number, number[]>>(\n (sequenceMap, startIndex, slideIndex) => {\n const nextCheckpointIndex =\n slideElementIndexes[slideIndex + 1] ?? elementList.length;\n const sequenceIndexes: number[] = [];\n\n for (let index = startIndex; index < nextCheckpointIndex; index += 1) {\n const element = elementList[index];\n\n if (!hasPlayableAudio(element)) {\n continue;\n }\n\n const audioIndex = audioIndexMap.get(index);\n\n if (audioIndex == null) {\n continue;\n }\n\n sequenceIndexes.push(audioIndex);\n }\n\n sequenceMap.set(slideIndex, sequenceIndexes);\n return sequenceMap;\n },\n new Map<number, number[]>()\n );\n\nconst getInitialSlideIndex = (slideElementList: Element[]) => {\n const visibleIndex = slideElementList.findIndex(\n (element) => element.is_show === true\n );\n\n if (visibleIndex >= 0) {\n return visibleIndex;\n }\n\n return slideElementList.findIndex((element) => element.is_show !== false);\n};\n\nconst getVisibleElement = (element: Element): Element => ({\n ...element,\n is_show: true,\n});\n\nconst getCurrentElementList = (\n slideElementList: Element[],\n currentIndex: number\n) => {\n if (currentIndex < 0) {\n return [];\n }\n\n return slideElementList\n .slice(0, currentIndex + 1)\n .reduce<Element[]>((currentList, element) => {\n if (element.type === \"interaction\") {\n return currentList;\n }\n\n const visibleElement = getVisibleElement(element);\n\n if (visibleElement.type === \"diff\") {\n const nextList = applyDiffElement(currentList, visibleElement);\n\n return nextList ?? [...currentList, visibleElement];\n }\n\n if (element.operation === \"new\") {\n return [visibleElement];\n }\n\n if (currentList.length === 0) {\n return [visibleElement];\n }\n\n return [...currentList, visibleElement];\n }, []);\n};\n\nconst hasSameElementReferences = (\n prevElementList: Element[],\n nextElementList: Element[]\n) =>\n prevElementList.length === nextElementList.length &&\n prevElementList.every((element, index) => element === nextElementList[index]);\n\nconst useSlide = (elementList: Element[] = []): UseSlideResult => {\n const stableElementListRef = useRef(elementList);\n const stableElementList = useMemo(() => {\n if (hasSameElementReferences(stableElementListRef.current, elementList)) {\n return stableElementListRef.current;\n }\n\n // Reuse the previous wrapper array when the element references are unchanged.\n stableElementListRef.current = elementList;\n return elementList;\n }, [elementList]);\n const slideElementList = useMemo(\n () => getSlideElementList(stableElementList),\n [stableElementList]\n );\n const slideElementIndexes = useMemo(\n () => getSlideElementIndexes(stableElementList),\n [stableElementList]\n );\n const audioList = useMemo(\n () => getAudioList(stableElementList),\n [stableElementList]\n );\n const audioIndexMap = useMemo(\n () => getAudioIndexMap(stableElementList),\n [stableElementList]\n );\n const slideAudioSequenceMap = useMemo(\n () =>\n getSlideAudioSequenceMap(\n stableElementList,\n slideElementIndexes,\n audioIndexMap\n ),\n [audioIndexMap, slideElementIndexes, stableElementList]\n );\n const [currentIndex, setCurrentIndex] = useState(() =>\n getInitialSlideIndex(slideElementList)\n );\n\n useEffect(() => {\n setCurrentIndex((prevIndex) => {\n if (slideElementList.length === 0) {\n return -1;\n }\n\n if (prevIndex >= 0 && prevIndex < slideElementList.length) {\n return prevIndex;\n }\n\n return getInitialSlideIndex(slideElementList);\n });\n }, [slideElementList]);\n\n const handlePrev = useCallback(() => {\n setCurrentIndex((prevIndex) => {\n if (prevIndex <= 0) {\n return Math.max(prevIndex, 0);\n }\n\n return Math.max(prevIndex - 1, 0);\n });\n }, []);\n\n const handleNext = useCallback(() => {\n setCurrentIndex((prevIndex) => {\n if (prevIndex < 0) {\n return prevIndex;\n }\n\n return Math.min(prevIndex + 1, slideElementList.length - 1);\n });\n }, [slideElementList.length]);\n\n const canGoPrev = currentIndex > 0;\n const canGoNext =\n currentIndex >= 0 && currentIndex < slideElementList.length - 1;\n const currentStepElement = useMemo(() => {\n if (currentIndex < 0) {\n return undefined;\n }\n\n const element = slideElementList[currentIndex];\n\n if (!element) {\n return undefined;\n }\n\n return getVisibleElement(element);\n }, [currentIndex, slideElementList]);\n const currentElementList = useMemo(\n () => getCurrentElementList(slideElementList, currentIndex),\n [currentIndex, slideElementList]\n );\n const currentAudioSequenceIndexes = useMemo(\n () => slideAudioSequenceMap.get(currentIndex) ?? [],\n [currentIndex, slideAudioSequenceMap]\n );\n const currentInteractionElement = useMemo(\n () =>\n currentStepElement?.type === \"interaction\"\n ? currentStepElement\n : undefined,\n [currentStepElement]\n );\n\n return {\n currentElementList,\n slideElementList,\n currentIndex,\n audioList,\n currentAudioSequenceIndexes,\n currentInteractionElement,\n canGoPrev,\n canGoNext,\n handlePrev,\n handleNext,\n };\n};\n\nexport default useSlide;\n"],"names":["getSlideElementList","elementList","element","getSlideElementIndexes","indexes","index","hasPlayableAudio","isStreamingAudio","segments","segment","getAudioList","list","getAudioIndexMap","audioIndexMap","audioIndex","getSlideAudioSequenceMap","slideElementIndexes","sequenceMap","startIndex","slideIndex","nextCheckpointIndex","sequenceIndexes","getInitialSlideIndex","slideElementList","visibleIndex","getVisibleElement","getCurrentElementList","currentIndex","currentList","visibleElement","applyDiffElement","hasSameElementReferences","prevElementList","nextElementList","useSlide","stableElementListRef","useRef","stableElementList","useMemo","audioList","slideAudioSequenceMap","setCurrentIndex","useState","useEffect","prevIndex","handlePrev","useCallback","handleNext","canGoPrev","canGoNext","currentStepElement","currentElementList","currentAudioSequenceIndexes","currentInteractionElement"],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Element, ElementAudioSegment } from './types';
|
|
2
|
+
export interface SlideAudioItem {
|
|
3
|
+
serialNumber?: number;
|
|
4
|
+
audioUrl?: string;
|
|
5
|
+
audioSegments?: ElementAudioSegment[];
|
|
6
|
+
isAudioStreaming?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface UseSlideResult {
|
|
9
|
+
currentElementList: Element[];
|
|
10
|
+
slideElementList: Element[];
|
|
11
|
+
currentIndex: number;
|
|
12
|
+
audioList: SlideAudioItem[];
|
|
13
|
+
currentAudioSequenceIndexes: number[];
|
|
14
|
+
currentInteractionElement?: Element;
|
|
15
|
+
canGoPrev: boolean;
|
|
16
|
+
canGoNext: boolean;
|
|
17
|
+
handlePrev: () => void;
|
|
18
|
+
handleNext: () => void;
|
|
19
|
+
}
|
|
20
|
+
declare const useSlide: (elementList?: Element[]) => UseSlideResult;
|
|
21
|
+
export default useSlide;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { useRef as A, useMemo as u, useState as w, useEffect as y, useCallback as m } from "react";
|
|
2
|
+
import { applyDiffElement as k } from "./diff-utils.es.js";
|
|
3
|
+
const C = (t) => t.filter((n) => n.is_checkpoint), q = (t) => t.reduce((n, e, r) => (e.is_checkpoint && n.push(r), n), []), g = (t) => !!(t?.is_read && (t.audio_url || (t.audio_segments?.length ?? 0) > 0)), N = (t = []) => t.length > 0 && !t.some((n) => n.is_final), P = (t) => t.reduce((n, e) => (g(e) && n.push({
|
|
4
|
+
serialNumber: e.serial_number,
|
|
5
|
+
audioUrl: e.audio_url,
|
|
6
|
+
audioSegments: e.audio_segments,
|
|
7
|
+
isAudioStreaming: N(e.audio_segments)
|
|
8
|
+
}), n), []), R = (t) => {
|
|
9
|
+
const n = /* @__PURE__ */ new Map();
|
|
10
|
+
let e = 0;
|
|
11
|
+
return t.forEach((r, s) => {
|
|
12
|
+
g(r) && (n.set(s, e), e += 1);
|
|
13
|
+
}), n;
|
|
14
|
+
}, G = (t, n, e) => n.reduce(
|
|
15
|
+
(r, s, c) => {
|
|
16
|
+
const l = n[c + 1] ?? t.length, a = [];
|
|
17
|
+
for (let o = s; o < l; o += 1) {
|
|
18
|
+
const d = t[o];
|
|
19
|
+
if (!g(d))
|
|
20
|
+
continue;
|
|
21
|
+
const f = e.get(o);
|
|
22
|
+
f != null && a.push(f);
|
|
23
|
+
}
|
|
24
|
+
return r.set(c, a), r;
|
|
25
|
+
},
|
|
26
|
+
/* @__PURE__ */ new Map()
|
|
27
|
+
), p = (t) => {
|
|
28
|
+
const n = t.findIndex(
|
|
29
|
+
(e) => e.is_show === !0
|
|
30
|
+
);
|
|
31
|
+
return n >= 0 ? n : t.findIndex((e) => e.is_show !== !1);
|
|
32
|
+
}, x = (t) => ({
|
|
33
|
+
...t,
|
|
34
|
+
is_show: !0
|
|
35
|
+
}), v = (t, n) => n < 0 ? [] : t.slice(0, n + 1).reduce((e, r) => {
|
|
36
|
+
if (r.type === "interaction")
|
|
37
|
+
return e;
|
|
38
|
+
const s = x(r);
|
|
39
|
+
return s.type === "diff" ? k(e, s) ?? [...e, s] : r.operation === "new" ? [s] : e.length === 0 ? [s] : [...e, s];
|
|
40
|
+
}, []), B = (t, n) => t.length === n.length && t.every((e, r) => e === n[r]), V = (t = []) => {
|
|
41
|
+
const n = A(t), e = u(() => B(n.current, t) ? n.current : (n.current = t, t), [t]), r = u(
|
|
42
|
+
() => C(e),
|
|
43
|
+
[e]
|
|
44
|
+
), s = u(
|
|
45
|
+
() => q(e),
|
|
46
|
+
[e]
|
|
47
|
+
), c = u(
|
|
48
|
+
() => P(e),
|
|
49
|
+
[e]
|
|
50
|
+
), l = u(
|
|
51
|
+
() => R(e),
|
|
52
|
+
[e]
|
|
53
|
+
), a = u(
|
|
54
|
+
() => G(
|
|
55
|
+
e,
|
|
56
|
+
s,
|
|
57
|
+
l
|
|
58
|
+
),
|
|
59
|
+
[l, s, e]
|
|
60
|
+
), [o, d] = w(
|
|
61
|
+
() => p(r)
|
|
62
|
+
);
|
|
63
|
+
y(() => {
|
|
64
|
+
d((i) => r.length === 0 ? -1 : i >= 0 && i < r.length ? i : p(r));
|
|
65
|
+
}, [r]);
|
|
66
|
+
const f = m(() => {
|
|
67
|
+
d((i) => i <= 0 ? Math.max(i, 0) : Math.max(i - 1, 0));
|
|
68
|
+
}, []), S = m(() => {
|
|
69
|
+
d((i) => i < 0 ? i : Math.min(i + 1, r.length - 1));
|
|
70
|
+
}, [r.length]), _ = o > 0, E = o >= 0 && o < r.length - 1, h = u(() => {
|
|
71
|
+
if (o < 0)
|
|
72
|
+
return;
|
|
73
|
+
const i = r[o];
|
|
74
|
+
if (i)
|
|
75
|
+
return x(i);
|
|
76
|
+
}, [o, r]), M = u(
|
|
77
|
+
() => v(r, o),
|
|
78
|
+
[o, r]
|
|
79
|
+
), b = u(
|
|
80
|
+
() => a.get(o) ?? [],
|
|
81
|
+
[o, a]
|
|
82
|
+
), I = u(
|
|
83
|
+
() => h?.type === "interaction" ? h : void 0,
|
|
84
|
+
[h]
|
|
85
|
+
);
|
|
86
|
+
return {
|
|
87
|
+
currentElementList: M,
|
|
88
|
+
slideElementList: r,
|
|
89
|
+
currentIndex: o,
|
|
90
|
+
audioList: c,
|
|
91
|
+
currentAudioSequenceIndexes: b,
|
|
92
|
+
currentInteractionElement: I,
|
|
93
|
+
canGoPrev: _,
|
|
94
|
+
canGoNext: E,
|
|
95
|
+
handlePrev: f,
|
|
96
|
+
handleNext: S
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
export {
|
|
100
|
+
V as default
|
|
101
|
+
};
|
|
102
|
+
//# sourceMappingURL=useSlide.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSlide.es.js","sources":["../../../src/components/Slide/useSlide.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nimport { applyDiffElement } from \"./diff-utils\";\nimport type { Element, ElementAudioSegment } from \"./types\";\n\nexport interface SlideAudioItem {\n serialNumber?: number;\n audioUrl?: string;\n audioSegments?: ElementAudioSegment[];\n isAudioStreaming?: boolean;\n}\n\nexport interface UseSlideResult {\n currentElementList: Element[];\n slideElementList: Element[];\n currentIndex: number;\n audioList: SlideAudioItem[];\n currentAudioSequenceIndexes: number[];\n currentInteractionElement?: Element;\n canGoPrev: boolean;\n canGoNext: boolean;\n handlePrev: () => void;\n handleNext: () => void;\n}\n\nconst getSlideElementList = (elementList: Element[]) =>\n elementList.filter((element) => element.is_checkpoint);\n\nconst getSlideElementIndexes = (elementList: Element[]) =>\n elementList.reduce<number[]>((indexes, element, index) => {\n if (element.is_checkpoint) {\n indexes.push(index);\n }\n\n return indexes;\n }, []);\n\nconst hasPlayableAudio = (element?: Element) =>\n Boolean(\n element?.is_read &&\n (element.audio_url || (element.audio_segments?.length ?? 0) > 0)\n );\n\nconst isStreamingAudio = (segments: ElementAudioSegment[] = []) =>\n segments.length > 0 && !segments.some((segment) => segment.is_final);\n\nconst getAudioList = (elementList: Element[]) =>\n elementList.reduce<SlideAudioItem[]>((list, element) => {\n if (hasPlayableAudio(element)) {\n list.push({\n serialNumber: element.serial_number,\n audioUrl: element.audio_url,\n audioSegments: element.audio_segments,\n isAudioStreaming: isStreamingAudio(element.audio_segments),\n });\n }\n\n return list;\n }, []);\n\nconst getAudioIndexMap = (elementList: Element[]) => {\n const audioIndexMap = new Map<number, number>();\n let audioIndex = 0;\n\n elementList.forEach((element, index) => {\n if (hasPlayableAudio(element)) {\n audioIndexMap.set(index, audioIndex);\n audioIndex += 1;\n }\n });\n\n return audioIndexMap;\n};\n\nconst getSlideAudioSequenceMap = (\n elementList: Element[],\n slideElementIndexes: number[],\n audioIndexMap: Map<number, number>\n) =>\n slideElementIndexes.reduce<Map<number, number[]>>(\n (sequenceMap, startIndex, slideIndex) => {\n const nextCheckpointIndex =\n slideElementIndexes[slideIndex + 1] ?? elementList.length;\n const sequenceIndexes: number[] = [];\n\n for (let index = startIndex; index < nextCheckpointIndex; index += 1) {\n const element = elementList[index];\n\n if (!hasPlayableAudio(element)) {\n continue;\n }\n\n const audioIndex = audioIndexMap.get(index);\n\n if (audioIndex == null) {\n continue;\n }\n\n sequenceIndexes.push(audioIndex);\n }\n\n sequenceMap.set(slideIndex, sequenceIndexes);\n return sequenceMap;\n },\n new Map<number, number[]>()\n );\n\nconst getInitialSlideIndex = (slideElementList: Element[]) => {\n const visibleIndex = slideElementList.findIndex(\n (element) => element.is_show === true\n );\n\n if (visibleIndex >= 0) {\n return visibleIndex;\n }\n\n return slideElementList.findIndex((element) => element.is_show !== false);\n};\n\nconst getVisibleElement = (element: Element): Element => ({\n ...element,\n is_show: true,\n});\n\nconst getCurrentElementList = (\n slideElementList: Element[],\n currentIndex: number\n) => {\n if (currentIndex < 0) {\n return [];\n }\n\n return slideElementList\n .slice(0, currentIndex + 1)\n .reduce<Element[]>((currentList, element) => {\n if (element.type === \"interaction\") {\n return currentList;\n }\n\n const visibleElement = getVisibleElement(element);\n\n if (visibleElement.type === \"diff\") {\n const nextList = applyDiffElement(currentList, visibleElement);\n\n return nextList ?? [...currentList, visibleElement];\n }\n\n if (element.operation === \"new\") {\n return [visibleElement];\n }\n\n if (currentList.length === 0) {\n return [visibleElement];\n }\n\n return [...currentList, visibleElement];\n }, []);\n};\n\nconst hasSameElementReferences = (\n prevElementList: Element[],\n nextElementList: Element[]\n) =>\n prevElementList.length === nextElementList.length &&\n prevElementList.every((element, index) => element === nextElementList[index]);\n\nconst useSlide = (elementList: Element[] = []): UseSlideResult => {\n const stableElementListRef = useRef(elementList);\n const stableElementList = useMemo(() => {\n if (hasSameElementReferences(stableElementListRef.current, elementList)) {\n return stableElementListRef.current;\n }\n\n // Reuse the previous wrapper array when the element references are unchanged.\n stableElementListRef.current = elementList;\n return elementList;\n }, [elementList]);\n const slideElementList = useMemo(\n () => getSlideElementList(stableElementList),\n [stableElementList]\n );\n const slideElementIndexes = useMemo(\n () => getSlideElementIndexes(stableElementList),\n [stableElementList]\n );\n const audioList = useMemo(\n () => getAudioList(stableElementList),\n [stableElementList]\n );\n const audioIndexMap = useMemo(\n () => getAudioIndexMap(stableElementList),\n [stableElementList]\n );\n const slideAudioSequenceMap = useMemo(\n () =>\n getSlideAudioSequenceMap(\n stableElementList,\n slideElementIndexes,\n audioIndexMap\n ),\n [audioIndexMap, slideElementIndexes, stableElementList]\n );\n const [currentIndex, setCurrentIndex] = useState(() =>\n getInitialSlideIndex(slideElementList)\n );\n\n useEffect(() => {\n setCurrentIndex((prevIndex) => {\n if (slideElementList.length === 0) {\n return -1;\n }\n\n if (prevIndex >= 0 && prevIndex < slideElementList.length) {\n return prevIndex;\n }\n\n return getInitialSlideIndex(slideElementList);\n });\n }, [slideElementList]);\n\n const handlePrev = useCallback(() => {\n setCurrentIndex((prevIndex) => {\n if (prevIndex <= 0) {\n return Math.max(prevIndex, 0);\n }\n\n return Math.max(prevIndex - 1, 0);\n });\n }, []);\n\n const handleNext = useCallback(() => {\n setCurrentIndex((prevIndex) => {\n if (prevIndex < 0) {\n return prevIndex;\n }\n\n return Math.min(prevIndex + 1, slideElementList.length - 1);\n });\n }, [slideElementList.length]);\n\n const canGoPrev = currentIndex > 0;\n const canGoNext =\n currentIndex >= 0 && currentIndex < slideElementList.length - 1;\n const currentStepElement = useMemo(() => {\n if (currentIndex < 0) {\n return undefined;\n }\n\n const element = slideElementList[currentIndex];\n\n if (!element) {\n return undefined;\n }\n\n return getVisibleElement(element);\n }, [currentIndex, slideElementList]);\n const currentElementList = useMemo(\n () => getCurrentElementList(slideElementList, currentIndex),\n [currentIndex, slideElementList]\n );\n const currentAudioSequenceIndexes = useMemo(\n () => slideAudioSequenceMap.get(currentIndex) ?? [],\n [currentIndex, slideAudioSequenceMap]\n );\n const currentInteractionElement = useMemo(\n () =>\n currentStepElement?.type === \"interaction\"\n ? currentStepElement\n : undefined,\n [currentStepElement]\n );\n\n return {\n currentElementList,\n slideElementList,\n currentIndex,\n audioList,\n currentAudioSequenceIndexes,\n currentInteractionElement,\n canGoPrev,\n canGoNext,\n handlePrev,\n handleNext,\n };\n};\n\nexport default useSlide;\n"],"names":["getSlideElementList","elementList","element","getSlideElementIndexes","indexes","index","hasPlayableAudio","isStreamingAudio","segments","segment","getAudioList","list","getAudioIndexMap","audioIndexMap","audioIndex","getSlideAudioSequenceMap","slideElementIndexes","sequenceMap","startIndex","slideIndex","nextCheckpointIndex","sequenceIndexes","getInitialSlideIndex","slideElementList","visibleIndex","getVisibleElement","getCurrentElementList","currentIndex","currentList","visibleElement","applyDiffElement","hasSameElementReferences","prevElementList","nextElementList","useSlide","stableElementListRef","useRef","stableElementList","useMemo","audioList","slideAudioSequenceMap","setCurrentIndex","useState","useEffect","prevIndex","handlePrev","useCallback","handleNext","canGoPrev","canGoNext","currentStepElement","currentElementList","currentAudioSequenceIndexes","currentInteractionElement"],"mappings":"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"}
|
|
@@ -2,6 +2,11 @@ export { default as ContentRender } from './ContentRender';
|
|
|
2
2
|
export { default as MarkdownFlow } from './MarkdownFlow';
|
|
3
3
|
export { default as ScrollableMarkdown } from './MarkdownFlow/ScrollableMarkdownFlow';
|
|
4
4
|
export { default as MarkdownFlowEditor } from './MarkdownFlowEditor';
|
|
5
|
+
export { default as Slide } from './Slide';
|
|
6
|
+
export { Player, useSlide, getInteractionDefaultValues, getInteractionDefaultSelectedValues, } from './Slide';
|
|
5
7
|
export type { ContentRenderProps } from './ContentRender/ContentRender';
|
|
6
8
|
export type { OnSendContentParams, CustomRenderBarProps } from './types';
|
|
7
9
|
export type { EditMode, UploadProps, ImageResource, } from './MarkdownFlowEditor';
|
|
10
|
+
export type { Element, InteractionDefaultResolver, InteractionDefaultResolverParams, InteractionDefaultValueOptions, InteractionDefaultValues, InteractionParseResult, SlideProps, } from './Slide';
|
|
11
|
+
export type { PlayerProps } from './Slide';
|
|
12
|
+
export type { UseSlideResult } from './Slide';
|
package/dist/index.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./components/MarkdownFlowEditor/MarkdownFlowEditor.cjs.js"),r=require("./components/MarkdownFlow/MarkdownFlow.cjs.js");require("./_virtual/jsx-runtime.cjs.js");require("react");;/* empty css */const i=require("./components/ContentRender/ContentRender.cjs.js"),n=require("./components/ContentRender/IframeSandbox.cjs.js"),o=require("./components/ContentRender/utils/split-content.cjs.js"),l=require("./components/ContentRender/MarkdownFlowInput.cjs.js"),f=require("./components/Slide/Slide.cjs.js"),d=require("./components/Slide/Player.cjs.js"),e=require("./components/Slide/diff-utils.cjs.js");require("./components/Slide/interaction-defaults.cjs.js");const u=require("./components/Slide/useSlide.cjs.js");exports.MarkdownFlowEditor=t.default;exports.MarkdownFlow=r.default;exports.ContentRender=i.default;exports.IframeSandbox=n.default;exports.splitContentSegments=o.splitContentSegments;exports.MarkdownFlowInput=l.default;exports.Slide=f.default;exports.Player=d.default;exports.applyDiffElement=e.applyDiffElement;exports.applyUnifiedDiff=e.applyUnifiedDiff;exports.parseUnifiedDiff=e.parseUnifiedDiff;exports.splitDiffContent=e.splitDiffContent;exports.useSlide=u.default;
|
|
2
2
|
//# sourceMappingURL=index.cjs.js.map
|
package/dist/index.es.js
CHANGED
|
@@ -1,18 +1,30 @@
|
|
|
1
|
-
import { default as
|
|
2
|
-
import { default as
|
|
1
|
+
import { default as p } from "./components/MarkdownFlowEditor/MarkdownFlowEditor.es.js";
|
|
2
|
+
import { default as d } from "./components/MarkdownFlow/MarkdownFlow.es.js";
|
|
3
3
|
import "./_virtual/jsx-runtime.es.js";
|
|
4
4
|
import "react";
|
|
5
5
|
/* empty css */
|
|
6
|
-
import { default as
|
|
6
|
+
import { default as m } from "./components/ContentRender/ContentRender.es.js";
|
|
7
7
|
import { default as s } from "./components/ContentRender/IframeSandbox.es.js";
|
|
8
8
|
import { splitContentSegments as u } from "./components/ContentRender/utils/split-content.es.js";
|
|
9
|
-
import { default as
|
|
9
|
+
import { default as D } from "./components/ContentRender/MarkdownFlowInput.es.js";
|
|
10
|
+
import { default as k } from "./components/Slide/Slide.es.js";
|
|
11
|
+
import { default as C } from "./components/Slide/Player.es.js";
|
|
12
|
+
import { applyDiffElement as M, applyUnifiedDiff as E, parseUnifiedDiff as I, splitDiffContent as U } from "./components/Slide/diff-utils.es.js";
|
|
13
|
+
import "./components/Slide/interaction-defaults.es.js";
|
|
14
|
+
import { default as g } from "./components/Slide/useSlide.es.js";
|
|
10
15
|
export {
|
|
11
|
-
|
|
16
|
+
m as ContentRender,
|
|
12
17
|
s as IframeSandbox,
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
18
|
+
d as MarkdownFlow,
|
|
19
|
+
p as MarkdownFlowEditor,
|
|
20
|
+
D as MarkdownFlowInput,
|
|
21
|
+
C as Player,
|
|
22
|
+
k as Slide,
|
|
23
|
+
M as applyDiffElement,
|
|
24
|
+
E as applyUnifiedDiff,
|
|
25
|
+
I as parseUnifiedDiff,
|
|
26
|
+
u as splitContentSegments,
|
|
27
|
+
U as splitDiffContent,
|
|
28
|
+
g as useSlide
|
|
17
29
|
};
|
|
18
30
|
//# 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 i=()=>{if(typeof window>"u")return!1;const t=navigator.userActivation;if(t)return!!(t.hasBeenActive||t.isActive);const e=document.userActivation;return!!(e?.hasBeenActive||e?.isActive)};exports.hasBrowserUserActivation=i;
|
|
2
|
+
//# sourceMappingURL=browserUserActivation.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browserUserActivation.cjs.js","sources":["../../src/lib/browserUserActivation.ts"],"sourcesContent":["export type UserActivationLike = {\n hasBeenActive?: boolean;\n isActive?: boolean;\n};\n\nexport const hasBrowserUserActivation = () => {\n if (typeof window === \"undefined\") {\n return false;\n }\n\n const navigatorActivation = (\n navigator as Navigator & { userActivation?: UserActivationLike }\n ).userActivation;\n\n if (navigatorActivation) {\n return Boolean(\n navigatorActivation.hasBeenActive || navigatorActivation.isActive\n );\n }\n\n const documentActivation = (\n document as Document & { userActivation?: UserActivationLike }\n ).userActivation;\n\n return Boolean(\n documentActivation?.hasBeenActive || documentActivation?.isActive\n );\n};\n"],"names":["hasBrowserUserActivation","navigatorActivation","documentActivation"],"mappings":"gFAKO,MAAMA,EAA2B,IAAM,CAC5C,GAAI,OAAO,OAAW,IACpB,MAAO,GAGT,MAAMC,EACJ,UACA,eAEF,GAAIA,EACF,MAAO,GACLA,EAAoB,eAAiBA,EAAoB,UAI7D,MAAMC,EACJ,SACA,eAEF,MAAO,GACLA,GAAoB,eAAiBA,GAAoB,SAE7D"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const i = () => {
|
|
2
|
+
if (typeof window > "u")
|
|
3
|
+
return !1;
|
|
4
|
+
const t = navigator.userActivation;
|
|
5
|
+
if (t)
|
|
6
|
+
return !!(t.hasBeenActive || t.isActive);
|
|
7
|
+
const e = document.userActivation;
|
|
8
|
+
return !!(e?.hasBeenActive || e?.isActive);
|
|
9
|
+
};
|
|
10
|
+
export {
|
|
11
|
+
i as hasBrowserUserActivation
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=browserUserActivation.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browserUserActivation.es.js","sources":["../../src/lib/browserUserActivation.ts"],"sourcesContent":["export type UserActivationLike = {\n hasBeenActive?: boolean;\n isActive?: boolean;\n};\n\nexport const hasBrowserUserActivation = () => {\n if (typeof window === \"undefined\") {\n return false;\n }\n\n const navigatorActivation = (\n navigator as Navigator & { userActivation?: UserActivationLike }\n ).userActivation;\n\n if (navigatorActivation) {\n return Boolean(\n navigatorActivation.hasBeenActive || navigatorActivation.isActive\n );\n }\n\n const documentActivation = (\n document as Document & { userActivation?: UserActivationLike }\n ).userActivation;\n\n return Boolean(\n documentActivation?.hasBeenActive || documentActivation?.isActive\n );\n};\n"],"names":["hasBrowserUserActivation","navigatorActivation","documentActivation"],"mappings":"AAKO,MAAMA,IAA2B,MAAM;AAC5C,MAAI,OAAO,SAAW;AACpB,WAAO;AAGT,QAAMC,IACJ,UACA;AAEF,MAAIA;AACF,WAAO,GACLA,EAAoB,iBAAiBA,EAAoB;AAI7D,QAAMC,IACJ,SACA;AAEF,SAAO,GACLA,GAAoB,iBAAiBA,GAAoB;AAE7D;"}
|