markdown-flow-ui 0.1.112 → 0.1.113
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 -3
- package/dist/_virtual/index.es8.js.map +1 -1
- package/dist/_virtual/index.es9.js +3 -2
- package/dist/_virtual/index.es9.js.map +1 -1
- 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 +1 -0
- package/dist/components/ContentRender/ContentRender.es.js +118 -116
- package/dist/components/ContentRender/ContentRender.es.js.map +1 -1
- package/dist/components/ContentRender/IframeSandbox.cjs.js +2 -2
- package/dist/components/ContentRender/IframeSandbox.cjs.js.map +1 -1
- package/dist/components/ContentRender/IframeSandbox.d.ts +1 -0
- package/dist/components/ContentRender/IframeSandbox.es.js +108 -100
- package/dist/components/ContentRender/IframeSandbox.es.js.map +1 -1
- package/dist/components/ContentRender/SandboxApp.cjs.js +2 -2
- package/dist/components/ContentRender/SandboxApp.cjs.js.map +1 -1
- package/dist/components/ContentRender/SandboxApp.d.ts +1 -0
- package/dist/components/ContentRender/SandboxApp.es.js +90 -87
- package/dist/components/ContentRender/SandboxApp.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 +1 -0
- package/dist/components/Slide/Slide.es.js +524 -503
- package/dist/components/Slide/Slide.es.js.map +1 -1
- package/dist/components/Slide/Slide.stories.d.ts +1 -0
- package/dist/markdown-flow-ui/node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/index.cjs.js +1 -1
- package/dist/markdown-flow-ui/node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/index.es.js +1 -1
- package/dist/markdown-flow-ui/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/c4Diagram-YG6GDRKO.cjs.js +1 -1
- package/dist/markdown-flow-ui/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/c4Diagram-YG6GDRKO.es.js +1 -1
- package/dist/markdown-flow-ui/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/chunk-S3R3BYOJ.cjs.js +1 -1
- package/dist/markdown-flow-ui/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/chunk-S3R3BYOJ.es.js +1 -1
- package/dist/markdown-flow-ui/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/chunk-TZMSLE5B.cjs.js +1 -1
- package/dist/markdown-flow-ui/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/chunk-TZMSLE5B.es.js +1 -1
- package/dist/markdown-flow-ui/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/ganttDiagram-LVOFAZNH.cjs.js +1 -1
- package/dist/markdown-flow-ui/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/ganttDiagram-LVOFAZNH.es.js +1 -1
- package/dist/markdown-flow-ui/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/sequenceDiagram-WL72ISMW.cjs.js +1 -1
- package/dist/markdown-flow-ui/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/sequenceDiagram-WL72ISMW.es.js +1 -1
- package/dist/markdown-flow-ui-lib.css +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Slide.es.js","sources":["../../../src/components/Slide/Slide.tsx"],"sourcesContent":["import React, {\n memo,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { ChevronLeft } from \"lucide-react\";\n\nimport { isSandboxInteractionMessage } from \"../../lib/sandboxInteraction\";\nimport { cn } from \"../../lib/utils\";\nimport LoadingOverlayCard from \"../ui/loading-overlay-card\";\nimport ContentRender from \"../ContentRender\";\nimport type { ContentRenderProps } from \"../ContentRender/ContentRender\";\nimport IframeSandbox from \"../ContentRender/IframeSandbox\";\nimport type { OnSendContentParams } from \"../types\";\nimport {\n getInteractionDefaultSelectedValues,\n getInteractionDefaultValues,\n type InteractionDefaultValueOptions,\n} from \"../../lib/interaction-defaults\";\nimport {\n isLandscapeViewport as getIsFullscreenPreferredViewport,\n isMobileDevice as getIsMobileDevice,\n subscribeMobileDeviceChange,\n} from \"../../lib/mobileDevice\";\nimport Player from \"./Player\";\nimport SubtitleOverlay from \"./SubtitleOverlay\";\nimport type { PlayerProps, SlidePlayerTexts } from \"./Player\";\nimport { DEFAULT_SLIDE_PLAYER_TEXTS } from \"./constants\";\nimport SlideFullscreenHint from \"./SlideFullscreenHint\";\nimport type { Element } from \"./types\";\nimport useSlide from \"./useSlide\";\nimport useWakePlayerFromIframe from \"./useWakePlayerFromIframe\";\nimport {\n DEFAULT_MOBILE_VIEW_MODE,\n resolveMobileViewModeState,\n type MobileViewMode,\n} from \"./utils/mobileScreenMode\";\nimport { shouldPresentInteractionOverlay } from \"./utils/interactionPlayback\";\nimport { shouldAutoAdvanceIntoAppendedMarker } from \"./utils/appendedMarkerAdvance\";\nimport { getPlaybackSequenceTransition } from \"./utils/playbackSequence\";\nimport {\n getPlayerCustomActionCount,\n resolvePlayerCustomActionElement,\n} from \"./utils/playerCustomActions\";\nimport { createPlaybackTimeStore } from \"./utils/playbackTimeStore\";\nimport { shouldUseAutoAdvanceToggle } from \"./utils/playerToggleMode\";\nimport \"./slide.css\";\nexport type {\n Element,\n ElementAudioSegment,\n ElementSubtitleCue,\n SlidePlayerCustomActionContext,\n SlidePlayerCustomActions,\n} from \"./types\";\n\nconst DEFAULT_MARKER_AUTO_ADVANCE_DELAY_MS = 2000;\nconst DEFAULT_INTERACTION_OVERLAY_OPEN_DELAY_MS = 300;\nconst DEFAULT_INTERACTION_OVERLAY_FALLBACK_OFFSET_PX = 160;\nconst DEFAULT_INTERACTION_SUBTITLE_GAP_PX = 16;\n\ntype RenderSlideElementOptions = {\n replaceRootScreenHeightWithFull?: boolean;\n};\n\ninterface InteractionOverlayCardProps {\n content: string;\n title: string;\n defaultButtonText?: string;\n defaultInputText?: string;\n defaultSelectedValues?: string[];\n confirmButtonText?: string;\n copyButtonText?: string;\n copiedButtonText?: string;\n onSend?: (content: OnSendContentParams) => void;\n readonly?: boolean;\n}\n\nexport interface SlideInteractionTexts extends Pick<\n ContentRenderProps,\n \"confirmButtonText\" | \"copyButtonText\" | \"copiedButtonText\"\n> {\n title?: string;\n}\n\nexport type SlideFullscreenHeader = {\n content?: React.ReactNode;\n backAriaLabel?: string;\n onBack?: () => void;\n};\n\nconst InteractionOverlayCard = memo(\n ({\n content,\n title,\n defaultButtonText,\n defaultInputText,\n defaultSelectedValues,\n confirmButtonText,\n copyButtonText,\n copiedButtonText,\n onSend,\n readonly = false,\n }: InteractionOverlayCardProps) => (\n <div className=\"slide-player__interaction-card\">\n <div className=\"slide-player__interaction-header\">\n <p className=\"slide-player__interaction-title\">{title}</p>\n </div>\n <div className=\"slide-player__interaction-body\">\n <ContentRender\n content={content}\n defaultButtonText={defaultButtonText}\n defaultInputText={defaultInputText}\n defaultSelectedValues={defaultSelectedValues}\n confirmButtonText={confirmButtonText}\n copyButtonText={copyButtonText}\n copiedButtonText={copiedButtonText}\n onSend={onSend}\n readonly={readonly}\n enableTypewriter={false}\n sandboxMode=\"content\"\n />\n </div>\n </div>\n )\n);\n\nInteractionOverlayCard.displayName = \"InteractionOverlayCard\";\n\nconst areStepElementListsEqual = (\n prevElementList: Element[],\n nextElementList: Element[]\n) =>\n prevElementList.length === nextElementList.length &&\n prevElementList.every((element, index) => {\n const nextElement = nextElementList[index];\n\n return (\n element.sequence_number === nextElement?.sequence_number &&\n element.type === nextElement?.type &&\n element.content === nextElement?.content\n );\n });\n\nexport interface SlideProps extends React.ComponentProps<\"section\"> {\n elementList?: Element[];\n showPlayer?: boolean;\n playerAlwaysVisible?: boolean;\n playerClassName?: string;\n fullscreenHeader?: SlideFullscreenHeader;\n playerCustomActions?: PlayerProps[\"customActions\"];\n playerCustomActionPauseOnActive?: boolean;\n bufferingText?: string;\n interactionTitle?: string;\n interactionTexts?: SlideInteractionTexts;\n playerTexts?: SlidePlayerTexts;\n playerAutoHideDelay?: number;\n markerAutoAdvanceDelay?: number;\n interactionDefaultValueOptions?: InteractionDefaultValueOptions;\n onSend?: (content: OnSendContentParams, element?: Element) => void;\n onPlayerVisibilityChange?: (visible: boolean) => void;\n onMobileViewModeChange?: (viewMode: MobileViewMode) => void;\n onStepChange?: (element: Element | undefined, index: number) => void;\n enableIframeScaling?: boolean;\n}\n\nconst Slide: React.FC<SlideProps> = ({\n elementList = [],\n showPlayer = true,\n playerAlwaysVisible = false,\n playerClassName,\n fullscreenHeader,\n playerCustomActions,\n playerCustomActionPauseOnActive = true,\n bufferingText = \"Buffering...\",\n interactionTitle,\n interactionTexts,\n playerTexts,\n playerAutoHideDelay = 3000,\n markerAutoAdvanceDelay = DEFAULT_MARKER_AUTO_ADVANCE_DELAY_MS,\n interactionDefaultValueOptions,\n onSend,\n onPlayerVisibilityChange,\n onMobileViewModeChange,\n onStepChange,\n enableIframeScaling = true,\n className,\n onPointerDown,\n ...props\n}) => {\n const sectionRef = useRef<HTMLElement | null>(null);\n const viewportRef = useRef<HTMLDivElement | null>(null);\n const stageLayerRef = useRef<HTMLDivElement | null>(null);\n const lastElementRef = useRef<HTMLDivElement | null>(null);\n const playerHideTimerRef = useRef<number | null>(null);\n const autoAdvanceTimerRef = useRef<number | null>(null);\n const interactionAutoCloseTimerRef = useRef<number | null>(null);\n const interactionOverlayOpenTimerRef = useRef<number | null>(null);\n const interactionOverlayRef = useRef<HTMLDivElement | null>(null);\n const prevRenderElementKeysRef = useRef<string[]>([]);\n const shouldScrollToBottomRef = useRef(false);\n const pendingInteractionOverlayStepIndexRef = useRef<number | null>(null);\n const playbackResetKeyRef = useRef<string | null>(null);\n const appendedMarkerAdvanceStateRef = useRef({\n markerCount: 0,\n currentIndex: -1,\n canGoNext: false,\n });\n const {\n currentElementList,\n stepElementLists,\n slideElementList,\n currentIndex,\n audioList,\n currentAudioSequenceIndexes,\n currentStepHasSpeakableElement,\n currentInteractionElement,\n canGoPrev,\n canGoNext,\n handlePrev: goPrev,\n handleNext: goNext,\n } = useSlide(elementList);\n const currentStepElement = useMemo(() => {\n if (currentIndex < 0) {\n return undefined;\n }\n\n return slideElementList[currentIndex];\n }, [currentIndex, slideElementList]);\n const visibleMarkerCount = slideElementList.filter(\n (element) => element.is_renderable !== false\n ).length;\n const isSingleSlide = visibleMarkerCount === 1;\n const shouldRenderPlayer =\n showPlayer &&\n (slideElementList.length > 0 ||\n audioList.length > 0 ||\n Boolean(currentInteractionElement));\n const currentAudioSequenceKeys = useMemo(\n () =>\n currentAudioSequenceIndexes\n .map((audioIndex) => audioList[audioIndex]?.audioKey)\n .filter((audioKey): audioKey is string => Boolean(audioKey)),\n [audioList, currentAudioSequenceIndexes]\n );\n const [isPlayerVisible, setIsPlayerVisible] = useState(true);\n const [hasPlayerInteracted, setHasPlayerInteracted] = useState(false);\n const [isAutoAdvanceEnabled, setIsAutoAdvanceEnabled] = useState(true);\n const [currentAudioKey, setCurrentAudioKey] = useState<string | null>(null);\n const [isAudioLoadingVisible, setIsAudioLoadingVisible] = useState(false);\n const [hasCompletedCurrentStepAudio, setHasCompletedCurrentStepAudio] =\n useState(false);\n const [hasCurrentAudioPlaybackStarted, setHasCurrentAudioPlaybackStarted] =\n useState(false);\n const [isSubtitleEnabled, setIsSubtitleEnabled] = useState(true);\n const [isPlayerCustomActionActive, setIsPlayerCustomActionActive] =\n useState(false);\n const [activeInteractionElement, setActiveInteractionElement] = useState<\n Element | undefined\n >();\n const [isInteractionOverlayOpen, setIsInteractionOverlayOpen] =\n useState(false);\n const [\n interactionOverlaySubtitleOffset,\n setInteractionOverlaySubtitleOffset,\n ] = useState(0);\n const [isBrowserFullscreen, setIsBrowserFullscreen] = useState(false);\n const isMobileDevice = useMemo(() => getIsMobileDevice(), []);\n const [mobileViewMode, setMobileViewMode] = useState<MobileViewMode>(\n DEFAULT_MOBILE_VIEW_MODE\n );\n const [hasManualMobileViewMode, setHasManualMobileViewMode] = useState(false);\n const [isViewportFullscreenPreferred, setIsViewportFullscreenPreferred] =\n useState(() =>\n isMobileDevice ? getIsFullscreenPreferredViewport() : false\n );\n const [isFullscreenHintOpen, setIsFullscreenHintOpen] = useState(false);\n const playbackTimeStore = useMemo(() => createPlaybackTimeStore(), []);\n const {\n effectiveMobileViewMode,\n isImmersiveMobileFullscreen,\n isNativeMobileFullscreen,\n shouldRotateFullscreenViewport,\n } = useMemo(\n () =>\n resolveMobileViewModeState({\n hasManualMobileViewMode,\n isMobileDevice,\n isViewportFullscreenPreferred,\n mobileViewMode,\n }),\n [\n hasManualMobileViewMode,\n isMobileDevice,\n isViewportFullscreenPreferred,\n mobileViewMode,\n ]\n );\n const previousEffectiveMobileViewModeRef = useRef(effectiveMobileViewMode);\n const playerVisible =\n shouldRenderPlayer && (playerAlwaysVisible || isPlayerVisible);\n const shouldShowFullscreenHeader =\n isImmersiveMobileFullscreen && playerVisible;\n const shouldApplyFullscreenViewportPadding =\n isImmersiveMobileFullscreen && playerVisible;\n const shouldShowMobileFullscreenMask =\n isImmersiveMobileFullscreen || isNativeMobileFullscreen;\n const fullscreenHintText =\n playerTexts?.fullscreenHintText ??\n DEFAULT_SLIDE_PLAYER_TEXTS.fullscreenHintText;\n const handleMobileViewModeSelect = useCallback(\n (nextViewMode: MobileViewMode) => {\n setHasManualMobileViewMode(true);\n setMobileViewMode(nextViewMode);\n },\n []\n );\n const handleMobileViewModeReset = useCallback(() => {\n // Clear manual override so the effective mode returns to the default non-fullscreen state.\n setHasManualMobileViewMode(false);\n setMobileViewMode(DEFAULT_MOBILE_VIEW_MODE);\n }, []);\n const handleFullscreenHeaderBack = useCallback(() => {\n handleMobileViewModeReset();\n fullscreenHeader?.onBack?.();\n }, [fullscreenHeader, handleMobileViewModeReset]);\n const handleFullscreenHintClose = useCallback(() => {\n setIsFullscreenHintOpen(false);\n }, []);\n const setPlayerCustomActionActive = useCallback((active: boolean) => {\n setIsPlayerCustomActionActive(active);\n }, []);\n const togglePlayerCustomActionActive = useCallback(() => {\n setIsPlayerCustomActionActive((previous) => !previous);\n }, []);\n const { mountedStepStates, currentMountedStateIndex } = useMemo(() => {\n const nextMountedStepStates: Array<{\n elementList: Element[];\n sourceStepIndexes: number[];\n }> = [];\n const mountedStateIndexByStep = new Map<number, number>();\n\n stepElementLists.forEach((stepElementList, stepIndex) => {\n const existingMountedStateIndex = nextMountedStepStates.findIndex(\n (mountedStepState) =>\n areStepElementListsEqual(\n mountedStepState.elementList,\n stepElementList\n )\n );\n\n if (existingMountedStateIndex >= 0) {\n nextMountedStepStates[\n existingMountedStateIndex\n ]?.sourceStepIndexes.push(stepIndex);\n mountedStateIndexByStep.set(stepIndex, existingMountedStateIndex);\n return;\n }\n\n nextMountedStepStates.push({\n elementList: stepElementList,\n sourceStepIndexes: [stepIndex],\n });\n mountedStateIndexByStep.set(stepIndex, nextMountedStepStates.length - 1);\n });\n\n return {\n mountedStepStates: nextMountedStepStates,\n currentMountedStateIndex:\n currentIndex >= 0\n ? (mountedStateIndexByStep.get(currentIndex) ?? -1)\n : -1,\n };\n }, [currentIndex, stepElementLists]);\n const currentStepKey = useMemo(() => String(currentIndex), [currentIndex]);\n const currentAudioIndex = useMemo(() => {\n if (!currentAudioKey) {\n return -1;\n }\n\n return audioList.findIndex(\n (audioItem) => (audioItem.audioKey ?? \"\") === currentAudioKey\n );\n }, [audioList, currentAudioKey]);\n const currentAudioItem = useMemo(\n () => (currentAudioIndex >= 0 ? audioList[currentAudioIndex] : undefined),\n [audioList, currentAudioIndex]\n );\n const currentSubtitleCues = currentAudioItem?.element?.subtitle_cues ?? [];\n const currentAudioSequenceStartKey = useMemo(\n () => currentAudioSequenceKeys[0] ?? \"none\",\n [currentAudioSequenceKeys]\n );\n const playerCustomActionContext = useMemo(\n () => ({\n currentElement: resolvePlayerCustomActionElement({\n currentAudioIndex,\n currentAudioSequenceIndexes,\n audioList,\n currentInteractionElement: activeInteractionElement,\n currentStepElement,\n }),\n currentIndex,\n currentStepElement,\n isActive: isPlayerCustomActionActive,\n setActive: setPlayerCustomActionActive,\n toggleActive: togglePlayerCustomActionActive,\n }),\n [\n activeInteractionElement,\n audioList,\n currentAudioIndex,\n currentAudioSequenceIndexes,\n currentIndex,\n currentStepElement,\n isPlayerCustomActionActive,\n setPlayerCustomActionActive,\n togglePlayerCustomActionActive,\n ]\n );\n const playerCustomActionCount = useMemo(\n () =>\n getPlayerCustomActionCount(\n playerCustomActions,\n playerCustomActionContext\n ),\n [playerCustomActionContext, playerCustomActions]\n );\n const interactionOverlayStyle = useMemo(\n () =>\n ({\n \"--slide-player-custom-action-count\": String(playerCustomActionCount),\n \"--slide-player-mobile-control-count\": String(\n playerCustomActionCount + 4\n ),\n }) as React.CSSProperties,\n [playerCustomActionCount]\n );\n const hasAvailableStepAudio = currentAudioSequenceKeys.length > 0;\n const currentInteractionResetKey = useMemo(() => {\n if (!currentInteractionElement) {\n return \"none\";\n }\n\n return `${currentInteractionElement.sequence_number ?? \"none\"}:${String(\n currentInteractionElement.content ?? \"\"\n )}`;\n }, [currentInteractionElement]);\n const currentPlaybackResetKey = useMemo(\n () => [currentStepKey, currentInteractionResetKey].join(\"|\"),\n [currentInteractionResetKey, currentStepKey]\n );\n const currentPlaybackStartedResetKey = useMemo(\n () =>\n [\n currentPlaybackResetKey,\n currentAudioItem?.audioKey ?? \"none\",\n String(currentAudioIndex),\n ].join(\"|\"),\n [currentAudioIndex, currentAudioItem?.audioKey, currentPlaybackResetKey]\n );\n const currentStepAudioUrl = useMemo(() => {\n if (\n !currentAudioSequenceStartKey ||\n currentAudioSequenceStartKey === \"none\"\n ) {\n return \"\";\n }\n\n const currentStepAudioItem = audioList.find(\n (audioItem) => audioItem.audioKey === currentAudioSequenceStartKey\n );\n\n return currentStepAudioItem?.audioUrl?.trim() ?? \"\";\n }, [audioList, currentAudioSequenceStartKey]);\n const hasCurrentStepAudioUrl = Boolean(currentStepAudioUrl);\n const shouldPausePlaybackForCustomAction =\n playerCustomActionPauseOnActive &&\n Boolean(playerCustomActions) &&\n isPlayerCustomActionActive;\n const shouldUseSilentStepAutoAdvanceToggle = useMemo(\n () =>\n shouldUseAutoAdvanceToggle({\n canGoNext,\n currentAudioIndex,\n currentStepHasSpeakableElement,\n hasInteraction: Boolean(currentInteractionElement),\n }),\n [\n canGoNext,\n currentAudioIndex,\n currentInteractionElement,\n currentStepHasSpeakableElement,\n ]\n );\n\n const clearPlayerHideTimer = useCallback(() => {\n if (playerHideTimerRef.current === null) {\n return;\n }\n\n window.clearTimeout(playerHideTimerRef.current);\n playerHideTimerRef.current = null;\n }, []);\n\n const clearInteractionAutoCloseTimer = useCallback(() => {\n if (interactionAutoCloseTimerRef.current === null) {\n return;\n }\n\n window.clearTimeout(interactionAutoCloseTimerRef.current);\n interactionAutoCloseTimerRef.current = null;\n }, []);\n\n const clearInteractionOverlayOpenTimer = useCallback(() => {\n if (interactionOverlayOpenTimerRef.current === null) {\n return;\n }\n\n window.clearTimeout(interactionOverlayOpenTimerRef.current);\n interactionOverlayOpenTimerRef.current = null;\n }, []);\n\n const clearAutoAdvanceTimer = useCallback(() => {\n if (autoAdvanceTimerRef.current === null) {\n return;\n }\n\n window.clearTimeout(autoAdvanceTimerRef.current);\n autoAdvanceTimerRef.current = null;\n }, []);\n\n const resetAudioSequence = useCallback(() => {\n clearAutoAdvanceTimer();\n clearInteractionAutoCloseTimer();\n clearInteractionOverlayOpenTimer();\n setCurrentAudioKey(null);\n playbackTimeStore.reset();\n setIsAudioLoadingVisible(false);\n setHasCompletedCurrentStepAudio(false);\n setHasCurrentAudioPlaybackStarted(false);\n setActiveInteractionElement(undefined);\n setIsInteractionOverlayOpen(false);\n setInteractionOverlaySubtitleOffset(0);\n }, [\n clearAutoAdvanceTimer,\n clearInteractionAutoCloseTimer,\n clearInteractionOverlayOpenTimer,\n playbackTimeStore,\n ]);\n\n const startCurrentAudioSequence = useCallback(() => {\n const nextAudioKey = currentAudioSequenceKeys[0];\n\n if (!nextAudioKey) {\n return false;\n }\n\n // Start the first audio segment for the current step immediately.\n setCurrentAudioKey(nextAudioKey);\n return true;\n }, [currentAudioSequenceKeys]);\n\n const continueAfterInteraction = useCallback(() => {\n clearInteractionAutoCloseTimer();\n clearInteractionOverlayOpenTimer();\n setIsInteractionOverlayOpen(false);\n setInteractionOverlaySubtitleOffset(0);\n\n if (startCurrentAudioSequence()) {\n return;\n }\n\n if (canGoNext) {\n goNext();\n }\n }, [\n canGoNext,\n clearInteractionAutoCloseTimer,\n clearInteractionOverlayOpenTimer,\n goNext,\n startCurrentAudioSequence,\n ]);\n\n const scheduleInteractionOverlayOpen = useCallback(\n (interactionElement?: Element) => {\n clearInteractionOverlayOpenTimer();\n\n if (!interactionElement) {\n return;\n }\n\n const openOverlay = () => {\n interactionOverlayOpenTimerRef.current = null;\n setInteractionOverlaySubtitleOffset(\n DEFAULT_INTERACTION_OVERLAY_FALLBACK_OFFSET_PX\n );\n setIsInteractionOverlayOpen(true);\n pendingInteractionOverlayStepIndexRef.current = null;\n };\n\n interactionOverlayOpenTimerRef.current = window.setTimeout(\n openOverlay,\n DEFAULT_INTERACTION_OVERLAY_OPEN_DELAY_MS\n );\n },\n [clearInteractionOverlayOpenTimer]\n );\n\n const showPlayerControls = useCallback(\n (enableAutoHide = hasPlayerInteracted) => {\n if (!shouldRenderPlayer) {\n return;\n }\n\n setIsPlayerVisible(true);\n clearPlayerHideTimer();\n\n if (playerAlwaysVisible || !enableAutoHide || playerAutoHideDelay <= 0) {\n return;\n }\n\n playerHideTimerRef.current = window.setTimeout(() => {\n setIsPlayerVisible(false);\n playerHideTimerRef.current = null;\n }, playerAutoHideDelay);\n },\n [\n clearPlayerHideTimer,\n hasPlayerInteracted,\n playerAlwaysVisible,\n playerAutoHideDelay,\n shouldRenderPlayer,\n ]\n );\n\n const hasResolvedCurrentInteraction = Boolean(\n currentInteractionElement?.readonly ||\n currentInteractionElement?.user_input?.trim()\n );\n\n const shouldBlockPlaybackForInteraction =\n Boolean(currentInteractionElement) && !hasResolvedCurrentInteraction;\n\n useEffect(() => {\n // Reset silent-step autoplay toggle whenever navigation lands on a new step.\n setIsAutoAdvanceEnabled(true);\n\n if (playerCustomActionPauseOnActive) {\n setIsPlayerCustomActionActive(false);\n }\n }, [currentIndex, playerCustomActionPauseOnActive]);\n\n useEffect(() => {\n return () => {\n clearAutoAdvanceTimer();\n clearPlayerHideTimer();\n clearInteractionAutoCloseTimer();\n clearInteractionOverlayOpenTimer();\n };\n }, [\n clearAutoAdvanceTimer,\n clearInteractionAutoCloseTimer,\n clearInteractionOverlayOpenTimer,\n clearPlayerHideTimer,\n ]);\n\n useEffect(() => {\n onPlayerVisibilityChange?.(playerVisible);\n\n return () => {\n onPlayerVisibilityChange?.(false);\n };\n }, [onPlayerVisibilityChange, playerVisible]);\n\n useEffect(() => {\n if (isMobileDevice || mobileViewMode === DEFAULT_MOBILE_VIEW_MODE) {\n return;\n }\n\n setHasManualMobileViewMode(false);\n setMobileViewMode(DEFAULT_MOBILE_VIEW_MODE);\n }, [isMobileDevice, mobileViewMode]);\n\n useEffect(() => {\n if (!isMobileDevice) {\n setIsViewportFullscreenPreferred(false);\n return;\n }\n\n const syncViewportFullscreenPreference = () => {\n setIsViewportFullscreenPreferred(getIsFullscreenPreferredViewport());\n };\n\n syncViewportFullscreenPreference();\n\n return subscribeMobileDeviceChange(syncViewportFullscreenPreference);\n }, [isMobileDevice]);\n\n useEffect(() => {\n onMobileViewModeChange?.(effectiveMobileViewMode);\n }, [effectiveMobileViewMode, onMobileViewModeChange]);\n\n useEffect(() => {\n const previousMode = previousEffectiveMobileViewModeRef.current;\n const hasEnteredFullscreen =\n previousMode !== \"fullscreen\" && effectiveMobileViewMode === \"fullscreen\";\n const shouldShowFullscreenHint =\n hasEnteredFullscreen && !isViewportFullscreenPreferred;\n\n previousEffectiveMobileViewModeRef.current = effectiveMobileViewMode;\n\n if (!isMobileDevice) {\n setIsFullscreenHintOpen(false);\n return;\n }\n\n if (shouldShowFullscreenHint) {\n setIsFullscreenHintOpen(true);\n return;\n }\n\n if (effectiveMobileViewMode !== \"fullscreen\") {\n setIsFullscreenHintOpen(false);\n }\n }, [effectiveMobileViewMode, isMobileDevice, isViewportFullscreenPreferred]);\n\n useEffect(() => {\n onStepChange?.(currentStepElement, currentIndex);\n }, [currentIndex, currentStepElement, onStepChange]);\n\n useEffect(() => {\n const previousState = appendedMarkerAdvanceStateRef.current;\n const shouldAdvanceIntoAppendedMarker = shouldAutoAdvanceIntoAppendedMarker(\n {\n previousMarkerCount: previousState.markerCount,\n nextMarkerCount: slideElementList.length,\n previousIndex: previousState.currentIndex,\n previousCanGoNext: previousState.canGoNext,\n nextCanGoNext: canGoNext,\n currentAudioKey,\n hasCompletedCurrentStepAudio,\n hasResolvedCurrentInteraction,\n currentStepHasSpeakableElement,\n currentInteractionElement,\n isAutoAdvanceEnabled,\n shouldUseSilentStepAutoAdvanceToggle,\n }\n );\n\n appendedMarkerAdvanceStateRef.current = {\n markerCount: slideElementList.length,\n currentIndex,\n canGoNext,\n };\n\n if (!shouldAdvanceIntoAppendedMarker) {\n return;\n }\n\n goNext();\n }, [\n canGoNext,\n currentAudioKey,\n currentIndex,\n currentInteractionElement,\n currentStepHasSpeakableElement,\n goNext,\n hasCompletedCurrentStepAudio,\n hasResolvedCurrentInteraction,\n isAutoAdvanceEnabled,\n shouldUseSilentStepAutoAdvanceToggle,\n slideElementList.length,\n ]);\n\n useEffect(() => {\n if (!shouldRenderPlayer) {\n clearPlayerHideTimer();\n setIsPlayerVisible(false);\n return;\n }\n\n if (playerAlwaysVisible) {\n clearPlayerHideTimer();\n setIsPlayerVisible(true);\n return;\n }\n\n if (!hasPlayerInteracted) {\n // Keep the initial player visible briefly, then hide it automatically.\n showPlayerControls(true);\n }\n }, [\n clearPlayerHideTimer,\n hasPlayerInteracted,\n playerAlwaysVisible,\n shouldRenderPlayer,\n showPlayerControls,\n ]);\n\n useEffect(() => {\n if (typeof window === \"undefined\") {\n return;\n }\n\n const handleSandboxInteraction = (event: MessageEvent) => {\n if (event.origin !== window.location.origin) {\n return;\n }\n\n if (!isSandboxInteractionMessage(event.data)) {\n return;\n }\n\n if (event.data.eventType !== \"click\") {\n return;\n }\n\n if (!shouldRenderPlayer) {\n return;\n }\n\n // Restore player controls on explicit click/tap without waking on scroll start.\n setHasPlayerInteracted(true);\n showPlayerControls(true);\n };\n\n window.addEventListener(\"message\", handleSandboxInteraction);\n\n return () => {\n window.removeEventListener(\"message\", handleSandboxInteraction);\n };\n }, [shouldRenderPlayer, showPlayerControls]);\n\n useWakePlayerFromIframe({\n sectionRef,\n enabled: shouldRenderPlayer,\n onWake: () => {\n setHasPlayerInteracted(true);\n showPlayerControls(true);\n },\n });\n\n useEffect(() => {\n const { hasPlaybackContextChanged, shouldInitializeAudioSequence } =\n getPlaybackSequenceTransition({\n previousResetKey: playbackResetKeyRef.current,\n nextResetKey: currentPlaybackResetKey,\n currentAudioKey,\n hasCompletedCurrentStepAudio,\n });\n\n playbackResetKeyRef.current = currentPlaybackResetKey;\n\n const shouldOpenInteractionOverlayAfterAudio =\n pendingInteractionOverlayStepIndexRef.current === currentIndex &&\n Boolean(currentInteractionElement);\n const shouldPresentOverlay = shouldPresentInteractionOverlay({\n hasInteraction: Boolean(currentInteractionElement),\n shouldBlockPlaybackForInteraction,\n shouldOpenInteractionOverlayAfterAudio,\n hasPlaybackContextChanged,\n hasResolvedCurrentInteraction,\n currentStepHasSpeakableElement,\n });\n\n if (hasPlaybackContextChanged) {\n resetAudioSequence();\n }\n\n if (currentElementList.length === 0 && !currentInteractionElement) {\n return;\n }\n\n if (shouldPausePlaybackForCustomAction) {\n return;\n }\n\n if (currentInteractionElement) {\n setActiveInteractionElement(currentInteractionElement);\n }\n\n if (shouldPresentOverlay) {\n // Delay auto-presenting the overlay so subtitles can settle above it.\n scheduleInteractionOverlayOpen(currentInteractionElement);\n return;\n }\n\n clearInteractionOverlayOpenTimer();\n pendingInteractionOverlayStepIndexRef.current = null;\n\n if (!shouldInitializeAudioSequence) {\n return;\n }\n\n if (startCurrentAudioSequence()) {\n return;\n }\n\n if (currentStepHasSpeakableElement) {\n setIsAudioLoadingVisible(true);\n return;\n }\n\n if (!canGoNext) {\n return;\n }\n\n if (shouldUseSilentStepAutoAdvanceToggle && !isAutoAdvanceEnabled) {\n return;\n }\n\n // Auto-advance silent marker-only steps so playback flow does not stall.\n autoAdvanceTimerRef.current = window.setTimeout(() => {\n autoAdvanceTimerRef.current = null;\n goNext();\n }, markerAutoAdvanceDelay);\n\n return () => {\n clearAutoAdvanceTimer();\n };\n }, [\n canGoNext,\n clearAutoAdvanceTimer,\n currentElementList.length,\n currentInteractionElement,\n currentAudioKey,\n currentPlaybackResetKey,\n currentStepHasSpeakableElement,\n markerAutoAdvanceDelay,\n goNext,\n hasCompletedCurrentStepAudio,\n isAutoAdvanceEnabled,\n hasResolvedCurrentInteraction,\n shouldBlockPlaybackForInteraction,\n clearInteractionOverlayOpenTimer,\n resetAudioSequence,\n scheduleInteractionOverlayOpen,\n startCurrentAudioSequence,\n shouldPausePlaybackForCustomAction,\n shouldUseSilentStepAutoAdvanceToggle,\n ]);\n\n useEffect(() => {\n if (\n shouldPausePlaybackForCustomAction ||\n !currentStepHasSpeakableElement ||\n shouldBlockPlaybackForInteraction\n ) {\n setIsAudioLoadingVisible(false);\n return;\n }\n\n if (hasCompletedCurrentStepAudio) {\n setIsAudioLoadingVisible(false);\n return;\n }\n\n if (hasAvailableStepAudio) {\n setIsAudioLoadingVisible(false);\n return;\n }\n\n setIsAudioLoadingVisible(true);\n }, [\n hasAvailableStepAudio,\n currentStepHasSpeakableElement,\n hasCompletedCurrentStepAudio,\n shouldPausePlaybackForCustomAction,\n shouldBlockPlaybackForInteraction,\n ]);\n\n useEffect(() => {\n if (currentAudioKey || currentAudioSequenceKeys.length === 0) {\n return;\n }\n\n if (\n shouldPausePlaybackForCustomAction ||\n !currentStepHasSpeakableElement ||\n shouldBlockPlaybackForInteraction\n ) {\n return;\n }\n\n if (hasCompletedCurrentStepAudio) {\n return;\n }\n\n startCurrentAudioSequence();\n }, [\n currentAudioKey,\n currentAudioSequenceKeys,\n currentStepHasSpeakableElement,\n hasCompletedCurrentStepAudio,\n shouldPausePlaybackForCustomAction,\n shouldBlockPlaybackForInteraction,\n startCurrentAudioSequence,\n ]);\n\n useEffect(() => {\n if (!currentAudioKey || currentAudioIndex >= 0) {\n return;\n }\n\n setCurrentAudioKey(null);\n }, [currentAudioIndex, currentAudioKey]);\n\n useEffect(() => {\n if (currentAudioIndex >= 0) {\n return;\n }\n\n playbackTimeStore.reset();\n }, [currentAudioIndex, playbackTimeStore]);\n\n useEffect(() => {\n setHasCurrentAudioPlaybackStarted(false);\n }, [currentPlaybackStartedResetKey]);\n\n const interactionDefaults = useMemo(() => {\n if (!activeInteractionElement) {\n return {};\n }\n\n const shouldPreferResolvedInteractionInput = Boolean(\n activeInteractionElement.user_input?.trim()\n );\n\n return getInteractionDefaultValues(\n typeof activeInteractionElement.content === \"string\"\n ? activeInteractionElement.content\n : undefined,\n activeInteractionElement.user_input,\n shouldPreferResolvedInteractionInput\n ? undefined\n : interactionDefaultValueOptions\n );\n }, [activeInteractionElement, interactionDefaultValueOptions]);\n\n const interactionDefaultSelectedValues = useMemo(() => {\n if (!activeInteractionElement) {\n return undefined;\n }\n\n const shouldPreferResolvedInteractionInput = Boolean(\n activeInteractionElement.user_input?.trim()\n );\n\n return getInteractionDefaultSelectedValues(\n typeof activeInteractionElement.content === \"string\"\n ? activeInteractionElement.content\n : undefined,\n activeInteractionElement.user_input,\n shouldPreferResolvedInteractionInput\n ? undefined\n : interactionDefaultValueOptions\n );\n }, [activeInteractionElement, interactionDefaultValueOptions]);\n\n const hasResolvedInteractionInput = Boolean(\n activeInteractionElement?.user_input?.trim()\n );\n\n const isInteractionReadonly =\n Boolean(activeInteractionElement?.readonly) || hasResolvedInteractionInput;\n const shouldAutoContinueInteraction =\n isInteractionReadonly || hasResolvedInteractionInput;\n const shouldShowInteractionOverlay =\n Boolean(activeInteractionElement) && isInteractionOverlayOpen;\n\n const handleInteractionSend = useCallback(\n (content: OnSendContentParams) => {\n const submittedValues = [\n ...(content.selectedValues ?? []),\n content.inputText?.trim() ?? \"\",\n content.buttonText?.trim() ?? \"\",\n ].filter(Boolean);\n const resolvedUserInput = submittedValues.join(\", \");\n\n setActiveInteractionElement((prevElement) => {\n if (!prevElement || !resolvedUserInput) {\n return prevElement;\n }\n\n return {\n ...prevElement,\n user_input: resolvedUserInput,\n };\n });\n\n onSend?.(content, activeInteractionElement);\n continueAfterInteraction();\n },\n [activeInteractionElement, continueAfterInteraction, onSend]\n );\n\n useEffect(() => {\n // Keep the player icon in sync with the actual fullscreen owner.\n const syncFullscreenState = () => {\n setIsBrowserFullscreen(document.fullscreenElement === sectionRef.current);\n };\n\n syncFullscreenState();\n document.addEventListener(\"fullscreenchange\", syncFullscreenState);\n\n return () => {\n document.removeEventListener(\"fullscreenchange\", syncFullscreenState);\n };\n }, []);\n\n useEffect(() => {\n if (!shouldShowInteractionOverlay) {\n setInteractionOverlaySubtitleOffset(0);\n return;\n }\n\n const interactionOverlayElement = interactionOverlayRef.current;\n\n if (!interactionOverlayElement) {\n return;\n }\n\n const updateSubtitleOffset = () => {\n const overlayHeight = Math.ceil(\n interactionOverlayElement.getBoundingClientRect().height\n );\n\n setInteractionOverlaySubtitleOffset(\n overlayHeight + DEFAULT_INTERACTION_SUBTITLE_GAP_PX\n );\n };\n\n updateSubtitleOffset();\n\n if (typeof ResizeObserver === \"undefined\") {\n return;\n }\n\n const resizeObserver = new ResizeObserver(() => {\n updateSubtitleOffset();\n });\n\n resizeObserver.observe(interactionOverlayElement);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [shouldShowInteractionOverlay]);\n\n useEffect(() => {\n clearInteractionAutoCloseTimer();\n\n if (!isInteractionOverlayOpen || !shouldAutoContinueInteraction) {\n return;\n }\n\n // Auto-close passive interaction markers to keep playback moving.\n interactionAutoCloseTimerRef.current = window.setTimeout(() => {\n interactionAutoCloseTimerRef.current = null;\n\n continueAfterInteraction();\n }, 2000);\n\n return () => {\n clearInteractionAutoCloseTimer();\n };\n }, [\n clearInteractionAutoCloseTimer,\n continueAfterInteraction,\n isInteractionOverlayOpen,\n shouldAutoContinueInteraction,\n ]);\n\n const renderSlideElement = (\n element?: Element,\n options: RenderSlideElementOptions = {}\n ) => {\n if (!element) {\n return null;\n }\n\n if (element.type === \"slot\") {\n return <>{element.content}</>;\n }\n\n if (element.type === \"html\") {\n return (\n <IframeSandbox\n className=\"content-render-iframe\"\n hideFullScreen\n mode=\"blackboard\"\n replaceRootScreenHeightWithFull={\n options.replaceRootScreenHeightWithFull\n }\n type=\"sandbox\"\n content={element.content as string}\n enableScaling={enableIframeScaling}\n />\n );\n }\n\n return (\n <IframeSandbox\n className=\"content-render-iframe\"\n hideFullScreen\n mode=\"blackboard\"\n type=\"markdown\"\n content={element.content as string}\n />\n );\n };\n\n const renderSlideElementList = (\n elementList: Element[] = [],\n isActiveStep = false\n ) => {\n if (elementList.length === 0) {\n return null;\n }\n\n const visibleElementCount = elementList.filter(\n (element) => element.is_renderable !== false\n ).length;\n const lastVisibleElementIndex = elementList.reduce(\n (lastVisibleIndex, element, index) =>\n element.is_renderable !== false ? index : lastVisibleIndex,\n -1\n );\n\n return (\n <div className=\"slide-stage__content flex w-full flex-col gap-4\">\n {elementList.map((element, index) => {\n const isPreRenderedHtml =\n element.type === \"html\" && element.is_renderable === false;\n\n return (\n <div\n key={element.sequence_number ?? `${element.type}-${index}`}\n ref={\n isActiveStep && index === lastVisibleElementIndex\n ? lastElementRef\n : null\n }\n aria-hidden={isPreRenderedHtml || undefined}\n className={cn(\n \"w-full shrink-0\",\n visibleElementCount === 1 &&\n element.is_renderable !== false &&\n \"slide-element--single\",\n isPreRenderedHtml\n ? \"pointer-events-none fixed left-[-200vw] top-0 -z-10 h-[100dvh] w-[100vw] overflow-hidden opacity-0\"\n : element.is_renderable === false && \"hidden\"\n )}\n >\n {renderSlideElement(element, {\n replaceRootScreenHeightWithFull:\n visibleElementCount === 1 &&\n element.type === \"html\" &&\n element.is_renderable !== false,\n })}\n </div>\n );\n })}\n </div>\n );\n };\n\n const handleFullscreen = useCallback(() => {\n const target = sectionRef.current;\n if (!target) {\n return;\n }\n\n if (document.fullscreenElement === target) {\n document.exitFullscreen().catch(() => {});\n return;\n }\n\n target.requestFullscreen?.().catch(() => {});\n }, []);\n\n const scrollStageToBottom = useCallback(() => {\n const stageLayerElement = stageLayerRef.current;\n\n if (!stageLayerElement) {\n return;\n }\n\n // Keep the latest content visible after manual player navigation.\n stageLayerElement.scrollTo({\n top: stageLayerElement.scrollHeight,\n behavior: \"smooth\",\n });\n }, []);\n\n const handlePrev = useCallback(() => {\n shouldScrollToBottomRef.current = true;\n pendingInteractionOverlayStepIndexRef.current = null;\n setHasPlayerInteracted(true);\n setIsAudioLoadingVisible(false);\n showPlayerControls(true);\n resetAudioSequence();\n goPrev();\n }, [goPrev, resetAudioSequence, showPlayerControls]);\n\n const handleNext = useCallback(() => {\n shouldScrollToBottomRef.current = true;\n pendingInteractionOverlayStepIndexRef.current = null;\n setHasPlayerInteracted(true);\n setIsAudioLoadingVisible(false);\n showPlayerControls(true);\n resetAudioSequence();\n goNext();\n }, [goNext, resetAudioSequence, showPlayerControls]);\n\n const handlePlayerLoadingChange = useCallback(\n (loading: boolean) => {\n if (!currentStepHasSpeakableElement || hasCompletedCurrentStepAudio) {\n setIsAudioLoadingVisible(false);\n return;\n }\n\n setIsAudioLoadingVisible(loading);\n },\n [currentStepHasSpeakableElement, hasCompletedCurrentStepAudio]\n );\n\n const handlePlayerEnded = useCallback(\n (audioIndex: number) => {\n const endedAudioKey = audioList[audioIndex]?.audioKey;\n\n if (!endedAudioKey || !currentAudioKey) {\n return;\n }\n\n if (endedAudioKey !== currentAudioKey) {\n return;\n }\n\n const activeSequencePosition = currentAudioSequenceKeys.findIndex(\n (audioSequenceKey) => audioSequenceKey === endedAudioKey\n );\n if (activeSequencePosition < 0) {\n setCurrentAudioKey(null);\n return;\n }\n\n const nextSequencePosition = activeSequencePosition + 1;\n const nextAudioKey = currentAudioSequenceKeys[nextSequencePosition];\n\n if (nextAudioKey) {\n setCurrentAudioKey(nextAudioKey);\n return;\n }\n\n setCurrentAudioKey(null);\n setHasCompletedCurrentStepAudio(true);\n setIsAudioLoadingVisible(false);\n\n if (canGoNext) {\n const nextStepIndex = currentIndex + 1;\n const nextStepElement = slideElementList[nextStepIndex];\n\n if (hasCurrentStepAudioUrl && nextStepElement?.type === \"interaction\") {\n pendingInteractionOverlayStepIndexRef.current = nextStepIndex;\n }\n\n goNext();\n }\n },\n [\n audioList,\n canGoNext,\n currentIndex,\n currentAudioKey,\n currentAudioSequenceKeys,\n goNext,\n hasCurrentStepAudioUrl,\n slideElementList,\n ]\n );\n\n const handleInteractionToggle = useCallback(() => {\n if (!activeInteractionElement) {\n return;\n }\n\n setIsInteractionOverlayOpen((prevOpen) => !prevOpen);\n }, [activeInteractionElement]);\n\n const stopOverlayPropagation = useCallback(\n (\n event:\n | React.PointerEvent<HTMLDivElement>\n | React.MouseEvent<HTMLDivElement>\n ) => {\n event.stopPropagation();\n\n // Keep the player visible a bit longer when users interact with the overlay.\n if (playerVisible) {\n showPlayerControls(true);\n }\n },\n [isPlayerVisible, showPlayerControls]\n );\n\n const handleSurfacePointerDown = useCallback(\n (event: React.PointerEvent<HTMLElement>) => {\n onPointerDown?.(event);\n },\n [onPointerDown]\n );\n\n const handleSurfaceClick = useCallback(() => {\n setHasPlayerInteracted(true);\n showPlayerControls(true);\n }, [showPlayerControls]);\n\n const currentRenderElementKeys = useMemo(\n () =>\n currentElementList.map(\n (element, index) =>\n `${element.sequence_number ?? `${element.type}-${index}`}:${String(element.is_new ?? \"\")}`\n ),\n [currentElementList]\n );\n\n useEffect(() => {\n const prevKeys = prevRenderElementKeysRef.current;\n const hasStablePrefix =\n prevKeys.length > 0 &&\n prevKeys.length < currentRenderElementKeys.length &&\n prevKeys.every((key, index) => key === currentRenderElementKeys[index]);\n const appendedElements = hasStablePrefix\n ? currentElementList.slice(prevKeys.length)\n : [];\n const shouldAutoScrollToAppend = appendedElements.some(\n (element) => element.is_new === false\n );\n\n prevRenderElementKeysRef.current = currentRenderElementKeys;\n\n if (!shouldAutoScrollToAppend) {\n return;\n }\n\n const animationFrameId = window.requestAnimationFrame(() => {\n const stageLayerElement = stageLayerRef.current;\n const targetElement = lastElementRef.current;\n\n if (!stageLayerElement || !targetElement) {\n return;\n }\n\n const stageLayerRect = stageLayerElement.getBoundingClientRect();\n const targetRect = targetElement.getBoundingClientRect();\n const nextScrollTop =\n stageLayerElement.scrollTop + (targetRect.top - stageLayerRect.top);\n\n // Keep newly appended content visible when the current slide grows downward.\n stageLayerElement.scrollTo({\n top: Math.max(nextScrollTop, 0),\n behavior: \"smooth\",\n });\n });\n\n return () => {\n window.cancelAnimationFrame(animationFrameId);\n };\n }, [currentElementList, currentRenderElementKeys]);\n\n useEffect(() => {\n if (!shouldScrollToBottomRef.current) {\n return;\n }\n\n shouldScrollToBottomRef.current = false;\n\n if (currentElementList.length === 0) {\n return;\n }\n\n const animationFrameId = window.requestAnimationFrame(() => {\n scrollStageToBottom();\n });\n\n return () => {\n window.cancelAnimationFrame(animationFrameId);\n };\n }, [currentElementList, scrollStageToBottom]);\n\n return (\n <section\n ref={sectionRef}\n className={cn(\n \"relative h-full w-full\",\n isMobileDevice && \"slide--mobile-device\",\n isImmersiveMobileFullscreen && \"slide--mobile-landscape\",\n isNativeMobileFullscreen && \"slide--mobile-landscape-native\",\n className\n )}\n onClick={handleSurfaceClick}\n onPointerDown={handleSurfacePointerDown}\n {...props}\n >\n {shouldShowMobileFullscreenMask ? (\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none fixed left-0 top-0 z-[9999] h-[100vh] max-h-[100vh] w-[100vw]\"\n />\n ) : null}\n\n <div\n ref={viewportRef}\n className={cn(\n \"slide__viewport relative h-full min-h-0 w-full\",\n isImmersiveMobileFullscreen && \"slide__viewport--mobile-landscape\",\n isImmersiveMobileFullscreen &&\n !shouldRotateFullscreenViewport &&\n \"slide__viewport--mobile-landscape-native\"\n )}\n >\n {shouldShowFullscreenHeader ? (\n <div className=\"slide-landscape-header\">\n <button\n aria-label={fullscreenHeader?.backAriaLabel ?? \"Back\"}\n className=\"slide-landscape-header__back\"\n onClick={handleFullscreenHeaderBack}\n type=\"button\"\n >\n <ChevronLeft className=\"h-6 w-6 text-white\" strokeWidth={2.25} />\n </button>\n\n {fullscreenHeader?.content ? (\n <div className=\"min-w-0 flex-1 overflow-hidden\">\n {fullscreenHeader.content}\n </div>\n ) : null}\n </div>\n ) : null}\n\n <div\n className={cn(\n \"h-full min-h-0 w-full\",\n shouldApplyFullscreenViewportPadding &&\n \"slide__viewport-content--with-header\",\n isSingleSlide ? \"slide-content--single\" : \"grid gap-4\"\n )}\n >\n {currentElementList.length > 0 ? (\n <div className=\"slide-stage\">\n <div ref={stageLayerRef} className=\"slide-stage__layer w-full\">\n {mountedStepStates.map(\n (mountedStepState, mountedStepStateIndex) => {\n const isActiveStep =\n mountedStepStateIndex === currentMountedStateIndex;\n\n return (\n <div\n key={\n mountedStepState.sourceStepIndexes[0] ??\n mountedStepStateIndex\n }\n aria-hidden={!isActiveStep || undefined}\n className=\"w-full h-full\"\n style={{ display: isActiveStep ? undefined : \"none\" }}\n >\n {renderSlideElementList(\n mountedStepState.elementList,\n isActiveStep\n )}\n </div>\n );\n }\n )}\n </div>\n </div>\n ) : null}\n </div>\n\n {isAudioLoadingVisible ? (\n <LoadingOverlayCard\n message={bufferingText}\n className=\"absolute left-1/2 top-1/2 z-[3] -translate-x-1/2 -translate-y-1/2\"\n />\n ) : null}\n\n <SlideFullscreenHint\n onClose={handleFullscreenHintClose}\n open={isFullscreenHintOpen}\n text={fullscreenHintText}\n />\n\n <SubtitleOverlay\n extraBottomOffset={interactionOverlaySubtitleOffset}\n hasPlayerGap={playerVisible}\n isEnabled={isSubtitleEnabled && hasCurrentAudioPlaybackStarted}\n isPlayerHidden={shouldRenderPlayer && !playerVisible}\n playbackTimeStore={playbackTimeStore}\n subtitleCues={currentSubtitleCues}\n />\n\n {shouldShowInteractionOverlay ? (\n <div\n ref={interactionOverlayRef}\n className={cn(\n \"slide-interaction-overlay\",\n playerVisible && shouldRenderPlayer\n ? \"slide-interaction-overlay--with-player\"\n : \"slide-interaction-overlay--standalone\"\n )}\n onClick={stopOverlayPropagation}\n onPointerDown={stopOverlayPropagation}\n style={interactionOverlayStyle}\n >\n <InteractionOverlayCard\n content={String(activeInteractionElement?.content ?? \"\")}\n defaultButtonText={interactionDefaults.buttonText ?? \"\"}\n defaultInputText={interactionDefaults.inputText ?? \"\"}\n defaultSelectedValues={interactionDefaultSelectedValues}\n confirmButtonText={interactionTexts?.confirmButtonText}\n copyButtonText={interactionTexts?.copyButtonText}\n copiedButtonText={interactionTexts?.copiedButtonText}\n onSend={handleInteractionSend}\n readonly={isInteractionReadonly}\n title={\n interactionTexts?.title ??\n interactionTitle ??\n \"Submit the content below to continue.\"\n }\n />\n </div>\n ) : null}\n\n {shouldRenderPlayer ? (\n <Player\n audioList={audioList}\n className={cn(\n \"absolute left-1/2 bottom-6 z-[2] -translate-x-1/2\",\n playerClassName,\n !playerVisible && \"pointer-events-none opacity-0\"\n )}\n currentAudioIndex={currentAudioIndex}\n defaultPlaying\n isPlaybackPaused={shouldPausePlaybackForCustomAction}\n isAutoAdvanceEnabled={isAutoAdvanceEnabled}\n hasInteraction={Boolean(activeInteractionElement)}\n isInteractionOpen={isInteractionOverlayOpen}\n isSubtitleEnabled={isSubtitleEnabled}\n onAutoAdvanceToggle={setIsAutoAdvanceEnabled}\n onLoadingChange={handlePlayerLoadingChange}\n onPlaybackStarted={() => {\n setHasCurrentAudioPlaybackStarted(true);\n }}\n onPlaybackTimeChange={playbackTimeStore.setTime}\n onSubtitleToggle={() => {\n setIsSubtitleEnabled((previousEnabled) => !previousEnabled);\n }}\n nextDisabled={!canGoNext}\n onEnded={handlePlayerEnded}\n onFullscreen={handleFullscreen}\n isFullscreen={isBrowserFullscreen}\n mobileViewMode={effectiveMobileViewMode}\n settingsPortalContainer={viewportRef.current}\n onMobileViewModeChange={handleMobileViewModeSelect}\n onInteractionToggle={handleInteractionToggle}\n onNext={handleNext}\n onPrev={handlePrev}\n prevDisabled={!canGoPrev}\n showControls={playerVisible}\n texts={playerTexts}\n customActionContext={playerCustomActionContext}\n customActions={playerCustomActions}\n useAutoAdvanceToggle={shouldUseSilentStepAutoAdvanceToggle}\n />\n ) : null}\n </div>\n </section>\n );\n};\n\nexport default Slide;\n"],"names":["DEFAULT_MARKER_AUTO_ADVANCE_DELAY_MS","DEFAULT_INTERACTION_OVERLAY_OPEN_DELAY_MS","DEFAULT_INTERACTION_OVERLAY_FALLBACK_OFFSET_PX","DEFAULT_INTERACTION_SUBTITLE_GAP_PX","InteractionOverlayCard","memo","content","title","defaultButtonText","defaultInputText","defaultSelectedValues","confirmButtonText","copyButtonText","copiedButtonText","onSend","readonly","jsxs","jsx","ContentRender","areStepElementListsEqual","prevElementList","nextElementList","element","index","nextElement","Slide","elementList","showPlayer","playerAlwaysVisible","playerClassName","fullscreenHeader","playerCustomActions","playerCustomActionPauseOnActive","bufferingText","interactionTitle","interactionTexts","playerTexts","playerAutoHideDelay","markerAutoAdvanceDelay","interactionDefaultValueOptions","onPlayerVisibilityChange","onMobileViewModeChange","onStepChange","enableIframeScaling","className","onPointerDown","props","sectionRef","useRef","viewportRef","stageLayerRef","lastElementRef","playerHideTimerRef","autoAdvanceTimerRef","interactionAutoCloseTimerRef","interactionOverlayOpenTimerRef","interactionOverlayRef","prevRenderElementKeysRef","shouldScrollToBottomRef","pendingInteractionOverlayStepIndexRef","playbackResetKeyRef","appendedMarkerAdvanceStateRef","currentElementList","stepElementLists","slideElementList","currentIndex","audioList","currentAudioSequenceIndexes","currentStepHasSpeakableElement","currentInteractionElement","canGoPrev","canGoNext","goPrev","goNext","useSlide","currentStepElement","useMemo","isSingleSlide","shouldRenderPlayer","currentAudioSequenceKeys","audioIndex","audioKey","isPlayerVisible","setIsPlayerVisible","useState","hasPlayerInteracted","setHasPlayerInteracted","isAutoAdvanceEnabled","setIsAutoAdvanceEnabled","currentAudioKey","setCurrentAudioKey","isAudioLoadingVisible","setIsAudioLoadingVisible","hasCompletedCurrentStepAudio","setHasCompletedCurrentStepAudio","hasCurrentAudioPlaybackStarted","setHasCurrentAudioPlaybackStarted","isSubtitleEnabled","setIsSubtitleEnabled","isPlayerCustomActionActive","setIsPlayerCustomActionActive","activeInteractionElement","setActiveInteractionElement","isInteractionOverlayOpen","setIsInteractionOverlayOpen","interactionOverlaySubtitleOffset","setInteractionOverlaySubtitleOffset","isBrowserFullscreen","setIsBrowserFullscreen","isMobileDevice","getIsMobileDevice","mobileViewMode","setMobileViewMode","DEFAULT_MOBILE_VIEW_MODE","hasManualMobileViewMode","setHasManualMobileViewMode","isViewportFullscreenPreferred","setIsViewportFullscreenPreferred","getIsFullscreenPreferredViewport","isFullscreenHintOpen","setIsFullscreenHintOpen","playbackTimeStore","createPlaybackTimeStore","effectiveMobileViewMode","isImmersiveMobileFullscreen","isNativeMobileFullscreen","shouldRotateFullscreenViewport","resolveMobileViewModeState","previousEffectiveMobileViewModeRef","playerVisible","shouldShowFullscreenHeader","shouldApplyFullscreenViewportPadding","shouldShowMobileFullscreenMask","fullscreenHintText","DEFAULT_SLIDE_PLAYER_TEXTS","handleMobileViewModeSelect","useCallback","nextViewMode","handleMobileViewModeReset","handleFullscreenHeaderBack","handleFullscreenHintClose","setPlayerCustomActionActive","active","togglePlayerCustomActionActive","previous","mountedStepStates","currentMountedStateIndex","nextMountedStepStates","mountedStateIndexByStep","stepElementList","stepIndex","existingMountedStateIndex","mountedStepState","currentStepKey","currentAudioIndex","audioItem","currentAudioItem","currentSubtitleCues","currentAudioSequenceStartKey","playerCustomActionContext","resolvePlayerCustomActionElement","playerCustomActionCount","getPlayerCustomActionCount","interactionOverlayStyle","hasAvailableStepAudio","currentInteractionResetKey","currentPlaybackResetKey","currentPlaybackStartedResetKey","hasCurrentStepAudioUrl","shouldPausePlaybackForCustomAction","shouldUseSilentStepAutoAdvanceToggle","shouldUseAutoAdvanceToggle","clearPlayerHideTimer","clearInteractionAutoCloseTimer","clearInteractionOverlayOpenTimer","clearAutoAdvanceTimer","resetAudioSequence","startCurrentAudioSequence","nextAudioKey","continueAfterInteraction","scheduleInteractionOverlayOpen","interactionElement","openOverlay","showPlayerControls","enableAutoHide","hasResolvedCurrentInteraction","shouldBlockPlaybackForInteraction","useEffect","syncViewportFullscreenPreference","subscribeMobileDeviceChange","shouldShowFullscreenHint","previousState","shouldAdvanceIntoAppendedMarker","shouldAutoAdvanceIntoAppendedMarker","handleSandboxInteraction","event","isSandboxInteractionMessage","useWakePlayerFromIframe","hasPlaybackContextChanged","shouldInitializeAudioSequence","getPlaybackSequenceTransition","shouldOpenInteractionOverlayAfterAudio","shouldPresentOverlay","shouldPresentInteractionOverlay","interactionDefaults","shouldPreferResolvedInteractionInput","getInteractionDefaultValues","interactionDefaultSelectedValues","getInteractionDefaultSelectedValues","hasResolvedInteractionInput","isInteractionReadonly","shouldAutoContinueInteraction","shouldShowInteractionOverlay","handleInteractionSend","resolvedUserInput","prevElement","syncFullscreenState","interactionOverlayElement","updateSubtitleOffset","overlayHeight","resizeObserver","renderSlideElement","options","Fragment","IframeSandbox","renderSlideElementList","isActiveStep","visibleElementCount","lastVisibleElementIndex","lastVisibleIndex","isPreRenderedHtml","cn","handleFullscreen","target","scrollStageToBottom","stageLayerElement","handlePrev","handleNext","handlePlayerLoadingChange","loading","handlePlayerEnded","endedAudioKey","activeSequencePosition","audioSequenceKey","nextSequencePosition","nextStepIndex","nextStepElement","handleInteractionToggle","prevOpen","stopOverlayPropagation","handleSurfacePointerDown","handleSurfaceClick","currentRenderElementKeys","prevKeys","shouldAutoScrollToAppend","key","animationFrameId","targetElement","stageLayerRect","targetRect","nextScrollTop","ChevronLeft","mountedStepStateIndex","LoadingOverlayCard","SlideFullscreenHint","SubtitleOverlay","Player","previousEnabled"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Slide.es.js","sources":["../../../src/components/Slide/Slide.tsx"],"sourcesContent":["import React, {\n memo,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { ChevronLeft } from \"lucide-react\";\n\nimport { isSandboxInteractionMessage } from \"../../lib/sandboxInteraction\";\nimport { cn } from \"../../lib/utils\";\nimport LoadingOverlayCard from \"../ui/loading-overlay-card\";\nimport ContentRender from \"../ContentRender\";\nimport type { ContentRenderProps } from \"../ContentRender/ContentRender\";\nimport IframeSandbox from \"../ContentRender/IframeSandbox\";\nimport type { OnSendContentParams } from \"../types\";\nimport {\n getInteractionDefaultSelectedValues,\n getInteractionDefaultValues,\n type InteractionDefaultValueOptions,\n} from \"../../lib/interaction-defaults\";\nimport {\n isLandscapeViewport as getIsFullscreenPreferredViewport,\n isMobileDevice as getIsMobileDevice,\n subscribeMobileDeviceChange,\n} from \"../../lib/mobileDevice\";\nimport Player from \"./Player\";\nimport SubtitleOverlay from \"./SubtitleOverlay\";\nimport type { PlayerProps, SlidePlayerTexts } from \"./Player\";\nimport { DEFAULT_SLIDE_PLAYER_TEXTS } from \"./constants\";\nimport SlideFullscreenHint from \"./SlideFullscreenHint\";\nimport type { Element } from \"./types\";\nimport useSlide from \"./useSlide\";\nimport useWakePlayerFromIframe from \"./useWakePlayerFromIframe\";\nimport {\n DEFAULT_MOBILE_VIEW_MODE,\n resolveMobileViewModeState,\n type MobileViewMode,\n} from \"./utils/mobileScreenMode\";\nimport { shouldPresentInteractionOverlay } from \"./utils/interactionPlayback\";\nimport { shouldAutoAdvanceIntoAppendedMarker } from \"./utils/appendedMarkerAdvance\";\nimport { getPlaybackSequenceTransition } from \"./utils/playbackSequence\";\nimport {\n getPlayerCustomActionCount,\n resolvePlayerCustomActionElement,\n} from \"./utils/playerCustomActions\";\nimport { createPlaybackTimeStore } from \"./utils/playbackTimeStore\";\nimport { shouldUseAutoAdvanceToggle } from \"./utils/playerToggleMode\";\nimport \"./slide.css\";\nexport type {\n Element,\n ElementAudioSegment,\n ElementSubtitleCue,\n SlidePlayerCustomActionContext,\n SlidePlayerCustomActions,\n} from \"./types\";\n\nconst DEFAULT_MARKER_AUTO_ADVANCE_DELAY_MS = 2000;\nconst DEFAULT_INTERACTION_OVERLAY_OPEN_DELAY_MS = 300;\nconst DEFAULT_INTERACTION_OVERLAY_FALLBACK_OFFSET_PX = 160;\nconst DEFAULT_INTERACTION_SUBTITLE_GAP_PX = 16;\n\ntype RenderSlideElementOptions = {\n replaceRootScreenHeightWithFull?: boolean;\n};\n\ninterface InteractionOverlayCardProps {\n content: string;\n title: string;\n defaultButtonText?: string;\n defaultInputText?: string;\n defaultSelectedValues?: string[];\n confirmButtonText?: string;\n copyButtonText?: string;\n copiedButtonText?: string;\n onSend?: (content: OnSendContentParams) => void;\n readonly?: boolean;\n}\n\nexport interface SlideInteractionTexts\n extends Pick<\n ContentRenderProps,\n \"confirmButtonText\" | \"copyButtonText\" | \"copiedButtonText\"\n > {\n title?: string;\n}\n\nexport type SlideFullscreenHeader = {\n content?: React.ReactNode;\n backAriaLabel?: string;\n onBack?: () => void;\n};\n\nconst InteractionOverlayCard = memo(\n ({\n content,\n title,\n defaultButtonText,\n defaultInputText,\n defaultSelectedValues,\n confirmButtonText,\n copyButtonText,\n copiedButtonText,\n onSend,\n readonly = false,\n }: InteractionOverlayCardProps) => (\n <div className=\"slide-player__interaction-card\">\n <div className=\"slide-player__interaction-header\">\n <p className=\"slide-player__interaction-title\">{title}</p>\n </div>\n <div className=\"slide-player__interaction-body\">\n <ContentRender\n content={content}\n defaultButtonText={defaultButtonText}\n defaultInputText={defaultInputText}\n defaultSelectedValues={defaultSelectedValues}\n confirmButtonText={confirmButtonText}\n copyButtonText={copyButtonText}\n copiedButtonText={copiedButtonText}\n onSend={onSend}\n readonly={readonly}\n enableTypewriter={false}\n sandboxMode=\"content\"\n />\n </div>\n </div>\n )\n);\n\nInteractionOverlayCard.displayName = \"InteractionOverlayCard\";\n\nconst areStepElementListsEqual = (\n prevElementList: Element[],\n nextElementList: Element[]\n) =>\n prevElementList.length === nextElementList.length &&\n prevElementList.every((element, index) => {\n const nextElement = nextElementList[index];\n\n return (\n element.sequence_number === nextElement?.sequence_number &&\n element.type === nextElement?.type &&\n element.content === nextElement?.content\n );\n });\n\nexport interface SlideProps extends React.ComponentProps<\"section\"> {\n elementList?: Element[];\n showPlayer?: boolean;\n playerAlwaysVisible?: boolean;\n playerClassName?: string;\n fullscreenHeader?: SlideFullscreenHeader;\n playerCustomActions?: PlayerProps[\"customActions\"];\n playerCustomActionPauseOnActive?: boolean;\n bufferingText?: string;\n interactionTitle?: string;\n interactionTexts?: SlideInteractionTexts;\n playerTexts?: SlidePlayerTexts;\n playerAutoHideDelay?: number;\n markerAutoAdvanceDelay?: number;\n interactionDefaultValueOptions?: InteractionDefaultValueOptions;\n onSend?: (content: OnSendContentParams, element?: Element) => void;\n onPlayerVisibilityChange?: (visible: boolean) => void;\n onMobileViewModeChange?: (viewMode: MobileViewMode) => void;\n onStepChange?: (element: Element | undefined, index: number) => void;\n enableIframeScaling?: boolean;\n disableLoadingOverlay?: boolean;\n}\n\nconst Slide: React.FC<SlideProps> = ({\n elementList = [],\n showPlayer = true,\n playerAlwaysVisible = false,\n playerClassName,\n fullscreenHeader,\n playerCustomActions,\n playerCustomActionPauseOnActive = true,\n bufferingText = \"Buffering...\",\n interactionTitle,\n interactionTexts,\n playerTexts,\n playerAutoHideDelay = 3000,\n markerAutoAdvanceDelay = DEFAULT_MARKER_AUTO_ADVANCE_DELAY_MS,\n interactionDefaultValueOptions,\n onSend,\n onPlayerVisibilityChange,\n onMobileViewModeChange,\n onStepChange,\n enableIframeScaling = true,\n disableLoadingOverlay = false,\n className,\n onPointerDown,\n ...props\n}) => {\n const sectionRef = useRef<HTMLElement | null>(null);\n const viewportRef = useRef<HTMLDivElement | null>(null);\n const stageLayerRef = useRef<HTMLDivElement | null>(null);\n const lastElementRef = useRef<HTMLDivElement | null>(null);\n const playerHideTimerRef = useRef<number | null>(null);\n const autoAdvanceTimerRef = useRef<number | null>(null);\n const interactionAutoCloseTimerRef = useRef<number | null>(null);\n const interactionOverlayOpenTimerRef = useRef<number | null>(null);\n const interactionOverlayRef = useRef<HTMLDivElement | null>(null);\n const prevRenderElementKeysRef = useRef<string[]>([]);\n const shouldScrollToBottomRef = useRef(false);\n const pendingInteractionOverlayStepIndexRef = useRef<number | null>(null);\n const playbackResetKeyRef = useRef<string | null>(null);\n const appendedMarkerAdvanceStateRef = useRef({\n markerCount: 0,\n currentIndex: -1,\n canGoNext: false,\n });\n const {\n currentElementList,\n stepElementLists,\n slideElementList,\n currentIndex,\n audioList,\n currentAudioSequenceIndexes,\n currentStepHasSpeakableElement,\n currentInteractionElement,\n canGoPrev,\n canGoNext,\n handlePrev: goPrev,\n handleNext: goNext,\n } = useSlide(elementList);\n const currentStepElement = useMemo(() => {\n if (currentIndex < 0) {\n return undefined;\n }\n\n return slideElementList[currentIndex];\n }, [currentIndex, slideElementList]);\n const visibleMarkerCount = slideElementList.filter(\n (element) => element.is_renderable !== false\n ).length;\n const isSingleSlide = visibleMarkerCount === 1;\n const shouldRenderPlayer =\n showPlayer &&\n (slideElementList.length > 0 ||\n audioList.length > 0 ||\n Boolean(currentInteractionElement));\n const currentAudioSequenceKeys = useMemo(\n () =>\n currentAudioSequenceIndexes\n .map((audioIndex) => audioList[audioIndex]?.audioKey)\n .filter((audioKey): audioKey is string => Boolean(audioKey)),\n [audioList, currentAudioSequenceIndexes]\n );\n const [isPlayerVisible, setIsPlayerVisible] = useState(true);\n const [hasPlayerInteracted, setHasPlayerInteracted] = useState(false);\n const [isAutoAdvanceEnabled, setIsAutoAdvanceEnabled] = useState(true);\n const [currentAudioKey, setCurrentAudioKey] = useState<string | null>(null);\n const [isAudioLoadingVisible, setIsAudioLoadingVisible] = useState(false);\n const [hasCompletedCurrentStepAudio, setHasCompletedCurrentStepAudio] =\n useState(false);\n const [hasCurrentAudioPlaybackStarted, setHasCurrentAudioPlaybackStarted] =\n useState(false);\n const [isSubtitleEnabled, setIsSubtitleEnabled] = useState(true);\n const [isPlayerCustomActionActive, setIsPlayerCustomActionActive] =\n useState(false);\n const [activeInteractionElement, setActiveInteractionElement] = useState<\n Element | undefined\n >();\n const [isInteractionOverlayOpen, setIsInteractionOverlayOpen] =\n useState(false);\n const [\n interactionOverlaySubtitleOffset,\n setInteractionOverlaySubtitleOffset,\n ] = useState(0);\n const [isBrowserFullscreen, setIsBrowserFullscreen] = useState(false);\n const isMobileDevice = useMemo(() => getIsMobileDevice(), []);\n const [mobileViewMode, setMobileViewMode] = useState<MobileViewMode>(\n DEFAULT_MOBILE_VIEW_MODE\n );\n const [hasManualMobileViewMode, setHasManualMobileViewMode] = useState(false);\n const [isViewportFullscreenPreferred, setIsViewportFullscreenPreferred] =\n useState(() =>\n isMobileDevice ? getIsFullscreenPreferredViewport() : false\n );\n const [isFullscreenHintOpen, setIsFullscreenHintOpen] = useState(false);\n const playbackTimeStore = useMemo(() => createPlaybackTimeStore(), []);\n const {\n effectiveMobileViewMode,\n isImmersiveMobileFullscreen,\n isNativeMobileFullscreen,\n shouldRotateFullscreenViewport,\n } = useMemo(\n () =>\n resolveMobileViewModeState({\n hasManualMobileViewMode,\n isMobileDevice,\n isViewportFullscreenPreferred,\n mobileViewMode,\n }),\n [\n hasManualMobileViewMode,\n isMobileDevice,\n isViewportFullscreenPreferred,\n mobileViewMode,\n ]\n );\n const previousEffectiveMobileViewModeRef = useRef(effectiveMobileViewMode);\n const playerVisible =\n shouldRenderPlayer && (playerAlwaysVisible || isPlayerVisible);\n const shouldShowFullscreenHeader =\n isImmersiveMobileFullscreen && playerVisible;\n const shouldApplyFullscreenViewportPadding =\n isImmersiveMobileFullscreen && playerVisible;\n const shouldShowMobileFullscreenMask =\n isImmersiveMobileFullscreen || isNativeMobileFullscreen;\n const fullscreenHintText =\n playerTexts?.fullscreenHintText ??\n DEFAULT_SLIDE_PLAYER_TEXTS.fullscreenHintText;\n const handleMobileViewModeSelect = useCallback(\n (nextViewMode: MobileViewMode) => {\n setHasManualMobileViewMode(true);\n setMobileViewMode(nextViewMode);\n },\n []\n );\n const handleMobileViewModeReset = useCallback(() => {\n // Clear manual override so the effective mode returns to the default non-fullscreen state.\n setHasManualMobileViewMode(false);\n setMobileViewMode(DEFAULT_MOBILE_VIEW_MODE);\n }, []);\n const handleFullscreenHeaderBack = useCallback(() => {\n handleMobileViewModeReset();\n fullscreenHeader?.onBack?.();\n }, [fullscreenHeader, handleMobileViewModeReset]);\n const handleFullscreenHintClose = useCallback(() => {\n setIsFullscreenHintOpen(false);\n }, []);\n const setPlayerCustomActionActive = useCallback((active: boolean) => {\n setIsPlayerCustomActionActive(active);\n }, []);\n const togglePlayerCustomActionActive = useCallback(() => {\n setIsPlayerCustomActionActive((previous) => !previous);\n }, []);\n const { mountedStepStates, currentMountedStateIndex } = useMemo(() => {\n const nextMountedStepStates: Array<{\n elementList: Element[];\n sourceStepIndexes: number[];\n }> = [];\n const mountedStateIndexByStep = new Map<number, number>();\n\n stepElementLists.forEach((stepElementList, stepIndex) => {\n const existingMountedStateIndex = nextMountedStepStates.findIndex(\n (mountedStepState) =>\n areStepElementListsEqual(\n mountedStepState.elementList,\n stepElementList\n )\n );\n\n if (existingMountedStateIndex >= 0) {\n nextMountedStepStates[\n existingMountedStateIndex\n ]?.sourceStepIndexes.push(stepIndex);\n mountedStateIndexByStep.set(stepIndex, existingMountedStateIndex);\n return;\n }\n\n nextMountedStepStates.push({\n elementList: stepElementList,\n sourceStepIndexes: [stepIndex],\n });\n mountedStateIndexByStep.set(stepIndex, nextMountedStepStates.length - 1);\n });\n\n return {\n mountedStepStates: nextMountedStepStates,\n currentMountedStateIndex:\n currentIndex >= 0\n ? (mountedStateIndexByStep.get(currentIndex) ?? -1)\n : -1,\n };\n }, [currentIndex, stepElementLists]);\n const currentStepKey = useMemo(() => String(currentIndex), [currentIndex]);\n const currentAudioIndex = useMemo(() => {\n if (!currentAudioKey) {\n return -1;\n }\n\n return audioList.findIndex(\n (audioItem) => (audioItem.audioKey ?? \"\") === currentAudioKey\n );\n }, [audioList, currentAudioKey]);\n const currentAudioItem = useMemo(\n () => (currentAudioIndex >= 0 ? audioList[currentAudioIndex] : undefined),\n [audioList, currentAudioIndex]\n );\n const currentSubtitleCues = currentAudioItem?.element?.subtitle_cues ?? [];\n const currentAudioSequenceStartKey = useMemo(\n () => currentAudioSequenceKeys[0] ?? \"none\",\n [currentAudioSequenceKeys]\n );\n const playerCustomActionContext = useMemo(\n () => ({\n currentElement: resolvePlayerCustomActionElement({\n currentAudioIndex,\n currentAudioSequenceIndexes,\n audioList,\n currentInteractionElement: activeInteractionElement,\n currentStepElement,\n }),\n currentIndex,\n currentStepElement,\n isActive: isPlayerCustomActionActive,\n setActive: setPlayerCustomActionActive,\n toggleActive: togglePlayerCustomActionActive,\n }),\n [\n activeInteractionElement,\n audioList,\n currentAudioIndex,\n currentAudioSequenceIndexes,\n currentIndex,\n currentStepElement,\n isPlayerCustomActionActive,\n setPlayerCustomActionActive,\n togglePlayerCustomActionActive,\n ]\n );\n const playerCustomActionCount = useMemo(\n () =>\n getPlayerCustomActionCount(\n playerCustomActions,\n playerCustomActionContext\n ),\n [playerCustomActionContext, playerCustomActions]\n );\n const interactionOverlayStyle = useMemo(\n () =>\n ({\n \"--slide-player-custom-action-count\": String(playerCustomActionCount),\n \"--slide-player-mobile-control-count\": String(\n playerCustomActionCount + 4\n ),\n }) as React.CSSProperties,\n [playerCustomActionCount]\n );\n const hasAvailableStepAudio = currentAudioSequenceKeys.length > 0;\n const currentInteractionResetKey = useMemo(() => {\n if (!currentInteractionElement) {\n return \"none\";\n }\n\n return `${currentInteractionElement.sequence_number ?? \"none\"}:${String(\n currentInteractionElement.content ?? \"\"\n )}`;\n }, [currentInteractionElement]);\n const currentPlaybackResetKey = useMemo(\n () => [currentStepKey, currentInteractionResetKey].join(\"|\"),\n [currentInteractionResetKey, currentStepKey]\n );\n const currentPlaybackStartedResetKey = useMemo(\n () =>\n [\n currentPlaybackResetKey,\n currentAudioItem?.audioKey ?? \"none\",\n String(currentAudioIndex),\n ].join(\"|\"),\n [currentAudioIndex, currentAudioItem?.audioKey, currentPlaybackResetKey]\n );\n const currentStepAudioUrl = useMemo(() => {\n if (\n !currentAudioSequenceStartKey ||\n currentAudioSequenceStartKey === \"none\"\n ) {\n return \"\";\n }\n\n const currentStepAudioItem = audioList.find(\n (audioItem) => audioItem.audioKey === currentAudioSequenceStartKey\n );\n\n return currentStepAudioItem?.audioUrl?.trim() ?? \"\";\n }, [audioList, currentAudioSequenceStartKey]);\n const hasCurrentStepAudioUrl = Boolean(currentStepAudioUrl);\n const shouldPausePlaybackForCustomAction =\n playerCustomActionPauseOnActive &&\n Boolean(playerCustomActions) &&\n isPlayerCustomActionActive;\n const shouldUseSilentStepAutoAdvanceToggle = useMemo(\n () =>\n shouldUseAutoAdvanceToggle({\n canGoNext,\n currentAudioIndex,\n currentStepHasSpeakableElement,\n hasInteraction: Boolean(currentInteractionElement),\n }),\n [\n canGoNext,\n currentAudioIndex,\n currentInteractionElement,\n currentStepHasSpeakableElement,\n ]\n );\n\n const clearPlayerHideTimer = useCallback(() => {\n if (playerHideTimerRef.current === null) {\n return;\n }\n\n window.clearTimeout(playerHideTimerRef.current);\n playerHideTimerRef.current = null;\n }, []);\n\n const clearInteractionAutoCloseTimer = useCallback(() => {\n if (interactionAutoCloseTimerRef.current === null) {\n return;\n }\n\n window.clearTimeout(interactionAutoCloseTimerRef.current);\n interactionAutoCloseTimerRef.current = null;\n }, []);\n\n const clearInteractionOverlayOpenTimer = useCallback(() => {\n if (interactionOverlayOpenTimerRef.current === null) {\n return;\n }\n\n window.clearTimeout(interactionOverlayOpenTimerRef.current);\n interactionOverlayOpenTimerRef.current = null;\n }, []);\n\n const clearAutoAdvanceTimer = useCallback(() => {\n if (autoAdvanceTimerRef.current === null) {\n return;\n }\n\n window.clearTimeout(autoAdvanceTimerRef.current);\n autoAdvanceTimerRef.current = null;\n }, []);\n\n const resetAudioSequence = useCallback(() => {\n clearAutoAdvanceTimer();\n clearInteractionAutoCloseTimer();\n clearInteractionOverlayOpenTimer();\n setCurrentAudioKey(null);\n playbackTimeStore.reset();\n setIsAudioLoadingVisible(false);\n setHasCompletedCurrentStepAudio(false);\n setHasCurrentAudioPlaybackStarted(false);\n setActiveInteractionElement(undefined);\n setIsInteractionOverlayOpen(false);\n setInteractionOverlaySubtitleOffset(0);\n }, [\n clearAutoAdvanceTimer,\n clearInteractionAutoCloseTimer,\n clearInteractionOverlayOpenTimer,\n playbackTimeStore,\n ]);\n\n const startCurrentAudioSequence = useCallback(() => {\n const nextAudioKey = currentAudioSequenceKeys[0];\n\n if (!nextAudioKey) {\n return false;\n }\n\n // Start the first audio segment for the current step immediately.\n setCurrentAudioKey(nextAudioKey);\n return true;\n }, [currentAudioSequenceKeys]);\n\n const continueAfterInteraction = useCallback(() => {\n clearInteractionAutoCloseTimer();\n clearInteractionOverlayOpenTimer();\n setIsInteractionOverlayOpen(false);\n setInteractionOverlaySubtitleOffset(0);\n\n if (startCurrentAudioSequence()) {\n return;\n }\n\n if (canGoNext) {\n goNext();\n }\n }, [\n canGoNext,\n clearInteractionAutoCloseTimer,\n clearInteractionOverlayOpenTimer,\n goNext,\n startCurrentAudioSequence,\n ]);\n\n const scheduleInteractionOverlayOpen = useCallback(\n (interactionElement?: Element) => {\n clearInteractionOverlayOpenTimer();\n\n if (!interactionElement) {\n return;\n }\n\n const openOverlay = () => {\n interactionOverlayOpenTimerRef.current = null;\n setInteractionOverlaySubtitleOffset(\n DEFAULT_INTERACTION_OVERLAY_FALLBACK_OFFSET_PX\n );\n setIsInteractionOverlayOpen(true);\n pendingInteractionOverlayStepIndexRef.current = null;\n };\n\n interactionOverlayOpenTimerRef.current = window.setTimeout(\n openOverlay,\n DEFAULT_INTERACTION_OVERLAY_OPEN_DELAY_MS\n );\n },\n [clearInteractionOverlayOpenTimer]\n );\n\n const showPlayerControls = useCallback(\n (enableAutoHide = hasPlayerInteracted) => {\n if (!shouldRenderPlayer) {\n return;\n }\n\n setIsPlayerVisible(true);\n clearPlayerHideTimer();\n\n if (playerAlwaysVisible || !enableAutoHide || playerAutoHideDelay <= 0) {\n return;\n }\n\n playerHideTimerRef.current = window.setTimeout(() => {\n setIsPlayerVisible(false);\n playerHideTimerRef.current = null;\n }, playerAutoHideDelay);\n },\n [\n clearPlayerHideTimer,\n hasPlayerInteracted,\n playerAlwaysVisible,\n playerAutoHideDelay,\n shouldRenderPlayer,\n ]\n );\n\n const hasResolvedCurrentInteraction = Boolean(\n currentInteractionElement?.readonly ||\n currentInteractionElement?.user_input?.trim()\n );\n\n const shouldBlockPlaybackForInteraction =\n Boolean(currentInteractionElement) && !hasResolvedCurrentInteraction;\n\n useEffect(() => {\n // Reset silent-step autoplay toggle whenever navigation lands on a new step.\n setIsAutoAdvanceEnabled(true);\n\n if (playerCustomActionPauseOnActive) {\n setIsPlayerCustomActionActive(false);\n }\n }, [currentIndex, playerCustomActionPauseOnActive]);\n\n useEffect(() => {\n return () => {\n clearAutoAdvanceTimer();\n clearPlayerHideTimer();\n clearInteractionAutoCloseTimer();\n clearInteractionOverlayOpenTimer();\n };\n }, [\n clearAutoAdvanceTimer,\n clearInteractionAutoCloseTimer,\n clearInteractionOverlayOpenTimer,\n clearPlayerHideTimer,\n ]);\n\n useEffect(() => {\n onPlayerVisibilityChange?.(playerVisible);\n\n return () => {\n onPlayerVisibilityChange?.(false);\n };\n }, [onPlayerVisibilityChange, playerVisible]);\n\n useEffect(() => {\n if (isMobileDevice || mobileViewMode === DEFAULT_MOBILE_VIEW_MODE) {\n return;\n }\n\n setHasManualMobileViewMode(false);\n setMobileViewMode(DEFAULT_MOBILE_VIEW_MODE);\n }, [isMobileDevice, mobileViewMode]);\n\n useEffect(() => {\n if (!isMobileDevice) {\n setIsViewportFullscreenPreferred(false);\n return;\n }\n\n const syncViewportFullscreenPreference = () => {\n setIsViewportFullscreenPreferred(getIsFullscreenPreferredViewport());\n };\n\n syncViewportFullscreenPreference();\n\n return subscribeMobileDeviceChange(syncViewportFullscreenPreference);\n }, [isMobileDevice]);\n\n useEffect(() => {\n onMobileViewModeChange?.(effectiveMobileViewMode);\n }, [effectiveMobileViewMode, onMobileViewModeChange]);\n\n useEffect(() => {\n const previousMode = previousEffectiveMobileViewModeRef.current;\n const hasEnteredFullscreen =\n previousMode !== \"fullscreen\" && effectiveMobileViewMode === \"fullscreen\";\n const shouldShowFullscreenHint =\n hasEnteredFullscreen && !isViewportFullscreenPreferred;\n\n previousEffectiveMobileViewModeRef.current = effectiveMobileViewMode;\n\n if (!isMobileDevice) {\n setIsFullscreenHintOpen(false);\n return;\n }\n\n if (shouldShowFullscreenHint) {\n setIsFullscreenHintOpen(true);\n return;\n }\n\n if (effectiveMobileViewMode !== \"fullscreen\") {\n setIsFullscreenHintOpen(false);\n }\n }, [effectiveMobileViewMode, isMobileDevice, isViewportFullscreenPreferred]);\n\n useEffect(() => {\n onStepChange?.(currentStepElement, currentIndex);\n }, [currentIndex, currentStepElement, onStepChange]);\n\n useEffect(() => {\n const previousState = appendedMarkerAdvanceStateRef.current;\n const shouldAdvanceIntoAppendedMarker = shouldAutoAdvanceIntoAppendedMarker(\n {\n previousMarkerCount: previousState.markerCount,\n nextMarkerCount: slideElementList.length,\n previousIndex: previousState.currentIndex,\n previousCanGoNext: previousState.canGoNext,\n nextCanGoNext: canGoNext,\n currentAudioKey,\n hasCompletedCurrentStepAudio,\n hasResolvedCurrentInteraction,\n currentStepHasSpeakableElement,\n currentInteractionElement,\n isAutoAdvanceEnabled,\n shouldUseSilentStepAutoAdvanceToggle,\n }\n );\n\n appendedMarkerAdvanceStateRef.current = {\n markerCount: slideElementList.length,\n currentIndex,\n canGoNext,\n };\n\n if (!shouldAdvanceIntoAppendedMarker) {\n return;\n }\n\n goNext();\n }, [\n canGoNext,\n currentAudioKey,\n currentIndex,\n currentInteractionElement,\n currentStepHasSpeakableElement,\n goNext,\n hasCompletedCurrentStepAudio,\n hasResolvedCurrentInteraction,\n isAutoAdvanceEnabled,\n shouldUseSilentStepAutoAdvanceToggle,\n slideElementList.length,\n ]);\n\n useEffect(() => {\n if (!shouldRenderPlayer) {\n clearPlayerHideTimer();\n setIsPlayerVisible(false);\n return;\n }\n\n if (playerAlwaysVisible) {\n clearPlayerHideTimer();\n setIsPlayerVisible(true);\n return;\n }\n\n if (!hasPlayerInteracted) {\n // Keep the initial player visible briefly, then hide it automatically.\n showPlayerControls(true);\n }\n }, [\n clearPlayerHideTimer,\n hasPlayerInteracted,\n playerAlwaysVisible,\n shouldRenderPlayer,\n showPlayerControls,\n ]);\n\n useEffect(() => {\n if (typeof window === \"undefined\") {\n return;\n }\n\n const handleSandboxInteraction = (event: MessageEvent) => {\n if (event.origin !== window.location.origin) {\n return;\n }\n\n if (!isSandboxInteractionMessage(event.data)) {\n return;\n }\n\n if (event.data.eventType !== \"click\") {\n return;\n }\n\n if (!shouldRenderPlayer) {\n return;\n }\n\n // Restore player controls on explicit click/tap without waking on scroll start.\n setHasPlayerInteracted(true);\n showPlayerControls(true);\n };\n\n window.addEventListener(\"message\", handleSandboxInteraction);\n\n return () => {\n window.removeEventListener(\"message\", handleSandboxInteraction);\n };\n }, [shouldRenderPlayer, showPlayerControls]);\n\n useWakePlayerFromIframe({\n sectionRef,\n enabled: shouldRenderPlayer,\n onWake: () => {\n setHasPlayerInteracted(true);\n showPlayerControls(true);\n },\n });\n\n useEffect(() => {\n const { hasPlaybackContextChanged, shouldInitializeAudioSequence } =\n getPlaybackSequenceTransition({\n previousResetKey: playbackResetKeyRef.current,\n nextResetKey: currentPlaybackResetKey,\n currentAudioKey,\n hasCompletedCurrentStepAudio,\n });\n\n playbackResetKeyRef.current = currentPlaybackResetKey;\n\n const shouldOpenInteractionOverlayAfterAudio =\n pendingInteractionOverlayStepIndexRef.current === currentIndex &&\n Boolean(currentInteractionElement);\n const shouldPresentOverlay = shouldPresentInteractionOverlay({\n hasInteraction: Boolean(currentInteractionElement),\n shouldBlockPlaybackForInteraction,\n shouldOpenInteractionOverlayAfterAudio,\n hasPlaybackContextChanged,\n hasResolvedCurrentInteraction,\n currentStepHasSpeakableElement,\n });\n\n if (hasPlaybackContextChanged) {\n resetAudioSequence();\n }\n\n if (currentElementList.length === 0 && !currentInteractionElement) {\n return;\n }\n\n if (shouldPausePlaybackForCustomAction) {\n return;\n }\n\n if (currentInteractionElement) {\n setActiveInteractionElement(currentInteractionElement);\n }\n\n if (shouldPresentOverlay) {\n // Delay auto-presenting the overlay so subtitles can settle above it.\n scheduleInteractionOverlayOpen(currentInteractionElement);\n return;\n }\n\n clearInteractionOverlayOpenTimer();\n pendingInteractionOverlayStepIndexRef.current = null;\n\n if (!shouldInitializeAudioSequence) {\n return;\n }\n\n if (startCurrentAudioSequence()) {\n return;\n }\n\n if (currentStepHasSpeakableElement) {\n if (disableLoadingOverlay) {\n setIsAudioLoadingVisible(false);\n return;\n }\n\n setIsAudioLoadingVisible(true);\n return;\n }\n\n if (!canGoNext) {\n return;\n }\n\n if (shouldUseSilentStepAutoAdvanceToggle && !isAutoAdvanceEnabled) {\n return;\n }\n\n // Auto-advance silent marker-only steps so playback flow does not stall.\n autoAdvanceTimerRef.current = window.setTimeout(() => {\n autoAdvanceTimerRef.current = null;\n goNext();\n }, markerAutoAdvanceDelay);\n\n return () => {\n clearAutoAdvanceTimer();\n };\n }, [\n canGoNext,\n clearAutoAdvanceTimer,\n currentElementList.length,\n currentInteractionElement,\n currentAudioKey,\n currentPlaybackResetKey,\n currentStepHasSpeakableElement,\n markerAutoAdvanceDelay,\n goNext,\n hasCompletedCurrentStepAudio,\n disableLoadingOverlay,\n isAutoAdvanceEnabled,\n hasResolvedCurrentInteraction,\n shouldBlockPlaybackForInteraction,\n clearInteractionOverlayOpenTimer,\n resetAudioSequence,\n scheduleInteractionOverlayOpen,\n startCurrentAudioSequence,\n shouldPausePlaybackForCustomAction,\n shouldUseSilentStepAutoAdvanceToggle,\n ]);\n\n useEffect(() => {\n if (\n disableLoadingOverlay ||\n shouldPausePlaybackForCustomAction ||\n !currentStepHasSpeakableElement ||\n shouldBlockPlaybackForInteraction\n ) {\n setIsAudioLoadingVisible(false);\n return;\n }\n\n if (hasCompletedCurrentStepAudio) {\n setIsAudioLoadingVisible(false);\n return;\n }\n\n if (hasAvailableStepAudio) {\n setIsAudioLoadingVisible(false);\n return;\n }\n\n setIsAudioLoadingVisible(true);\n }, [\n hasAvailableStepAudio,\n currentStepHasSpeakableElement,\n hasCompletedCurrentStepAudio,\n disableLoadingOverlay,\n shouldPausePlaybackForCustomAction,\n shouldBlockPlaybackForInteraction,\n ]);\n\n useEffect(() => {\n if (currentAudioKey || currentAudioSequenceKeys.length === 0) {\n return;\n }\n\n if (\n shouldPausePlaybackForCustomAction ||\n !currentStepHasSpeakableElement ||\n shouldBlockPlaybackForInteraction\n ) {\n return;\n }\n\n if (hasCompletedCurrentStepAudio) {\n return;\n }\n\n startCurrentAudioSequence();\n }, [\n currentAudioKey,\n currentAudioSequenceKeys,\n currentStepHasSpeakableElement,\n hasCompletedCurrentStepAudio,\n shouldPausePlaybackForCustomAction,\n shouldBlockPlaybackForInteraction,\n startCurrentAudioSequence,\n ]);\n\n useEffect(() => {\n if (!currentAudioKey || currentAudioIndex >= 0) {\n return;\n }\n\n setCurrentAudioKey(null);\n }, [currentAudioIndex, currentAudioKey]);\n\n useEffect(() => {\n if (currentAudioIndex >= 0) {\n return;\n }\n\n playbackTimeStore.reset();\n }, [currentAudioIndex, playbackTimeStore]);\n\n useEffect(() => {\n setHasCurrentAudioPlaybackStarted(false);\n }, [currentPlaybackStartedResetKey]);\n\n const interactionDefaults = useMemo(() => {\n if (!activeInteractionElement) {\n return {};\n }\n\n const shouldPreferResolvedInteractionInput = Boolean(\n activeInteractionElement.user_input?.trim()\n );\n\n return getInteractionDefaultValues(\n typeof activeInteractionElement.content === \"string\"\n ? activeInteractionElement.content\n : undefined,\n activeInteractionElement.user_input,\n shouldPreferResolvedInteractionInput\n ? undefined\n : interactionDefaultValueOptions\n );\n }, [activeInteractionElement, interactionDefaultValueOptions]);\n\n const interactionDefaultSelectedValues = useMemo(() => {\n if (!activeInteractionElement) {\n return undefined;\n }\n\n const shouldPreferResolvedInteractionInput = Boolean(\n activeInteractionElement.user_input?.trim()\n );\n\n return getInteractionDefaultSelectedValues(\n typeof activeInteractionElement.content === \"string\"\n ? activeInteractionElement.content\n : undefined,\n activeInteractionElement.user_input,\n shouldPreferResolvedInteractionInput\n ? undefined\n : interactionDefaultValueOptions\n );\n }, [activeInteractionElement, interactionDefaultValueOptions]);\n\n const hasResolvedInteractionInput = Boolean(\n activeInteractionElement?.user_input?.trim()\n );\n\n const isInteractionReadonly =\n Boolean(activeInteractionElement?.readonly) || hasResolvedInteractionInput;\n const shouldAutoContinueInteraction =\n isInteractionReadonly || hasResolvedInteractionInput;\n const shouldShowInteractionOverlay =\n Boolean(activeInteractionElement) && isInteractionOverlayOpen;\n\n const handleInteractionSend = useCallback(\n (content: OnSendContentParams) => {\n const submittedValues = [\n ...(content.selectedValues ?? []),\n content.inputText?.trim() ?? \"\",\n content.buttonText?.trim() ?? \"\",\n ].filter(Boolean);\n const resolvedUserInput = submittedValues.join(\", \");\n\n setActiveInteractionElement((prevElement) => {\n if (!prevElement || !resolvedUserInput) {\n return prevElement;\n }\n\n return {\n ...prevElement,\n user_input: resolvedUserInput,\n };\n });\n\n onSend?.(content, activeInteractionElement);\n continueAfterInteraction();\n },\n [activeInteractionElement, continueAfterInteraction, onSend]\n );\n\n useEffect(() => {\n // Keep the player icon in sync with the actual fullscreen owner.\n const syncFullscreenState = () => {\n setIsBrowserFullscreen(document.fullscreenElement === sectionRef.current);\n };\n\n syncFullscreenState();\n document.addEventListener(\"fullscreenchange\", syncFullscreenState);\n\n return () => {\n document.removeEventListener(\"fullscreenchange\", syncFullscreenState);\n };\n }, []);\n\n useEffect(() => {\n if (!shouldShowInteractionOverlay) {\n setInteractionOverlaySubtitleOffset(0);\n return;\n }\n\n const interactionOverlayElement = interactionOverlayRef.current;\n\n if (!interactionOverlayElement) {\n return;\n }\n\n const updateSubtitleOffset = () => {\n const overlayHeight = Math.ceil(\n interactionOverlayElement.getBoundingClientRect().height\n );\n\n setInteractionOverlaySubtitleOffset(\n overlayHeight + DEFAULT_INTERACTION_SUBTITLE_GAP_PX\n );\n };\n\n updateSubtitleOffset();\n\n if (typeof ResizeObserver === \"undefined\") {\n return;\n }\n\n const resizeObserver = new ResizeObserver(() => {\n updateSubtitleOffset();\n });\n\n resizeObserver.observe(interactionOverlayElement);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [shouldShowInteractionOverlay]);\n\n useEffect(() => {\n clearInteractionAutoCloseTimer();\n\n if (!isInteractionOverlayOpen || !shouldAutoContinueInteraction) {\n return;\n }\n\n // Auto-close passive interaction markers to keep playback moving.\n interactionAutoCloseTimerRef.current = window.setTimeout(() => {\n interactionAutoCloseTimerRef.current = null;\n\n continueAfterInteraction();\n }, 2000);\n\n return () => {\n clearInteractionAutoCloseTimer();\n };\n }, [\n clearInteractionAutoCloseTimer,\n continueAfterInteraction,\n isInteractionOverlayOpen,\n shouldAutoContinueInteraction,\n ]);\n\n const renderSlideElement = (\n element?: Element,\n options: RenderSlideElementOptions = {}\n ) => {\n if (!element) {\n return null;\n }\n\n if (element.type === \"slot\") {\n return <>{element.content}</>;\n }\n\n if (element.type === \"html\") {\n return (\n <IframeSandbox\n className=\"content-render-iframe\"\n disableLoadingOverlay={disableLoadingOverlay}\n hideFullScreen\n mode=\"blackboard\"\n replaceRootScreenHeightWithFull={\n options.replaceRootScreenHeightWithFull\n }\n type=\"sandbox\"\n content={element.content as string}\n enableScaling={enableIframeScaling}\n />\n );\n }\n\n return (\n <IframeSandbox\n className=\"content-render-iframe\"\n disableLoadingOverlay={disableLoadingOverlay}\n hideFullScreen\n mode=\"blackboard\"\n type=\"markdown\"\n content={element.content as string}\n />\n );\n };\n\n const renderSlideElementList = (\n elementList: Element[] = [],\n isActiveStep = false\n ) => {\n if (elementList.length === 0) {\n return null;\n }\n\n const visibleElementCount = elementList.filter(\n (element) => element.is_renderable !== false\n ).length;\n const lastVisibleElementIndex = elementList.reduce(\n (lastVisibleIndex, element, index) =>\n element.is_renderable !== false ? index : lastVisibleIndex,\n -1\n );\n\n return (\n <div className=\"slide-stage__content flex w-full flex-col gap-4\">\n {elementList.map((element, index) => {\n const isPreRenderedHtml =\n element.type === \"html\" && element.is_renderable === false;\n\n return (\n <div\n key={element.sequence_number ?? `${element.type}-${index}`}\n ref={\n isActiveStep && index === lastVisibleElementIndex\n ? lastElementRef\n : null\n }\n aria-hidden={isPreRenderedHtml || undefined}\n className={cn(\n \"w-full shrink-0\",\n visibleElementCount === 1 &&\n element.is_renderable !== false &&\n \"slide-element--single\",\n isPreRenderedHtml\n ? \"pointer-events-none fixed left-[-200vw] top-0 -z-10 h-[100dvh] w-[100vw] overflow-hidden opacity-0\"\n : element.is_renderable === false && \"hidden\"\n )}\n >\n {renderSlideElement(element, {\n replaceRootScreenHeightWithFull:\n visibleElementCount === 1 &&\n element.type === \"html\" &&\n element.is_renderable !== false,\n })}\n </div>\n );\n })}\n </div>\n );\n };\n\n const handleFullscreen = useCallback(() => {\n const target = sectionRef.current;\n if (!target) {\n return;\n }\n\n if (document.fullscreenElement === target) {\n document.exitFullscreen().catch(() => {});\n return;\n }\n\n target.requestFullscreen?.().catch(() => {});\n }, []);\n\n const scrollStageToBottom = useCallback(() => {\n const stageLayerElement = stageLayerRef.current;\n\n if (!stageLayerElement) {\n return;\n }\n\n // Keep the latest content visible after manual player navigation.\n stageLayerElement.scrollTo({\n top: stageLayerElement.scrollHeight,\n behavior: \"smooth\",\n });\n }, []);\n\n const handlePrev = useCallback(() => {\n shouldScrollToBottomRef.current = true;\n pendingInteractionOverlayStepIndexRef.current = null;\n setHasPlayerInteracted(true);\n setIsAudioLoadingVisible(false);\n showPlayerControls(true);\n resetAudioSequence();\n goPrev();\n }, [goPrev, resetAudioSequence, showPlayerControls]);\n\n const handleNext = useCallback(() => {\n shouldScrollToBottomRef.current = true;\n pendingInteractionOverlayStepIndexRef.current = null;\n setHasPlayerInteracted(true);\n setIsAudioLoadingVisible(false);\n showPlayerControls(true);\n resetAudioSequence();\n goNext();\n }, [goNext, resetAudioSequence, showPlayerControls]);\n\n const handlePlayerLoadingChange = useCallback(\n (loading: boolean) => {\n if (disableLoadingOverlay) {\n setIsAudioLoadingVisible(false);\n return;\n }\n\n if (!currentStepHasSpeakableElement || hasCompletedCurrentStepAudio) {\n setIsAudioLoadingVisible(false);\n return;\n }\n\n setIsAudioLoadingVisible(loading);\n },\n [\n currentStepHasSpeakableElement,\n hasCompletedCurrentStepAudio,\n disableLoadingOverlay,\n ]\n );\n\n useEffect(() => {\n if (!disableLoadingOverlay) {\n return;\n }\n\n setIsAudioLoadingVisible(false);\n }, [disableLoadingOverlay]);\n\n const handlePlayerEnded = useCallback(\n (audioIndex: number) => {\n const endedAudioKey = audioList[audioIndex]?.audioKey;\n\n if (!endedAudioKey || !currentAudioKey) {\n return;\n }\n\n if (endedAudioKey !== currentAudioKey) {\n return;\n }\n\n const activeSequencePosition = currentAudioSequenceKeys.findIndex(\n (audioSequenceKey) => audioSequenceKey === endedAudioKey\n );\n if (activeSequencePosition < 0) {\n setCurrentAudioKey(null);\n return;\n }\n\n const nextSequencePosition = activeSequencePosition + 1;\n const nextAudioKey = currentAudioSequenceKeys[nextSequencePosition];\n\n if (nextAudioKey) {\n setCurrentAudioKey(nextAudioKey);\n return;\n }\n\n setCurrentAudioKey(null);\n setHasCompletedCurrentStepAudio(true);\n setIsAudioLoadingVisible(false);\n\n if (canGoNext) {\n const nextStepIndex = currentIndex + 1;\n const nextStepElement = slideElementList[nextStepIndex];\n\n if (hasCurrentStepAudioUrl && nextStepElement?.type === \"interaction\") {\n pendingInteractionOverlayStepIndexRef.current = nextStepIndex;\n }\n\n goNext();\n }\n },\n [\n audioList,\n canGoNext,\n currentIndex,\n currentAudioKey,\n currentAudioSequenceKeys,\n goNext,\n hasCurrentStepAudioUrl,\n slideElementList,\n ]\n );\n\n const handleInteractionToggle = useCallback(() => {\n if (!activeInteractionElement) {\n return;\n }\n\n setIsInteractionOverlayOpen((prevOpen) => !prevOpen);\n }, [activeInteractionElement]);\n\n const stopOverlayPropagation = useCallback(\n (\n event:\n | React.PointerEvent<HTMLDivElement>\n | React.MouseEvent<HTMLDivElement>\n ) => {\n event.stopPropagation();\n\n // Keep the player visible a bit longer when users interact with the overlay.\n if (playerVisible) {\n showPlayerControls(true);\n }\n },\n [isPlayerVisible, showPlayerControls]\n );\n\n const handleSurfacePointerDown = useCallback(\n (event: React.PointerEvent<HTMLElement>) => {\n onPointerDown?.(event);\n },\n [onPointerDown]\n );\n\n const handleSurfaceClick = useCallback(() => {\n setHasPlayerInteracted(true);\n showPlayerControls(true);\n }, [showPlayerControls]);\n\n const currentRenderElementKeys = useMemo(\n () =>\n currentElementList.map(\n (element, index) =>\n `${element.sequence_number ?? `${element.type}-${index}`}:${String(element.is_new ?? \"\")}`\n ),\n [currentElementList]\n );\n\n useEffect(() => {\n const prevKeys = prevRenderElementKeysRef.current;\n const hasStablePrefix =\n prevKeys.length > 0 &&\n prevKeys.length < currentRenderElementKeys.length &&\n prevKeys.every((key, index) => key === currentRenderElementKeys[index]);\n const appendedElements = hasStablePrefix\n ? currentElementList.slice(prevKeys.length)\n : [];\n const shouldAutoScrollToAppend = appendedElements.some(\n (element) => element.is_new === false\n );\n\n prevRenderElementKeysRef.current = currentRenderElementKeys;\n\n if (!shouldAutoScrollToAppend) {\n return;\n }\n\n const animationFrameId = window.requestAnimationFrame(() => {\n const stageLayerElement = stageLayerRef.current;\n const targetElement = lastElementRef.current;\n\n if (!stageLayerElement || !targetElement) {\n return;\n }\n\n const stageLayerRect = stageLayerElement.getBoundingClientRect();\n const targetRect = targetElement.getBoundingClientRect();\n const nextScrollTop =\n stageLayerElement.scrollTop + (targetRect.top - stageLayerRect.top);\n\n // Keep newly appended content visible when the current slide grows downward.\n stageLayerElement.scrollTo({\n top: Math.max(nextScrollTop, 0),\n behavior: \"smooth\",\n });\n });\n\n return () => {\n window.cancelAnimationFrame(animationFrameId);\n };\n }, [currentElementList, currentRenderElementKeys]);\n\n useEffect(() => {\n if (!shouldScrollToBottomRef.current) {\n return;\n }\n\n shouldScrollToBottomRef.current = false;\n\n if (currentElementList.length === 0) {\n return;\n }\n\n const animationFrameId = window.requestAnimationFrame(() => {\n scrollStageToBottom();\n });\n\n return () => {\n window.cancelAnimationFrame(animationFrameId);\n };\n }, [currentElementList, scrollStageToBottom]);\n\n return (\n <section\n ref={sectionRef}\n className={cn(\n \"relative h-full w-full\",\n isMobileDevice && \"slide--mobile-device\",\n isImmersiveMobileFullscreen && \"slide--mobile-landscape\",\n isNativeMobileFullscreen && \"slide--mobile-landscape-native\",\n className\n )}\n onClick={handleSurfaceClick}\n onPointerDown={handleSurfacePointerDown}\n {...props}\n >\n {shouldShowMobileFullscreenMask ? (\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none fixed left-0 top-0 z-[9999] h-[100vh] max-h-[100vh] w-[100vw]\"\n />\n ) : null}\n\n <div\n ref={viewportRef}\n className={cn(\n \"slide__viewport relative h-full min-h-0 w-full\",\n isImmersiveMobileFullscreen && \"slide__viewport--mobile-landscape\",\n isImmersiveMobileFullscreen &&\n !shouldRotateFullscreenViewport &&\n \"slide__viewport--mobile-landscape-native\"\n )}\n >\n {shouldShowFullscreenHeader ? (\n <div className=\"slide-landscape-header\">\n <button\n aria-label={fullscreenHeader?.backAriaLabel ?? \"Back\"}\n className=\"slide-landscape-header__back\"\n onClick={handleFullscreenHeaderBack}\n type=\"button\"\n >\n <ChevronLeft className=\"h-6 w-6 text-white\" strokeWidth={2.25} />\n </button>\n\n {fullscreenHeader?.content ? (\n <div className=\"min-w-0 flex-1 overflow-hidden\">\n {fullscreenHeader.content}\n </div>\n ) : null}\n </div>\n ) : null}\n\n <div\n className={cn(\n \"h-full min-h-0 w-full\",\n shouldApplyFullscreenViewportPadding &&\n \"slide__viewport-content--with-header\",\n isSingleSlide ? \"slide-content--single\" : \"grid gap-4\"\n )}\n >\n {currentElementList.length > 0 ? (\n <div className=\"slide-stage\">\n <div ref={stageLayerRef} className=\"slide-stage__layer w-full\">\n {mountedStepStates.map(\n (mountedStepState, mountedStepStateIndex) => {\n const isActiveStep =\n mountedStepStateIndex === currentMountedStateIndex;\n\n return (\n <div\n key={\n mountedStepState.sourceStepIndexes[0] ??\n mountedStepStateIndex\n }\n aria-hidden={!isActiveStep || undefined}\n className=\"w-full h-full\"\n style={{ display: isActiveStep ? undefined : \"none\" }}\n >\n {renderSlideElementList(\n mountedStepState.elementList,\n isActiveStep\n )}\n </div>\n );\n }\n )}\n </div>\n </div>\n ) : null}\n </div>\n\n {isAudioLoadingVisible ? (\n <LoadingOverlayCard\n message={bufferingText}\n className=\"absolute left-1/2 top-1/2 z-[3] -translate-x-1/2 -translate-y-1/2\"\n />\n ) : null}\n\n <SlideFullscreenHint\n onClose={handleFullscreenHintClose}\n open={isFullscreenHintOpen}\n text={fullscreenHintText}\n />\n\n <SubtitleOverlay\n extraBottomOffset={interactionOverlaySubtitleOffset}\n hasPlayerGap={playerVisible}\n isEnabled={isSubtitleEnabled && hasCurrentAudioPlaybackStarted}\n isPlayerHidden={shouldRenderPlayer && !playerVisible}\n playbackTimeStore={playbackTimeStore}\n subtitleCues={currentSubtitleCues}\n />\n\n {shouldShowInteractionOverlay ? (\n <div\n ref={interactionOverlayRef}\n className={cn(\n \"slide-interaction-overlay\",\n playerVisible && shouldRenderPlayer\n ? \"slide-interaction-overlay--with-player\"\n : \"slide-interaction-overlay--standalone\"\n )}\n onClick={stopOverlayPropagation}\n onPointerDown={stopOverlayPropagation}\n style={interactionOverlayStyle}\n >\n <InteractionOverlayCard\n content={String(activeInteractionElement?.content ?? \"\")}\n defaultButtonText={interactionDefaults.buttonText ?? \"\"}\n defaultInputText={interactionDefaults.inputText ?? \"\"}\n defaultSelectedValues={interactionDefaultSelectedValues}\n confirmButtonText={interactionTexts?.confirmButtonText}\n copyButtonText={interactionTexts?.copyButtonText}\n copiedButtonText={interactionTexts?.copiedButtonText}\n onSend={handleInteractionSend}\n readonly={isInteractionReadonly}\n title={\n interactionTexts?.title ??\n interactionTitle ??\n \"Submit the content below to continue.\"\n }\n />\n </div>\n ) : null}\n\n {shouldRenderPlayer ? (\n <Player\n audioList={audioList}\n className={cn(\n \"absolute left-1/2 bottom-6 z-[2] -translate-x-1/2\",\n playerClassName,\n !playerVisible && \"pointer-events-none opacity-0\"\n )}\n currentAudioIndex={currentAudioIndex}\n defaultPlaying\n isPlaybackPaused={shouldPausePlaybackForCustomAction}\n isAutoAdvanceEnabled={isAutoAdvanceEnabled}\n hasInteraction={Boolean(activeInteractionElement)}\n isInteractionOpen={isInteractionOverlayOpen}\n isSubtitleEnabled={isSubtitleEnabled}\n onAutoAdvanceToggle={setIsAutoAdvanceEnabled}\n onLoadingChange={handlePlayerLoadingChange}\n onPlaybackStarted={() => {\n setHasCurrentAudioPlaybackStarted(true);\n }}\n onPlaybackTimeChange={playbackTimeStore.setTime}\n onSubtitleToggle={() => {\n setIsSubtitleEnabled((previousEnabled) => !previousEnabled);\n }}\n nextDisabled={!canGoNext}\n onEnded={handlePlayerEnded}\n onFullscreen={handleFullscreen}\n isFullscreen={isBrowserFullscreen}\n mobileViewMode={effectiveMobileViewMode}\n settingsPortalContainer={viewportRef.current}\n onMobileViewModeChange={handleMobileViewModeSelect}\n onInteractionToggle={handleInteractionToggle}\n onNext={handleNext}\n onPrev={handlePrev}\n prevDisabled={!canGoPrev}\n showControls={playerVisible}\n texts={playerTexts}\n customActionContext={playerCustomActionContext}\n customActions={playerCustomActions}\n useAutoAdvanceToggle={shouldUseSilentStepAutoAdvanceToggle}\n />\n ) : null}\n </div>\n </section>\n );\n};\n\nexport default Slide;\n"],"names":["DEFAULT_MARKER_AUTO_ADVANCE_DELAY_MS","DEFAULT_INTERACTION_OVERLAY_OPEN_DELAY_MS","DEFAULT_INTERACTION_OVERLAY_FALLBACK_OFFSET_PX","DEFAULT_INTERACTION_SUBTITLE_GAP_PX","InteractionOverlayCard","memo","content","title","defaultButtonText","defaultInputText","defaultSelectedValues","confirmButtonText","copyButtonText","copiedButtonText","onSend","readonly","jsxs","jsx","ContentRender","areStepElementListsEqual","prevElementList","nextElementList","element","index","nextElement","Slide","elementList","showPlayer","playerAlwaysVisible","playerClassName","fullscreenHeader","playerCustomActions","playerCustomActionPauseOnActive","bufferingText","interactionTitle","interactionTexts","playerTexts","playerAutoHideDelay","markerAutoAdvanceDelay","interactionDefaultValueOptions","onPlayerVisibilityChange","onMobileViewModeChange","onStepChange","enableIframeScaling","disableLoadingOverlay","className","onPointerDown","props","sectionRef","useRef","viewportRef","stageLayerRef","lastElementRef","playerHideTimerRef","autoAdvanceTimerRef","interactionAutoCloseTimerRef","interactionOverlayOpenTimerRef","interactionOverlayRef","prevRenderElementKeysRef","shouldScrollToBottomRef","pendingInteractionOverlayStepIndexRef","playbackResetKeyRef","appendedMarkerAdvanceStateRef","currentElementList","stepElementLists","slideElementList","currentIndex","audioList","currentAudioSequenceIndexes","currentStepHasSpeakableElement","currentInteractionElement","canGoPrev","canGoNext","goPrev","goNext","useSlide","currentStepElement","useMemo","isSingleSlide","shouldRenderPlayer","currentAudioSequenceKeys","audioIndex","audioKey","isPlayerVisible","setIsPlayerVisible","useState","hasPlayerInteracted","setHasPlayerInteracted","isAutoAdvanceEnabled","setIsAutoAdvanceEnabled","currentAudioKey","setCurrentAudioKey","isAudioLoadingVisible","setIsAudioLoadingVisible","hasCompletedCurrentStepAudio","setHasCompletedCurrentStepAudio","hasCurrentAudioPlaybackStarted","setHasCurrentAudioPlaybackStarted","isSubtitleEnabled","setIsSubtitleEnabled","isPlayerCustomActionActive","setIsPlayerCustomActionActive","activeInteractionElement","setActiveInteractionElement","isInteractionOverlayOpen","setIsInteractionOverlayOpen","interactionOverlaySubtitleOffset","setInteractionOverlaySubtitleOffset","isBrowserFullscreen","setIsBrowserFullscreen","isMobileDevice","getIsMobileDevice","mobileViewMode","setMobileViewMode","DEFAULT_MOBILE_VIEW_MODE","hasManualMobileViewMode","setHasManualMobileViewMode","isViewportFullscreenPreferred","setIsViewportFullscreenPreferred","getIsFullscreenPreferredViewport","isFullscreenHintOpen","setIsFullscreenHintOpen","playbackTimeStore","createPlaybackTimeStore","effectiveMobileViewMode","isImmersiveMobileFullscreen","isNativeMobileFullscreen","shouldRotateFullscreenViewport","resolveMobileViewModeState","previousEffectiveMobileViewModeRef","playerVisible","shouldShowFullscreenHeader","shouldApplyFullscreenViewportPadding","shouldShowMobileFullscreenMask","fullscreenHintText","DEFAULT_SLIDE_PLAYER_TEXTS","handleMobileViewModeSelect","useCallback","nextViewMode","handleMobileViewModeReset","handleFullscreenHeaderBack","handleFullscreenHintClose","setPlayerCustomActionActive","active","togglePlayerCustomActionActive","previous","mountedStepStates","currentMountedStateIndex","nextMountedStepStates","mountedStateIndexByStep","stepElementList","stepIndex","existingMountedStateIndex","mountedStepState","currentStepKey","currentAudioIndex","audioItem","currentAudioItem","currentSubtitleCues","currentAudioSequenceStartKey","playerCustomActionContext","resolvePlayerCustomActionElement","playerCustomActionCount","getPlayerCustomActionCount","interactionOverlayStyle","hasAvailableStepAudio","currentInteractionResetKey","currentPlaybackResetKey","currentPlaybackStartedResetKey","hasCurrentStepAudioUrl","shouldPausePlaybackForCustomAction","shouldUseSilentStepAutoAdvanceToggle","shouldUseAutoAdvanceToggle","clearPlayerHideTimer","clearInteractionAutoCloseTimer","clearInteractionOverlayOpenTimer","clearAutoAdvanceTimer","resetAudioSequence","startCurrentAudioSequence","nextAudioKey","continueAfterInteraction","scheduleInteractionOverlayOpen","interactionElement","openOverlay","showPlayerControls","enableAutoHide","hasResolvedCurrentInteraction","shouldBlockPlaybackForInteraction","useEffect","syncViewportFullscreenPreference","subscribeMobileDeviceChange","shouldShowFullscreenHint","previousState","shouldAdvanceIntoAppendedMarker","shouldAutoAdvanceIntoAppendedMarker","handleSandboxInteraction","event","isSandboxInteractionMessage","useWakePlayerFromIframe","hasPlaybackContextChanged","shouldInitializeAudioSequence","getPlaybackSequenceTransition","shouldOpenInteractionOverlayAfterAudio","shouldPresentOverlay","shouldPresentInteractionOverlay","interactionDefaults","shouldPreferResolvedInteractionInput","getInteractionDefaultValues","interactionDefaultSelectedValues","getInteractionDefaultSelectedValues","hasResolvedInteractionInput","isInteractionReadonly","shouldAutoContinueInteraction","shouldShowInteractionOverlay","handleInteractionSend","resolvedUserInput","prevElement","syncFullscreenState","interactionOverlayElement","updateSubtitleOffset","overlayHeight","resizeObserver","renderSlideElement","options","Fragment","IframeSandbox","renderSlideElementList","isActiveStep","visibleElementCount","lastVisibleElementIndex","lastVisibleIndex","isPreRenderedHtml","cn","handleFullscreen","target","scrollStageToBottom","stageLayerElement","handlePrev","handleNext","handlePlayerLoadingChange","loading","handlePlayerEnded","endedAudioKey","activeSequencePosition","audioSequenceKey","nextSequencePosition","nextStepIndex","nextStepElement","handleInteractionToggle","prevOpen","stopOverlayPropagation","handleSurfacePointerDown","handleSurfaceClick","currentRenderElementKeys","prevKeys","shouldAutoScrollToAppend","key","animationFrameId","targetElement","stageLayerRect","targetRect","nextScrollTop","ChevronLeft","mountedStepStateIndex","LoadingOverlayCard","SlideFullscreenHint","SubtitleOverlay","Player","previousEnabled"],"mappings":"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"}
|
|
@@ -102,6 +102,7 @@ export declare const CustomPlayerActionButton: Story;
|
|
|
102
102
|
export declare const FullViewportSlides: Story;
|
|
103
103
|
export declare const FullViewportSingleSlide: Story;
|
|
104
104
|
export declare const FullViewportSingleSlideWithEmptyPpt: Story;
|
|
105
|
+
export declare const StuckSpeakableFixtureSSE: Story;
|
|
105
106
|
export declare const HistorySlides: Story;
|
|
106
107
|
export declare const StreamingSingleIframeSlide: Story;
|
|
107
108
|
export declare const StreamingSpeakableLoadingOnlySlide: Story;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("../../../../../../_virtual/index.
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("../../../../../../_virtual/index.cjs8.js");/*!
|
|
2
2
|
Copyright (c) 2018 Jed Watson.
|
|
3
3
|
Licensed under the MIT License (MIT), see
|
|
4
4
|
http://jedwatson.github.io/classnames
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const _e=require("./chunk-TZMSLE5B.cjs.js"),H=require("./chunk-S3R3BYOJ.cjs.js"),B=require("./chunk-ABZYJK2D.cjs.js"),y=require("./chunk-AGHRB4JF.cjs.js");require("../../../../../../d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/index.cjs.js");require("../../../../../../d3-zoom@3.0.0/node_modules/d3-zoom/src/transform.cjs.js");const Te=require("../../../../../../../../../_virtual/index.cjs8.js"),jt=require("../../../../../../d3-selection@3.0.0/node_modules/d3-selection/src/select.cjs.js");var Ft=(function(){var e=y.__name(function(xt,b,x,v){for(x=x||{},v=xt.length;v--;x[xt[v]]=b);return x},"o"),t=[1,24],s=[1,25],o=[1,26],l=[1,27],a=[1,28],r=[1,63],i=[1,64],n=[1,65],u=[1,66],d=[1,67],p=[1,68],f=[1,69],E=[1,29],O=[1,30],S=[1,31],P=[1,32],L=[1,33],F=[1,34],G=[1,35],K=[1,36],J=[1,37],Z=[1,38],$=[1,39],tt=[1,40],et=[1,41],at=[1,42],nt=[1,43],it=[1,44],rt=[1,45],st=[1,46],lt=[1,47],ot=[1,48],ct=[1,50],ht=[1,51],ut=[1,52],dt=[1,53],_t=[1,54],ft=[1,55],pt=[1,56],yt=[1,57],gt=[1,58],mt=[1,59],bt=[1,60],Tt=[14,42],Qt=[14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],Dt=[12,14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],A=[1,82],k=[1,83],C=[1,84],w=[1,85],T=[12,14,42],se=[12,14,33,42],Mt=[12,14,33,42,76,77,79,80],At=[12,33],Ht=[34,36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],qt={trace:y.__name(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,direction_tb:6,direction_bt:7,direction_rl:8,direction_lr:9,graphConfig:10,C4_CONTEXT:11,NEWLINE:12,statements:13,EOF:14,C4_CONTAINER:15,C4_COMPONENT:16,C4_DYNAMIC:17,C4_DEPLOYMENT:18,otherStatements:19,diagramStatements:20,otherStatement:21,title:22,accDescription:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,boundaryStatement:29,boundaryStartStatement:30,boundaryStopStatement:31,boundaryStart:32,LBRACE:33,ENTERPRISE_BOUNDARY:34,attributes:35,SYSTEM_BOUNDARY:36,BOUNDARY:37,CONTAINER_BOUNDARY:38,NODE:39,NODE_L:40,NODE_R:41,RBRACE:42,diagramStatement:43,PERSON:44,PERSON_EXT:45,SYSTEM:46,SYSTEM_DB:47,SYSTEM_QUEUE:48,SYSTEM_EXT:49,SYSTEM_EXT_DB:50,SYSTEM_EXT_QUEUE:51,CONTAINER:52,CONTAINER_DB:53,CONTAINER_QUEUE:54,CONTAINER_EXT:55,CONTAINER_EXT_DB:56,CONTAINER_EXT_QUEUE:57,COMPONENT:58,COMPONENT_DB:59,COMPONENT_QUEUE:60,COMPONENT_EXT:61,COMPONENT_EXT_DB:62,COMPONENT_EXT_QUEUE:63,REL:64,BIREL:65,REL_U:66,REL_D:67,REL_L:68,REL_R:69,REL_B:70,REL_INDEX:71,UPDATE_EL_STYLE:72,UPDATE_REL_STYLE:73,UPDATE_LAYOUT_CONFIG:74,attribute:75,STR:76,STR_KEY:77,STR_VALUE:78,ATTRIBUTE:79,ATTRIBUTE_EMPTY:80,$accept:0,$end:1},terminals_:{2:"error",6:"direction_tb",7:"direction_bt",8:"direction_rl",9:"direction_lr",11:"C4_CONTEXT",12:"NEWLINE",14:"EOF",15:"C4_CONTAINER",16:"C4_COMPONENT",17:"C4_DYNAMIC",18:"C4_DEPLOYMENT",22:"title",23:"accDescription",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"LBRACE",34:"ENTERPRISE_BOUNDARY",36:"SYSTEM_BOUNDARY",37:"BOUNDARY",38:"CONTAINER_BOUNDARY",39:"NODE",40:"NODE_L",41:"NODE_R",42:"RBRACE",44:"PERSON",45:"PERSON_EXT",46:"SYSTEM",47:"SYSTEM_DB",48:"SYSTEM_QUEUE",49:"SYSTEM_EXT",50:"SYSTEM_EXT_DB",51:"SYSTEM_EXT_QUEUE",52:"CONTAINER",53:"CONTAINER_DB",54:"CONTAINER_QUEUE",55:"CONTAINER_EXT",56:"CONTAINER_EXT_DB",57:"CONTAINER_EXT_QUEUE",58:"COMPONENT",59:"COMPONENT_DB",60:"COMPONENT_QUEUE",61:"COMPONENT_EXT",62:"COMPONENT_EXT_DB",63:"COMPONENT_EXT_QUEUE",64:"REL",65:"BIREL",66:"REL_U",67:"REL_D",68:"REL_L",69:"REL_R",70:"REL_B",71:"REL_INDEX",72:"UPDATE_EL_STYLE",73:"UPDATE_REL_STYLE",74:"UPDATE_LAYOUT_CONFIG",76:"STR",77:"STR_KEY",78:"STR_VALUE",79:"ATTRIBUTE",80:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[5,1],[5,1],[5,1],[5,1],[4,1],[10,4],[10,4],[10,4],[10,4],[10,4],[13,1],[13,1],[13,2],[19,1],[19,2],[19,3],[21,1],[21,1],[21,2],[21,2],[21,1],[29,3],[30,3],[30,3],[30,4],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[31,1],[20,1],[20,2],[20,3],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,1],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[35,1],[35,2],[75,1],[75,2],[75,1],[75,1]],performAction:y.__name(function(b,x,v,g,R,h,Pt){var _=h.length-1;switch(R){case 3:g.setDirection("TB");break;case 4:g.setDirection("BT");break;case 5:g.setDirection("RL");break;case 6:g.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:g.setC4Type(h[_-3]);break;case 19:g.setTitle(h[_].substring(6)),this.$=h[_].substring(6);break;case 20:g.setAccDescription(h[_].substring(15)),this.$=h[_].substring(15);break;case 21:this.$=h[_].trim(),g.setTitle(this.$);break;case 22:case 23:this.$=h[_].trim(),g.setAccDescription(this.$);break;case 28:h[_].splice(2,0,"ENTERPRISE"),g.addPersonOrSystemBoundary(...h[_]),this.$=h[_];break;case 29:h[_].splice(2,0,"SYSTEM"),g.addPersonOrSystemBoundary(...h[_]),this.$=h[_];break;case 30:g.addPersonOrSystemBoundary(...h[_]),this.$=h[_];break;case 31:h[_].splice(2,0,"CONTAINER"),g.addContainerBoundary(...h[_]),this.$=h[_];break;case 32:g.addDeploymentNode("node",...h[_]),this.$=h[_];break;case 33:g.addDeploymentNode("nodeL",...h[_]),this.$=h[_];break;case 34:g.addDeploymentNode("nodeR",...h[_]),this.$=h[_];break;case 35:g.popBoundaryParseStack();break;case 39:g.addPersonOrSystem("person",...h[_]),this.$=h[_];break;case 40:g.addPersonOrSystem("external_person",...h[_]),this.$=h[_];break;case 41:g.addPersonOrSystem("system",...h[_]),this.$=h[_];break;case 42:g.addPersonOrSystem("system_db",...h[_]),this.$=h[_];break;case 43:g.addPersonOrSystem("system_queue",...h[_]),this.$=h[_];break;case 44:g.addPersonOrSystem("external_system",...h[_]),this.$=h[_];break;case 45:g.addPersonOrSystem("external_system_db",...h[_]),this.$=h[_];break;case 46:g.addPersonOrSystem("external_system_queue",...h[_]),this.$=h[_];break;case 47:g.addContainer("container",...h[_]),this.$=h[_];break;case 48:g.addContainer("container_db",...h[_]),this.$=h[_];break;case 49:g.addContainer("container_queue",...h[_]),this.$=h[_];break;case 50:g.addContainer("external_container",...h[_]),this.$=h[_];break;case 51:g.addContainer("external_container_db",...h[_]),this.$=h[_];break;case 52:g.addContainer("external_container_queue",...h[_]),this.$=h[_];break;case 53:g.addComponent("component",...h[_]),this.$=h[_];break;case 54:g.addComponent("component_db",...h[_]),this.$=h[_];break;case 55:g.addComponent("component_queue",...h[_]),this.$=h[_];break;case 56:g.addComponent("external_component",...h[_]),this.$=h[_];break;case 57:g.addComponent("external_component_db",...h[_]),this.$=h[_];break;case 58:g.addComponent("external_component_queue",...h[_]),this.$=h[_];break;case 60:g.addRel("rel",...h[_]),this.$=h[_];break;case 61:g.addRel("birel",...h[_]),this.$=h[_];break;case 62:g.addRel("rel_u",...h[_]),this.$=h[_];break;case 63:g.addRel("rel_d",...h[_]),this.$=h[_];break;case 64:g.addRel("rel_l",...h[_]),this.$=h[_];break;case 65:g.addRel("rel_r",...h[_]),this.$=h[_];break;case 66:g.addRel("rel_b",...h[_]),this.$=h[_];break;case 67:h[_].splice(0,1),g.addRel("rel",...h[_]),this.$=h[_];break;case 68:g.updateElStyle("update_el_style",...h[_]),this.$=h[_];break;case 69:g.updateRelStyle("update_rel_style",...h[_]),this.$=h[_];break;case 70:g.updateLayoutConfig("update_layout_config",...h[_]),this.$=h[_];break;case 71:this.$=[h[_]];break;case 72:h[_].unshift(h[_-1]),this.$=h[_];break;case 73:case 75:this.$=h[_].trim();break;case 74:let kt={};kt[h[_-1].trim()]=h[_].trim(),this.$=kt;break;case 76:this.$="";break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],7:[1,6],8:[1,7],9:[1,8],10:4,11:[1,9],15:[1,10],16:[1,11],17:[1,12],18:[1,13]},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,7]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{12:[1,14]},{12:[1,15]},{12:[1,16]},{12:[1,17]},{12:[1,18]},{13:19,19:20,20:21,21:22,22:t,23:s,24:o,26:l,28:a,29:49,30:61,32:62,34:r,36:i,37:n,38:u,39:d,40:p,41:f,43:23,44:E,45:O,46:S,47:P,48:L,49:F,50:G,51:K,52:J,53:Z,54:$,55:tt,56:et,57:at,58:nt,59:it,60:rt,61:st,62:lt,63:ot,64:ct,65:ht,66:ut,67:dt,68:_t,69:ft,70:pt,71:yt,72:gt,73:mt,74:bt},{13:70,19:20,20:21,21:22,22:t,23:s,24:o,26:l,28:a,29:49,30:61,32:62,34:r,36:i,37:n,38:u,39:d,40:p,41:f,43:23,44:E,45:O,46:S,47:P,48:L,49:F,50:G,51:K,52:J,53:Z,54:$,55:tt,56:et,57:at,58:nt,59:it,60:rt,61:st,62:lt,63:ot,64:ct,65:ht,66:ut,67:dt,68:_t,69:ft,70:pt,71:yt,72:gt,73:mt,74:bt},{13:71,19:20,20:21,21:22,22:t,23:s,24:o,26:l,28:a,29:49,30:61,32:62,34:r,36:i,37:n,38:u,39:d,40:p,41:f,43:23,44:E,45:O,46:S,47:P,48:L,49:F,50:G,51:K,52:J,53:Z,54:$,55:tt,56:et,57:at,58:nt,59:it,60:rt,61:st,62:lt,63:ot,64:ct,65:ht,66:ut,67:dt,68:_t,69:ft,70:pt,71:yt,72:gt,73:mt,74:bt},{13:72,19:20,20:21,21:22,22:t,23:s,24:o,26:l,28:a,29:49,30:61,32:62,34:r,36:i,37:n,38:u,39:d,40:p,41:f,43:23,44:E,45:O,46:S,47:P,48:L,49:F,50:G,51:K,52:J,53:Z,54:$,55:tt,56:et,57:at,58:nt,59:it,60:rt,61:st,62:lt,63:ot,64:ct,65:ht,66:ut,67:dt,68:_t,69:ft,70:pt,71:yt,72:gt,73:mt,74:bt},{13:73,19:20,20:21,21:22,22:t,23:s,24:o,26:l,28:a,29:49,30:61,32:62,34:r,36:i,37:n,38:u,39:d,40:p,41:f,43:23,44:E,45:O,46:S,47:P,48:L,49:F,50:G,51:K,52:J,53:Z,54:$,55:tt,56:et,57:at,58:nt,59:it,60:rt,61:st,62:lt,63:ot,64:ct,65:ht,66:ut,67:dt,68:_t,69:ft,70:pt,71:yt,72:gt,73:mt,74:bt},{14:[1,74]},e(Tt,[2,13],{43:23,29:49,30:61,32:62,20:75,34:r,36:i,37:n,38:u,39:d,40:p,41:f,44:E,45:O,46:S,47:P,48:L,49:F,50:G,51:K,52:J,53:Z,54:$,55:tt,56:et,57:at,58:nt,59:it,60:rt,61:st,62:lt,63:ot,64:ct,65:ht,66:ut,67:dt,68:_t,69:ft,70:pt,71:yt,72:gt,73:mt,74:bt}),e(Tt,[2,14]),e(Qt,[2,16],{12:[1,76]}),e(Tt,[2,36],{12:[1,77]}),e(Dt,[2,19]),e(Dt,[2,20]),{25:[1,78]},{27:[1,79]},e(Dt,[2,23]),{35:80,75:81,76:A,77:k,79:C,80:w},{35:86,75:81,76:A,77:k,79:C,80:w},{35:87,75:81,76:A,77:k,79:C,80:w},{35:88,75:81,76:A,77:k,79:C,80:w},{35:89,75:81,76:A,77:k,79:C,80:w},{35:90,75:81,76:A,77:k,79:C,80:w},{35:91,75:81,76:A,77:k,79:C,80:w},{35:92,75:81,76:A,77:k,79:C,80:w},{35:93,75:81,76:A,77:k,79:C,80:w},{35:94,75:81,76:A,77:k,79:C,80:w},{35:95,75:81,76:A,77:k,79:C,80:w},{35:96,75:81,76:A,77:k,79:C,80:w},{35:97,75:81,76:A,77:k,79:C,80:w},{35:98,75:81,76:A,77:k,79:C,80:w},{35:99,75:81,76:A,77:k,79:C,80:w},{35:100,75:81,76:A,77:k,79:C,80:w},{35:101,75:81,76:A,77:k,79:C,80:w},{35:102,75:81,76:A,77:k,79:C,80:w},{35:103,75:81,76:A,77:k,79:C,80:w},{35:104,75:81,76:A,77:k,79:C,80:w},e(T,[2,59]),{35:105,75:81,76:A,77:k,79:C,80:w},{35:106,75:81,76:A,77:k,79:C,80:w},{35:107,75:81,76:A,77:k,79:C,80:w},{35:108,75:81,76:A,77:k,79:C,80:w},{35:109,75:81,76:A,77:k,79:C,80:w},{35:110,75:81,76:A,77:k,79:C,80:w},{35:111,75:81,76:A,77:k,79:C,80:w},{35:112,75:81,76:A,77:k,79:C,80:w},{35:113,75:81,76:A,77:k,79:C,80:w},{35:114,75:81,76:A,77:k,79:C,80:w},{35:115,75:81,76:A,77:k,79:C,80:w},{20:116,29:49,30:61,32:62,34:r,36:i,37:n,38:u,39:d,40:p,41:f,43:23,44:E,45:O,46:S,47:P,48:L,49:F,50:G,51:K,52:J,53:Z,54:$,55:tt,56:et,57:at,58:nt,59:it,60:rt,61:st,62:lt,63:ot,64:ct,65:ht,66:ut,67:dt,68:_t,69:ft,70:pt,71:yt,72:gt,73:mt,74:bt},{12:[1,118],33:[1,117]},{35:119,75:81,76:A,77:k,79:C,80:w},{35:120,75:81,76:A,77:k,79:C,80:w},{35:121,75:81,76:A,77:k,79:C,80:w},{35:122,75:81,76:A,77:k,79:C,80:w},{35:123,75:81,76:A,77:k,79:C,80:w},{35:124,75:81,76:A,77:k,79:C,80:w},{35:125,75:81,76:A,77:k,79:C,80:w},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},e(Tt,[2,15]),e(Qt,[2,17],{21:22,19:130,22:t,23:s,24:o,26:l,28:a}),e(Tt,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:t,23:s,24:o,26:l,28:a,34:r,36:i,37:n,38:u,39:d,40:p,41:f,44:E,45:O,46:S,47:P,48:L,49:F,50:G,51:K,52:J,53:Z,54:$,55:tt,56:et,57:at,58:nt,59:it,60:rt,61:st,62:lt,63:ot,64:ct,65:ht,66:ut,67:dt,68:_t,69:ft,70:pt,71:yt,72:gt,73:mt,74:bt}),e(Dt,[2,21]),e(Dt,[2,22]),e(T,[2,39]),e(se,[2,71],{75:81,35:132,76:A,77:k,79:C,80:w}),e(Mt,[2,73]),{78:[1,133]},e(Mt,[2,75]),e(Mt,[2,76]),e(T,[2,40]),e(T,[2,41]),e(T,[2,42]),e(T,[2,43]),e(T,[2,44]),e(T,[2,45]),e(T,[2,46]),e(T,[2,47]),e(T,[2,48]),e(T,[2,49]),e(T,[2,50]),e(T,[2,51]),e(T,[2,52]),e(T,[2,53]),e(T,[2,54]),e(T,[2,55]),e(T,[2,56]),e(T,[2,57]),e(T,[2,58]),e(T,[2,60]),e(T,[2,61]),e(T,[2,62]),e(T,[2,63]),e(T,[2,64]),e(T,[2,65]),e(T,[2,66]),e(T,[2,67]),e(T,[2,68]),e(T,[2,69]),e(T,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},e(At,[2,28]),e(At,[2,29]),e(At,[2,30]),e(At,[2,31]),e(At,[2,32]),e(At,[2,33]),e(At,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},e(Qt,[2,18]),e(Tt,[2,38]),e(se,[2,72]),e(Mt,[2,74]),e(T,[2,24]),e(T,[2,35]),e(Ht,[2,25]),e(Ht,[2,26],{12:[1,138]}),e(Ht,[2,27])],defaultActions:{2:[2,1],3:[2,2],4:[2,7],5:[2,3],6:[2,4],7:[2,5],8:[2,6],74:[2,8],126:[2,9],127:[2,10],128:[2,11],129:[2,12]},parseError:y.__name(function(b,x){if(x.recoverable)this.trace(b);else{var v=new Error(b);throw v.hash=x,v}},"parseError"),parse:y.__name(function(b){var x=this,v=[0],g=[],R=[null],h=[],Pt=this.table,_="",kt=0,le=0,Ae=2,oe=1,ke=h.slice.call(arguments,1),D=Object.create(this.lexer),Ct={yy:{}};for(var Gt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Gt)&&(Ct.yy[Gt]=this.yy[Gt]);D.setInput(b,Ct.yy),Ct.yy.lexer=D,Ct.yy.parser=this,typeof D.yylloc>"u"&&(D.yylloc={});var Kt=D.yylloc;h.push(Kt);var Ce=D.options&&D.options.ranges;typeof Ct.yy.parseError=="function"?this.parseError=Ct.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function we(N){v.length=v.length-2*N,R.length=R.length-N,h.length=h.length-N}y.__name(we,"popStack");function ce(){var N;return N=g.pop()||D.lex()||oe,typeof N!="number"&&(N instanceof Array&&(g=N,N=g.pop()),N=x.symbols_[N]||N),N}y.__name(ce,"lex");for(var M,wt,Y,Jt,Ot={},Nt,Q,he,Yt;;){if(wt=v[v.length-1],this.defaultActions[wt]?Y=this.defaultActions[wt]:((M===null||typeof M>"u")&&(M=ce()),Y=Pt[wt]&&Pt[wt][M]),typeof Y>"u"||!Y.length||!Y[0]){var Zt="";Yt=[];for(Nt in Pt[wt])this.terminals_[Nt]&&Nt>Ae&&Yt.push("'"+this.terminals_[Nt]+"'");D.showPosition?Zt="Parse error on line "+(kt+1)+`:
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const _e=require("./chunk-TZMSLE5B.cjs.js"),H=require("./chunk-S3R3BYOJ.cjs.js"),B=require("./chunk-ABZYJK2D.cjs.js"),y=require("./chunk-AGHRB4JF.cjs.js");require("../../../../../../d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/index.cjs.js");require("../../../../../../d3-zoom@3.0.0/node_modules/d3-zoom/src/transform.cjs.js");const Te=require("../../../../../../../../../_virtual/index.cjs9.js"),jt=require("../../../../../../d3-selection@3.0.0/node_modules/d3-selection/src/select.cjs.js");var Ft=(function(){var e=y.__name(function(xt,b,x,v){for(x=x||{},v=xt.length;v--;x[xt[v]]=b);return x},"o"),t=[1,24],s=[1,25],o=[1,26],l=[1,27],a=[1,28],r=[1,63],i=[1,64],n=[1,65],u=[1,66],d=[1,67],p=[1,68],f=[1,69],E=[1,29],O=[1,30],S=[1,31],P=[1,32],L=[1,33],F=[1,34],G=[1,35],K=[1,36],J=[1,37],Z=[1,38],$=[1,39],tt=[1,40],et=[1,41],at=[1,42],nt=[1,43],it=[1,44],rt=[1,45],st=[1,46],lt=[1,47],ot=[1,48],ct=[1,50],ht=[1,51],ut=[1,52],dt=[1,53],_t=[1,54],ft=[1,55],pt=[1,56],yt=[1,57],gt=[1,58],mt=[1,59],bt=[1,60],Tt=[14,42],Qt=[14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],Dt=[12,14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],A=[1,82],k=[1,83],C=[1,84],w=[1,85],T=[12,14,42],se=[12,14,33,42],Mt=[12,14,33,42,76,77,79,80],At=[12,33],Ht=[34,36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],qt={trace:y.__name(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,direction_tb:6,direction_bt:7,direction_rl:8,direction_lr:9,graphConfig:10,C4_CONTEXT:11,NEWLINE:12,statements:13,EOF:14,C4_CONTAINER:15,C4_COMPONENT:16,C4_DYNAMIC:17,C4_DEPLOYMENT:18,otherStatements:19,diagramStatements:20,otherStatement:21,title:22,accDescription:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,boundaryStatement:29,boundaryStartStatement:30,boundaryStopStatement:31,boundaryStart:32,LBRACE:33,ENTERPRISE_BOUNDARY:34,attributes:35,SYSTEM_BOUNDARY:36,BOUNDARY:37,CONTAINER_BOUNDARY:38,NODE:39,NODE_L:40,NODE_R:41,RBRACE:42,diagramStatement:43,PERSON:44,PERSON_EXT:45,SYSTEM:46,SYSTEM_DB:47,SYSTEM_QUEUE:48,SYSTEM_EXT:49,SYSTEM_EXT_DB:50,SYSTEM_EXT_QUEUE:51,CONTAINER:52,CONTAINER_DB:53,CONTAINER_QUEUE:54,CONTAINER_EXT:55,CONTAINER_EXT_DB:56,CONTAINER_EXT_QUEUE:57,COMPONENT:58,COMPONENT_DB:59,COMPONENT_QUEUE:60,COMPONENT_EXT:61,COMPONENT_EXT_DB:62,COMPONENT_EXT_QUEUE:63,REL:64,BIREL:65,REL_U:66,REL_D:67,REL_L:68,REL_R:69,REL_B:70,REL_INDEX:71,UPDATE_EL_STYLE:72,UPDATE_REL_STYLE:73,UPDATE_LAYOUT_CONFIG:74,attribute:75,STR:76,STR_KEY:77,STR_VALUE:78,ATTRIBUTE:79,ATTRIBUTE_EMPTY:80,$accept:0,$end:1},terminals_:{2:"error",6:"direction_tb",7:"direction_bt",8:"direction_rl",9:"direction_lr",11:"C4_CONTEXT",12:"NEWLINE",14:"EOF",15:"C4_CONTAINER",16:"C4_COMPONENT",17:"C4_DYNAMIC",18:"C4_DEPLOYMENT",22:"title",23:"accDescription",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"LBRACE",34:"ENTERPRISE_BOUNDARY",36:"SYSTEM_BOUNDARY",37:"BOUNDARY",38:"CONTAINER_BOUNDARY",39:"NODE",40:"NODE_L",41:"NODE_R",42:"RBRACE",44:"PERSON",45:"PERSON_EXT",46:"SYSTEM",47:"SYSTEM_DB",48:"SYSTEM_QUEUE",49:"SYSTEM_EXT",50:"SYSTEM_EXT_DB",51:"SYSTEM_EXT_QUEUE",52:"CONTAINER",53:"CONTAINER_DB",54:"CONTAINER_QUEUE",55:"CONTAINER_EXT",56:"CONTAINER_EXT_DB",57:"CONTAINER_EXT_QUEUE",58:"COMPONENT",59:"COMPONENT_DB",60:"COMPONENT_QUEUE",61:"COMPONENT_EXT",62:"COMPONENT_EXT_DB",63:"COMPONENT_EXT_QUEUE",64:"REL",65:"BIREL",66:"REL_U",67:"REL_D",68:"REL_L",69:"REL_R",70:"REL_B",71:"REL_INDEX",72:"UPDATE_EL_STYLE",73:"UPDATE_REL_STYLE",74:"UPDATE_LAYOUT_CONFIG",76:"STR",77:"STR_KEY",78:"STR_VALUE",79:"ATTRIBUTE",80:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[5,1],[5,1],[5,1],[5,1],[4,1],[10,4],[10,4],[10,4],[10,4],[10,4],[13,1],[13,1],[13,2],[19,1],[19,2],[19,3],[21,1],[21,1],[21,2],[21,2],[21,1],[29,3],[30,3],[30,3],[30,4],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[31,1],[20,1],[20,2],[20,3],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,1],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[35,1],[35,2],[75,1],[75,2],[75,1],[75,1]],performAction:y.__name(function(b,x,v,g,R,h,Pt){var _=h.length-1;switch(R){case 3:g.setDirection("TB");break;case 4:g.setDirection("BT");break;case 5:g.setDirection("RL");break;case 6:g.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:g.setC4Type(h[_-3]);break;case 19:g.setTitle(h[_].substring(6)),this.$=h[_].substring(6);break;case 20:g.setAccDescription(h[_].substring(15)),this.$=h[_].substring(15);break;case 21:this.$=h[_].trim(),g.setTitle(this.$);break;case 22:case 23:this.$=h[_].trim(),g.setAccDescription(this.$);break;case 28:h[_].splice(2,0,"ENTERPRISE"),g.addPersonOrSystemBoundary(...h[_]),this.$=h[_];break;case 29:h[_].splice(2,0,"SYSTEM"),g.addPersonOrSystemBoundary(...h[_]),this.$=h[_];break;case 30:g.addPersonOrSystemBoundary(...h[_]),this.$=h[_];break;case 31:h[_].splice(2,0,"CONTAINER"),g.addContainerBoundary(...h[_]),this.$=h[_];break;case 32:g.addDeploymentNode("node",...h[_]),this.$=h[_];break;case 33:g.addDeploymentNode("nodeL",...h[_]),this.$=h[_];break;case 34:g.addDeploymentNode("nodeR",...h[_]),this.$=h[_];break;case 35:g.popBoundaryParseStack();break;case 39:g.addPersonOrSystem("person",...h[_]),this.$=h[_];break;case 40:g.addPersonOrSystem("external_person",...h[_]),this.$=h[_];break;case 41:g.addPersonOrSystem("system",...h[_]),this.$=h[_];break;case 42:g.addPersonOrSystem("system_db",...h[_]),this.$=h[_];break;case 43:g.addPersonOrSystem("system_queue",...h[_]),this.$=h[_];break;case 44:g.addPersonOrSystem("external_system",...h[_]),this.$=h[_];break;case 45:g.addPersonOrSystem("external_system_db",...h[_]),this.$=h[_];break;case 46:g.addPersonOrSystem("external_system_queue",...h[_]),this.$=h[_];break;case 47:g.addContainer("container",...h[_]),this.$=h[_];break;case 48:g.addContainer("container_db",...h[_]),this.$=h[_];break;case 49:g.addContainer("container_queue",...h[_]),this.$=h[_];break;case 50:g.addContainer("external_container",...h[_]),this.$=h[_];break;case 51:g.addContainer("external_container_db",...h[_]),this.$=h[_];break;case 52:g.addContainer("external_container_queue",...h[_]),this.$=h[_];break;case 53:g.addComponent("component",...h[_]),this.$=h[_];break;case 54:g.addComponent("component_db",...h[_]),this.$=h[_];break;case 55:g.addComponent("component_queue",...h[_]),this.$=h[_];break;case 56:g.addComponent("external_component",...h[_]),this.$=h[_];break;case 57:g.addComponent("external_component_db",...h[_]),this.$=h[_];break;case 58:g.addComponent("external_component_queue",...h[_]),this.$=h[_];break;case 60:g.addRel("rel",...h[_]),this.$=h[_];break;case 61:g.addRel("birel",...h[_]),this.$=h[_];break;case 62:g.addRel("rel_u",...h[_]),this.$=h[_];break;case 63:g.addRel("rel_d",...h[_]),this.$=h[_];break;case 64:g.addRel("rel_l",...h[_]),this.$=h[_];break;case 65:g.addRel("rel_r",...h[_]),this.$=h[_];break;case 66:g.addRel("rel_b",...h[_]),this.$=h[_];break;case 67:h[_].splice(0,1),g.addRel("rel",...h[_]),this.$=h[_];break;case 68:g.updateElStyle("update_el_style",...h[_]),this.$=h[_];break;case 69:g.updateRelStyle("update_rel_style",...h[_]),this.$=h[_];break;case 70:g.updateLayoutConfig("update_layout_config",...h[_]),this.$=h[_];break;case 71:this.$=[h[_]];break;case 72:h[_].unshift(h[_-1]),this.$=h[_];break;case 73:case 75:this.$=h[_].trim();break;case 74:let kt={};kt[h[_-1].trim()]=h[_].trim(),this.$=kt;break;case 76:this.$="";break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],7:[1,6],8:[1,7],9:[1,8],10:4,11:[1,9],15:[1,10],16:[1,11],17:[1,12],18:[1,13]},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,7]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{12:[1,14]},{12:[1,15]},{12:[1,16]},{12:[1,17]},{12:[1,18]},{13:19,19:20,20:21,21:22,22:t,23:s,24:o,26:l,28:a,29:49,30:61,32:62,34:r,36:i,37:n,38:u,39:d,40:p,41:f,43:23,44:E,45:O,46:S,47:P,48:L,49:F,50:G,51:K,52:J,53:Z,54:$,55:tt,56:et,57:at,58:nt,59:it,60:rt,61:st,62:lt,63:ot,64:ct,65:ht,66:ut,67:dt,68:_t,69:ft,70:pt,71:yt,72:gt,73:mt,74:bt},{13:70,19:20,20:21,21:22,22:t,23:s,24:o,26:l,28:a,29:49,30:61,32:62,34:r,36:i,37:n,38:u,39:d,40:p,41:f,43:23,44:E,45:O,46:S,47:P,48:L,49:F,50:G,51:K,52:J,53:Z,54:$,55:tt,56:et,57:at,58:nt,59:it,60:rt,61:st,62:lt,63:ot,64:ct,65:ht,66:ut,67:dt,68:_t,69:ft,70:pt,71:yt,72:gt,73:mt,74:bt},{13:71,19:20,20:21,21:22,22:t,23:s,24:o,26:l,28:a,29:49,30:61,32:62,34:r,36:i,37:n,38:u,39:d,40:p,41:f,43:23,44:E,45:O,46:S,47:P,48:L,49:F,50:G,51:K,52:J,53:Z,54:$,55:tt,56:et,57:at,58:nt,59:it,60:rt,61:st,62:lt,63:ot,64:ct,65:ht,66:ut,67:dt,68:_t,69:ft,70:pt,71:yt,72:gt,73:mt,74:bt},{13:72,19:20,20:21,21:22,22:t,23:s,24:o,26:l,28:a,29:49,30:61,32:62,34:r,36:i,37:n,38:u,39:d,40:p,41:f,43:23,44:E,45:O,46:S,47:P,48:L,49:F,50:G,51:K,52:J,53:Z,54:$,55:tt,56:et,57:at,58:nt,59:it,60:rt,61:st,62:lt,63:ot,64:ct,65:ht,66:ut,67:dt,68:_t,69:ft,70:pt,71:yt,72:gt,73:mt,74:bt},{13:73,19:20,20:21,21:22,22:t,23:s,24:o,26:l,28:a,29:49,30:61,32:62,34:r,36:i,37:n,38:u,39:d,40:p,41:f,43:23,44:E,45:O,46:S,47:P,48:L,49:F,50:G,51:K,52:J,53:Z,54:$,55:tt,56:et,57:at,58:nt,59:it,60:rt,61:st,62:lt,63:ot,64:ct,65:ht,66:ut,67:dt,68:_t,69:ft,70:pt,71:yt,72:gt,73:mt,74:bt},{14:[1,74]},e(Tt,[2,13],{43:23,29:49,30:61,32:62,20:75,34:r,36:i,37:n,38:u,39:d,40:p,41:f,44:E,45:O,46:S,47:P,48:L,49:F,50:G,51:K,52:J,53:Z,54:$,55:tt,56:et,57:at,58:nt,59:it,60:rt,61:st,62:lt,63:ot,64:ct,65:ht,66:ut,67:dt,68:_t,69:ft,70:pt,71:yt,72:gt,73:mt,74:bt}),e(Tt,[2,14]),e(Qt,[2,16],{12:[1,76]}),e(Tt,[2,36],{12:[1,77]}),e(Dt,[2,19]),e(Dt,[2,20]),{25:[1,78]},{27:[1,79]},e(Dt,[2,23]),{35:80,75:81,76:A,77:k,79:C,80:w},{35:86,75:81,76:A,77:k,79:C,80:w},{35:87,75:81,76:A,77:k,79:C,80:w},{35:88,75:81,76:A,77:k,79:C,80:w},{35:89,75:81,76:A,77:k,79:C,80:w},{35:90,75:81,76:A,77:k,79:C,80:w},{35:91,75:81,76:A,77:k,79:C,80:w},{35:92,75:81,76:A,77:k,79:C,80:w},{35:93,75:81,76:A,77:k,79:C,80:w},{35:94,75:81,76:A,77:k,79:C,80:w},{35:95,75:81,76:A,77:k,79:C,80:w},{35:96,75:81,76:A,77:k,79:C,80:w},{35:97,75:81,76:A,77:k,79:C,80:w},{35:98,75:81,76:A,77:k,79:C,80:w},{35:99,75:81,76:A,77:k,79:C,80:w},{35:100,75:81,76:A,77:k,79:C,80:w},{35:101,75:81,76:A,77:k,79:C,80:w},{35:102,75:81,76:A,77:k,79:C,80:w},{35:103,75:81,76:A,77:k,79:C,80:w},{35:104,75:81,76:A,77:k,79:C,80:w},e(T,[2,59]),{35:105,75:81,76:A,77:k,79:C,80:w},{35:106,75:81,76:A,77:k,79:C,80:w},{35:107,75:81,76:A,77:k,79:C,80:w},{35:108,75:81,76:A,77:k,79:C,80:w},{35:109,75:81,76:A,77:k,79:C,80:w},{35:110,75:81,76:A,77:k,79:C,80:w},{35:111,75:81,76:A,77:k,79:C,80:w},{35:112,75:81,76:A,77:k,79:C,80:w},{35:113,75:81,76:A,77:k,79:C,80:w},{35:114,75:81,76:A,77:k,79:C,80:w},{35:115,75:81,76:A,77:k,79:C,80:w},{20:116,29:49,30:61,32:62,34:r,36:i,37:n,38:u,39:d,40:p,41:f,43:23,44:E,45:O,46:S,47:P,48:L,49:F,50:G,51:K,52:J,53:Z,54:$,55:tt,56:et,57:at,58:nt,59:it,60:rt,61:st,62:lt,63:ot,64:ct,65:ht,66:ut,67:dt,68:_t,69:ft,70:pt,71:yt,72:gt,73:mt,74:bt},{12:[1,118],33:[1,117]},{35:119,75:81,76:A,77:k,79:C,80:w},{35:120,75:81,76:A,77:k,79:C,80:w},{35:121,75:81,76:A,77:k,79:C,80:w},{35:122,75:81,76:A,77:k,79:C,80:w},{35:123,75:81,76:A,77:k,79:C,80:w},{35:124,75:81,76:A,77:k,79:C,80:w},{35:125,75:81,76:A,77:k,79:C,80:w},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},e(Tt,[2,15]),e(Qt,[2,17],{21:22,19:130,22:t,23:s,24:o,26:l,28:a}),e(Tt,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:t,23:s,24:o,26:l,28:a,34:r,36:i,37:n,38:u,39:d,40:p,41:f,44:E,45:O,46:S,47:P,48:L,49:F,50:G,51:K,52:J,53:Z,54:$,55:tt,56:et,57:at,58:nt,59:it,60:rt,61:st,62:lt,63:ot,64:ct,65:ht,66:ut,67:dt,68:_t,69:ft,70:pt,71:yt,72:gt,73:mt,74:bt}),e(Dt,[2,21]),e(Dt,[2,22]),e(T,[2,39]),e(se,[2,71],{75:81,35:132,76:A,77:k,79:C,80:w}),e(Mt,[2,73]),{78:[1,133]},e(Mt,[2,75]),e(Mt,[2,76]),e(T,[2,40]),e(T,[2,41]),e(T,[2,42]),e(T,[2,43]),e(T,[2,44]),e(T,[2,45]),e(T,[2,46]),e(T,[2,47]),e(T,[2,48]),e(T,[2,49]),e(T,[2,50]),e(T,[2,51]),e(T,[2,52]),e(T,[2,53]),e(T,[2,54]),e(T,[2,55]),e(T,[2,56]),e(T,[2,57]),e(T,[2,58]),e(T,[2,60]),e(T,[2,61]),e(T,[2,62]),e(T,[2,63]),e(T,[2,64]),e(T,[2,65]),e(T,[2,66]),e(T,[2,67]),e(T,[2,68]),e(T,[2,69]),e(T,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},e(At,[2,28]),e(At,[2,29]),e(At,[2,30]),e(At,[2,31]),e(At,[2,32]),e(At,[2,33]),e(At,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},e(Qt,[2,18]),e(Tt,[2,38]),e(se,[2,72]),e(Mt,[2,74]),e(T,[2,24]),e(T,[2,35]),e(Ht,[2,25]),e(Ht,[2,26],{12:[1,138]}),e(Ht,[2,27])],defaultActions:{2:[2,1],3:[2,2],4:[2,7],5:[2,3],6:[2,4],7:[2,5],8:[2,6],74:[2,8],126:[2,9],127:[2,10],128:[2,11],129:[2,12]},parseError:y.__name(function(b,x){if(x.recoverable)this.trace(b);else{var v=new Error(b);throw v.hash=x,v}},"parseError"),parse:y.__name(function(b){var x=this,v=[0],g=[],R=[null],h=[],Pt=this.table,_="",kt=0,le=0,Ae=2,oe=1,ke=h.slice.call(arguments,1),D=Object.create(this.lexer),Ct={yy:{}};for(var Gt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Gt)&&(Ct.yy[Gt]=this.yy[Gt]);D.setInput(b,Ct.yy),Ct.yy.lexer=D,Ct.yy.parser=this,typeof D.yylloc>"u"&&(D.yylloc={});var Kt=D.yylloc;h.push(Kt);var Ce=D.options&&D.options.ranges;typeof Ct.yy.parseError=="function"?this.parseError=Ct.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function we(N){v.length=v.length-2*N,R.length=R.length-N,h.length=h.length-N}y.__name(we,"popStack");function ce(){var N;return N=g.pop()||D.lex()||oe,typeof N!="number"&&(N instanceof Array&&(g=N,N=g.pop()),N=x.symbols_[N]||N),N}y.__name(ce,"lex");for(var M,wt,Y,Jt,Ot={},Nt,Q,he,Yt;;){if(wt=v[v.length-1],this.defaultActions[wt]?Y=this.defaultActions[wt]:((M===null||typeof M>"u")&&(M=ce()),Y=Pt[wt]&&Pt[wt][M]),typeof Y>"u"||!Y.length||!Y[0]){var Zt="";Yt=[];for(Nt in Pt[wt])this.terminals_[Nt]&&Nt>Ae&&Yt.push("'"+this.terminals_[Nt]+"'");D.showPosition?Zt="Parse error on line "+(kt+1)+`:
|
|
2
2
|
`+D.showPosition()+`
|
|
3
3
|
Expecting `+Yt.join(", ")+", got '"+(this.terminals_[M]||M)+"'":Zt="Parse error on line "+(kt+1)+": Unexpected "+(M==oe?"end of input":"'"+(this.terminals_[M]||M)+"'"),this.parseError(Zt,{text:D.match,token:this.terminals_[M]||M,line:D.yylineno,loc:Kt,expected:Yt})}if(Y[0]instanceof Array&&Y.length>1)throw new Error("Parse Error: multiple actions possible at state: "+wt+", token: "+M);switch(Y[0]){case 1:v.push(M),R.push(D.yytext),h.push(D.yylloc),v.push(Y[1]),M=null,le=D.yyleng,_=D.yytext,kt=D.yylineno,Kt=D.yylloc;break;case 2:if(Q=this.productions_[Y[1]][1],Ot.$=R[R.length-Q],Ot._$={first_line:h[h.length-(Q||1)].first_line,last_line:h[h.length-1].last_line,first_column:h[h.length-(Q||1)].first_column,last_column:h[h.length-1].last_column},Ce&&(Ot._$.range=[h[h.length-(Q||1)].range[0],h[h.length-1].range[1]]),Jt=this.performAction.apply(Ot,[_,le,kt,Ct.yy,Y[1],R,h].concat(ke)),typeof Jt<"u")return Jt;Q&&(v=v.slice(0,-1*Q*2),R=R.slice(0,-1*Q),h=h.slice(0,-1*Q)),v.push(this.productions_[Y[1]][0]),R.push(Ot.$),h.push(Ot._$),he=Pt[v[v.length-2]][v[v.length-1]],v.push(he);break;case 3:return!0}}return!0},"parse")},Ee=(function(){var xt={EOF:1,parseError:y.__name(function(x,v){if(this.yy.parser)this.yy.parser.parseError(x,v);else throw new Error(x)},"parseError"),setInput:y.__name(function(b,x){return this.yy=x||this.yy||{},this._input=b,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:y.__name(function(){var b=this._input[0];this.yytext+=b,this.yyleng++,this.offset++,this.match+=b,this.matched+=b;var x=b.match(/(?:\r\n?|\n).*/g);return x?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),b},"input"),unput:y.__name(function(b){var x=b.length,v=b.split(/(?:\r\n?|\n)/g);this._input=b+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-x),this.offset-=x;var g=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),v.length-1&&(this.yylineno-=v.length-1);var R=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:v?(v.length===g.length?this.yylloc.first_column:0)+g[g.length-v.length].length-v[0].length:this.yylloc.first_column-x},this.options.ranges&&(this.yylloc.range=[R[0],R[0]+this.yyleng-x]),this.yyleng=this.yytext.length,this},"unput"),more:y.__name(function(){return this._more=!0,this},"more"),reject:y.__name(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
|
|
4
4
|
`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:y.__name(function(b){this.unput(this.match.slice(b))},"less"),pastInput:y.__name(function(){var b=this.matched.substr(0,this.matched.length-this.match.length);return(b.length>20?"...":"")+b.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:y.__name(function(){var b=this.match;return b.length<20&&(b+=this._input.substr(0,20-b.length)),(b.substr(0,20)+(b.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:y.__name(function(){var b=this.pastInput(),x=new Array(b.length+1).join("-");return b+this.upcomingInput()+`
|
|
@@ -4,7 +4,7 @@ import { setAccDescription as Be, getAccDescription as Ie, getAccTitle as Me, se
|
|
|
4
4
|
import { __name as g, log as fe } from "./chunk-AGHRB4JF.es.js";
|
|
5
5
|
import "../../../../../../d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/index.es.js";
|
|
6
6
|
import "../../../../../../d3-zoom@3.0.0/node_modules/d3-zoom/src/transform.es.js";
|
|
7
|
-
import { d as je } from "../../../../../../../../../_virtual/index.
|
|
7
|
+
import { d as je } from "../../../../../../../../../_virtual/index.es9.js";
|
|
8
8
|
import jt from "../../../../../../d3-selection@3.0.0/node_modules/d3-selection/src/select.es.js";
|
|
9
9
|
var Ft = (function() {
|
|
10
10
|
var e = /* @__PURE__ */ g(function(_t, x, m, v) {
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("./chunk-ABZYJK2D.cjs.js"),s=require("./chunk-AGHRB4JF.cjs.js"),K=require("../../../../../../../../../_virtual/index.
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("./chunk-ABZYJK2D.cjs.js"),s=require("./chunk-AGHRB4JF.cjs.js"),K=require("../../../../../../../../../_virtual/index.cjs9.js");require("../../../../../../d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/index.cjs.js");require("../../../../../../d3-zoom@3.0.0/node_modules/d3-zoom/src/transform.cjs.js");const w=require("../../../../../../lodash-es@4.17.21/node_modules/lodash-es/memoize.cjs.js"),Q=require("../../../../../../lodash-es@4.17.21/node_modules/lodash-es/merge.cjs.js"),M=require("../../../../../../d3-shape@3.2.0/node_modules/d3-shape/src/curve/step.cjs.js"),V=require("../../../../../../d3-shape@3.2.0/node_modules/d3-shape/src/curve/natural.cjs.js"),q=require("../../../../../../d3-shape@3.2.0/node_modules/d3-shape/src/curve/monotone.cjs.js"),ee=require("../../../../../../d3-shape@3.2.0/node_modules/d3-shape/src/curve/linearClosed.cjs.js"),te=require("../../../../../../d3-shape@3.2.0/node_modules/d3-shape/src/curve/linear.cjs.js"),ne=require("../../../../../../d3-shape@3.2.0/node_modules/d3-shape/src/curve/catmullRom.cjs.js"),re=require("../../../../../../d3-shape@3.2.0/node_modules/d3-shape/src/curve/catmullRomOpen.cjs.js"),ie=require("../../../../../../d3-shape@3.2.0/node_modules/d3-shape/src/curve/catmullRomClosed.cjs.js"),ae=require("../../../../../../d3-shape@3.2.0/node_modules/d3-shape/src/curve/cardinal.cjs.js"),oe=require("../../../../../../d3-shape@3.2.0/node_modules/d3-shape/src/curve/cardinalOpen.cjs.js"),se=require("../../../../../../d3-shape@3.2.0/node_modules/d3-shape/src/curve/cardinalClosed.cjs.js"),ce=require("../../../../../../d3-shape@3.2.0/node_modules/d3-shape/src/curve/bundle.cjs.js"),L=require("../../../../../../d3-shape@3.2.0/node_modules/d3-shape/src/curve/bump.cjs.js"),le=require("../../../../../../d3-shape@3.2.0/node_modules/d3-shape/src/curve/basisOpen.cjs.js"),ue=require("../../../../../../d3-shape@3.2.0/node_modules/d3-shape/src/curve/basisClosed.cjs.js"),de=require("../../../../../../d3-shape@3.2.0/node_modules/d3-shape/src/curve/basis.cjs.js"),he=require("../../../../../../d3-selection@3.0.0/node_modules/d3-selection/src/select.cjs.js");var R="",fe={curveBasis:de.default,curveBasisClosed:ue.default,curveBasisOpen:le.default,curveBumpX:L.bumpX,curveBumpY:L.bumpY,curveBundle:ce.default,curveCardinalClosed:se.default,curveCardinalOpen:oe.default,curveCardinal:ae.default,curveCatmullRomClosed:ie.default,curveCatmullRomOpen:re.default,curveCatmullRom:ne.default,curveLinear:te.default,curveLinearClosed:ee.default,curveMonotoneX:q.monotoneX,curveMonotoneY:q.monotoneY,curveNatural:V.default,curveStep:M.default,curveStepAfter:M.stepAfter,curveStepBefore:M.stepBefore},me=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,ge=s.__name(function(t,e){const r=D(t,/(?:init\b)|(?:initialize\b)/);let n={};if(Array.isArray(r)){const o=r.map(l=>l.args);u.sanitizeDirective(o),n=u.assignWithDepth_default(n,[...o])}else n=r.args;if(!n)return;let i=u.detectType(t,e);const a="config";return n[a]!==void 0&&(i==="flowchart-v2"&&(i="flowchart"),n[i]=n[a],delete n[a]),n},"detectInit"),D=s.__name(function(t,e=null){try{const r=new RegExp(`[%]{2}(?![{]${me.source})(?=[}][%]{2}).*
|
|
2
2
|
`,"ig");t=t.trim().replace(r,"").replace(/'/gm,'"'),s.log.debug(`Detecting diagram directive${e!==null?" type:"+e:""} based on the text:${t}`);let n;const i=[];for(;(n=u.directiveRegex.exec(t))!==null;)if(n.index===u.directiveRegex.lastIndex&&u.directiveRegex.lastIndex++,n&&!e||e&&n[1]?.match(e)||e&&n[2]?.match(e)){const a=n[1]?n[1]:n[2],o=n[3]?n[3].trim():n[4]?JSON.parse(n[4].trim()):null;i.push({type:a,args:o})}return i.length===0?{type:t,args:null}:i.length===1?i[0]:i}catch(r){return s.log.error(`ERROR: ${r.message} - Unable to parse directive type: '${e}' based on the text: '${t}'`),{type:void 0,args:null}}},"detectDirective"),ve=s.__name(function(t){return t.replace(u.directiveRegex,"")},"removeDirectives"),_e=s.__name(function(t,e){for(const[r,n]of e.entries())if(n.match(t))return r;return-1},"isSubstringInArray");function $(t,e){if(!t)return e;const r=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return fe[r]??e}s.__name($,"interpolateToCurve");function O(t,e){const r=t.trim();if(r)return e.securityLevel!=="loose"?K.distExports.sanitizeUrl(r):r}s.__name(O,"formatUrl");var ye=s.__name((t,...e)=>{const r=t.split("."),n=r.length-1,i=r[n];let a=window;for(let o=0;o<n;o++)if(a=a[r[o]],!a){s.log.error(`Function name: ${t} not found in window`);return}a[i](...e)},"runFunc");function S(t,e){return!t||!e?0:Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}s.__name(S,"distance");function H(t){let e,r=0;t.forEach(i=>{r+=S(i,e),e=i});const n=r/2;return C(t,n)}s.__name(H,"traverseEdge");function N(t){return t.length===1?t[0]:H(t)}s.__name(N,"calcLabelPosition");var A=s.__name((t,e=2)=>{const r=Math.pow(10,e);return Math.round(t*r)/r},"roundNumber"),C=s.__name((t,e)=>{let r,n=e;for(const i of t){if(r){const a=S(i,r);if(a===0)return r;if(a<n)n-=a;else{const o=n/a;if(o<=0)return r;if(o>=1)return{x:i.x,y:i.y};if(o>0&&o<1)return{x:A((1-o)*r.x+o*i.x,5),y:A((1-o)*r.y+o*i.y,5)}}}r=i}throw new Error("Could not find a suitable point for the given distance")},"calculatePoint"),xe=s.__name((t,e,r)=>{s.log.info(`our points ${JSON.stringify(e)}`),e[0]!==r&&(e=e.reverse());const i=C(e,25),a=t?10:5,o=Math.atan2(e[0].y-i.y,e[0].x-i.x),l={x:0,y:0};return l.x=Math.sin(o)*a+(e[0].x+i.x)/2,l.y=-Math.cos(o)*a+(e[0].y+i.y)/2,l},"calcCardinalityPosition");function z(t,e,r){const n=structuredClone(r);s.log.info("our points",n),e!=="start_left"&&e!=="start_right"&&n.reverse();const i=25+t,a=C(n,i),o=10+t*.5,l=Math.atan2(n[0].y-a.y,n[0].x-a.x),c={x:0,y:0};return e==="start_left"?(c.x=Math.sin(l+Math.PI)*o+(n[0].x+a.x)/2,c.y=-Math.cos(l+Math.PI)*o+(n[0].y+a.y)/2):e==="end_right"?(c.x=Math.sin(l-Math.PI)*o+(n[0].x+a.x)/2-5,c.y=-Math.cos(l-Math.PI)*o+(n[0].y+a.y)/2-5):e==="end_left"?(c.x=Math.sin(l)*o+(n[0].x+a.x)/2-5,c.y=-Math.cos(l)*o+(n[0].y+a.y)/2-5):(c.x=Math.sin(l)*o+(n[0].x+a.x)/2,c.y=-Math.cos(l)*o+(n[0].y+a.y)/2),c}s.__name(z,"calcTerminalLabelPosition");function B(t){let e="",r="";for(const n of t)n!==void 0&&(n.startsWith("color:")||n.startsWith("text-align:")?r=r+n+";":e=e+n+";");return{style:e,labelStyle:r}}s.__name(B,"getStylesFromArray");var F=0,j=s.__name(()=>(F++,"id-"+Math.random().toString(36).substr(2,12)+"-"+F),"generateId");function U(t){let e="";const r="0123456789abcdef",n=r.length;for(let i=0;i<t;i++)e+=r.charAt(Math.floor(Math.random()*n));return e}s.__name(U,"makeRandomHex");var k=s.__name(t=>U(t.length),"random"),pe=s.__name(function(){return{x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0,text:""}},"getTextObj"),be=s.__name(function(t,e){const r=e.text.replace(u.common_default.lineBreakRegex," "),[,n]=b(e.fontSize),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.style("text-anchor",e.anchor),i.style("font-family",e.fontFamily),i.style("font-size",n),i.style("font-weight",e.fontWeight),i.attr("fill",e.fill),e.class!==void 0&&i.attr("class",e.class);const a=i.append("tspan");return a.attr("x",e.x+e.textMargin*2),a.attr("fill",e.fill),a.text(r),i},"drawSimpleText"),Y=w.default((t,e,r)=>{if(!t||(r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"<br/>"},r),u.common_default.lineBreakRegex.test(t)))return t;const n=t.split(" ").filter(Boolean),i=[];let a="";return n.forEach((o,l)=>{const c=g(`${o} `,r),d=g(a,r);if(c>e){const{hyphenatedStrings:v,remainingWord:h}=Me(o,e,"-",r);i.push(a,...v),a=h}else d+c>=e?(i.push(a),a=o):a=[a,o].filter(Boolean).join(" ");l+1===n.length&&i.push(a)}),i.filter(o=>o!=="").join(r.joinWith)},(t,e,r)=>`${t}${e}${r.fontSize}${r.fontWeight}${r.fontFamily}${r.joinWith}`),Me=w.default((t,e,r="-",n)=>{n=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},n);const i=[...t],a=[];let o="";return i.forEach((l,c)=>{const d=`${o}${l}`;if(g(d,n)>=e){const y=c+1,v=i.length===y,h=`${d}${r}`;a.push(v?d:h),o=""}else o=d}),{hyphenatedStrings:a,remainingWord:o}},(t,e,r="-",n)=>`${t}${e}${r}${n.fontSize}${n.fontWeight}${n.fontFamily}`);function E(t,e){return T(t,e).height}s.__name(E,"calculateTextHeight");function g(t,e){return T(t,e).width}s.__name(g,"calculateTextWidth");var T=w.default((t,e)=>{const{fontSize:r=12,fontFamily:n="Arial",fontWeight:i=400}=e;if(!t)return{width:0,height:0};const[,a]=b(r),o=["sans-serif",n],l=t.split(u.common_default.lineBreakRegex),c=[],d=he.default("body");if(!d.remove)return{width:0,height:0,lineHeight:0};const _=d.append("svg");for(const v of o){let h=0;const f={width:0,height:0,lineHeight:0};for(const Z of l){const I=pe();I.text=Z||R;const P=be(_,I).style("font-size",a).style("font-weight",i).style("font-family",v),x=(P._groups||P)[0][0].getBBox();if(x.width===0&&x.height===0)throw new Error("svg element not in render tree");f.width=Math.round(Math.max(f.width,x.width)),h=Math.round(x.height),f.height+=h,f.lineHeight=Math.round(Math.max(f.lineHeight,h))}c.push(f)}_.remove();const y=isNaN(c[1].height)||isNaN(c[1].width)||isNaN(c[1].lineHeight)||c[0].height>c[1].height&&c[0].width>c[1].width&&c[0].lineHeight>c[1].lineHeight?0:1;return c[y]},(t,e)=>`${t}${e.fontSize}${e.fontWeight}${e.fontFamily}`),m,we=(m=class{constructor(e=!1,r){this.count=0,this.count=r?r.length:0,this.next=e?()=>this.count++:()=>Date.now()}},s.__name(m,"InitIDGenerator"),m),p,$e=s.__name(function(t){return p=p||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),p.innerHTML=t,unescape(p.textContent)},"entityDecode");function X(t){return"str"in t}s.__name(X,"isDetailedError");var Se=s.__name((t,e,r,n)=>{if(!n)return;const i=t.node()?.getBBox();i&&t.append("text").text(n).attr("text-anchor","middle").attr("x",i.x+i.width/2).attr("y",-r).attr("class",e)},"insertTitle"),b=s.__name(t=>{if(typeof t=="number")return[t,t+"px"];const e=parseInt(t??"",10);return Number.isNaN(e)?[void 0,void 0]:t===String(e)?[e,t+"px"]:[e,t]},"parseFontSize");function W(t,e){return Q.default({},t,e)}s.__name(W,"cleanAndMerge");var Ce={assignWithDepth:u.assignWithDepth_default,wrapLabel:Y,calculateTextHeight:E,calculateTextWidth:g,calculateTextDimensions:T,cleanAndMerge:W,detectInit:ge,detectDirective:D,isSubstringInArray:_e,interpolateToCurve:$,calcLabelPosition:N,calcCardinalityPosition:xe,calcTerminalLabelPosition:z,formatUrl:O,getStylesFromArray:B,generateId:j,random:k,runFunc:ye,entityDecode:$e,insertTitle:Se,isLabelCoordinateInPath:G,parseFontSize:b,InitIDGenerator:we},Be=s.__name(function(t){let e=t;return e=e.replace(/style.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/classDef.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/#\w+;/g,function(r){const n=r.substring(1,r.length-1);return/^\+?\d+$/.test(n)?"fl°°"+n+"¶ß":"fl°"+n+"¶ß"}),e},"encodeEntities"),Ee=s.__name(function(t){return t.replace(/fl°°/g,"&#").replace(/fl°/g,"&").replace(/¶ß/g,";")},"decodeEntities"),Te=s.__name((t,e,{counter:r=0,prefix:n,suffix:i},a)=>a||`${n?`${n}_`:""}${t}_${e}_${r}${i?`_${i}`:""}`,"getEdgeId");function J(t){return t??null}s.__name(J,"handleUndefinedAttr");function G(t,e){const r=Math.round(t.x),n=Math.round(t.y),i=e.replace(/(\d+\.\d+)/g,a=>Math.round(parseFloat(a)).toString());return i.includes(r.toString())||i.includes(n.toString())}s.__name(G,"isLabelCoordinateInPath");exports.ZERO_WIDTH_SPACE=R;exports.calculateTextHeight=E;exports.calculateTextWidth=g;exports.cleanAndMerge=W;exports.decodeEntities=Ee;exports.encodeEntities=Be;exports.generateId=j;exports.getEdgeId=Te;exports.getStylesFromArray=B;exports.handleUndefinedAttr=J;exports.interpolateToCurve=$;exports.isDetailedError=X;exports.parseFontSize=b;exports.random=k;exports.removeDirectives=ve;exports.utils_default=Ce;exports.wrapLabel=Y;
|
|
3
3
|
//# sourceMappingURL=chunk-S3R3BYOJ.cjs.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { common_default as b, assignWithDepth_default as E, directiveRegex as $, sanitizeDirective as X, detectType as Y } from "./chunk-ABZYJK2D.es.js";
|
|
2
2
|
import { __name as s, log as g } from "./chunk-AGHRB4JF.es.js";
|
|
3
|
-
import { d as G } from "../../../../../../../../../_virtual/index.
|
|
3
|
+
import { d as G } from "../../../../../../../../../_virtual/index.es9.js";
|
|
4
4
|
import "../../../../../../d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/index.es.js";
|
|
5
5
|
import "../../../../../../d3-zoom@3.0.0/node_modules/d3-zoom/src/transform.es.js";
|
|
6
6
|
import w from "../../../../../../lodash-es@4.17.21/node_modules/lodash-es/memoize.es.js";
|