markdown-flow-ui 0.1.129 → 0.2.1
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/_virtual/index.cjs8.js +1 -1
- package/dist/_virtual/index.cjs9.js +1 -1
- package/dist/_virtual/index.es8.js +2 -2
- package/dist/_virtual/index.es9.js +2 -2
- package/dist/components/ContentRender/ContentRender.cjs.js +2 -2
- package/dist/components/ContentRender/ContentRender.cjs.js.map +1 -1
- package/dist/components/ContentRender/ContentRender.d.ts +4 -0
- package/dist/components/ContentRender/ContentRender.es.js +217 -211
- package/dist/components/ContentRender/ContentRender.es.js.map +1 -1
- package/dist/components/ContentRender/ContentRender.stories.d.ts +1 -0
- package/dist/components/ContentRender/IframeSandbox.cjs.js +4 -4
- package/dist/components/ContentRender/IframeSandbox.cjs.js.map +1 -1
- package/dist/components/ContentRender/IframeSandbox.d.ts +3 -0
- package/dist/components/ContentRender/IframeSandbox.es.js +210 -196
- package/dist/components/ContentRender/IframeSandbox.es.js.map +1 -1
- package/dist/components/ContentRender/MarkdownFlowInput.cjs.js +1 -1
- package/dist/components/ContentRender/MarkdownFlowInput.cjs.js.map +1 -1
- package/dist/components/ContentRender/MarkdownFlowInput.d.ts +3 -0
- package/dist/components/ContentRender/MarkdownFlowInput.es.js +35 -32
- package/dist/components/ContentRender/MarkdownFlowInput.es.js.map +1 -1
- package/dist/components/ContentRender/MarkdownFlowInput.stories.d.ts +6 -0
- package/dist/components/ContentRender/SandboxApp.cjs.js +2 -2
- package/dist/components/ContentRender/SandboxApp.cjs.js.map +1 -1
- package/dist/components/ContentRender/SandboxApp.d.ts +3 -0
- package/dist/components/ContentRender/SandboxApp.es.js +117 -104
- package/dist/components/ContentRender/SandboxApp.es.js.map +1 -1
- package/dist/components/ContentRender/blackboard-vendor.cjs.js +1 -1
- package/dist/components/ContentRender/blackboard-vendor.cjs.js.map +1 -1
- package/dist/components/ContentRender/blackboard-vendor.es.js +14 -9
- package/dist/components/ContentRender/blackboard-vendor.es.js.map +1 -1
- package/dist/components/ContentRender/cjkFontFamily.cjs.js +2 -0
- package/dist/components/ContentRender/cjkFontFamily.cjs.js.map +1 -0
- package/dist/components/ContentRender/cjkFontFamily.d.ts +5 -0
- package/dist/components/ContentRender/cjkFontFamily.es.js +45 -0
- package/dist/components/ContentRender/cjkFontFamily.es.js.map +1 -0
- package/dist/components/ContentRender/cjkFontFamily.test.d.ts +1 -0
- package/dist/components/ContentRender/contentRenderI18n.cjs.js +2 -0
- package/dist/components/ContentRender/contentRenderI18n.cjs.js.map +1 -0
- package/dist/components/ContentRender/contentRenderI18n.d.ts +15 -0
- package/dist/components/ContentRender/contentRenderI18n.es.js +59 -0
- package/dist/components/ContentRender/contentRenderI18n.es.js.map +1 -0
- package/dist/components/ContentRender/index.cjs.js +1 -1
- package/dist/components/ContentRender/index.d.ts +1 -0
- package/dist/components/ContentRender/index.es.js +1 -0
- package/dist/components/ContentRender/index.es.js.map +1 -1
- package/dist/components/ContentRender/plugins/CustomVariable.cjs.js +1 -1
- package/dist/components/ContentRender/plugins/CustomVariable.cjs.js.map +1 -1
- package/dist/components/ContentRender/plugins/CustomVariable.d.ts +3 -1
- package/dist/components/ContentRender/plugins/CustomVariable.es.js +131 -124
- package/dist/components/ContentRender/plugins/CustomVariable.es.js.map +1 -1
- package/dist/components/ContentRender/plugins/MermaidChart.cjs.js +1 -1
- package/dist/components/ContentRender/plugins/MermaidChart.cjs.js.map +1 -1
- package/dist/components/ContentRender/plugins/MermaidChart.es.js +19 -18
- package/dist/components/ContentRender/plugins/MermaidChart.es.js.map +1 -1
- package/dist/components/MarkdownFlow/MarkdownFlow.cjs.js +1 -1
- package/dist/components/MarkdownFlow/MarkdownFlow.cjs.js.map +1 -1
- package/dist/components/MarkdownFlow/MarkdownFlow.d.ts +3 -0
- package/dist/components/MarkdownFlow/MarkdownFlow.es.js +18 -15
- package/dist/components/MarkdownFlow/MarkdownFlow.es.js.map +1 -1
- package/dist/components/MarkdownFlow/MarkdownFlow.stories.d.ts +6 -0
- package/dist/components/MarkdownFlow/ScrollableMarkdownFlow.d.ts +1 -0
- package/dist/components/MarkdownFlow/index.cjs.js +1 -1
- package/dist/components/MarkdownFlow/index.es.js +1 -0
- package/dist/components/MarkdownFlow/index.es.js.map +1 -1
- package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.cjs.js +1 -1
- package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.cjs.js.map +1 -1
- package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.d.ts +2 -2
- package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.es.js +23 -22
- package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.es.js.map +1 -1
- package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.stories.d.ts +1 -1
- package/dist/components/MarkdownFlowEditor/editorI18n.cjs.js +1 -1
- package/dist/components/MarkdownFlowEditor/editorI18n.cjs.js.map +1 -1
- package/dist/components/MarkdownFlowEditor/editorI18n.d.ts +0 -2
- package/dist/components/MarkdownFlowEditor/editorI18n.es.js +12 -24
- package/dist/components/MarkdownFlowEditor/editorI18n.es.js.map +1 -1
- package/dist/components/MarkdownFlowEditor/index.d.ts +1 -1
- package/dist/components/Slide/Player.cjs.js +1 -1
- package/dist/components/Slide/Player.cjs.js.map +1 -1
- package/dist/components/Slide/Player.d.ts +14 -30
- package/dist/components/Slide/Player.es.js +395 -383
- package/dist/components/Slide/Player.es.js.map +1 -1
- package/dist/components/Slide/Slide.cjs.js +1 -1
- package/dist/components/Slide/Slide.cjs.js.map +1 -1
- package/dist/components/Slide/Slide.d.ts +22 -4
- package/dist/components/Slide/Slide.es.js +701 -659
- package/dist/components/Slide/Slide.es.js.map +1 -1
- package/dist/components/Slide/Slide.stories.d.ts +19 -20
- package/dist/components/Slide/constants.d.ts +0 -24
- package/dist/components/Slide/index.d.ts +2 -1
- package/dist/components/Slide/slideI18n.cjs.js +2 -0
- package/dist/components/Slide/slideI18n.cjs.js.map +1 -0
- package/dist/components/Slide/slideI18n.d.ts +44 -0
- package/dist/components/Slide/slideI18n.es.js +158 -0
- package/dist/components/Slide/slideI18n.es.js.map +1 -0
- package/dist/components/Slide/slideI18n.test.d.ts +1 -0
- package/dist/components/Slide/utils/playerVisibility.cjs.js +2 -0
- package/dist/components/Slide/utils/playerVisibility.cjs.js.map +1 -0
- package/dist/components/Slide/utils/playerVisibility.d.ts +10 -0
- package/dist/components/Slide/utils/playerVisibility.es.js +11 -0
- package/dist/components/Slide/utils/playerVisibility.es.js.map +1 -0
- package/dist/components/Slide/utils/playerVisibility.test.d.ts +1 -0
- package/dist/components/index.d.ts +2 -1
- package/dist/editor.d.ts +3 -2
- package/dist/index.cjs.js +1 -1
- package/dist/index.es.js +14 -13
- package/dist/index.es.js.map +1 -1
- package/dist/lib/locale.cjs.js +2 -0
- package/dist/lib/locale.cjs.js.map +1 -0
- package/dist/lib/locale.d.ts +4 -0
- package/dist/lib/locale.es.js +19 -0
- package/dist/lib/locale.es.js.map +1 -0
- package/dist/lib/localeTextMap.cjs.js +2 -0
- package/dist/lib/localeTextMap.cjs.js.map +1 -0
- package/dist/lib/localeTextMap.d.ts +4 -0
- package/dist/lib/localeTextMap.es.js +5 -0
- package/dist/lib/localeTextMap.es.js.map +1 -0
- package/dist/markdown-flow-ui-lib.css +1 -1
- package/dist/node_modules/@braintree/sanitize-url/dist/index.cjs.js +1 -1
- package/dist/node_modules/@braintree/sanitize-url/dist/index.es.js +1 -1
- package/dist/node_modules/classnames/index.cjs.js +1 -1
- package/dist/node_modules/classnames/index.es.js +1 -1
- package/dist/renderer.cjs.js +1 -1
- package/dist/renderer.d.ts +1 -0
- package/dist/renderer.es.js +15 -14
- package/dist/renderer.es.js.map +1 -1
- package/dist/slide.d.ts +1 -0
- package/package.json +1 -1
- package/dist/components/Slide/constants.cjs.js +0 -2
- package/dist/components/Slide/constants.cjs.js.map +0 -1
- package/dist/components/Slide/constants.es.js +0 -28
- package/dist/components/Slide/constants.es.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownFlowEditor.es.js","sources":["../../../src/components/MarkdownFlowEditor/MarkdownFlowEditor.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, useCallback, useRef, useEffect, useMemo } from \"react\";\nimport CodeMirror from \"@uiw/react-codemirror\";\nimport { autocompletion } from \"@codemirror/autocomplete\";\nimport { EditorView, ViewUpdate } from \"@codemirror/view\";\nimport { markdown } from \"@codemirror/lang-markdown\";\nimport {\n syntaxHighlighting,\n defaultHighlightStyle,\n} from \"@codemirror/language\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../ui/tooltip\";\nimport CustomDialog from \"./components/CustomDialog\";\nimport CustomPopover from \"./components/CustomPopover\";\nimport EditorToolbar from \"./components/EditorToolbar\";\nimport VariableSearchDropdown from \"./components/VariableSearchDropdown\";\nimport EditorContext from \"./editor-context\";\nimport ImageInject from \"./components/ImageInject\";\nimport VideoInject from \"./components/VideoInject\";\nimport VariableSelect from \"./components/VariableSelect\";\nimport {\n SelectedOption,\n IEditorContext,\n Variable,\n SelectContentInfo,\n PopoverPosition,\n EditorAction,\n EditorApi,\n} from \"./types\";\nimport \"./markdownFlowEditor.css\";\n\nimport {\n createSlashCommands,\n parseContentInfo,\n getImageContentToInsert,\n getVideoContentToInsert,\n extractVariableNames,\n createVariableExpressionRegexp,\n} from \"./utils\";\nimport ImgPlaceholder from \"./plugins/ImgPlaceholder\";\nimport VideoPlaceholder from \"./plugins/VideoPlaceholder\";\nimport VariablePlaceholder from \"./plugins/VariablePlaceholder\";\nimport SyntaxHighlighter from \"./plugins/SyntaxHighlighter\";\n// import createFixedTextPlaceholder from \"./plugins/FixedTextPlaceholder\";\n// import DividerPlaceholder from \"./plugins/DividerPlaceholder\";\nimport { initReactI18next, useTranslation } from \"react-i18next\";\nimport i18next from \"i18next\";\nimport { UploadProps } from \"./uploadTypes\";\nimport {\n DEFAULT_EDITOR_LOCALE,\n editorLocaleResources,\n EditorLocale,\n getEditorLocaleMessages,\n normalizeEditorLocale,\n} from \"./editorI18n\";\n\nif (!i18next.isInitialized) {\n i18next.use(initReactI18next).init({\n resources: editorLocaleResources,\n lng: DEFAULT_EDITOR_LOCALE,\n fallbackLng: DEFAULT_EDITOR_LOCALE,\n interpolation: { escapeValue: false },\n });\n} else {\n Object.entries(editorLocaleResources).forEach(([lng, resource]) => {\n i18next.addResourceBundle(\n lng,\n \"translation\",\n resource.translation,\n true,\n true\n );\n });\n}\n\nexport enum EditMode {\n CodeEdit = \"codeEdit\",\n QuickEdit = \"quickEdit\",\n}\n\ntype EditorProps = {\n content?: string;\n editMode?: EditMode;\n variables?: Variable[];\n systemVariables?: Variable[];\n onChange?: (value: string) => void;\n onBlur?: () => void;\n locale?: EditorLocale;\n uploadProps?: UploadProps;\n disabled?: boolean;\n toolbarActionsRight?: EditorAction[];\n onReady?: (api: EditorApi) => void;\n};\n\nconst EMPTY_VARIABLES: Variable[] = [];\n\n// Detect whether cursor is still inside a {{variable}} expression\nconst isCursorInsideVariableExpression = (\n content: string,\n cursorPosition: number\n) => {\n if (!content || cursorPosition < 0) {\n return false;\n }\n const regexp = createVariableExpressionRegexp();\n let match: RegExpExecArray | null;\n\n while ((match = regexp.exec(content)) !== null) {\n const matchStart = match.index ?? 0;\n const matchEnd = matchStart + match[0].length;\n const innerStart = matchStart + 2;\n const innerEnd = matchEnd - 2;\n if (cursorPosition >= innerStart && cursorPosition <= innerEnd) {\n return true;\n }\n if (regexp.lastIndex === match.index) {\n regexp.lastIndex++;\n }\n }\n\n return false;\n};\n\nconst buildVariableTemplate = (variableName = \"\") => `{{${variableName}}}`;\n\nconst Editor: React.FC<EditorProps> = ({\n content = \"\",\n editMode = EditMode.CodeEdit,\n variables: initialVariables,\n systemVariables: initialSystemVariables,\n onChange,\n onBlur,\n locale = DEFAULT_EDITOR_LOCALE,\n uploadProps,\n disabled = false,\n toolbarActionsRight,\n onReady,\n}) => {\n const { t, i18n } = useTranslation();\n const resolvedLocale = normalizeEditorLocale(locale || i18n.language);\n\n useEffect(() => {\n if (i18n.language !== resolvedLocale) {\n i18n.changeLanguage(resolvedLocale);\n }\n }, [i18n, resolvedLocale]);\n\n const currentStrings = getEditorLocaleMessages(resolvedLocale);\n const toolbarLabels = useMemo(\n () => ({\n image: t(\"toolbarInsertImage\", {\n defaultValue: \"Insert image\",\n }),\n video: t(\"toolbarInsertVideo\", {\n defaultValue: \"Insert video\",\n }),\n variable: t(\"slashVariable\", {\n defaultValue: \"Variable\",\n }),\n addVariable: t(\"toolbarInsertNewVariable\", {\n defaultValue: \"Insert new variable\",\n }),\n search: t(\"toolbarInsertExistingVariable\", {\n defaultValue: \"Insert existing variable\",\n }),\n confirmOutput: t(\"toolbarConfirmOutput\", {\n defaultValue: \"Confirm output\",\n }),\n insertLink: t(\"toolbarInsertLink\", {\n defaultValue: \"Insert link\",\n }),\n insertButton: t(\"toolbarInsertButton\", {\n defaultValue: \"Insert button\",\n }),\n insertSingleChoice: t(\"toolbarInsertSingleChoice\", {\n defaultValue: \"Insert single choice\",\n }),\n insertMultiChoice: t(\"toolbarInsertMultiChoice\", {\n defaultValue: \"Insert multi choice\",\n }),\n insertInput: t(\"toolbarInsertInput\", {\n defaultValue: \"Insert input\",\n }),\n singleChoiceOption1: t(\"toolbarChoiceOption1\", {\n defaultValue: \"Option 1\",\n }),\n singleChoiceOption2: t(\"toolbarChoiceOption2\", {\n defaultValue: \"Option 2\",\n }),\n inputPlaceholder: t(\"toolbarInputPlaceholder\", {\n defaultValue: \"Please enter\",\n }),\n }),\n [t]\n );\n const variableSearchLabels = useMemo(\n () => ({\n searchPlaceholder: t(\"variableSearchPlaceholder\", {\n defaultValue: \"Search variable\",\n }),\n systemLabel: t(\"variableSectionSystem\", \"System Variables\"),\n customLabel: t(\"variableSectionCustom\", \"Custom Variables\"),\n emptyLabel: t(\"variableNotFound\", \"No variables found\"),\n }),\n [t]\n );\n const placeholderText =\n editMode === EditMode.QuickEdit\n ? t(\"placeholderQuickEdit\", {\n defaultValue: t(\"placeholderCodeEdit\", {\n defaultValue: t(\"placeholder\"),\n }),\n })\n : t(\"placeholderCodeEdit\", { defaultValue: t(\"placeholder\") });\n // Normalize variables to avoid duplicating system variables in the custom list\n const normalizedSystemVariables = useMemo(() => {\n const seen = new Set<string>();\n return (initialSystemVariables ?? EMPTY_VARIABLES).filter((variable) => {\n const normalized =\n typeof variable?.name === \"string\" ? variable.name.toLowerCase() : \"\";\n if (!normalized || seen.has(normalized)) {\n return false;\n }\n seen.add(normalized);\n return true;\n });\n }, [initialSystemVariables]);\n\n const normalizedCustomVariables = useMemo(() => {\n const systemNameSet = new Set(\n normalizedSystemVariables.map((variable) => variable.name.toLowerCase())\n );\n const seen = new Set<string>();\n return (initialVariables ?? EMPTY_VARIABLES).filter((variable) => {\n const normalized =\n typeof variable?.name === \"string\" ? variable.name.toLowerCase() : \"\";\n if (\n !normalized ||\n systemNameSet.has(normalized) ||\n seen.has(normalized)\n ) {\n return false;\n }\n seen.add(normalized);\n return true;\n });\n }, [initialVariables, normalizedSystemVariables]);\n\n const [dialogOpen, setDialogOpen] = useState(false);\n const [popoverOpen, setPopoverOpen] = useState(false);\n const [popoverPosition, setPopoverPosition] =\n useState<PopoverPosition | null>(null);\n const [variables, setVariables] = useState<Variable[]>(\n normalizedCustomVariables\n );\n const [systemVariables, setSystemVariables] = useState<Variable[]>(\n normalizedSystemVariables\n );\n\n useEffect(() => {\n setVariables(normalizedCustomVariables);\n }, [normalizedCustomVariables]);\n\n useEffect(() => {\n setSystemVariables(normalizedSystemVariables);\n }, [normalizedSystemVariables]);\n\n const [selectedOption, setSelectedOption] = useState<SelectedOption>(\n SelectedOption.Empty\n );\n const [selectContentInfo, setSelectContentInfo] =\n useState<SelectContentInfo | null>();\n const editorViewRef = useRef<EditorView | null>(null);\n const pendingVariableContentRef = useRef<string | null>(null);\n const variableSearchAnchorRef = useRef<HTMLButtonElement | null>(null);\n const [variableSearchOpen, setVariableSearchOpen] = useState(false);\n const closeVariableSearch = useCallback(() => {\n setVariableSearchOpen(false);\n variableSearchAnchorRef.current = null;\n }, []);\n const handleVariableSearchToggle = useCallback(\n (button: HTMLButtonElement) => {\n if (disabled) {\n return;\n }\n if (variableSearchOpen && variableSearchAnchorRef.current === button) {\n closeVariableSearch();\n return;\n }\n variableSearchAnchorRef.current = button;\n setVariableSearchOpen(true);\n },\n [closeVariableSearch, disabled, variableSearchOpen]\n );\n\n const editorContextValue: IEditorContext = {\n selectedOption,\n setSelectedOption,\n dialogOpen,\n setDialogOpen,\n popoverOpen,\n setPopoverOpen,\n popoverPosition,\n setPopoverPosition,\n };\n\n useEffect(() => {\n if (!disabled) {\n return;\n }\n setDialogOpen(false);\n setPopoverOpen(false);\n setSelectedOption(SelectedOption.Empty);\n setSelectContentInfo(null);\n setPopoverPosition(null);\n closeVariableSearch();\n }, [\n closeVariableSearch,\n disabled,\n setDialogOpen,\n setPopoverOpen,\n setPopoverPosition,\n setSelectedOption,\n setSelectContentInfo,\n ]);\n\n const addVariablesFromContent = useCallback(\n (text: string) => {\n if (editMode !== EditMode.QuickEdit || !text) {\n return;\n }\n\n const names = extractVariableNames(text);\n if (!names.length) {\n return;\n }\n\n const systemNameSet = new Set(\n systemVariables.map((variable) => variable.name.toLowerCase())\n );\n\n setVariables((prev) => {\n const existingNames = new Set(\n prev.map((variable) => variable.name.toLowerCase())\n );\n const addedNames = new Set<string>();\n const newVariables: Variable[] = [];\n\n names.forEach((rawName) => {\n const normalized = rawName.toLowerCase();\n if (\n !rawName ||\n systemNameSet.has(normalized) ||\n existingNames.has(normalized) ||\n addedNames.has(normalized)\n ) {\n return;\n }\n newVariables.push({ name: rawName });\n addedNames.add(normalized);\n });\n\n if (!newVariables.length) {\n return prev;\n }\n\n return [...newVariables, ...prev];\n });\n },\n [editMode, systemVariables]\n );\n\n useEffect(() => {\n addVariablesFromContent(content);\n }, [content, addVariablesFromContent]);\n\n // const insertFixedText = useCallback(() => {\n // if (!editorViewRef.current) return;\n // const view = editorViewRef.current;\n // const { state, dispatch } = view;\n // const selection = state.selection.main;\n // const selectedText = state.sliceDoc(selection.from, selection.to);\n // const startTag = \"===\";\n // const endTag = \"===\";\n // const insertContent = `${startTag}${selectedText ?? \"\"}${endTag}`;\n\n // dispatch({\n // changes: {\n // from: selection.from,\n // to: selection.to,\n // insert: insertContent,\n // },\n // selection: {\n // anchor: selection.from + startTag.length + (selectedText?.length ?? 0),\n // },\n // });\n // view.focus();\n // }, []);\n\n // const insertDivider = useCallback(() => {\n // if (!editorViewRef.current) return;\n // const view = editorViewRef.current;\n // const { state, dispatch } = view;\n // const selection = state.selection.main;\n // const insertContent = `\\n\\n---\\n\\n`;\n\n // dispatch({\n // changes: {\n // from: selection.from,\n // to: selection.to,\n // insert: insertContent,\n // },\n // selection: {\n // anchor: selection.from + insertContent.length,\n // },\n // });\n // view.focus();\n // }, []);\n\n const onSelectedOption = useCallback(\n (option: SelectedOption) => {\n if (disabled) {\n return;\n }\n closeVariableSearch();\n // if (option === SelectedOption.FixedText) {\n // insertFixedText();\n // setSelectedOption(SelectedOption.Empty);\n // setDialogOpen(false);\n // setPopoverOpen(false);\n // setSelectContentInfo(null);\n // setPopoverPosition(null);\n // return;\n // }\n\n // if (option === SelectedOption.Divider) {\n // insertDivider();\n // setSelectedOption(SelectedOption.Empty);\n // setDialogOpen(false);\n // setPopoverOpen(false);\n // setSelectContentInfo(null);\n // setPopoverPosition(null);\n // return;\n // }\n\n setSelectedOption(option);\n\n if (option === SelectedOption.Variable) {\n if (editorViewRef.current) {\n const { state } = editorViewRef.current;\n const pos = state.selection.main.from;\n const coords = editorViewRef.current.coordsAtPos(pos);\n if (coords) {\n setPopoverPosition({\n x: coords.left,\n y: coords.bottom,\n });\n }\n }\n setPopoverOpen(true);\n } else {\n setDialogOpen(true);\n }\n },\n [closeVariableSearch, disabled]\n );\n\n const insertText = useCallback(\n (text: string) => {\n if (disabled || !editorViewRef.current) return;\n\n const { state, dispatch } = editorViewRef.current;\n const from = state.selection.main.from;\n\n dispatch({\n changes: { from, insert: text },\n selection: { anchor: from + text.length },\n });\n },\n [editorViewRef, disabled]\n );\n\n const replaceSelection = useCallback(\n (text: string) => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const { state, dispatch } = editorViewRef.current;\n const selection = state.selection.main;\n dispatch({\n changes: { from: selection.from, to: selection.to, insert: text },\n selection: { anchor: selection.from + text.length },\n });\n },\n [disabled]\n );\n\n const focusEditor = useCallback(() => {\n editorViewRef.current?.focus();\n }, []);\n\n const getContent = useCallback(() => {\n return editorViewRef.current?.state.doc.toString() ?? \"\";\n }, []);\n\n const setContent = useCallback(\n (text: string) => {\n if (disabled) {\n return;\n }\n if (!editorViewRef.current) {\n onChange?.(text);\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n dispatch({\n changes: { from: 0, to: state.doc.length, insert: text },\n selection: { anchor: text.length },\n });\n },\n [disabled, onChange]\n );\n\n const deleteSelectedContent = useCallback(() => {\n if (disabled) {\n return;\n }\n if (\n !selectContentInfo ||\n !editorViewRef.current ||\n selectContentInfo.from === -1\n )\n return;\n\n const { from, to } = selectContentInfo;\n const { dispatch } = editorViewRef.current;\n\n dispatch({\n changes: { from, to, insert: \"\" },\n });\n }, [selectContentInfo, editorViewRef, disabled]);\n\n const insertVariableContent = useCallback(\n (\n variableName: string,\n range?: { from: number; to: number },\n placeCursorAtEnd = false\n ) => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n const selection = range ?? state.selection.main;\n const template = buildVariableTemplate(variableName);\n const cursorOffset = placeCursorAtEnd\n ? template.length\n : 2 + variableName.length; // 2 braces before variable content\n\n dispatch({\n changes: {\n from: selection.from,\n to: selection.to,\n insert: template,\n },\n selection: {\n anchor: selection.from + cursorOffset,\n },\n });\n view.focus();\n },\n [disabled]\n );\n\n const insertVariableTemplate = useCallback(() => {\n if (disabled) {\n return;\n }\n closeVariableSearch();\n insertVariableContent(\"\");\n }, [closeVariableSearch, disabled, insertVariableContent]);\n\n const insertConfirmOutputMarker = useCallback(() => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n const selection = state.selection.main;\n const template = \"======\";\n dispatch({\n changes: {\n from: selection.from,\n to: selection.to,\n insert: template,\n },\n selection: {\n anchor: selection.from + 3,\n },\n });\n view.focus();\n }, [disabled]);\n\n const insertLinkTemplate = useCallback(() => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n const selection = state.selection.main;\n const template = \"[]()\";\n dispatch({\n changes: {\n from: selection.from,\n to: selection.to,\n insert: template,\n },\n selection: {\n anchor: selection.from + 1,\n },\n });\n view.focus();\n }, [disabled]);\n\n const insertButtonTemplate = useCallback(() => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n const selection = state.selection.main;\n const template = \"?[]\";\n dispatch({\n changes: {\n from: selection.from,\n to: selection.to,\n insert: template,\n },\n selection: {\n anchor: selection.from + 2,\n },\n });\n view.focus();\n }, [disabled]);\n\n const insertSingleChoiceTemplate = useCallback(() => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n const selection = state.selection.main;\n const optionLabel1 = toolbarLabels.singleChoiceOption1;\n const optionLabel2 = toolbarLabels.singleChoiceOption2;\n const template = `?[%{{}} ${optionLabel1} | ${optionLabel2}]`;\n dispatch({\n changes: {\n from: selection.from,\n to: selection.to,\n insert: template,\n },\n selection: {\n anchor: selection.from + 5,\n },\n });\n view.focus();\n }, [\n disabled,\n toolbarLabels.singleChoiceOption1,\n toolbarLabels.singleChoiceOption2,\n ]);\n\n const insertMultiChoiceTemplate = useCallback(() => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n const selection = state.selection.main;\n const optionLabel1 = toolbarLabels.singleChoiceOption1;\n const optionLabel2 = toolbarLabels.singleChoiceOption2;\n const template = `?[%{{}} ${optionLabel1} || ${optionLabel2}]`;\n dispatch({\n changes: {\n from: selection.from,\n to: selection.to,\n insert: template,\n },\n selection: {\n anchor: selection.from + 5,\n },\n });\n view.focus();\n }, [\n disabled,\n toolbarLabels.singleChoiceOption1,\n toolbarLabels.singleChoiceOption2,\n ]);\n\n const insertInputFieldTemplate = useCallback(() => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n const selection = state.selection.main;\n const placeholder = toolbarLabels.inputPlaceholder ?? \"请输入\";\n const template = `?[%{{}}...${placeholder}]`;\n dispatch({\n changes: {\n from: selection.from,\n to: selection.to,\n insert: template,\n },\n selection: {\n anchor: selection.from + 5,\n },\n });\n view.focus();\n }, [disabled, toolbarLabels.inputPlaceholder]);\n\n const handleSelectImage = useCallback(\n ({\n resourceUrl,\n resourceTitle,\n scalePercent,\n }: {\n resourceUrl?: string;\n resourceTitle?: string;\n scalePercent?: number;\n }) => {\n if (!resourceUrl || disabled) return;\n const textToInsert = getImageContentToInsert({\n resourceUrl,\n resourceTitle,\n scalePercent,\n });\n if (selectContentInfo?.type === SelectedOption.Image) {\n deleteSelectedContent();\n if (!editorViewRef.current) return;\n const { dispatch } = editorViewRef.current;\n dispatch({\n changes: { from: selectContentInfo.from, insert: textToInsert },\n });\n } else {\n insertText(textToInsert);\n }\n setDialogOpen(false);\n },\n [deleteSelectedContent, disabled, insertText, selectContentInfo]\n );\n\n const handleSelectVideo = useCallback(\n ({\n resourceUrl,\n resourceTitle,\n }: {\n resourceUrl: string;\n resourceTitle: string;\n }) => {\n if (disabled) {\n return;\n }\n const textToInsert = getVideoContentToInsert(resourceUrl, resourceTitle);\n if (selectContentInfo?.type === SelectedOption.Video) {\n deleteSelectedContent();\n if (!editorViewRef.current) return;\n const { dispatch } = editorViewRef.current;\n dispatch({\n changes: { from: selectContentInfo.from, insert: textToInsert },\n });\n } else {\n insertText(textToInsert);\n }\n setDialogOpen(false);\n },\n [deleteSelectedContent, disabled, insertText, selectContentInfo]\n );\n\n const handleSelectVariable = useCallback(\n (variable: Variable) => {\n if (disabled) {\n return;\n }\n const selectionRange =\n selectContentInfo?.type === SelectedOption.Variable\n ? { from: selectContentInfo.from, to: selectContentInfo.to }\n : undefined;\n insertVariableContent(variable.name, selectionRange, true);\n setPopoverOpen(false);\n closeVariableSearch();\n },\n [disabled, insertVariableContent, selectContentInfo, closeVariableSearch]\n );\n\n const slashCommandsExtension = useCallback(() => {\n return autocompletion({\n override: [\n createSlashCommands(onSelectedOption, {\n // divider: currentStrings.slashDivider,\n // fixedText: currentStrings.slashFixedText,\n image: currentStrings.slashImage,\n video: currentStrings.slashVideo,\n variable: currentStrings.slashVariable,\n }),\n ],\n });\n }, [\n // currentStrings.slashDivider,\n // currentStrings.slashFixedText,\n currentStrings.slashImage,\n currentStrings.slashVideo,\n currentStrings.slashVariable,\n onSelectedOption,\n ]);\n\n // const fixedTextPlaceholderExtension = useMemo(\n // () =>\n // createFixedTextPlaceholder(\n // currentStrings.fixedTextPlaceholder ?? \"添加固定文本\",\n // currentStrings.fixedTextTooltip ??\n // currentStrings.slashFixedText ??\n // \"固定文本\"\n // ),\n // [\n // currentStrings.fixedTextPlaceholder,\n // currentStrings.fixedTextTooltip,\n // currentStrings.slashFixedText,\n // ]\n // );\n\n const handleEditorUpdate = useCallback(\n (update: ViewUpdate) => {\n editorViewRef.current = update.view;\n if (\n editMode === EditMode.QuickEdit &&\n pendingVariableContentRef.current &&\n update.selectionSet\n ) {\n const cursorPosition = update.state.selection.main.head;\n const docText = update.state.doc.toString();\n const stillInside = isCursorInsideVariableExpression(\n docText,\n cursorPosition\n );\n if (!stillInside) {\n addVariablesFromContent(docText);\n pendingVariableContentRef.current = null;\n }\n }\n },\n [addVariablesFromContent, editMode]\n );\n\n const handleTagClick = useCallback(\n (event: any) => {\n event.stopPropagation();\n if (disabled) {\n return;\n }\n const { type, from, to, dataset, target } = event.detail;\n const value = parseContentInfo(type, dataset);\n setSelectContentInfo({\n type,\n value,\n from,\n to,\n });\n setSelectedOption(type);\n\n if (type === SelectedOption.Variable) {\n if (target) {\n const rect = target.getBoundingClientRect();\n setPopoverPosition({\n x: rect.left,\n y: rect.bottom,\n });\n }\n setPopoverOpen(true);\n } else {\n setDialogOpen(true);\n }\n },\n [disabled]\n );\n\n useEffect(() => {\n if (!dialogOpen) {\n setSelectedOption(SelectedOption.Empty);\n setSelectContentInfo(null);\n }\n }, [dialogOpen]);\n\n useEffect(() => {\n if (!popoverOpen && selectedOption === SelectedOption.Variable) {\n setSelectedOption(SelectedOption.Empty);\n setSelectContentInfo(null);\n }\n }, [popoverOpen, selectedOption]);\n\n useEffect(() => {\n const handleWrap = (e: any) => {\n if (e.detail.view === editorViewRef.current) {\n handleTagClick(e);\n }\n };\n window.addEventListener(\"globalTagClick\", handleWrap);\n return () => {\n window.removeEventListener(\"globalTagClick\", handleWrap);\n };\n }, [handleTagClick]);\n\n const editorExtensions = useMemo(() => {\n const extensions = [\n EditorView.lineWrapping,\n markdown(),\n syntaxHighlighting(defaultHighlightStyle),\n SyntaxHighlighter,\n ];\n\n if (!disabled) {\n extensions.push(slashCommandsExtension());\n }\n\n if (editMode === EditMode.QuickEdit) {\n extensions.push(\n ImgPlaceholder,\n VideoPlaceholder,\n VariablePlaceholder\n // fixedTextPlaceholderExtension,\n // DividerPlaceholder,\n );\n }\n\n extensions.push(\n EditorView.updateListener.of((update) => {\n handleEditorUpdate(update);\n })\n );\n\n return extensions;\n }, [disabled, editMode, slashCommandsExtension, handleEditorUpdate]);\n\n const handleContentChange = useCallback(\n (value: string) => {\n if (disabled) {\n return;\n }\n const cursorPosition =\n editorViewRef.current?.state.selection.main.head ?? -1;\n const skipAddition = isCursorInsideVariableExpression(\n value,\n cursorPosition\n );\n if (skipAddition) {\n pendingVariableContentRef.current = value;\n } else {\n pendingVariableContentRef.current = null;\n addVariablesFromContent(value);\n }\n onChange?.(value);\n },\n [addVariablesFromContent, onChange, disabled]\n );\n\n const isVariableSearchOpen = !disabled && variableSearchOpen;\n const editorApi = useMemo(\n () => ({\n insertTextAtCursor: insertText,\n replaceSelection,\n focus: focusEditor,\n getContent,\n setContent,\n }),\n [focusEditor, getContent, insertText, replaceSelection, setContent]\n );\n\n const handleToolbarActionClick = useCallback(\n (action: EditorAction) => {\n if (disabled || \"render\" in action) {\n return;\n }\n action.onClick?.(editorApi);\n },\n [disabled, editorApi]\n );\n\n const toolbarRightSlot = useMemo(() => {\n if (!toolbarActionsRight?.length) {\n return null;\n }\n return (\n <div className=\"markdown-flow-editor-toolbar-right\">\n {toolbarActionsRight.map((action) => {\n if (\"render\" in action) {\n return (\n <div\n className=\"markdown-flow-editor-toolbar-right-item\"\n key={action.key}\n >\n {action.render(editorApi)}\n </div>\n );\n }\n const ariaLabel = action.label || action.tooltip || undefined;\n const button = (\n <button\n type=\"button\"\n key={action.key}\n disabled={disabled || action.disabled}\n onClick={() => handleToolbarActionClick(action)}\n className=\"markdown-flow-editor-toolbar-right-button\"\n aria-label={ariaLabel}\n title={action.label || action.tooltip}\n >\n {action.icon ? (\n <span className=\"toolbar-right-icon\">{action.icon}</span>\n ) : null}\n {action.label ? (\n <span className=\"toolbar-right-label\">{action.label}</span>\n ) : null}\n </button>\n );\n const wrapped = action.tooltip ? (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"top\">{action.tooltip}</TooltipContent>\n </Tooltip>\n ) : (\n button\n );\n return (\n <div\n className=\"markdown-flow-editor-toolbar-right-item\"\n key={action.key}\n >\n {wrapped}\n </div>\n );\n })}\n </div>\n );\n }, [disabled, editorApi, handleToolbarActionClick, toolbarActionsRight]);\n\n useEffect(() => {\n onReady?.(editorApi);\n }, [editorApi]);\n\n return (\n <div\n className=\"markdown-flow-editor\"\n data-disabled={disabled ? \"true\" : undefined}\n aria-disabled={disabled}\n >\n <EditorToolbar\n disabled={disabled}\n labels={toolbarLabels}\n onSelect={onSelectedOption}\n onInsertVariablePlaceholder={insertVariableTemplate}\n onVariableSearchToggle={handleVariableSearchToggle}\n onVariableSearchClose={closeVariableSearch}\n onInsertConfirmOutput={insertConfirmOutputMarker}\n onInsertLink={insertLinkTemplate}\n onInsertButton={insertButtonTemplate}\n onInsertSingleChoice={insertSingleChoiceTemplate}\n onInsertMultiChoice={insertMultiChoiceTemplate}\n onInsertInputField={insertInputFieldTemplate}\n variableSearchActive={isVariableSearchOpen}\n rightSlot={toolbarRightSlot}\n />\n <VariableSearchDropdown\n open={isVariableSearchOpen}\n anchorElement={variableSearchAnchorRef.current}\n onClose={closeVariableSearch}\n onSelect={handleSelectVariable}\n variables={variables}\n systemVariables={systemVariables}\n labels={variableSearchLabels}\n />\n <div className=\"markdown-flow-editor-body relative overflow-auto\">\n <EditorContext.Provider value={editorContextValue}>\n <CodeMirror\n extensions={editorExtensions}\n basicSetup={{\n lineNumbers: false,\n syntaxHighlighting: true,\n highlightActiveLine: true,\n highlightActiveLineGutter: true,\n foldGutter: false,\n }}\n className=\"rounded-md\"\n placeholder={placeholderText}\n value={content}\n theme=\"light\"\n minHeight=\"2rem\"\n editable={!disabled}\n onChange={handleContentChange}\n onBlur={onBlur}\n />\n {!disabled && (\n <CustomDialog\n labels={{\n title:\n selectedOption === SelectedOption.Image\n ? t(\"dialogTitleImage\")\n : selectedOption === SelectedOption.Video\n ? t(\"dialogTitleVideo\")\n : selectedOption === SelectedOption.Variable\n ? t(\"dialogTitleVariable\")\n : t(\"dialogTitle\"),\n }}\n >\n {selectedOption === SelectedOption.Image && (\n <ImageInject\n value={selectContentInfo?.value}\n onSelect={handleSelectImage}\n uploadProps={uploadProps}\n />\n )}\n {selectedOption === SelectedOption.Video && (\n <VideoInject\n value={selectContentInfo?.value}\n onSelect={handleSelectVideo}\n />\n )}\n </CustomDialog>\n )}\n\n {!disabled && (\n <CustomPopover>\n <VariableSelect\n variables={variables}\n systemVariables={systemVariables}\n selectedName={selectContentInfo?.value?.variableName}\n onSelect={handleSelectVariable}\n onAddVariable={(variable) => {\n setVariables((prev) => {\n const normalized = variable.name.toLowerCase();\n const exists = prev.some(\n (item) => item.name.toLowerCase() === normalized\n );\n if (exists) {\n return prev;\n }\n return [variable, ...prev];\n });\n }}\n />\n </CustomPopover>\n )}\n </EditorContext.Provider>\n </div>\n </div>\n );\n};\n\nexport default Editor;\n"],"names":["i18next","editorLocaleResources","lng","resource","initReactI18next","DEFAULT_EDITOR_LOCALE","EMPTY_VARIABLES","isCursorInsideVariableExpression","content","cursorPosition","regexp","createVariableExpressionRegexp","match","matchStart","matchEnd","innerStart","innerEnd","buildVariableTemplate","variableName","Editor","editMode","initialVariables","initialSystemVariables","onChange","onBlur","locale","uploadProps","disabled","toolbarActionsRight","onReady","t","i18n","useTranslation","resolvedLocale","normalizeEditorLocale","useEffect","currentStrings","getEditorLocaleMessages","toolbarLabels","useMemo","variableSearchLabels","placeholderText","normalizedSystemVariables","seen","variable","normalized","normalizedCustomVariables","systemNameSet","dialogOpen","setDialogOpen","useState","popoverOpen","setPopoverOpen","popoverPosition","setPopoverPosition","variables","setVariables","systemVariables","setSystemVariables","selectedOption","setSelectedOption","SelectedOption","selectContentInfo","setSelectContentInfo","editorViewRef","useRef","pendingVariableContentRef","variableSearchAnchorRef","variableSearchOpen","setVariableSearchOpen","closeVariableSearch","useCallback","handleVariableSearchToggle","button","editorContextValue","addVariablesFromContent","text","names","extractVariableNames","prev","existingNames","addedNames","newVariables","rawName","onSelectedOption","option","state","pos","coords","insertText","dispatch","from","replaceSelection","selection","focusEditor","getContent","setContent","view","deleteSelectedContent","to","insertVariableContent","range","placeCursorAtEnd","template","cursorOffset","insertVariableTemplate","insertConfirmOutputMarker","insertLinkTemplate","insertButtonTemplate","insertSingleChoiceTemplate","optionLabel1","optionLabel2","insertMultiChoiceTemplate","insertInputFieldTemplate","handleSelectImage","resourceUrl","resourceTitle","scalePercent","textToInsert","getImageContentToInsert","handleSelectVideo","getVideoContentToInsert","handleSelectVariable","selectionRange","slashCommandsExtension","autocompletion","createSlashCommands","handleEditorUpdate","update","docText","handleTagClick","event","type","dataset","target","value","parseContentInfo","rect","handleWrap","e","editorExtensions","extensions","EditorView","markdown","syntaxHighlighting","defaultHighlightStyle","SyntaxHighlighter","ImgPlaceholder","VideoPlaceholder","VariablePlaceholder","handleContentChange","isVariableSearchOpen","editorApi","handleToolbarActionClick","action","toolbarRightSlot","jsx","ariaLabel","jsxs","wrapped","Tooltip","TooltipTrigger","TooltipContent","EditorToolbar","VariableSearchDropdown","EditorContext","CodeMirror","CustomDialog","ImageInject","VideoInject","CustomPopover","VariableSelect","item"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MarkdownFlowEditor.es.js","sources":["../../../src/components/MarkdownFlowEditor/MarkdownFlowEditor.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, useCallback, useRef, useEffect, useMemo } from \"react\";\nimport CodeMirror from \"@uiw/react-codemirror\";\nimport { autocompletion } from \"@codemirror/autocomplete\";\nimport { EditorView, ViewUpdate } from \"@codemirror/view\";\nimport { markdown } from \"@codemirror/lang-markdown\";\nimport {\n syntaxHighlighting,\n defaultHighlightStyle,\n} from \"@codemirror/language\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../ui/tooltip\";\nimport CustomDialog from \"./components/CustomDialog\";\nimport CustomPopover from \"./components/CustomPopover\";\nimport EditorToolbar from \"./components/EditorToolbar\";\nimport VariableSearchDropdown from \"./components/VariableSearchDropdown\";\nimport EditorContext from \"./editor-context\";\nimport ImageInject from \"./components/ImageInject\";\nimport VideoInject from \"./components/VideoInject\";\nimport VariableSelect from \"./components/VariableSelect\";\nimport {\n SelectedOption,\n IEditorContext,\n Variable,\n SelectContentInfo,\n PopoverPosition,\n EditorAction,\n EditorApi,\n} from \"./types\";\nimport \"./markdownFlowEditor.css\";\n\nimport {\n createSlashCommands,\n parseContentInfo,\n getImageContentToInsert,\n getVideoContentToInsert,\n extractVariableNames,\n createVariableExpressionRegexp,\n} from \"./utils\";\nimport ImgPlaceholder from \"./plugins/ImgPlaceholder\";\nimport VideoPlaceholder from \"./plugins/VideoPlaceholder\";\nimport VariablePlaceholder from \"./plugins/VariablePlaceholder\";\nimport SyntaxHighlighter from \"./plugins/SyntaxHighlighter\";\n// import createFixedTextPlaceholder from \"./plugins/FixedTextPlaceholder\";\n// import DividerPlaceholder from \"./plugins/DividerPlaceholder\";\nimport { initReactI18next, useTranslation } from \"react-i18next\";\nimport i18next from \"i18next\";\nimport { UploadProps } from \"./uploadTypes\";\nimport {\n DEFAULT_EDITOR_LOCALE,\n editorLocaleResources,\n getEditorLocaleMessages,\n} from \"./editorI18n\";\nimport {\n normalizeMarkdownFlowLocale,\n type MarkdownFlowLocale,\n} from \"../../lib/locale\";\n\nif (!i18next.isInitialized) {\n i18next.use(initReactI18next).init({\n resources: editorLocaleResources,\n lng: DEFAULT_EDITOR_LOCALE,\n fallbackLng: DEFAULT_EDITOR_LOCALE,\n interpolation: { escapeValue: false },\n });\n} else {\n Object.entries(editorLocaleResources).forEach(([lng, resource]) => {\n i18next.addResourceBundle(\n lng,\n \"translation\",\n resource.translation,\n true,\n true\n );\n });\n}\n\nexport enum EditMode {\n CodeEdit = \"codeEdit\",\n QuickEdit = \"quickEdit\",\n}\n\ntype EditorProps = {\n content?: string;\n editMode?: EditMode;\n variables?: Variable[];\n systemVariables?: Variable[];\n onChange?: (value: string) => void;\n onBlur?: () => void;\n locale?: MarkdownFlowLocale;\n uploadProps?: UploadProps;\n disabled?: boolean;\n toolbarActionsRight?: EditorAction[];\n onReady?: (api: EditorApi) => void;\n};\n\nconst EMPTY_VARIABLES: Variable[] = [];\n\n// Detect whether cursor is still inside a {{variable}} expression\nconst isCursorInsideVariableExpression = (\n content: string,\n cursorPosition: number\n) => {\n if (!content || cursorPosition < 0) {\n return false;\n }\n const regexp = createVariableExpressionRegexp();\n let match: RegExpExecArray | null;\n\n while ((match = regexp.exec(content)) !== null) {\n const matchStart = match.index ?? 0;\n const matchEnd = matchStart + match[0].length;\n const innerStart = matchStart + 2;\n const innerEnd = matchEnd - 2;\n if (cursorPosition >= innerStart && cursorPosition <= innerEnd) {\n return true;\n }\n if (regexp.lastIndex === match.index) {\n regexp.lastIndex++;\n }\n }\n\n return false;\n};\n\nconst buildVariableTemplate = (variableName = \"\") => `{{${variableName}}}`;\n\nconst Editor: React.FC<EditorProps> = ({\n content = \"\",\n editMode = EditMode.CodeEdit,\n variables: initialVariables,\n systemVariables: initialSystemVariables,\n onChange,\n onBlur,\n locale = DEFAULT_EDITOR_LOCALE,\n uploadProps,\n disabled = false,\n toolbarActionsRight,\n onReady,\n}) => {\n const { t, i18n } = useTranslation();\n const resolvedLocale = normalizeMarkdownFlowLocale(locale || i18n.language);\n\n useEffect(() => {\n if (i18n.language !== resolvedLocale) {\n i18n.changeLanguage(resolvedLocale);\n }\n }, [i18n, resolvedLocale]);\n\n const currentStrings = getEditorLocaleMessages(resolvedLocale);\n const toolbarLabels = useMemo(\n () => ({\n image: t(\"toolbarInsertImage\", {\n defaultValue: \"Insert image\",\n }),\n video: t(\"toolbarInsertVideo\", {\n defaultValue: \"Insert video\",\n }),\n variable: t(\"slashVariable\", {\n defaultValue: \"Variable\",\n }),\n addVariable: t(\"toolbarInsertNewVariable\", {\n defaultValue: \"Insert new variable\",\n }),\n search: t(\"toolbarInsertExistingVariable\", {\n defaultValue: \"Insert existing variable\",\n }),\n confirmOutput: t(\"toolbarConfirmOutput\", {\n defaultValue: \"Confirm output\",\n }),\n insertLink: t(\"toolbarInsertLink\", {\n defaultValue: \"Insert link\",\n }),\n insertButton: t(\"toolbarInsertButton\", {\n defaultValue: \"Insert button\",\n }),\n insertSingleChoice: t(\"toolbarInsertSingleChoice\", {\n defaultValue: \"Insert single choice\",\n }),\n insertMultiChoice: t(\"toolbarInsertMultiChoice\", {\n defaultValue: \"Insert multi choice\",\n }),\n insertInput: t(\"toolbarInsertInput\", {\n defaultValue: \"Insert input\",\n }),\n singleChoiceOption1: t(\"toolbarChoiceOption1\", {\n defaultValue: \"Option 1\",\n }),\n singleChoiceOption2: t(\"toolbarChoiceOption2\", {\n defaultValue: \"Option 2\",\n }),\n inputPlaceholder: t(\"toolbarInputPlaceholder\", {\n defaultValue: \"Please enter\",\n }),\n }),\n [t]\n );\n const variableSearchLabels = useMemo(\n () => ({\n searchPlaceholder: t(\"variableSearchPlaceholder\", {\n defaultValue: \"Search variable\",\n }),\n systemLabel: t(\"variableSectionSystem\", \"System Variables\"),\n customLabel: t(\"variableSectionCustom\", \"Custom Variables\"),\n emptyLabel: t(\"variableNotFound\", \"No variables found\"),\n }),\n [t]\n );\n const placeholderText =\n editMode === EditMode.QuickEdit\n ? t(\"placeholderQuickEdit\", {\n defaultValue: t(\"placeholderCodeEdit\", {\n defaultValue: t(\"placeholder\"),\n }),\n })\n : t(\"placeholderCodeEdit\", { defaultValue: t(\"placeholder\") });\n // Normalize variables to avoid duplicating system variables in the custom list\n const normalizedSystemVariables = useMemo(() => {\n const seen = new Set<string>();\n return (initialSystemVariables ?? EMPTY_VARIABLES).filter((variable) => {\n const normalized =\n typeof variable?.name === \"string\" ? variable.name.toLowerCase() : \"\";\n if (!normalized || seen.has(normalized)) {\n return false;\n }\n seen.add(normalized);\n return true;\n });\n }, [initialSystemVariables]);\n\n const normalizedCustomVariables = useMemo(() => {\n const systemNameSet = new Set(\n normalizedSystemVariables.map((variable) => variable.name.toLowerCase())\n );\n const seen = new Set<string>();\n return (initialVariables ?? EMPTY_VARIABLES).filter((variable) => {\n const normalized =\n typeof variable?.name === \"string\" ? variable.name.toLowerCase() : \"\";\n if (\n !normalized ||\n systemNameSet.has(normalized) ||\n seen.has(normalized)\n ) {\n return false;\n }\n seen.add(normalized);\n return true;\n });\n }, [initialVariables, normalizedSystemVariables]);\n\n const [dialogOpen, setDialogOpen] = useState(false);\n const [popoverOpen, setPopoverOpen] = useState(false);\n const [popoverPosition, setPopoverPosition] =\n useState<PopoverPosition | null>(null);\n const [variables, setVariables] = useState<Variable[]>(\n normalizedCustomVariables\n );\n const [systemVariables, setSystemVariables] = useState<Variable[]>(\n normalizedSystemVariables\n );\n\n useEffect(() => {\n setVariables(normalizedCustomVariables);\n }, [normalizedCustomVariables]);\n\n useEffect(() => {\n setSystemVariables(normalizedSystemVariables);\n }, [normalizedSystemVariables]);\n\n const [selectedOption, setSelectedOption] = useState<SelectedOption>(\n SelectedOption.Empty\n );\n const [selectContentInfo, setSelectContentInfo] =\n useState<SelectContentInfo | null>();\n const editorViewRef = useRef<EditorView | null>(null);\n const pendingVariableContentRef = useRef<string | null>(null);\n const variableSearchAnchorRef = useRef<HTMLButtonElement | null>(null);\n const [variableSearchOpen, setVariableSearchOpen] = useState(false);\n const closeVariableSearch = useCallback(() => {\n setVariableSearchOpen(false);\n variableSearchAnchorRef.current = null;\n }, []);\n const handleVariableSearchToggle = useCallback(\n (button: HTMLButtonElement) => {\n if (disabled) {\n return;\n }\n if (variableSearchOpen && variableSearchAnchorRef.current === button) {\n closeVariableSearch();\n return;\n }\n variableSearchAnchorRef.current = button;\n setVariableSearchOpen(true);\n },\n [closeVariableSearch, disabled, variableSearchOpen]\n );\n\n const editorContextValue: IEditorContext = {\n selectedOption,\n setSelectedOption,\n dialogOpen,\n setDialogOpen,\n popoverOpen,\n setPopoverOpen,\n popoverPosition,\n setPopoverPosition,\n };\n\n useEffect(() => {\n if (!disabled) {\n return;\n }\n setDialogOpen(false);\n setPopoverOpen(false);\n setSelectedOption(SelectedOption.Empty);\n setSelectContentInfo(null);\n setPopoverPosition(null);\n closeVariableSearch();\n }, [\n closeVariableSearch,\n disabled,\n setDialogOpen,\n setPopoverOpen,\n setPopoverPosition,\n setSelectedOption,\n setSelectContentInfo,\n ]);\n\n const addVariablesFromContent = useCallback(\n (text: string) => {\n if (editMode !== EditMode.QuickEdit || !text) {\n return;\n }\n\n const names = extractVariableNames(text);\n if (!names.length) {\n return;\n }\n\n const systemNameSet = new Set(\n systemVariables.map((variable) => variable.name.toLowerCase())\n );\n\n setVariables((prev) => {\n const existingNames = new Set(\n prev.map((variable) => variable.name.toLowerCase())\n );\n const addedNames = new Set<string>();\n const newVariables: Variable[] = [];\n\n names.forEach((rawName) => {\n const normalized = rawName.toLowerCase();\n if (\n !rawName ||\n systemNameSet.has(normalized) ||\n existingNames.has(normalized) ||\n addedNames.has(normalized)\n ) {\n return;\n }\n newVariables.push({ name: rawName });\n addedNames.add(normalized);\n });\n\n if (!newVariables.length) {\n return prev;\n }\n\n return [...newVariables, ...prev];\n });\n },\n [editMode, systemVariables]\n );\n\n useEffect(() => {\n addVariablesFromContent(content);\n }, [content, addVariablesFromContent]);\n\n // const insertFixedText = useCallback(() => {\n // if (!editorViewRef.current) return;\n // const view = editorViewRef.current;\n // const { state, dispatch } = view;\n // const selection = state.selection.main;\n // const selectedText = state.sliceDoc(selection.from, selection.to);\n // const startTag = \"===\";\n // const endTag = \"===\";\n // const insertContent = `${startTag}${selectedText ?? \"\"}${endTag}`;\n\n // dispatch({\n // changes: {\n // from: selection.from,\n // to: selection.to,\n // insert: insertContent,\n // },\n // selection: {\n // anchor: selection.from + startTag.length + (selectedText?.length ?? 0),\n // },\n // });\n // view.focus();\n // }, []);\n\n // const insertDivider = useCallback(() => {\n // if (!editorViewRef.current) return;\n // const view = editorViewRef.current;\n // const { state, dispatch } = view;\n // const selection = state.selection.main;\n // const insertContent = `\\n\\n---\\n\\n`;\n\n // dispatch({\n // changes: {\n // from: selection.from,\n // to: selection.to,\n // insert: insertContent,\n // },\n // selection: {\n // anchor: selection.from + insertContent.length,\n // },\n // });\n // view.focus();\n // }, []);\n\n const onSelectedOption = useCallback(\n (option: SelectedOption) => {\n if (disabled) {\n return;\n }\n closeVariableSearch();\n // if (option === SelectedOption.FixedText) {\n // insertFixedText();\n // setSelectedOption(SelectedOption.Empty);\n // setDialogOpen(false);\n // setPopoverOpen(false);\n // setSelectContentInfo(null);\n // setPopoverPosition(null);\n // return;\n // }\n\n // if (option === SelectedOption.Divider) {\n // insertDivider();\n // setSelectedOption(SelectedOption.Empty);\n // setDialogOpen(false);\n // setPopoverOpen(false);\n // setSelectContentInfo(null);\n // setPopoverPosition(null);\n // return;\n // }\n\n setSelectedOption(option);\n\n if (option === SelectedOption.Variable) {\n if (editorViewRef.current) {\n const { state } = editorViewRef.current;\n const pos = state.selection.main.from;\n const coords = editorViewRef.current.coordsAtPos(pos);\n if (coords) {\n setPopoverPosition({\n x: coords.left,\n y: coords.bottom,\n });\n }\n }\n setPopoverOpen(true);\n } else {\n setDialogOpen(true);\n }\n },\n [closeVariableSearch, disabled]\n );\n\n const insertText = useCallback(\n (text: string) => {\n if (disabled || !editorViewRef.current) return;\n\n const { state, dispatch } = editorViewRef.current;\n const from = state.selection.main.from;\n\n dispatch({\n changes: { from, insert: text },\n selection: { anchor: from + text.length },\n });\n },\n [editorViewRef, disabled]\n );\n\n const replaceSelection = useCallback(\n (text: string) => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const { state, dispatch } = editorViewRef.current;\n const selection = state.selection.main;\n dispatch({\n changes: { from: selection.from, to: selection.to, insert: text },\n selection: { anchor: selection.from + text.length },\n });\n },\n [disabled]\n );\n\n const focusEditor = useCallback(() => {\n editorViewRef.current?.focus();\n }, []);\n\n const getContent = useCallback(() => {\n return editorViewRef.current?.state.doc.toString() ?? \"\";\n }, []);\n\n const setContent = useCallback(\n (text: string) => {\n if (disabled) {\n return;\n }\n if (!editorViewRef.current) {\n onChange?.(text);\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n dispatch({\n changes: { from: 0, to: state.doc.length, insert: text },\n selection: { anchor: text.length },\n });\n },\n [disabled, onChange]\n );\n\n const deleteSelectedContent = useCallback(() => {\n if (disabled) {\n return;\n }\n if (\n !selectContentInfo ||\n !editorViewRef.current ||\n selectContentInfo.from === -1\n )\n return;\n\n const { from, to } = selectContentInfo;\n const { dispatch } = editorViewRef.current;\n\n dispatch({\n changes: { from, to, insert: \"\" },\n });\n }, [selectContentInfo, editorViewRef, disabled]);\n\n const insertVariableContent = useCallback(\n (\n variableName: string,\n range?: { from: number; to: number },\n placeCursorAtEnd = false\n ) => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n const selection = range ?? state.selection.main;\n const template = buildVariableTemplate(variableName);\n const cursorOffset = placeCursorAtEnd\n ? template.length\n : 2 + variableName.length; // 2 braces before variable content\n\n dispatch({\n changes: {\n from: selection.from,\n to: selection.to,\n insert: template,\n },\n selection: {\n anchor: selection.from + cursorOffset,\n },\n });\n view.focus();\n },\n [disabled]\n );\n\n const insertVariableTemplate = useCallback(() => {\n if (disabled) {\n return;\n }\n closeVariableSearch();\n insertVariableContent(\"\");\n }, [closeVariableSearch, disabled, insertVariableContent]);\n\n const insertConfirmOutputMarker = useCallback(() => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n const selection = state.selection.main;\n const template = \"======\";\n dispatch({\n changes: {\n from: selection.from,\n to: selection.to,\n insert: template,\n },\n selection: {\n anchor: selection.from + 3,\n },\n });\n view.focus();\n }, [disabled]);\n\n const insertLinkTemplate = useCallback(() => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n const selection = state.selection.main;\n const template = \"[]()\";\n dispatch({\n changes: {\n from: selection.from,\n to: selection.to,\n insert: template,\n },\n selection: {\n anchor: selection.from + 1,\n },\n });\n view.focus();\n }, [disabled]);\n\n const insertButtonTemplate = useCallback(() => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n const selection = state.selection.main;\n const template = \"?[]\";\n dispatch({\n changes: {\n from: selection.from,\n to: selection.to,\n insert: template,\n },\n selection: {\n anchor: selection.from + 2,\n },\n });\n view.focus();\n }, [disabled]);\n\n const insertSingleChoiceTemplate = useCallback(() => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n const selection = state.selection.main;\n const optionLabel1 = toolbarLabels.singleChoiceOption1;\n const optionLabel2 = toolbarLabels.singleChoiceOption2;\n const template = `?[%{{}} ${optionLabel1} | ${optionLabel2}]`;\n dispatch({\n changes: {\n from: selection.from,\n to: selection.to,\n insert: template,\n },\n selection: {\n anchor: selection.from + 5,\n },\n });\n view.focus();\n }, [\n disabled,\n toolbarLabels.singleChoiceOption1,\n toolbarLabels.singleChoiceOption2,\n ]);\n\n const insertMultiChoiceTemplate = useCallback(() => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n const selection = state.selection.main;\n const optionLabel1 = toolbarLabels.singleChoiceOption1;\n const optionLabel2 = toolbarLabels.singleChoiceOption2;\n const template = `?[%{{}} ${optionLabel1} || ${optionLabel2}]`;\n dispatch({\n changes: {\n from: selection.from,\n to: selection.to,\n insert: template,\n },\n selection: {\n anchor: selection.from + 5,\n },\n });\n view.focus();\n }, [\n disabled,\n toolbarLabels.singleChoiceOption1,\n toolbarLabels.singleChoiceOption2,\n ]);\n\n const insertInputFieldTemplate = useCallback(() => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n const selection = state.selection.main;\n const placeholder = toolbarLabels.inputPlaceholder ?? \"请输入\";\n const template = `?[%{{}}...${placeholder}]`;\n dispatch({\n changes: {\n from: selection.from,\n to: selection.to,\n insert: template,\n },\n selection: {\n anchor: selection.from + 5,\n },\n });\n view.focus();\n }, [disabled, toolbarLabels.inputPlaceholder]);\n\n const handleSelectImage = useCallback(\n ({\n resourceUrl,\n resourceTitle,\n scalePercent,\n }: {\n resourceUrl?: string;\n resourceTitle?: string;\n scalePercent?: number;\n }) => {\n if (!resourceUrl || disabled) return;\n const textToInsert = getImageContentToInsert({\n resourceUrl,\n resourceTitle,\n scalePercent,\n });\n if (selectContentInfo?.type === SelectedOption.Image) {\n deleteSelectedContent();\n if (!editorViewRef.current) return;\n const { dispatch } = editorViewRef.current;\n dispatch({\n changes: { from: selectContentInfo.from, insert: textToInsert },\n });\n } else {\n insertText(textToInsert);\n }\n setDialogOpen(false);\n },\n [deleteSelectedContent, disabled, insertText, selectContentInfo]\n );\n\n const handleSelectVideo = useCallback(\n ({\n resourceUrl,\n resourceTitle,\n }: {\n resourceUrl: string;\n resourceTitle: string;\n }) => {\n if (disabled) {\n return;\n }\n const textToInsert = getVideoContentToInsert(resourceUrl, resourceTitle);\n if (selectContentInfo?.type === SelectedOption.Video) {\n deleteSelectedContent();\n if (!editorViewRef.current) return;\n const { dispatch } = editorViewRef.current;\n dispatch({\n changes: { from: selectContentInfo.from, insert: textToInsert },\n });\n } else {\n insertText(textToInsert);\n }\n setDialogOpen(false);\n },\n [deleteSelectedContent, disabled, insertText, selectContentInfo]\n );\n\n const handleSelectVariable = useCallback(\n (variable: Variable) => {\n if (disabled) {\n return;\n }\n const selectionRange =\n selectContentInfo?.type === SelectedOption.Variable\n ? { from: selectContentInfo.from, to: selectContentInfo.to }\n : undefined;\n insertVariableContent(variable.name, selectionRange, true);\n setPopoverOpen(false);\n closeVariableSearch();\n },\n [disabled, insertVariableContent, selectContentInfo, closeVariableSearch]\n );\n\n const slashCommandsExtension = useCallback(() => {\n return autocompletion({\n override: [\n createSlashCommands(onSelectedOption, {\n // divider: currentStrings.slashDivider,\n // fixedText: currentStrings.slashFixedText,\n image: currentStrings.slashImage,\n video: currentStrings.slashVideo,\n variable: currentStrings.slashVariable,\n }),\n ],\n });\n }, [\n // currentStrings.slashDivider,\n // currentStrings.slashFixedText,\n currentStrings.slashImage,\n currentStrings.slashVideo,\n currentStrings.slashVariable,\n onSelectedOption,\n ]);\n\n // const fixedTextPlaceholderExtension = useMemo(\n // () =>\n // createFixedTextPlaceholder(\n // currentStrings.fixedTextPlaceholder ?? \"添加固定文本\",\n // currentStrings.fixedTextTooltip ??\n // currentStrings.slashFixedText ??\n // \"固定文本\"\n // ),\n // [\n // currentStrings.fixedTextPlaceholder,\n // currentStrings.fixedTextTooltip,\n // currentStrings.slashFixedText,\n // ]\n // );\n\n const handleEditorUpdate = useCallback(\n (update: ViewUpdate) => {\n editorViewRef.current = update.view;\n if (\n editMode === EditMode.QuickEdit &&\n pendingVariableContentRef.current &&\n update.selectionSet\n ) {\n const cursorPosition = update.state.selection.main.head;\n const docText = update.state.doc.toString();\n const stillInside = isCursorInsideVariableExpression(\n docText,\n cursorPosition\n );\n if (!stillInside) {\n addVariablesFromContent(docText);\n pendingVariableContentRef.current = null;\n }\n }\n },\n [addVariablesFromContent, editMode]\n );\n\n const handleTagClick = useCallback(\n (event: any) => {\n event.stopPropagation();\n if (disabled) {\n return;\n }\n const { type, from, to, dataset, target } = event.detail;\n const value = parseContentInfo(type, dataset);\n setSelectContentInfo({\n type,\n value,\n from,\n to,\n });\n setSelectedOption(type);\n\n if (type === SelectedOption.Variable) {\n if (target) {\n const rect = target.getBoundingClientRect();\n setPopoverPosition({\n x: rect.left,\n y: rect.bottom,\n });\n }\n setPopoverOpen(true);\n } else {\n setDialogOpen(true);\n }\n },\n [disabled]\n );\n\n useEffect(() => {\n if (!dialogOpen) {\n setSelectedOption(SelectedOption.Empty);\n setSelectContentInfo(null);\n }\n }, [dialogOpen]);\n\n useEffect(() => {\n if (!popoverOpen && selectedOption === SelectedOption.Variable) {\n setSelectedOption(SelectedOption.Empty);\n setSelectContentInfo(null);\n }\n }, [popoverOpen, selectedOption]);\n\n useEffect(() => {\n const handleWrap = (e: any) => {\n if (e.detail.view === editorViewRef.current) {\n handleTagClick(e);\n }\n };\n window.addEventListener(\"globalTagClick\", handleWrap);\n return () => {\n window.removeEventListener(\"globalTagClick\", handleWrap);\n };\n }, [handleTagClick]);\n\n const editorExtensions = useMemo(() => {\n const extensions = [\n EditorView.lineWrapping,\n markdown(),\n syntaxHighlighting(defaultHighlightStyle),\n SyntaxHighlighter,\n ];\n\n if (!disabled) {\n extensions.push(slashCommandsExtension());\n }\n\n if (editMode === EditMode.QuickEdit) {\n extensions.push(\n ImgPlaceholder,\n VideoPlaceholder,\n VariablePlaceholder\n // fixedTextPlaceholderExtension,\n // DividerPlaceholder,\n );\n }\n\n extensions.push(\n EditorView.updateListener.of((update) => {\n handleEditorUpdate(update);\n })\n );\n\n return extensions;\n }, [disabled, editMode, slashCommandsExtension, handleEditorUpdate]);\n\n const handleContentChange = useCallback(\n (value: string) => {\n if (disabled) {\n return;\n }\n const cursorPosition =\n editorViewRef.current?.state.selection.main.head ?? -1;\n const skipAddition = isCursorInsideVariableExpression(\n value,\n cursorPosition\n );\n if (skipAddition) {\n pendingVariableContentRef.current = value;\n } else {\n pendingVariableContentRef.current = null;\n addVariablesFromContent(value);\n }\n onChange?.(value);\n },\n [addVariablesFromContent, onChange, disabled]\n );\n\n const isVariableSearchOpen = !disabled && variableSearchOpen;\n const editorApi = useMemo(\n () => ({\n insertTextAtCursor: insertText,\n replaceSelection,\n focus: focusEditor,\n getContent,\n setContent,\n }),\n [focusEditor, getContent, insertText, replaceSelection, setContent]\n );\n\n const handleToolbarActionClick = useCallback(\n (action: EditorAction) => {\n if (disabled || \"render\" in action) {\n return;\n }\n action.onClick?.(editorApi);\n },\n [disabled, editorApi]\n );\n\n const toolbarRightSlot = useMemo(() => {\n if (!toolbarActionsRight?.length) {\n return null;\n }\n return (\n <div className=\"markdown-flow-editor-toolbar-right\">\n {toolbarActionsRight.map((action) => {\n if (\"render\" in action) {\n return (\n <div\n className=\"markdown-flow-editor-toolbar-right-item\"\n key={action.key}\n >\n {action.render(editorApi)}\n </div>\n );\n }\n const ariaLabel = action.label || action.tooltip || undefined;\n const button = (\n <button\n type=\"button\"\n key={action.key}\n disabled={disabled || action.disabled}\n onClick={() => handleToolbarActionClick(action)}\n className=\"markdown-flow-editor-toolbar-right-button\"\n aria-label={ariaLabel}\n title={action.label || action.tooltip}\n >\n {action.icon ? (\n <span className=\"toolbar-right-icon\">{action.icon}</span>\n ) : null}\n {action.label ? (\n <span className=\"toolbar-right-label\">{action.label}</span>\n ) : null}\n </button>\n );\n const wrapped = action.tooltip ? (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"top\">{action.tooltip}</TooltipContent>\n </Tooltip>\n ) : (\n button\n );\n return (\n <div\n className=\"markdown-flow-editor-toolbar-right-item\"\n key={action.key}\n >\n {wrapped}\n </div>\n );\n })}\n </div>\n );\n }, [disabled, editorApi, handleToolbarActionClick, toolbarActionsRight]);\n\n useEffect(() => {\n onReady?.(editorApi);\n }, [editorApi]);\n\n return (\n <div\n className=\"markdown-flow-editor\"\n data-disabled={disabled ? \"true\" : undefined}\n aria-disabled={disabled}\n >\n <EditorToolbar\n disabled={disabled}\n labels={toolbarLabels}\n onSelect={onSelectedOption}\n onInsertVariablePlaceholder={insertVariableTemplate}\n onVariableSearchToggle={handleVariableSearchToggle}\n onVariableSearchClose={closeVariableSearch}\n onInsertConfirmOutput={insertConfirmOutputMarker}\n onInsertLink={insertLinkTemplate}\n onInsertButton={insertButtonTemplate}\n onInsertSingleChoice={insertSingleChoiceTemplate}\n onInsertMultiChoice={insertMultiChoiceTemplate}\n onInsertInputField={insertInputFieldTemplate}\n variableSearchActive={isVariableSearchOpen}\n rightSlot={toolbarRightSlot}\n />\n <VariableSearchDropdown\n open={isVariableSearchOpen}\n anchorElement={variableSearchAnchorRef.current}\n onClose={closeVariableSearch}\n onSelect={handleSelectVariable}\n variables={variables}\n systemVariables={systemVariables}\n labels={variableSearchLabels}\n />\n <div className=\"markdown-flow-editor-body relative overflow-auto\">\n <EditorContext.Provider value={editorContextValue}>\n <CodeMirror\n extensions={editorExtensions}\n basicSetup={{\n lineNumbers: false,\n syntaxHighlighting: true,\n highlightActiveLine: true,\n highlightActiveLineGutter: true,\n foldGutter: false,\n }}\n className=\"rounded-md\"\n placeholder={placeholderText}\n value={content}\n theme=\"light\"\n minHeight=\"2rem\"\n editable={!disabled}\n onChange={handleContentChange}\n onBlur={onBlur}\n />\n {!disabled && (\n <CustomDialog\n labels={{\n title:\n selectedOption === SelectedOption.Image\n ? t(\"dialogTitleImage\")\n : selectedOption === SelectedOption.Video\n ? t(\"dialogTitleVideo\")\n : selectedOption === SelectedOption.Variable\n ? t(\"dialogTitleVariable\")\n : t(\"dialogTitle\"),\n }}\n >\n {selectedOption === SelectedOption.Image && (\n <ImageInject\n value={selectContentInfo?.value}\n onSelect={handleSelectImage}\n uploadProps={uploadProps}\n />\n )}\n {selectedOption === SelectedOption.Video && (\n <VideoInject\n value={selectContentInfo?.value}\n onSelect={handleSelectVideo}\n />\n )}\n </CustomDialog>\n )}\n\n {!disabled && (\n <CustomPopover>\n <VariableSelect\n variables={variables}\n systemVariables={systemVariables}\n selectedName={selectContentInfo?.value?.variableName}\n onSelect={handleSelectVariable}\n onAddVariable={(variable) => {\n setVariables((prev) => {\n const normalized = variable.name.toLowerCase();\n const exists = prev.some(\n (item) => item.name.toLowerCase() === normalized\n );\n if (exists) {\n return prev;\n }\n return [variable, ...prev];\n });\n }}\n />\n </CustomPopover>\n )}\n </EditorContext.Provider>\n </div>\n </div>\n );\n};\n\nexport default Editor;\n"],"names":["i18next","editorLocaleResources","lng","resource","initReactI18next","DEFAULT_EDITOR_LOCALE","EMPTY_VARIABLES","isCursorInsideVariableExpression","content","cursorPosition","regexp","createVariableExpressionRegexp","match","matchStart","matchEnd","innerStart","innerEnd","buildVariableTemplate","variableName","Editor","editMode","initialVariables","initialSystemVariables","onChange","onBlur","locale","uploadProps","disabled","toolbarActionsRight","onReady","t","i18n","useTranslation","resolvedLocale","normalizeMarkdownFlowLocale","useEffect","currentStrings","getEditorLocaleMessages","toolbarLabels","useMemo","variableSearchLabels","placeholderText","normalizedSystemVariables","seen","variable","normalized","normalizedCustomVariables","systemNameSet","dialogOpen","setDialogOpen","useState","popoverOpen","setPopoverOpen","popoverPosition","setPopoverPosition","variables","setVariables","systemVariables","setSystemVariables","selectedOption","setSelectedOption","SelectedOption","selectContentInfo","setSelectContentInfo","editorViewRef","useRef","pendingVariableContentRef","variableSearchAnchorRef","variableSearchOpen","setVariableSearchOpen","closeVariableSearch","useCallback","handleVariableSearchToggle","button","editorContextValue","addVariablesFromContent","text","names","extractVariableNames","prev","existingNames","addedNames","newVariables","rawName","onSelectedOption","option","state","pos","coords","insertText","dispatch","from","replaceSelection","selection","focusEditor","getContent","setContent","view","deleteSelectedContent","to","insertVariableContent","range","placeCursorAtEnd","template","cursorOffset","insertVariableTemplate","insertConfirmOutputMarker","insertLinkTemplate","insertButtonTemplate","insertSingleChoiceTemplate","optionLabel1","optionLabel2","insertMultiChoiceTemplate","insertInputFieldTemplate","handleSelectImage","resourceUrl","resourceTitle","scalePercent","textToInsert","getImageContentToInsert","handleSelectVideo","getVideoContentToInsert","handleSelectVariable","selectionRange","slashCommandsExtension","autocompletion","createSlashCommands","handleEditorUpdate","update","docText","handleTagClick","event","type","dataset","target","value","parseContentInfo","rect","handleWrap","e","editorExtensions","extensions","EditorView","markdown","syntaxHighlighting","defaultHighlightStyle","SyntaxHighlighter","ImgPlaceholder","VideoPlaceholder","VariablePlaceholder","handleContentChange","isVariableSearchOpen","editorApi","handleToolbarActionClick","action","toolbarRightSlot","jsx","ariaLabel","jsxs","wrapped","Tooltip","TooltipTrigger","TooltipContent","EditorToolbar","VariableSearchDropdown","EditorContext","CodeMirror","CustomDialog","ImageInject","VideoInject","CustomPopover","VariableSelect","item"],"mappings":"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"}
|
|
@@ -12,7 +12,7 @@ declare const meta: {
|
|
|
12
12
|
systemVariables?: import('./types').Variable[];
|
|
13
13
|
onChange?: (value: string) => void;
|
|
14
14
|
onBlur?: () => void;
|
|
15
|
-
locale?: import('
|
|
15
|
+
locale?: import('.').MarkdownFlowLocale;
|
|
16
16
|
uploadProps?: UploadProps;
|
|
17
17
|
disabled?: boolean;
|
|
18
18
|
toolbarActionsRight?: EditorAction[];
|
|
@@ -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 r=require("./locales/en-US.json.cjs.js"),a=require("./locales/fr-FR.json.cjs.js"),s=require("./locales/zh-CN.json.cjs.js"),e=require("../../lib/locale.cjs.js"),n=e.DEFAULT_MARKDOWN_FLOW_LOCALE,o={"en-US":{translation:r.default},"fr-FR":{translation:a.default},"zh-CN":{translation:s.default}},l=t=>o[e.normalizeMarkdownFlowLocale(t)].translation;exports.DEFAULT_EDITOR_LOCALE=n;exports.editorLocaleResources=o;exports.getEditorLocaleMessages=l;
|
|
2
2
|
//# sourceMappingURL=editorI18n.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editorI18n.cjs.js","sources":["../../../src/components/MarkdownFlowEditor/editorI18n.ts"],"sourcesContent":["import enUS from \"./locales/en-US.json\";\nimport frFR from \"./locales/fr-FR.json\";\nimport zhCN from \"./locales/zh-CN.json\";\n\nexport const DEFAULT_EDITOR_LOCALE =
|
|
1
|
+
{"version":3,"file":"editorI18n.cjs.js","sources":["../../../src/components/MarkdownFlowEditor/editorI18n.ts"],"sourcesContent":["import enUS from \"./locales/en-US.json\";\nimport frFR from \"./locales/fr-FR.json\";\nimport zhCN from \"./locales/zh-CN.json\";\nimport {\n DEFAULT_MARKDOWN_FLOW_LOCALE,\n normalizeMarkdownFlowLocale,\n} from \"../../lib/locale\";\n\nexport const DEFAULT_EDITOR_LOCALE = DEFAULT_MARKDOWN_FLOW_LOCALE;\n\nexport const editorLocaleResources = {\n \"en-US\": { translation: enUS },\n \"fr-FR\": { translation: frFR },\n \"zh-CN\": { translation: zhCN },\n} as const;\n\nexport const getEditorLocaleMessages = (locale?: string | null) =>\n editorLocaleResources[normalizeMarkdownFlowLocale(locale)].translation;\n"],"names":["DEFAULT_EDITOR_LOCALE","DEFAULT_MARKDOWN_FLOW_LOCALE","editorLocaleResources","enUS","frFR","zhCN","getEditorLocaleMessages","locale","normalizeMarkdownFlowLocale"],"mappings":"sPAQaA,EAAwBC,EAAAA,6BAExBC,EAAwB,CACnC,QAAS,CAAE,YAAaC,SAAA,EACxB,QAAS,CAAE,YAAaC,SAAA,EACxB,QAAS,CAAE,YAAaC,EAAAA,OAAA,CAC1B,EAEaC,EAA2BC,GACtCL,EAAsBM,EAAAA,4BAA4BD,CAAM,CAAC,EAAE"}
|
|
@@ -208,8 +208,6 @@ export declare const editorLocaleResources: {
|
|
|
208
208
|
};
|
|
209
209
|
};
|
|
210
210
|
};
|
|
211
|
-
export type EditorLocale = keyof typeof editorLocaleResources;
|
|
212
|
-
export declare const normalizeEditorLocale: (locale?: string | null) => EditorLocale;
|
|
213
211
|
export declare const getEditorLocaleMessages: (locale?: string | null) => {
|
|
214
212
|
placeholder: string;
|
|
215
213
|
placeholderCodeEdit: string;
|
|
@@ -1,27 +1,15 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
fr: "fr-FR",
|
|
11
|
-
zh: "zh-CN"
|
|
12
|
-
}, l = (o) => {
|
|
13
|
-
if (!o)
|
|
14
|
-
return t;
|
|
15
|
-
const r = o.replace("_", "-");
|
|
16
|
-
if (r in e)
|
|
17
|
-
return r;
|
|
18
|
-
const n = r.split("-")[0]?.toLowerCase();
|
|
19
|
-
return c[n] ?? t;
|
|
20
|
-
}, p = (o) => e[l(o)].translation;
|
|
1
|
+
import r from "./locales/en-US.json.es.js";
|
|
2
|
+
import t from "./locales/fr-FR.json.es.js";
|
|
3
|
+
import n from "./locales/zh-CN.json.es.js";
|
|
4
|
+
import { DEFAULT_MARKDOWN_FLOW_LOCALE as a, normalizeMarkdownFlowLocale as e } from "../../lib/locale.es.js";
|
|
5
|
+
const c = a, s = {
|
|
6
|
+
"en-US": { translation: r },
|
|
7
|
+
"fr-FR": { translation: t },
|
|
8
|
+
"zh-CN": { translation: n }
|
|
9
|
+
}, f = (o) => s[e(o)].translation;
|
|
21
10
|
export {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
l as normalizeEditorLocale
|
|
11
|
+
c as DEFAULT_EDITOR_LOCALE,
|
|
12
|
+
s as editorLocaleResources,
|
|
13
|
+
f as getEditorLocaleMessages
|
|
26
14
|
};
|
|
27
15
|
//# sourceMappingURL=editorI18n.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editorI18n.es.js","sources":["../../../src/components/MarkdownFlowEditor/editorI18n.ts"],"sourcesContent":["import enUS from \"./locales/en-US.json\";\nimport frFR from \"./locales/fr-FR.json\";\nimport zhCN from \"./locales/zh-CN.json\";\n\nexport const DEFAULT_EDITOR_LOCALE =
|
|
1
|
+
{"version":3,"file":"editorI18n.es.js","sources":["../../../src/components/MarkdownFlowEditor/editorI18n.ts"],"sourcesContent":["import enUS from \"./locales/en-US.json\";\nimport frFR from \"./locales/fr-FR.json\";\nimport zhCN from \"./locales/zh-CN.json\";\nimport {\n DEFAULT_MARKDOWN_FLOW_LOCALE,\n normalizeMarkdownFlowLocale,\n} from \"../../lib/locale\";\n\nexport const DEFAULT_EDITOR_LOCALE = DEFAULT_MARKDOWN_FLOW_LOCALE;\n\nexport const editorLocaleResources = {\n \"en-US\": { translation: enUS },\n \"fr-FR\": { translation: frFR },\n \"zh-CN\": { translation: zhCN },\n} as const;\n\nexport const getEditorLocaleMessages = (locale?: string | null) =>\n editorLocaleResources[normalizeMarkdownFlowLocale(locale)].translation;\n"],"names":["DEFAULT_EDITOR_LOCALE","DEFAULT_MARKDOWN_FLOW_LOCALE","editorLocaleResources","enUS","frFR","zhCN","getEditorLocaleMessages","locale","normalizeMarkdownFlowLocale"],"mappings":";;;;AAQO,MAAMA,IAAwBC,GAExBC,IAAwB;AAAA,EACnC,SAAS,EAAE,aAAaC,EAAA;AAAA,EACxB,SAAS,EAAE,aAAaC,EAAA;AAAA,EACxB,SAAS,EAAE,aAAaC,EAAA;AAC1B,GAEaC,IAA0B,CAACC,MACtCL,EAAsBM,EAA4BD,CAAM,CAAC,EAAE;"}
|
|
@@ -4,4 +4,4 @@ export type { UploadProps } from './uploadTypes';
|
|
|
4
4
|
export type { ImageResource } from './components/ImageInject';
|
|
5
5
|
export type { EditMode } from './MarkdownFlowEditor';
|
|
6
6
|
export type { EditorApi, EditorAction } from './types';
|
|
7
|
-
export type {
|
|
7
|
+
export type { MarkdownFlowLocale } from '../../lib/locale';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const n=require("../../_virtual/jsx-runtime.cjs.js"),t=require("react"),Et=require("../../lib/utils.cjs.js"),Qt=require("./MobilePlayerSettingsSheet.cjs.js"),It=require("./constants.cjs.js"),er=require("./utils/mobileScreenMode.cjs.js"),tr=require("./utils/audioCompletion.cjs.js"),rr=require("./utils/playerKeyboardShortcutContext.cjs.js"),ae=require("./utils/playerKeyboardShortcuts.cjs.js"),nr=require("./utils/playbackSource.cjs.js"),ur=require("./utils/playbackPreference.cjs.js"),sr=require("./utils/playerCustomActions.cjs.js"),qe=require("./utils/playerNavigationContext.cjs.js"),Ke=require("./utils/segmentSeek.cjs.js"),_t=require("./utils/audioSegments.cjs.js"),jt=require("./utils/subtitleCue.cjs.js");;/* empty css */const lr=require("../../node_modules/lucide-react/dist/esm/icons/ellipsis-vertical.cjs.js"),ar=require("../../node_modules/lucide-react/dist/esm/icons/volume-2.cjs.js"),cr=require("../../node_modules/lucide-react/dist/esm/icons/skip-back.cjs.js"),ir=require("../../node_modules/lucide-react/dist/esm/icons/skip-forward.cjs.js"),or=require("../../node_modules/lucide-react/dist/esm/icons/rewind.cjs.js"),fr=require("../../node_modules/lucide-react/dist/esm/icons/fast-forward.cjs.js"),dr=require("../../node_modules/lucide-react/dist/esm/icons/captions.cjs.js"),mr=require("../../node_modules/lucide-react/dist/esm/icons/captions-off.cjs.js"),pr=require("../../node_modules/lucide-react/dist/esm/icons/scan-line.cjs.js"),br=require("../../node_modules/lucide-react/dist/esm/icons/maximize.cjs.js"),hr=require("../../node_modules/lucide-react/dist/esm/icons/file-pen-line.cjs.js"),Mt=new Map,wt=o=>{if(typeof window>"u"||!o||Mt.has(o))return;const f=window.document.createElement("audio");f.preload="auto",f.setAttribute("playsinline","true"),f.src=o,f.load(),Mt.set(o,f)},yr=(o,f)=>f!==null&&f.audioList===o&&f.subtitleCueLists.length===o.length&&o.every((a,x)=>{const S=a.element?.subtitle_cues;return f.subtitleCueLists[x]===S&&f.subtitleCueLengths[x]===(S?.length??0)}),xr=o=>{const f=o.map(a=>a.element?.subtitle_cues);return{audioList:o,subtitleCueLists:f,subtitleCueLengths:f.map(a=>a?.length??0),tracks:f.map(a=>({subtitleCues:a??[]}))}},Sr=()=>n.jsxRuntimeExports.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:"34",height:"34",viewBox:"0 0 34 34",fill:"none",children:[n.jsxRuntimeExports.jsx("path",{d:"M16.6667 33.3333C25.8714 33.3333 33.3333 25.8714 33.3333 16.6667C33.3333 7.46192 25.8714 0 16.6667 0C7.46192 0 0 7.46192 0 16.6667C0 25.8714 7.46192 33.3333 16.6667 33.3333Z",fill:"#0A0A0A"}),n.jsxRuntimeExports.jsx("path",{d:"M12 10H16V24H12V10ZM18 10H22V24H18V10Z",fill:"white"})]}),kr=()=>n.jsxRuntimeExports.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:"34",height:"34",viewBox:"0 0 34 34",fill:"none",children:[n.jsxRuntimeExports.jsx("path",{d:"M16.6667 33.3333C25.8714 33.3333 33.3333 25.8714 33.3333 16.6667C33.3333 7.46192 25.8714 0 16.6667 0C7.46192 0 0 7.46192 0 16.6667C0 25.8714 7.46192 33.3333 16.6667 33.3333Z",fill:"#0A0A0A"}),n.jsxRuntimeExports.jsx("path",{d:"M13.3333 10L23.3333 16.6667L13.3333 23.3333V10Z",fill:"white"})]}),V={fullscreen:"F",next:"→",nextSubtitle:"Shift+→",notes:"N",playback:"Space",previous:"←",previousSubtitle:"Shift+←",subtitle:"C"},gr=250,Rr=(o,f)=>o?`${o} (${f})`:f,Cr=({audioList:o=[],className:f,currentAudioIndex:a=-1,defaultPlaying:x=!0,isPlaybackPaused:S=!1,isAutoAdvanceEnabled:H=!0,useAutoAdvanceToggle:q=!1,onLoadingChange:Ue,onPlaybackPreferenceChange:Pe,onPlaybackStarted:We,onPlaybackTimeChange:ce,onSubtitleToggle:I,onPrev:ie,onNext:oe,onSubtitleJump:fe,canJumpToSubtitleTarget:Ee,onFullscreen:ee,isFullscreen:Fe=!1,mobileViewMode:Tt=er.DEFAULT_MOBILE_VIEW_MODE,settingsPortalContainer:Lt,onMobileViewModeChange:Be,onEnded:Oe,onAutoAdvanceToggle:Ve,onInteractionToggle:de,hasInteraction:_e=!1,isInteractionOpen:te=!1,isSubtitleEnabled:je=!0,prevDisabled:Me=!1,nextDisabled:we=!1,showControls:ve=!0,enableKeyboardShortcuts:At=!0,subtitleSeekRequest:W=null,customActions:He,customActionContext:$e,texts:Je,onFocusCapture:Ze,onPointerDown:ze,...Nt})=>{const qt=t.useId(),Ye=t.useContext(rr.PlayerKeyboardShortcutContext),R=t.useRef(null),De=t.useRef(te),L=t.useRef(null),Xe=t.useRef(null),A=t.useRef(0),d=t.useRef(null),me=t.useRef(void 0),w=t.useRef([]),re=t.useRef(q?H:x),ne=t.useRef(!1),Ge=t.useRef(!1),k=t.useRef(!1),N=t.useRef(null),$=t.useRef(null),j=t.useRef(!1),c=t.useRef(!1),g=t.useRef(null),v=t.useRef(!1),J=t.useRef(null),pe=t.useRef(0),Qe=t.useRef(()=>{}),be=t.useRef(null),ue=t.useRef(null),Ie=t.useRef(null),et=t.useRef(null),K=t.useRef("unknown"),[he,p]=t.useState(x),[tt,D]=t.useState(!1),[X,Kt]=t.useState({next:!1,previous:!1}),Z=Ye?.ownerId??qt,U=At&&(Ye?.enabled??!0),m=a>=0?o[a]:void 0,E=m?.audioUrl,rt=m?.audioSegments,Ut=rt?.length??0,T=t.useMemo(()=>_t.getSortedAudioSegments(m),[m,Ut,rt]);let ye=et.current;yr(o,ye)||(ye=xr(o),et.current=ye);const nt=ye.tracks,ut=t.useMemo(()=>sr.toPlayerCustomActionList(He,$e),[$e,He]),st=ut.length+7,Pt=t.useMemo(()=>({"--slide-player-mobile-control-count":String(st)}),[st]),i=t.useMemo(()=>({...It.DEFAULT_SLIDE_PLAYER_TEXTS,...Je}),[Je]),Te=t.useMemo(()=>m?m.audioKey??`${String(m.sequenceNumber??"none")}:${String(m.audioUrl??"")}`:"none",[m]),Wt=q?H:he,lt=q?H?i.pauseAutoplayLabel:i.playAutoplayLabel:he?i.pauseLabel:i.playLabel,at=Fe?i.exitFullscreenLabel:i.enterFullscreenLabel,F=t.useCallback((e,r,s)=>({ariaKeyShortcuts:U?s:void 0,title:U?Rr(e,r):e}),[U]),ct=F(i.subtitleToggleAriaLabel,V.subtitle,"c"),it=F(i.previousLabel,V.previous,"ArrowLeft"),ot=F(i.previousSubtitleLabel,V.previousSubtitle,"Shift+ArrowLeft"),ft=F(lt,V.playback,"Space"),dt=F(i.nextLabel,V.next,"ArrowRight"),mt=F(i.nextSubtitleLabel,V.nextSubtitle,"Shift+ArrowRight"),pt=F(at,V.fullscreen,"f"),bt=F(i.notesLabel,V.notes,"n"),xe=t.useCallback(()=>{U&&ae.activatePlayerKeyboardShortcutOwner(Z)},[Z,U]),Ft=t.useCallback(e=>{xe(),ze?.(e)},[xe,ze]),Bt=t.useCallback(e=>{xe(),Ze?.(e)},[xe,Ze]);t.useEffect(()=>{me.current=m},[m]),t.useEffect(()=>{re.current=q?H:x},[x,H,q]),t.useEffect(()=>{ve||D(!1)},[ve]),t.useEffect(()=>{!De.current&&te&&D(!1),De.current=te},[te]),t.useEffect(()=>{w.current=T},[T]),t.useEffect(()=>{const e=m?.audioUrl,r=a>=0?o[a+1]?.audioUrl:void 0;wt(e),wt(r)},[o,m?.audioUrl,a]);const l=t.useCallback((e,r=null)=>{Ge.current===e&&(!e||r===null)||(Ge.current=e,Ue?.({loading:e,reason:e?r:null}))},[Ue]),P=t.useCallback(e=>{re.current=e,Pe?.(e)},[Pe]),z=t.useCallback(()=>q?{shouldContinuePlayback:re.current}:{shouldContinuePlayback:ur.shouldKeepPlayingAfterNavigation({defaultPlaying:re.current,isPausedByUser:k.current})},[q]),ht=t.useCallback(e=>e instanceof DOMException?e.name==="NotAllowedError"||e.name==="SecurityError":!1,[]),B=t.useCallback(()=>x&&!S&&!k.current&&K.current!=="blocked",[x,S]),yt=t.useCallback(e=>e?e.startsWith("data:")?e:`data:audio/mpeg;base64,${e}`:"",[]),xt=t.useCallback(()=>{const e=d.current;return e==null||e<=0?0:w.current.slice(0,e).reduce((r,s)=>r+Math.max(Number(s.duration_ms??0),0),0)/1e3},[]),Y=t.useCallback(e=>e<=0?0:w.current.slice(0,e).reduce((r,s)=>r+Math.max(Number(s.duration_ms??0),0),0),[]),Se=t.useCallback((e,r)=>!e||S?!1:e.audioUrl?!0:Ke.isPlaybackTimeCoveredBySegments(_t.getSortedAudioSegments(e),r),[S]),se=t.useCallback((e,r,s={})=>{const u=jt.getSubtitleCueJumpTarget({currentAudioIndex:a,currentTimeMs:r,direction:e,excludeTarget:s.excludeTarget,tracks:nt});return!u||!Se(o[u.audioIndex],u.timeMs)||u.audioIndex!==a&&(!fe||Ee&&!Ee(u))?null:u},[o,Ee,Se,a,fe,nt]),Le=t.useCallback((e,r=!1)=>{const s=Math.max(Number(e),0);if(!r&&be.current!==null&&Math.abs(s-be.current)<gr)return;be.current=s;const u={previous:se("previous",s)!==null,next:se("next",s)!==null};Kt(h=>h.previous===u.previous&&h.next===u.next?h:u)},[se]);t.useEffect(()=>{Qe.current=Le,Le(pe.current,!0)},[Le]);const ke=t.useCallback(()=>{const e=R.current;return e?N.current==="segment"?Y(A.current)+Math.max(e.currentTime,0)*1e3:g.current!==null&&e.readyState===0?g.current*1e3:Math.max(e.currentTime,0)*1e3:d.current!=null?Y(d.current):0},[Y]),C=t.useCallback(e=>{const r=Math.max(e,0);pe.current!==r&&(pe.current=r,jt.shouldClearSubtitleCueJumpTarget({currentAudioIndex:a,currentTimeMs:r,target:ue.current})&&(ue.current=null),ce?.(r),Qe.current(r))},[a,ce]),b=t.useCallback(()=>{C(ke())},[ke,C]),y=t.useCallback(()=>{typeof window>"u"||J.current===null||(window.cancelAnimationFrame(J.current),J.current=null)},[]),St=t.useCallback(()=>{if(typeof window>"u"||J.current!==null)return;const e=()=>{b();const r=R.current;if(!r||r.paused||r.ended){J.current=null;return}J.current=window.requestAnimationFrame(e)};J.current=window.requestAnimationFrame(e)},[b]),G=t.useCallback(()=>{const e=R.current;e&&(y(),c.current=!1,k.current=!1,ne.current=!1,N.current=null,g.current=null,j.current=!1,v.current=!1,$.current=null,e.pause(),e.removeAttribute("src"),e.load(),L.current=null,A.current=0,d.current=null,C(0),p(!1),l(!1))},[C,y,l]),_=t.useCallback(e=>{const r=R.current;if(!r)return!1;const s=r.play();return s&&typeof s.then=="function"&&s.then(()=>{K.current==="unknown"&&(K.current="auto"),c.current=!1,v.current=!1}).catch(u=>{K.current==="unknown"&&ht(u)&&(K.current="blocked",c.current=!1,l(!1)),v.current=!1,p(!1)}),!0},[ht,l]),M=t.useCallback((e,r,s={})=>{const u=R.current,h=w.current[e];if(!u||!h)return!1;const O=yt(h.audio_data),Ce=Math.max(Number(s.seekTimeSeconds??0),0);A.current=e,d.current=null,j.current=!1,v.current=!0,$.current="segment",C(Y(e)+Ce*1e3);const Ct=s.shouldResume??B();c.current=Ct,l(!1);const Gt=L.current!==O;return N.current="segment",Gt&&(u.pause(),u.removeAttribute("src"),u.load(),L.current=O,u.src=O,u.load()),g.current=Ce,u.readyState>0&&(u.currentTime=Ce,g.current=null),Ct?_(`start-segment:${r}`):(c.current=!1,v.current=!1,u.pause(),p(!1),!0)},[B,yt,Y,C,_,l]),ge=t.useCallback(e=>{const r=R.current;if(!r||!m||S)return!1;const s=Math.max(Number(e),0),u=!r.paused&&!r.ended||c.current||v.current||d.current!==null&&re.current&&!k.current,h=Ke.isPlaybackTimeCoveredBySegments(w.current,s)?Ke.resolveSegmentSeekTarget(w.current,s):null;if(be.current=null,y(),c.current=u,l(!1),u&&(K.current="manual",k.current=!1,P(!0)),h&&(N.current==="segment"||!E))return M(h.segmentIndex,"subtitle-seek-segment",{seekTimeSeconds:h.segmentTimeSeconds,shouldResume:u});if(E){const O=s/1e3;return L.current!==E&&(r.pause(),r.removeAttribute("src"),r.load(),L.current=E,N.current="url",$.current="url",r.src=E,r.load()),g.current=O,C(s),r.readyState>0&&(r.currentTime=O,g.current=null),u?_("subtitle-seek-url"):(c.current=!1,r.pause(),p(!1),!0)}return!1},[m,E,S,C,M,y,_,l,P]),le=t.useCallback(e=>{const r=se(e,ke(),{excludeTarget:e==="previous"?ue.current:null});if(r===null)return!1;if(r.audioIndex===a){const u=ge(r.timeMs);return u&&(ue.current=r),u}const s=!!fe?.(r,qe.suppressPlayerControlsWakeAfterNavigation(z()));return s&&(ue.current=r),s},[a,ke,z,se,fe,ge]),Q=t.useCallback(e=>{y(),c.current=!1,j.current=!1,v.current=!1,b(),p(!1),l(!1),a>=0&&Oe?.(a)},[a,Oe,y,b,l]),Re=t.useCallback(e=>{const r=R.current;return!r||N.current!=="url"||!tr.hasReachedAudioEnd({currentTimeSeconds:Math.max(r.currentTime,0),durationSeconds:r.duration})?!1:(c.current=!1,r.pause(),Q(e),!0)},[Q]),kt=t.useCallback(()=>{const e=A.current+1,r=w.current,s=r[e],u=me.current,h=r.some(O=>O.is_final);if(s){M(e,"ended");return}if(u?.isAudioStreaming||!h){A.current=e,d.current=e,j.current=!0,c.current=x,C(Y(e)),p(!1),l(!0,"waitingForMoreAudio");return}Q("segments-completed")},[x,Q,Y,C,M,l]);t.useEffect(()=>{if(Xe.current===Te)return;Xe.current=Te,A.current=0,d.current=null,j.current=!1,k.current=!1,ne.current=!1,c.current=!1,v.current=!1,N.current=null,$.current=null,L.current=null,y(),C(0),l(!1);const e=R.current;e&&(e.pause(),e.removeAttribute("src"),e.load(),p(!1))},[a,Te,T.length,E,C,y,l]),t.useEffect(()=>{const e=R.current;if(e){if(S){ne.current=!!(me.current&&!k.current&&(!e.paused||c.current||d.current!==null)),c.current=!1,l(!1),e.pause(),p(!1);return}if(!(!ne.current||!me.current||k.current)){if(ne.current=!1,d.current!==null){if(d.current<w.current.length){M(d.current,"external-resume");return}c.current=!0,l(!0,"waitingForMoreAudio");return}if(!L.current&&w.current.length>0){M(Math.min(A.current,w.current.length-1),"external-resume-init");return}e.paused&&(c.current=!0,_("external-resume"))}}},[S,M,_,l]),t.useEffect(()=>{const e=R.current;if(!e)return;if(!m){G();return}if(S){c.current=!1,l(!1),e.pause(),p(!1);return}const r=nr.resolveAudioPlaybackSourceType({activeSourceType:N.current,hasAudioUrl:!!E,segmentCount:T.length,preferredSourceType:$.current,waitingSegmentIndex:d.current});if(r&&$.current!==r&&($.current=r),r==="url"&&E){const s=L.current!==E,u=B();if(s){const h=d.current!==null?xt():0;e.pause(),e.removeAttribute("src"),e.load(),L.current=E,N.current="url",e.src=E,e.load(),g.current=h,C(h*1e3),e.readyState>0&&(e.currentTime=h,g.current=null)}if(c.current=u,j.current=!1,v.current=!1,l(!1),!u){c.current=!1,e.pause(),p(!1);return}_(s?"sync-url-init":"sync-url");return}if(r==="segment"&&d.current!==null){if(d.current<T.length){if(k.current){p(!1),l(!1);return}M(d.current,"wait-resume");return}j.current=!0,c.current=B(),p(!1),l(B());return}if(r==="segment"&&!T.length){if(m.isAudioStreaming){d.current=A.current,j.current=!0,c.current=B(),p(!1),l(B());return}G();return}if(r==="segment"&&!L.current){M(Math.min(A.current,T.length-1),"effect-init");return}if(r!=="segment"){G();return}if(!x||k.current){c.current=!1,e.pause(),p(!1);return}e.paused&&(c.current=!0,_("sync-paused-retry"))},[m,a,T,E,x,S,B,C,G,M,_,xt,l]),t.useEffect(()=>{if(!W||W.id===Ie.current||W.audioIndex!==a)return;const e=o[W.audioIndex];Se(e,W.timeMs)&&(Ie.current=W.id,ge(W.timeMs))},[o,Se,a,ge,W]),t.useEffect(()=>G,[G]),t.useEffect(()=>y,[y]);const Ot=t.useCallback(()=>{b(),St(),p(!0),l(!1),We?.()},[We,St,b,l]),Vt=t.useCallback(()=>{j.current||v.current||(y(),b(),p(!1))},[a,y,b]),Ht=t.useCallback(()=>{const e=R.current;e&&g.current!==null&&(e.currentTime=g.current,g.current=null),b(),!Re("canplay-seek-finished")&&(!c.current||!x||_("canplay"))},[a,x,Re,b,_]),$t=t.useCallback(()=>{const e=R.current;e&&g.current!==null&&(e.currentTime=g.current,g.current=null),b(),Re("metadata-seek-finished")},[a,Re,b]),Jt=t.useCallback(()=>{b()},[b]),Zt=t.useCallback(()=>{j.current||l(!0,"loadingAudio")},[l]),zt=t.useCallback(()=>{if(j.current){l(!0,"waitingForMoreAudio");return}l(!0,"loadingAudio")},[l]),gt=t.useCallback(()=>{b()},[b]),Yt=t.useCallback(()=>{const e=N.current==="url"||w.current.length===0;if(y(),v.current=!1,e){Q("url-ended");return}kt()},[Q,kt,y]),Dt=t.useCallback(()=>{y(),b(),p(!1),l(!1)},[y,b,l]),Xt=t.useCallback(e=>{Be?.(e),D(!1)},[Be]),Ae=t.useCallback(()=>{if(q){const r=!H;return P(r),Ve?.(r),!0}const e=R.current;return S||!e||!m?!1:d.current!==null?he?(P(!1),c.current=!1,k.current=!0,d.current=null,j.current=!1,p(!1),l(!1),e.pause(),!0):(P(!0),K.current="manual",k.current=!1,c.current=!0,l(!0,"waitingForMoreAudio"),!0):!e.src&&T.length>0?(P(!0),K.current="manual",k.current=!1,M(Math.min(A.current,T.length-1),"toggle"),!0):e.paused?(P(!0),K.current="manual",k.current=!1,c.current=!0,_("toggle-resume"),!0):(P(!1),c.current=!1,k.current=!0,e.pause(),!0)},[m,T.length,H,S,he,Ve,M,_,l,P,q]);t.useEffect(()=>{if(U)return ae.registerPlayerKeyboardShortcutOwner(Z)},[Z,U]);const Ne=t.useMemo(()=>({fullscreen:()=>ee?(ee(),!0):!1,interaction:()=>de?(_e&&de(),!0):!1,next:()=>oe?(we||oe(qe.suppressPlayerControlsWakeAfterNavigation(z())),!0):!1,nextSubtitle:()=>X.next?le("next"):!0,previous:()=>ie?(Me||ie(qe.suppressPlayerControlsWakeAfterNavigation(z())),!0):!1,previousSubtitle:()=>X.previous?le("previous"):!0,subtitle:()=>I?(I(),!0):!1,togglePlayback:()=>(Ae(),!0)}),[z,_e,le,we,ee,de,oe,ie,I,Me,X.next,X.previous,Ae]),Rt=t.useRef(Ne);return t.useEffect(()=>{Rt.current=Ne},[Ne]),t.useEffect(()=>{if(!U||typeof document>"u")return;const e=r=>{if(!ae.isActivePlayerKeyboardShortcutOwner(Z))return;const s=ae.getPlayerKeyboardShortcutAction(r);if(!s||ae.shouldIgnorePlayerKeyboardShortcutEvent(r,s))return;let u=!1;const h=Rt.current[s];u=h(),u&&r.preventDefault()};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[Z,U]),t.useEffect(()=>{ce?.(pe.current)},[ce]),n.jsxRuntimeExports.jsxs("div",{...Nt,"data-slide-player-shortcut-owner":Z,className:Et.cn("slide-player",f),onFocusCapture:Bt,onPointerDown:Ft,children:[n.jsxRuntimeExports.jsx("audio",{ref:R,preload:"auto",playsInline:!0,onLoadStart:Zt,onLoadedMetadata:$t,onCanPlay:Ht,onPlay:Ot,onPause:Vt,onWaiting:zt,onSeeking:gt,onSeeked:gt,onTimeUpdate:Jt,onEnded:Yt,onError:Dt}),ve?n.jsxRuntimeExports.jsxs(n.jsxRuntimeExports.Fragment,{children:[n.jsxRuntimeExports.jsx(Qt.default,{container:Lt,labels:{closeSettings:i.closeSettingsLabel,fullscreen:i.fullscreenLabel,nonFullscreen:i.nonFullscreenLabel,screen:i.screenLabel,screenMode:i.screenModeLabel,subtitle:i.subtitleLabel,subtitleToggle:i.subtitleToggleAriaLabel,title:i.settingsTitle},isSubtitleEnabled:je,onClose:()=>D(!1),onOpenChange:D,onSubtitleToggle:I??(()=>{}),onViewModeChange:Xt,open:tt,viewMode:Tt}),n.jsxRuntimeExports.jsxs("div",{className:"slide-player__controls",style:Pt,children:[n.jsxRuntimeExports.jsxs("div",{className:"slide-player__group",children:[n.jsxRuntimeExports.jsx("button",{"aria-expanded":tt,"aria-haspopup":"dialog","aria-label":i.moreOptionsAriaLabel,className:"slide-player__action slide-player__action--mobile-more",onClick:()=>{D(e=>!e)},type:"button",children:n.jsxRuntimeExports.jsx(lr.default,{className:"slide-player__icon",strokeWidth:2.25})}),n.jsxRuntimeExports.jsx("button",{"aria-label":i.volumeAriaLabel,className:"hidden",type:"button",children:n.jsxRuntimeExports.jsx(ar.default,{className:"slide-player__icon",strokeWidth:2.25})}),n.jsxRuntimeExports.jsx("button",{"aria-label":lt,"aria-keyshortcuts":ft.ariaKeyShortcuts,className:"slide-player__toggle slide-player__toggle--playback",onClick:()=>{Ae()},title:ft.title,type:"button",children:Wt?n.jsxRuntimeExports.jsx(Sr,{}):n.jsxRuntimeExports.jsx(kr,{})}),n.jsxRuntimeExports.jsx("button",{"aria-keyshortcuts":it.ariaKeyShortcuts,"aria-label":i.previousLabel,className:"slide-player__action slide-player__action--prev",disabled:Me,onClick:()=>{ie?.(z())},title:it.title,type:"button",children:n.jsxRuntimeExports.jsx(cr.default,{className:"slide-player__icon",strokeWidth:2.25})}),n.jsxRuntimeExports.jsx("button",{"aria-keyshortcuts":dt.ariaKeyShortcuts,"aria-label":i.nextLabel,className:"slide-player__action slide-player__action--next",disabled:we,onClick:()=>{oe?.(z())},title:dt.title,type:"button",children:n.jsxRuntimeExports.jsx(ir.default,{className:"slide-player__icon",strokeWidth:2.25})}),n.jsxRuntimeExports.jsx("button",{"aria-keyshortcuts":ot.ariaKeyShortcuts,"aria-label":i.previousSubtitleLabel,className:"slide-player__action slide-player__action--prev-subtitle",disabled:!X.previous,onClick:()=>{le("previous")},title:ot.title,type:"button",children:n.jsxRuntimeExports.jsx(or.default,{className:"slide-player__icon",strokeWidth:2.25})}),n.jsxRuntimeExports.jsx("button",{"aria-keyshortcuts":mt.ariaKeyShortcuts,"aria-label":i.nextSubtitleLabel,className:"slide-player__action slide-player__action--next-subtitle",disabled:!X.next,onClick:()=>{le("next")},title:mt.title,type:"button",children:n.jsxRuntimeExports.jsx(fr.default,{className:"slide-player__icon",strokeWidth:2.25})}),n.jsxRuntimeExports.jsx("button",{"aria-label":i.subtitleToggleAriaLabel,"aria-keyshortcuts":ct.ariaKeyShortcuts,"aria-pressed":je,className:"slide-player__action slide-player__action--subtitle",onClick:I,title:ct.title,type:"button",children:je?n.jsxRuntimeExports.jsx(dr.default,{className:"slide-player__icon",strokeWidth:2.25}):n.jsxRuntimeExports.jsx(mr.default,{className:"slide-player__icon",strokeWidth:2.25})}),ee?n.jsxRuntimeExports.jsx("button",{"aria-label":at,"aria-keyshortcuts":pt.ariaKeyShortcuts,className:"slide-player__action slide-player__action--fullscreen",onClick:ee,title:pt.title,type:"button",children:Fe?n.jsxRuntimeExports.jsx(pr.default,{className:"slide-player__icon",strokeWidth:2.25}):n.jsxRuntimeExports.jsx(br.default,{className:"slide-player__icon",strokeWidth:2.25})}):null]}),n.jsxRuntimeExports.jsx("div",{className:"slide-player__separator"}),n.jsxRuntimeExports.jsxs("div",{className:"slide-player__group",children:[ut.map((e,r)=>n.jsxRuntimeExports.jsx(t.Fragment,{children:e},`custom-action-${r}`)),n.jsxRuntimeExports.jsx("button",{"aria-label":i.notesLabel,"aria-keyshortcuts":bt.ariaKeyShortcuts,className:Et.cn("slide-player__action slide-player__action--notes",te&&"slide-player__action--active"),disabled:!_e,onClick:de,title:bt.title,type:"button",children:n.jsxRuntimeExports.jsx(hr.default,{className:"slide-player__icon",strokeWidth:2.25})})]})]})]}):null]})},vt=t.memo(Cr);vt.displayName="Player";exports.default=vt;
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const n=require("../../_virtual/jsx-runtime.cjs.js"),t=require("react"),_t=require("../../lib/utils.cjs.js"),tr=require("./MobilePlayerSettingsSheet.cjs.js"),rr=require("./slideI18n.cjs.js"),nr=require("./utils/mobileScreenMode.cjs.js"),ur=require("./utils/audioCompletion.cjs.js"),sr=require("./utils/playerKeyboardShortcutContext.cjs.js"),ae=require("./utils/playerKeyboardShortcuts.cjs.js"),lr=require("./utils/playbackSource.cjs.js"),ar=require("./utils/playbackPreference.cjs.js"),cr=require("./utils/playerCustomActions.cjs.js"),qe=require("./utils/playerNavigationContext.cjs.js"),Ke=require("./utils/segmentSeek.cjs.js"),jt=require("./utils/audioSegments.cjs.js"),Mt=require("./utils/subtitleCue.cjs.js");;/* empty css */const ir=require("../../node_modules/lucide-react/dist/esm/icons/ellipsis-vertical.cjs.js"),or=require("../../node_modules/lucide-react/dist/esm/icons/volume-2.cjs.js"),fr=require("../../node_modules/lucide-react/dist/esm/icons/skip-back.cjs.js"),dr=require("../../node_modules/lucide-react/dist/esm/icons/skip-forward.cjs.js"),mr=require("../../node_modules/lucide-react/dist/esm/icons/rewind.cjs.js"),pr=require("../../node_modules/lucide-react/dist/esm/icons/fast-forward.cjs.js"),br=require("../../node_modules/lucide-react/dist/esm/icons/captions.cjs.js"),hr=require("../../node_modules/lucide-react/dist/esm/icons/captions-off.cjs.js"),yr=require("../../node_modules/lucide-react/dist/esm/icons/scan-line.cjs.js"),xr=require("../../node_modules/lucide-react/dist/esm/icons/maximize.cjs.js"),Sr=require("../../node_modules/lucide-react/dist/esm/icons/file-pen-line.cjs.js"),wt=new Map,vt=o=>{if(typeof window>"u"||!o||wt.has(o))return;const f=window.document.createElement("audio");f.preload="auto",f.setAttribute("playsinline","true"),f.src=o,f.load(),wt.set(o,f)},kr=(o,f)=>f!==null&&f.audioList===o&&f.subtitleCueLists.length===o.length&&o.every((a,x)=>{const S=a.element?.subtitle_cues;return f.subtitleCueLists[x]===S&&f.subtitleCueLengths[x]===(S?.length??0)}),gr=o=>{const f=o.map(a=>a.element?.subtitle_cues);return{audioList:o,subtitleCueLists:f,subtitleCueLengths:f.map(a=>a?.length??0),tracks:f.map(a=>({subtitleCues:a??[]}))}},Cr=()=>n.jsxRuntimeExports.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:"34",height:"34",viewBox:"0 0 34 34",fill:"none",children:[n.jsxRuntimeExports.jsx("path",{d:"M16.6667 33.3333C25.8714 33.3333 33.3333 25.8714 33.3333 16.6667C33.3333 7.46192 25.8714 0 16.6667 0C7.46192 0 0 7.46192 0 16.6667C0 25.8714 7.46192 33.3333 16.6667 33.3333Z",fill:"#0A0A0A"}),n.jsxRuntimeExports.jsx("path",{d:"M12 10H16V24H12V10ZM18 10H22V24H18V10Z",fill:"white"})]}),Rr=()=>n.jsxRuntimeExports.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:"34",height:"34",viewBox:"0 0 34 34",fill:"none",children:[n.jsxRuntimeExports.jsx("path",{d:"M16.6667 33.3333C25.8714 33.3333 33.3333 25.8714 33.3333 16.6667C33.3333 7.46192 25.8714 0 16.6667 0C7.46192 0 0 7.46192 0 16.6667C0 25.8714 7.46192 33.3333 16.6667 33.3333Z",fill:"#0A0A0A"}),n.jsxRuntimeExports.jsx("path",{d:"M13.3333 10L23.3333 16.6667L13.3333 23.3333V10Z",fill:"white"})]}),V={fullscreen:"F",next:"→",nextSubtitle:"Shift+→",notes:"N",playback:"Space",previous:"←",previousSubtitle:"Shift+←",subtitle:"C"},Er=250,_r=(o,f)=>o?`${o} (${f})`:f,jr=({audioList:o=[],className:f,currentAudioIndex:a=-1,defaultPlaying:x=!0,isPlaybackPaused:S=!1,isAutoAdvanceEnabled:H=!0,useAutoAdvanceToggle:q=!1,onLoadingChange:Pe,onPlaybackPreferenceChange:Ue,onPlaybackStarted:We,onPlaybackTimeChange:ce,onSubtitleToggle:I,onPrev:ie,onNext:oe,onSubtitleJump:fe,canJumpToSubtitleTarget:Ee,onFullscreen:ee,isFullscreen:Fe=!1,mobileViewMode:Lt=nr.DEFAULT_MOBILE_VIEW_MODE,settingsPortalContainer:At,onMobileViewModeChange:Be,onEnded:Oe,onAutoAdvanceToggle:Ve,onInteractionToggle:de,hasInteraction:_e=!1,isInteractionOpen:te=!1,isSubtitleEnabled:je=!0,prevDisabled:Me=!1,nextDisabled:we=!1,showControls:ve=!0,onControlsPointerEnter:Nt,onControlsPointerLeave:qt,enableKeyboardShortcuts:Kt=!0,subtitleSeekRequest:W=null,customActions:He,customActionContext:$e,locale:Je,texts:Ze,onFocusCapture:ze,onPointerDown:Ye,...Pt})=>{const Ut=t.useId(),De=t.useContext(sr.PlayerKeyboardShortcutContext),C=t.useRef(null),Ge=t.useRef(te),L=t.useRef(null),Qe=t.useRef(null),A=t.useRef(0),d=t.useRef(null),me=t.useRef(void 0),w=t.useRef([]),re=t.useRef(q?H:x),ne=t.useRef(!1),Xe=t.useRef(!1),k=t.useRef(!1),N=t.useRef(null),$=t.useRef(null),j=t.useRef(!1),c=t.useRef(!1),g=t.useRef(null),v=t.useRef(!1),J=t.useRef(null),pe=t.useRef(0),Ie=t.useRef(()=>{}),be=t.useRef(null),ue=t.useRef(null),et=t.useRef(null),tt=t.useRef(null),K=t.useRef("unknown"),[he,p]=t.useState(x),[rt,D]=t.useState(!1),[G,Wt]=t.useState({next:!1,previous:!1}),Z=De?.ownerId??Ut,P=Kt&&(De?.enabled??!0),m=a>=0?o[a]:void 0,E=m?.audioUrl,nt=m?.audioSegments,Ft=nt?.length??0,T=t.useMemo(()=>jt.getSortedAudioSegments(m),[m,Ft,nt]);let ye=tt.current;kr(o,ye)||(ye=gr(o),tt.current=ye);const ut=ye.tracks,st=t.useMemo(()=>cr.toPlayerCustomActionList(He,$e),[$e,He]),lt=st.length+7,Bt=t.useMemo(()=>({"--slide-player-mobile-control-count":String(lt)}),[lt]),i=t.useMemo(()=>({...rr.getSlidePlayerTexts(Je),...Ze}),[Je,Ze]),Te=t.useMemo(()=>m?m.audioKey??`${String(m.sequenceNumber??"none")}:${String(m.audioUrl??"")}`:"none",[m]),Ot=q?H:he,at=q?H?i.pauseAutoplayLabel:i.playAutoplayLabel:he?i.pauseLabel:i.playLabel,ct=Fe?i.exitFullscreenLabel:i.enterFullscreenLabel,F=t.useCallback((e,r,s)=>({ariaKeyShortcuts:P?s:void 0,title:P?_r(e,r):e}),[P]),it=F(i.subtitleToggleAriaLabel,V.subtitle,"c"),ot=F(i.previousLabel,V.previous,"ArrowLeft"),ft=F(i.previousSubtitleLabel,V.previousSubtitle,"Shift+ArrowLeft"),dt=F(at,V.playback,"Space"),mt=F(i.nextLabel,V.next,"ArrowRight"),pt=F(i.nextSubtitleLabel,V.nextSubtitle,"Shift+ArrowRight"),bt=F(ct,V.fullscreen,"f"),ht=F(i.notesLabel,V.notes,"n"),xe=t.useCallback(()=>{P&&ae.activatePlayerKeyboardShortcutOwner(Z)},[Z,P]),Vt=t.useCallback(e=>{xe(),Ye?.(e)},[xe,Ye]),Ht=t.useCallback(e=>{xe(),ze?.(e)},[xe,ze]);t.useEffect(()=>{me.current=m},[m]),t.useEffect(()=>{re.current=q?H:x},[x,H,q]),t.useEffect(()=>{ve||D(!1)},[ve]),t.useEffect(()=>{!Ge.current&&te&&D(!1),Ge.current=te},[te]),t.useEffect(()=>{w.current=T},[T]),t.useEffect(()=>{const e=m?.audioUrl,r=a>=0?o[a+1]?.audioUrl:void 0;vt(e),vt(r)},[o,m?.audioUrl,a]);const l=t.useCallback((e,r=null)=>{Xe.current===e&&(!e||r===null)||(Xe.current=e,Pe?.({loading:e,reason:e?r:null}))},[Pe]),U=t.useCallback(e=>{re.current=e,Ue?.(e)},[Ue]),z=t.useCallback(()=>q?{shouldContinuePlayback:re.current}:{shouldContinuePlayback:ar.shouldKeepPlayingAfterNavigation({defaultPlaying:re.current,isPausedByUser:k.current})},[q]),yt=t.useCallback(e=>e instanceof DOMException?e.name==="NotAllowedError"||e.name==="SecurityError":!1,[]),B=t.useCallback(()=>x&&!S&&!k.current&&K.current!=="blocked",[x,S]),xt=t.useCallback(e=>e?e.startsWith("data:")?e:`data:audio/mpeg;base64,${e}`:"",[]),St=t.useCallback(()=>{const e=d.current;return e==null||e<=0?0:w.current.slice(0,e).reduce((r,s)=>r+Math.max(Number(s.duration_ms??0),0),0)/1e3},[]),Y=t.useCallback(e=>e<=0?0:w.current.slice(0,e).reduce((r,s)=>r+Math.max(Number(s.duration_ms??0),0),0),[]),Se=t.useCallback((e,r)=>!e||S?!1:e.audioUrl?!0:Ke.isPlaybackTimeCoveredBySegments(jt.getSortedAudioSegments(e),r),[S]),se=t.useCallback((e,r,s={})=>{const u=Mt.getSubtitleCueJumpTarget({currentAudioIndex:a,currentTimeMs:r,direction:e,excludeTarget:s.excludeTarget,tracks:ut});return!u||!Se(o[u.audioIndex],u.timeMs)||u.audioIndex!==a&&(!fe||Ee&&!Ee(u))?null:u},[o,Ee,Se,a,fe,ut]),Le=t.useCallback((e,r=!1)=>{const s=Math.max(Number(e),0);if(!r&&be.current!==null&&Math.abs(s-be.current)<Er)return;be.current=s;const u={previous:se("previous",s)!==null,next:se("next",s)!==null};Wt(h=>h.previous===u.previous&&h.next===u.next?h:u)},[se]);t.useEffect(()=>{Ie.current=Le,Le(pe.current,!0)},[Le]);const ke=t.useCallback(()=>{const e=C.current;return e?N.current==="segment"?Y(A.current)+Math.max(e.currentTime,0)*1e3:g.current!==null&&e.readyState===0?g.current*1e3:Math.max(e.currentTime,0)*1e3:d.current!=null?Y(d.current):0},[Y]),R=t.useCallback(e=>{const r=Math.max(e,0);pe.current!==r&&(pe.current=r,Mt.shouldClearSubtitleCueJumpTarget({currentAudioIndex:a,currentTimeMs:r,target:ue.current})&&(ue.current=null),ce?.(r),Ie.current(r))},[a,ce]),b=t.useCallback(()=>{R(ke())},[ke,R]),y=t.useCallback(()=>{typeof window>"u"||J.current===null||(window.cancelAnimationFrame(J.current),J.current=null)},[]),kt=t.useCallback(()=>{if(typeof window>"u"||J.current!==null)return;const e=()=>{b();const r=C.current;if(!r||r.paused||r.ended){J.current=null;return}J.current=window.requestAnimationFrame(e)};J.current=window.requestAnimationFrame(e)},[b]),Q=t.useCallback(()=>{const e=C.current;e&&(y(),c.current=!1,k.current=!1,ne.current=!1,N.current=null,g.current=null,j.current=!1,v.current=!1,$.current=null,e.pause(),e.removeAttribute("src"),e.load(),L.current=null,A.current=0,d.current=null,R(0),p(!1),l(!1))},[R,y,l]),_=t.useCallback(e=>{const r=C.current;if(!r)return!1;const s=r.play();return s&&typeof s.then=="function"&&s.then(()=>{K.current==="unknown"&&(K.current="auto"),c.current=!1,v.current=!1}).catch(u=>{K.current==="unknown"&&yt(u)&&(K.current="blocked",c.current=!1,l(!1)),v.current=!1,p(!1)}),!0},[yt,l]),M=t.useCallback((e,r,s={})=>{const u=C.current,h=w.current[e];if(!u||!h)return!1;const O=xt(h.audio_data),Re=Math.max(Number(s.seekTimeSeconds??0),0);A.current=e,d.current=null,j.current=!1,v.current=!0,$.current="segment",R(Y(e)+Re*1e3);const Et=s.shouldResume??B();c.current=Et,l(!1);const er=L.current!==O;return N.current="segment",er&&(u.pause(),u.removeAttribute("src"),u.load(),L.current=O,u.src=O,u.load()),g.current=Re,u.readyState>0&&(u.currentTime=Re,g.current=null),Et?_(`start-segment:${r}`):(c.current=!1,v.current=!1,u.pause(),p(!1),!0)},[B,xt,Y,R,_,l]),ge=t.useCallback(e=>{const r=C.current;if(!r||!m||S)return!1;const s=Math.max(Number(e),0),u=!r.paused&&!r.ended||c.current||v.current||d.current!==null&&re.current&&!k.current,h=Ke.isPlaybackTimeCoveredBySegments(w.current,s)?Ke.resolveSegmentSeekTarget(w.current,s):null;if(be.current=null,y(),c.current=u,l(!1),u&&(K.current="manual",k.current=!1,U(!0)),h&&(N.current==="segment"||!E))return M(h.segmentIndex,"subtitle-seek-segment",{seekTimeSeconds:h.segmentTimeSeconds,shouldResume:u});if(E){const O=s/1e3;return L.current!==E&&(r.pause(),r.removeAttribute("src"),r.load(),L.current=E,N.current="url",$.current="url",r.src=E,r.load()),g.current=O,R(s),r.readyState>0&&(r.currentTime=O,g.current=null),u?_("subtitle-seek-url"):(c.current=!1,r.pause(),p(!1),!0)}return!1},[m,E,S,R,M,y,_,l,U]),le=t.useCallback(e=>{const r=se(e,ke(),{excludeTarget:e==="previous"?ue.current:null});if(r===null)return!1;if(r.audioIndex===a){const u=ge(r.timeMs);return u&&(ue.current=r),u}const s=!!fe?.(r,qe.suppressPlayerControlsWakeAfterNavigation(z()));return s&&(ue.current=r),s},[a,ke,z,se,fe,ge]),X=t.useCallback(e=>{y(),c.current=!1,j.current=!1,v.current=!1,b(),p(!1),l(!1),a>=0&&Oe?.(a)},[a,Oe,y,b,l]),Ce=t.useCallback(e=>{const r=C.current;return!r||N.current!=="url"||!ur.hasReachedAudioEnd({currentTimeSeconds:Math.max(r.currentTime,0),durationSeconds:r.duration})?!1:(c.current=!1,r.pause(),X(e),!0)},[X]),gt=t.useCallback(()=>{const e=A.current+1,r=w.current,s=r[e],u=me.current,h=r.some(O=>O.is_final);if(s){M(e,"ended");return}if(u?.isAudioStreaming||!h){A.current=e,d.current=e,j.current=!0,c.current=x,R(Y(e)),p(!1),l(!0,"waitingForMoreAudio");return}X("segments-completed")},[x,X,Y,R,M,l]);t.useEffect(()=>{if(Qe.current===Te)return;Qe.current=Te,A.current=0,d.current=null,j.current=!1,k.current=!1,ne.current=!1,c.current=!1,v.current=!1,N.current=null,$.current=null,L.current=null,y(),R(0),l(!1);const e=C.current;e&&(e.pause(),e.removeAttribute("src"),e.load(),p(!1))},[a,Te,T.length,E,R,y,l]),t.useEffect(()=>{const e=C.current;if(e){if(S){ne.current=!!(me.current&&!k.current&&(!e.paused||c.current||d.current!==null)),c.current=!1,l(!1),e.pause(),p(!1);return}if(!(!ne.current||!me.current||k.current)){if(ne.current=!1,d.current!==null){if(d.current<w.current.length){M(d.current,"external-resume");return}c.current=!0,l(!0,"waitingForMoreAudio");return}if(!L.current&&w.current.length>0){M(Math.min(A.current,w.current.length-1),"external-resume-init");return}e.paused&&(c.current=!0,_("external-resume"))}}},[S,M,_,l]),t.useEffect(()=>{const e=C.current;if(!e)return;if(!m){Q();return}if(S){c.current=!1,l(!1),e.pause(),p(!1);return}const r=lr.resolveAudioPlaybackSourceType({activeSourceType:N.current,hasAudioUrl:!!E,segmentCount:T.length,preferredSourceType:$.current,waitingSegmentIndex:d.current});if(r&&$.current!==r&&($.current=r),r==="url"&&E){const s=L.current!==E,u=B();if(s){const h=d.current!==null?St():0;e.pause(),e.removeAttribute("src"),e.load(),L.current=E,N.current="url",e.src=E,e.load(),g.current=h,R(h*1e3),e.readyState>0&&(e.currentTime=h,g.current=null)}if(c.current=u,j.current=!1,v.current=!1,l(!1),!u){c.current=!1,e.pause(),p(!1);return}_(s?"sync-url-init":"sync-url");return}if(r==="segment"&&d.current!==null){if(d.current<T.length){if(k.current){p(!1),l(!1);return}M(d.current,"wait-resume");return}j.current=!0,c.current=B(),p(!1),l(B());return}if(r==="segment"&&!T.length){if(m.isAudioStreaming){d.current=A.current,j.current=!0,c.current=B(),p(!1),l(B());return}Q();return}if(r==="segment"&&!L.current){M(Math.min(A.current,T.length-1),"effect-init");return}if(r!=="segment"){Q();return}if(!x||k.current){c.current=!1,e.pause(),p(!1);return}e.paused&&(c.current=!0,_("sync-paused-retry"))},[m,a,T,E,x,S,B,R,Q,M,_,St,l]),t.useEffect(()=>{if(!W||W.id===et.current||W.audioIndex!==a)return;const e=o[W.audioIndex];Se(e,W.timeMs)&&(et.current=W.id,ge(W.timeMs))},[o,Se,a,ge,W]),t.useEffect(()=>Q,[Q]),t.useEffect(()=>y,[y]);const $t=t.useCallback(()=>{b(),kt(),p(!0),l(!1),We?.()},[We,kt,b,l]),Jt=t.useCallback(()=>{j.current||v.current||(y(),b(),p(!1))},[a,y,b]),Zt=t.useCallback(()=>{const e=C.current;e&&g.current!==null&&(e.currentTime=g.current,g.current=null),b(),!Ce("canplay-seek-finished")&&(!c.current||!x||_("canplay"))},[a,x,Ce,b,_]),zt=t.useCallback(()=>{const e=C.current;e&&g.current!==null&&(e.currentTime=g.current,g.current=null),b(),Ce("metadata-seek-finished")},[a,Ce,b]),Yt=t.useCallback(()=>{b()},[b]),Dt=t.useCallback(()=>{j.current||l(!0,"loadingAudio")},[l]),Gt=t.useCallback(()=>{if(j.current){l(!0,"waitingForMoreAudio");return}l(!0,"loadingAudio")},[l]),Ct=t.useCallback(()=>{b()},[b]),Qt=t.useCallback(()=>{const e=N.current==="url"||w.current.length===0;if(y(),v.current=!1,e){X("url-ended");return}gt()},[X,gt,y]),Xt=t.useCallback(()=>{y(),b(),p(!1),l(!1)},[y,b,l]),It=t.useCallback(e=>{Be?.(e),D(!1)},[Be]),Ae=t.useCallback(()=>{if(q){const r=!H;return U(r),Ve?.(r),!0}const e=C.current;return S||!e||!m?!1:d.current!==null?he?(U(!1),c.current=!1,k.current=!0,d.current=null,j.current=!1,p(!1),l(!1),e.pause(),!0):(U(!0),K.current="manual",k.current=!1,c.current=!0,l(!0,"waitingForMoreAudio"),!0):!e.src&&T.length>0?(U(!0),K.current="manual",k.current=!1,M(Math.min(A.current,T.length-1),"toggle"),!0):e.paused?(U(!0),K.current="manual",k.current=!1,c.current=!0,_("toggle-resume"),!0):(U(!1),c.current=!1,k.current=!0,e.pause(),!0)},[m,T.length,H,S,he,Ve,M,_,l,U,q]);t.useEffect(()=>{if(P)return ae.registerPlayerKeyboardShortcutOwner(Z)},[Z,P]);const Ne=t.useMemo(()=>({fullscreen:()=>ee?(ee(),!0):!1,interaction:()=>de?(_e&&de(),!0):!1,next:()=>oe?(we||oe(qe.suppressPlayerControlsWakeAfterNavigation(z())),!0):!1,nextSubtitle:()=>G.next?le("next"):!0,previous:()=>ie?(Me||ie(qe.suppressPlayerControlsWakeAfterNavigation(z())),!0):!1,previousSubtitle:()=>G.previous?le("previous"):!0,subtitle:()=>I?(I(),!0):!1,togglePlayback:()=>(Ae(),!0)}),[z,_e,le,we,ee,de,oe,ie,I,Me,G.next,G.previous,Ae]),Rt=t.useRef(Ne);return t.useEffect(()=>{Rt.current=Ne},[Ne]),t.useEffect(()=>{if(!P||typeof document>"u")return;const e=r=>{if(!ae.isActivePlayerKeyboardShortcutOwner(Z))return;const s=ae.getPlayerKeyboardShortcutAction(r);if(!s||ae.shouldIgnorePlayerKeyboardShortcutEvent(r,s))return;let u=!1;const h=Rt.current[s];u=h(),u&&r.preventDefault()};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[Z,P]),t.useEffect(()=>{ce?.(pe.current)},[ce]),n.jsxRuntimeExports.jsxs("div",{...Pt,"data-slide-player-shortcut-owner":Z,className:_t.cn("slide-player",f),onFocusCapture:Ht,onPointerDown:Vt,children:[n.jsxRuntimeExports.jsx("audio",{ref:C,preload:"auto",playsInline:!0,onLoadStart:Dt,onLoadedMetadata:zt,onCanPlay:Zt,onPlay:$t,onPause:Jt,onWaiting:Gt,onSeeking:Ct,onSeeked:Ct,onTimeUpdate:Yt,onEnded:Qt,onError:Xt}),ve?n.jsxRuntimeExports.jsxs(n.jsxRuntimeExports.Fragment,{children:[n.jsxRuntimeExports.jsx(tr.default,{container:At,labels:{closeSettings:i.closeSettingsLabel,fullscreen:i.fullscreenLabel,nonFullscreen:i.nonFullscreenLabel,screen:i.screenLabel,screenMode:i.screenModeLabel,subtitle:i.subtitleLabel,subtitleToggle:i.subtitleToggleAriaLabel,title:i.settingsTitle},isSubtitleEnabled:je,onClose:()=>D(!1),onOpenChange:D,onSubtitleToggle:I??(()=>{}),onViewModeChange:It,open:rt,viewMode:Lt}),n.jsxRuntimeExports.jsxs("div",{className:"slide-player__controls",onPointerEnter:Nt,onPointerLeave:qt,style:Bt,children:[n.jsxRuntimeExports.jsxs("div",{className:"slide-player__group",children:[n.jsxRuntimeExports.jsx("button",{"aria-expanded":rt,"aria-haspopup":"dialog","aria-label":i.moreOptionsAriaLabel,className:"slide-player__action slide-player__action--mobile-more",onClick:()=>{D(e=>!e)},type:"button",children:n.jsxRuntimeExports.jsx(ir.default,{className:"slide-player__icon",strokeWidth:2.25})}),n.jsxRuntimeExports.jsx("button",{"aria-label":i.volumeAriaLabel,className:"hidden",type:"button",children:n.jsxRuntimeExports.jsx(or.default,{className:"slide-player__icon",strokeWidth:2.25})}),n.jsxRuntimeExports.jsx("button",{"aria-label":at,"aria-keyshortcuts":dt.ariaKeyShortcuts,className:"slide-player__toggle slide-player__toggle--playback",onClick:()=>{Ae()},title:dt.title,type:"button",children:Ot?n.jsxRuntimeExports.jsx(Cr,{}):n.jsxRuntimeExports.jsx(Rr,{})}),n.jsxRuntimeExports.jsx("button",{"aria-keyshortcuts":ot.ariaKeyShortcuts,"aria-label":i.previousLabel,className:"slide-player__action slide-player__action--prev",disabled:Me,onClick:()=>{ie?.(z())},title:ot.title,type:"button",children:n.jsxRuntimeExports.jsx(fr.default,{className:"slide-player__icon",strokeWidth:2.25})}),n.jsxRuntimeExports.jsx("button",{"aria-keyshortcuts":mt.ariaKeyShortcuts,"aria-label":i.nextLabel,className:"slide-player__action slide-player__action--next",disabled:we,onClick:()=>{oe?.(z())},title:mt.title,type:"button",children:n.jsxRuntimeExports.jsx(dr.default,{className:"slide-player__icon",strokeWidth:2.25})}),n.jsxRuntimeExports.jsx("button",{"aria-keyshortcuts":ft.ariaKeyShortcuts,"aria-label":i.previousSubtitleLabel,className:"slide-player__action slide-player__action--prev-subtitle",disabled:!G.previous,onClick:()=>{le("previous")},title:ft.title,type:"button",children:n.jsxRuntimeExports.jsx(mr.default,{className:"slide-player__icon",strokeWidth:2.25})}),n.jsxRuntimeExports.jsx("button",{"aria-keyshortcuts":pt.ariaKeyShortcuts,"aria-label":i.nextSubtitleLabel,className:"slide-player__action slide-player__action--next-subtitle",disabled:!G.next,onClick:()=>{le("next")},title:pt.title,type:"button",children:n.jsxRuntimeExports.jsx(pr.default,{className:"slide-player__icon",strokeWidth:2.25})}),n.jsxRuntimeExports.jsx("button",{"aria-label":i.subtitleToggleAriaLabel,"aria-keyshortcuts":it.ariaKeyShortcuts,"aria-pressed":je,className:"slide-player__action slide-player__action--subtitle",onClick:I,title:it.title,type:"button",children:je?n.jsxRuntimeExports.jsx(br.default,{className:"slide-player__icon",strokeWidth:2.25}):n.jsxRuntimeExports.jsx(hr.default,{className:"slide-player__icon",strokeWidth:2.25})}),ee?n.jsxRuntimeExports.jsx("button",{"aria-label":ct,"aria-keyshortcuts":bt.ariaKeyShortcuts,className:"slide-player__action slide-player__action--fullscreen",onClick:ee,title:bt.title,type:"button",children:Fe?n.jsxRuntimeExports.jsx(yr.default,{className:"slide-player__icon",strokeWidth:2.25}):n.jsxRuntimeExports.jsx(xr.default,{className:"slide-player__icon",strokeWidth:2.25})}):null]}),n.jsxRuntimeExports.jsx("div",{className:"slide-player__separator"}),n.jsxRuntimeExports.jsxs("div",{className:"slide-player__group",children:[st.map((e,r)=>n.jsxRuntimeExports.jsx(t.Fragment,{children:e},`custom-action-${r}`)),n.jsxRuntimeExports.jsx("button",{"aria-label":i.notesLabel,"aria-keyshortcuts":ht.ariaKeyShortcuts,className:_t.cn("slide-player__action slide-player__action--notes",te&&"slide-player__action--active"),disabled:!_e,onClick:de,title:ht.title,type:"button",children:n.jsxRuntimeExports.jsx(Sr.default,{className:"slide-player__icon",strokeWidth:2.25})})]})]})]}):null]})},Tt=t.memo(jr);Tt.displayName="Player";exports.default=Tt;
|
|
2
2
|
//# sourceMappingURL=Player.cjs.js.map
|