markdown-flow-ui 0.1.99-beta.3 → 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/@braintree_sanitize-url@7.1.1/node_modules/@braintree/sanitize-url/dist/index.cjs.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/@braintree_sanitize-url@7.1.1/node_modules/@braintree/sanitize-url/dist/index.cjs.js.map +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/@braintree_sanitize-url@7.1.1/node_modules/@braintree/sanitize-url/dist/index.es.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/index.cjs.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/index.es.js +1 -1
- 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/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-input@1.8.0_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-input/es/BaseInput.cjs.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-input@1.8.0_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-input/es/BaseInput.es.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-textarea@1.10.2_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-textarea/es/ResizableTextArea.cjs.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-textarea@1.10.2_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-textarea/es/ResizableTextArea.es.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-textarea@1.10.2_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-textarea/es/TextArea.cjs.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-textarea@1.10.2_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-textarea/es/TextArea.es.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-textarea@1.10.2_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-textarea/es/index.cjs.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-textarea@1.10.2_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-textarea/es/index.es.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/remark-flow@0.1.6/node_modules/remark-flow/dist/index.cjs.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/remark-flow@0.1.6/node_modules/remark-flow/dist/index.es.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/style-to-object@1.0.11/node_modules/style-to-object/cjs/index.cjs.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/style-to-object@1.0.11/node_modules/style-to-object/cjs/index.cjs.js.map +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/style-to-object@1.0.11/node_modules/style-to-object/cjs/index.es.js +1 -1
- package/dist/_virtual/index.cjs.js +1 -1
- package/dist/_virtual/index.cjs2.js +1 -1
- package/dist/_virtual/index.cjs3.js +1 -1
- package/dist/_virtual/index.cjs7.js +1 -1
- package/dist/_virtual/index.cjs9.js +1 -1
- package/dist/_virtual/index.es.js +1 -0
- package/dist/_virtual/index.es2.js +2 -5
- package/dist/_virtual/index.es2.js.map +1 -1
- package/dist/_virtual/index.es3.js +5 -2
- package/dist/_virtual/index.es3.js.map +1 -1
- package/dist/_virtual/index.es7.js +2 -2
- package/dist/_virtual/index.es9.js +2 -2
- package/dist/assets/markdown-flow-ui.css +1 -1
- package/dist/components/ContentRender/IframeSandbox.cjs.js +4 -4
- package/dist/components/ContentRender/IframeSandbox.cjs.js.map +1 -1
- package/dist/components/ContentRender/IframeSandbox.es.js +223 -190
- 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/components/ui/inputGroup/textarea.cjs.js +1 -1
- package/dist/components/ui/inputGroup/textarea.es.js +1 -1
- 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":";AA8BA,MAAMA,IAAoBC,EAAAA,wBAAA,GAEpBC,IAAwB,CAC5BC,MACkC;AAClC,MAAI,CAACA;AACH,WAAO;AAGT,MAAI;AACF,WAAOH,EAAkB;AAAA,MACvBG;AAAA,IAAA;AAAA,EAEJ,SAASC,GAAO;AACd,mBAAQ,KAAK,qCAAqCA,CAAK,GAChD;AAAA,EACT;AACF,GAEMC,IAAuB,CAC3BC,GACAC,MAC+C;AAC/C,MAAI,CAACD;AACH,WAAO;AAGT,QAAME,IAAUF,EAAM,KAAA,GAChBG,IAAeF,EAAK,gBAAgB,CAAA,GACpCG,IAAcH,EAAK,eAAe,CAAA,GAClCI,IAAaF,EAAa,QAAQD,CAAO;AAE/C,MAAIG,IAAa;AACf,WAAO;AAAA,MACL,OAAOF,EAAaE,CAAU;AAAA,MAC9B,SAASD,EAAYC,CAAU;AAAA,IAAA;AAInC,QAAMC,IAAYF,EAAY,QAAQF,CAAO;AAE7C,SAAII,IAAY,KACP;AAAA,IACL,OAAOH,EAAaG,CAAS,KAAKF,EAAYE,CAAS;AAAA,IACvD,SAASF,EAAYE,CAAS;AAAA,EAAA,IAI3B;AACT,GAEMC,IAAoB,CAACC,MAClBA,EACJ,MAAM,QAAQ,EACd,IAAI,CAACC,MAASA,EAAK,KAAA,CAAM,EACzB,OAAO,OAAO,GAGbC,IAAmC,CACvCb,GACAc,GACAC,GACAC,MAGEA,GAAS,uBAAuB;AAAA,EAC9B,SAAAhB;AAAA,EACA,UAAAc;AAAA,EACA,iBAAAC;AAAA,CACD,KAAK,MAIGE,IAA8B,CACzCjB,GACAc,GACAE,MAC6B;AAC7B,QAAME,IAAaJ,GAAU,SAAA,EAAW,KAAA;AAExC,MAAI,CAACI;AACH,WAAO,CAAA;AAGT,QAAMH,IAAkBhB,EAAsBC,CAAO,GAC/CmB,IAAiBN;AAAA,IACrBb;AAAA,IACAkB;AAAA,IACAH;AAAA,IACAC;AAAA,EAAA;AAGF,MAAIG;AACF,WAAOA;AAGT,MAAI,CAACJ;AACH,WAAO;AAAA,MACL,YAAYG;AAAA,MACZ,WAAWA;AAAA,IAAA;AAIf,MAAIH,EAAgB,eAAe;AACjC,UAAMK,IAASV,EAAkBQ,CAAU;AAE3C,QAAI,CAACE,EAAO;AACV,aAAO,CAAA;AAGT,UAAMC,IAA2B,CAAA,GAC3BC,IAAyB,CAAA;AAE/B,WAAAF,EAAO,QAAQ,CAACjB,MAAU;AACxB,YAAMoB,IAASrB,EAAqBC,GAAOY,CAAe;AAE1D,UAAIQ,GAAQ;AACV,QAAAF,EAAe,KAAKE,EAAO,KAAK;AAChC;AAAA,MACF;AAEA,UAAIR,EAAgB,aAAa;AAC/B,QAAAO,EAAa,KAAKnB,CAAK;AACvB;AAAA,MACF;AAEA,MAAAkB,EAAe,KAAKlB,CAAK;AAAA,IAC3B,CAAC,GAEM;AAAA,MACL,gBAAgBkB,EAAe,SAASA,IAAiB;AAAA,MACzD,WAAWC,EAAa,SAASA,EAAa,KAAK,IAAI,IAAI;AAAA,IAAA;AAAA,EAE/D;AAEA,QAAMC,IAASrB,EAAqBgB,GAAYH,CAAe;AAE/D,SAAIQ,IACK;AAAA,IACL,YAAYA,EAAO,SAASA,EAAO,WAAWL;AAAA,EAAA,IAI9CH,EAAgB,cACX;AAAA,IACL,WAAWG;AAAA,EAAA,IAIR;AAAA,IACL,YAAYA;AAAA,IACZ,WAAWA;AAAA,EAAA;AAEf,GAEaM,IAAsC,CACjDxB,GACAc,GACAE,MACG;AACH,QAAMS,IAAWR,EAA4BjB,GAASc,GAAUE,CAAO;AAEvE,SAAIS,EAAS,iBACJA,EAAS,iBAGXX,IACHA,EACG,MAAM,GAAG,EACT,IAAI,CAACY,MAAUA,EAAM,KAAA,CAAM,EAC3B,OAAO,OAAO,IACjB;AACN;"}
|
|
@@ -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';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("../../../_virtual/jsx-runtime.cjs.js"),s=require("react"),u=require("../../../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-textarea@1.10.2_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-textarea/es/TextArea.cjs.js");require("../../../_virtual/index.
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("../../../_virtual/jsx-runtime.cjs.js"),s=require("react"),u=require("../../../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-textarea@1.10.2_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-textarea/es/TextArea.cjs.js");require("../../../_virtual/index.cjs3.js");require("../../../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-resize-observer@1.4.3_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-resize-observer/es/index.cjs.js");require("../../../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-util@5.44.4_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-util/es/hooks/useLayoutEffect.cjs.js");require("../../../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-util@5.44.4_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-util/es/raf.cjs.js");const d=require("../../../lib/utils.cjs.js");function c(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,a.get?a:{enumerable:!0,get:()=>e[r]})}}return t.default=e,Object.freeze(t)}const l=c(s),i=l.forwardRef(({className:e,autoSize:t={minRows:1},style:r,...a},n)=>o.jsxRuntimeExports.jsx(u.default,{ref:n,autoSize:t,className:d.cn("border-input placeholder:text-muted-foreground aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 w-full rounded-md border bg-transparent pl-3 py-1.5 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:cursor-not-allowed disabled:opacity-50","resize-none",e),style:{whiteSpace:"pre-wrap",wordBreak:"break-word",...r},...a}));i.displayName="Textarea";exports.Textarea=i;
|
|
2
2
|
//# sourceMappingURL=textarea.cjs.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { j as i } from "../../../_virtual/jsx-runtime.es.js";
|
|
2
2
|
import * as d from "react";
|
|
3
3
|
import n from "../../../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-textarea@1.10.2_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-textarea/es/TextArea.es.js";
|
|
4
|
-
import "../../../_virtual/index.
|
|
4
|
+
import "../../../_virtual/index.es3.js";
|
|
5
5
|
import "../../../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-resize-observer@1.4.3_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-resize-observer/es/index.es.js";
|
|
6
6
|
import "../../../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-util@5.44.4_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-util/es/hooks/useLayoutEffect.es.js";
|
|
7
7
|
import "../../../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-util@5.44.4_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-util/es/raf.es.js";
|
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;"}
|