markdown-flow-ui 0.1.123 → 0.1.124
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Slide/Player.cjs.js +1 -1
- package/dist/components/Slide/Player.cjs.js.map +1 -1
- package/dist/components/Slide/Player.es.js +191 -201
- package/dist/components/Slide/Player.es.js.map +1 -1
- package/dist/components/Slide/Slide.cjs.js +1 -1
- package/dist/components/Slide/Slide.cjs.js.map +1 -1
- package/dist/components/Slide/Slide.es.js +116 -116
- package/dist/components/Slide/Slide.es.js.map +1 -1
- package/dist/components/Slide/utils/playbackPreference.cjs.js +1 -1
- package/dist/components/Slide/utils/playbackPreference.cjs.js.map +1 -1
- package/dist/components/Slide/utils/playbackPreference.d.ts +1 -6
- package/dist/components/Slide/utils/playbackPreference.es.js +4 -9
- package/dist/components/Slide/utils/playbackPreference.es.js.map +1 -1
- package/dist/node_modules/cose-base/cose-base.cjs.js +1 -1
- package/dist/node_modules/cose-base/cose-base.cjs.js.map +1 -1
- package/dist/node_modules/cose-base/cose-base.es.js +1 -1
- package/dist/node_modules/cytoscape-fcose/node_modules/cose-base/cose-base.cjs.js +1 -1
- package/dist/node_modules/cytoscape-fcose/node_modules/cose-base/cose-base.cjs.js.map +1 -1
- package/dist/node_modules/cytoscape-fcose/node_modules/cose-base/cose-base.es.js +1 -1
- package/dist/node_modules/cytoscape-fcose/node_modules/layout-base/layout-base.cjs.js +1 -1
- package/dist/node_modules/cytoscape-fcose/node_modules/layout-base/layout-base.cjs.js.map +1 -1
- package/dist/node_modules/cytoscape-fcose/node_modules/layout-base/layout-base.es.js +1 -1
- package/dist/node_modules/layout-base/layout-base.cjs.js +1 -1
- package/dist/node_modules/layout-base/layout-base.cjs.js.map +1 -1
- package/dist/node_modules/layout-base/layout-base.es.js +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 {\n PlayerProps,\n SlidePlayerNavigationContext,\n SlidePlayerTexts,\n} from \"./Player\";\nimport type { SlidePlayerLoadingReason } from \"./Player\";\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;\nconst DEFAULT_BUFFERING_REASON = \"waitingForAudio\";\n\nexport type SlideBufferingReason = \"waitingForAudio\" | SlidePlayerLoadingReason;\n\nexport type SlideBufferingTextConfig =\n | string\n | Partial<Record<SlideBufferingReason, string>>;\n\nconst DEFAULT_SLIDE_BUFFERING_TEXTS: Record<SlideBufferingReason, string> = {\n waitingForAudio: \"Waiting for current slide audio...\",\n loadingAudio: \"Loading current slide audio...\",\n waitingForMoreAudio: \"Waiting for more current slide audio...\",\n};\n\nconst resolveBufferingTextByReason = (\n bufferingText: SlideBufferingTextConfig,\n reason: SlideBufferingReason\n) => {\n if (typeof bufferingText === \"string\") {\n return bufferingText;\n }\n\n return (\n bufferingText[reason] ??\n bufferingText[DEFAULT_BUFFERING_REASON] ??\n DEFAULT_SLIDE_BUFFERING_TEXTS[reason]\n );\n};\n\nconst shouldShowBufferingOverlay = (\n reason: SlideBufferingReason | null,\n loading: boolean\n) => {\n if (!loading) {\n return false;\n }\n\n // Keep the silent preload/loading phase invisible until audio is actually playable.\n return reason !== \"loadingAudio\";\n};\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 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?: SlideBufferingTextConfig;\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 = DEFAULT_SLIDE_BUFFERING_TEXTS,\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 [isPlaybackRequested, setIsPlaybackRequested] = useState(true);\n const [isAutoAdvanceEnabled, setIsAutoAdvanceEnabled] = useState(true);\n const [currentAudioKey, setCurrentAudioKey] = useState<string | null>(null);\n const [isAudioLoadingVisible, setIsAudioLoadingVisible] = useState(false);\n const [audioLoadingReason, setAudioLoadingReason] =\n useState<SlideBufferingReason>(DEFAULT_BUFFERING_REASON);\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 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 isDesktopBrowserFullscreen = isBrowserFullscreen && !isMobileDevice;\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 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 setAudioLoadingReason(DEFAULT_BUFFERING_REASON);\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 const handlePlaybackPreferenceChange = useCallback((playing: boolean) => {\n setIsPlaybackRequested(playing);\n setIsAutoAdvanceEnabled(playing);\n }, []);\n\n const syncPlaybackPreferenceBeforeNavigation = useCallback(\n (context?: SlidePlayerNavigationContext) => {\n const shouldContinuePlayback =\n context?.shouldContinuePlayback ?? isPlaybackRequested;\n\n setIsPlaybackRequested(shouldContinuePlayback);\n setIsAutoAdvanceEnabled(shouldContinuePlayback);\n },\n [isPlaybackRequested]\n );\n\n useEffect(() => {\n // Keep silent-step autoplay aligned with the same play/pause preference as audio.\n setIsAutoAdvanceEnabled(isPlaybackRequested);\n\n if (playerCustomActionPauseOnActive) {\n setIsPlayerCustomActionActive(false);\n }\n }, [currentIndex, isPlaybackRequested, 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 previousEffectiveMobileViewModeRef.current = effectiveMobileViewMode;\n }, [effectiveMobileViewMode]);\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 setAudioLoadingReason(\"waitingForAudio\");\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 (context?: SlidePlayerNavigationContext) => {\n syncPlaybackPreferenceBeforeNavigation(context);\n shouldScrollToBottomRef.current = true;\n pendingInteractionOverlayStepIndexRef.current = null;\n setHasPlayerInteracted(true);\n setIsAudioLoadingVisible(false);\n showPlayerControls(true);\n resetAudioSequence();\n goPrev();\n },\n [\n goPrev,\n resetAudioSequence,\n showPlayerControls,\n syncPlaybackPreferenceBeforeNavigation,\n ]\n );\n\n const handleNext = useCallback(\n (context?: SlidePlayerNavigationContext) => {\n syncPlaybackPreferenceBeforeNavigation(context);\n shouldScrollToBottomRef.current = true;\n pendingInteractionOverlayStepIndexRef.current = null;\n setHasPlayerInteracted(true);\n setIsAudioLoadingVisible(false);\n showPlayerControls(true);\n resetAudioSequence();\n goNext();\n },\n [\n goNext,\n resetAudioSequence,\n showPlayerControls,\n syncPlaybackPreferenceBeforeNavigation,\n ]\n );\n\n const handlePlayerLoadingChange = useCallback(\n ({\n loading,\n reason,\n }: {\n loading: boolean;\n reason: SlidePlayerLoadingReason | null;\n }) => {\n if (disableLoadingOverlay) {\n setIsAudioLoadingVisible(false);\n return;\n }\n\n if (!currentStepHasSpeakableElement || hasCompletedCurrentStepAudio) {\n setIsAudioLoadingVisible(false);\n return;\n }\n\n if (loading && reason) {\n setAudioLoadingReason(reason);\n }\n setIsAudioLoadingVisible(shouldShowBufferingOverlay(reason, 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 return;\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 isDesktopBrowserFullscreen && \"slide--browser-fullscreen\",\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\n className=\"slide-landscape-header__icon h-6 w-6\"\n strokeWidth={2.25}\n />\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={resolveBufferingTextByReason(\n bufferingText,\n audioLoadingReason\n )}\n className=\"absolute left-1/2 top-1/2 z-[3] -translate-x-1/2 -translate-y-1/2\"\n />\n ) : null}\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 z-[2] -translate-x-1/2\",\n isDesktopBrowserFullscreen ? \"bottom-3\" : \"-bottom-3\",\n playerClassName,\n !playerVisible && \"pointer-events-none opacity-0\"\n )}\n currentAudioIndex={currentAudioIndex}\n defaultPlaying={isPlaybackRequested}\n isPlaybackPaused={shouldPausePlaybackForCustomAction}\n isAutoAdvanceEnabled={isAutoAdvanceEnabled}\n hasInteraction={Boolean(activeInteractionElement)}\n isInteractionOpen={isInteractionOverlayOpen}\n isSubtitleEnabled={isSubtitleEnabled}\n onAutoAdvanceToggle={setIsAutoAdvanceEnabled}\n onLoadingChange={handlePlayerLoadingChange}\n onPlaybackPreferenceChange={handlePlaybackPreferenceChange}\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","DEFAULT_BUFFERING_REASON","DEFAULT_SLIDE_BUFFERING_TEXTS","resolveBufferingTextByReason","bufferingText","reason","shouldShowBufferingOverlay","loading","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","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","isPlaybackRequested","setIsPlaybackRequested","isAutoAdvanceEnabled","setIsAutoAdvanceEnabled","currentAudioKey","setCurrentAudioKey","isAudioLoadingVisible","setIsAudioLoadingVisible","audioLoadingReason","setAudioLoadingReason","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","playbackTimeStore","createPlaybackTimeStore","effectiveMobileViewMode","isImmersiveMobileFullscreen","isNativeMobileFullscreen","shouldRotateFullscreenViewport","resolveMobileViewModeState","previousEffectiveMobileViewModeRef","playerVisible","shouldShowFullscreenHeader","shouldApplyFullscreenViewportPadding","shouldShowMobileFullscreenMask","isDesktopBrowserFullscreen","handleMobileViewModeSelect","useCallback","nextViewMode","handleMobileViewModeReset","handleFullscreenHeaderBack","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","handlePlaybackPreferenceChange","playing","syncPlaybackPreferenceBeforeNavigation","context","shouldContinuePlayback","useEffect","syncViewportFullscreenPreference","subscribeMobileDeviceChange","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","handlePlayerEnded","endedAudioKey","activeSequencePosition","audioSequenceKey","nextSequencePosition","nextStepIndex","nextStepElement","handleInteractionToggle","prevOpen","stopOverlayPropagation","handleSurfacePointerDown","handleSurfaceClick","currentRenderElementKeys","prevKeys","shouldAutoScrollToAppend","key","animationFrameId","targetElement","stageLayerRect","targetRect","nextScrollTop","ChevronLeft","mountedStepStateIndex","LoadingOverlayCard","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 {\n PlayerProps,\n SlidePlayerNavigationContext,\n SlidePlayerTexts,\n} from \"./Player\";\nimport type { SlidePlayerLoadingReason } from \"./Player\";\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;\nconst DEFAULT_BUFFERING_REASON = \"waitingForAudio\";\n\nexport type SlideBufferingReason = \"waitingForAudio\" | SlidePlayerLoadingReason;\n\nexport type SlideBufferingTextConfig =\n | string\n | Partial<Record<SlideBufferingReason, string>>;\n\nconst DEFAULT_SLIDE_BUFFERING_TEXTS: Record<SlideBufferingReason, string> = {\n waitingForAudio: \"Waiting for current slide audio...\",\n loadingAudio: \"Loading current slide audio...\",\n waitingForMoreAudio: \"Waiting for more current slide audio...\",\n};\n\nconst resolveBufferingTextByReason = (\n bufferingText: SlideBufferingTextConfig,\n reason: SlideBufferingReason\n) => {\n if (typeof bufferingText === \"string\") {\n return bufferingText;\n }\n\n return (\n bufferingText[reason] ??\n bufferingText[DEFAULT_BUFFERING_REASON] ??\n DEFAULT_SLIDE_BUFFERING_TEXTS[reason]\n );\n};\n\nconst shouldShowBufferingOverlay = (\n reason: SlideBufferingReason | null,\n loading: boolean\n) => {\n if (!loading) {\n return false;\n }\n\n // Keep the silent preload/loading phase invisible until audio is actually playable.\n return reason !== \"loadingAudio\";\n};\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 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?: SlideBufferingTextConfig;\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 = DEFAULT_SLIDE_BUFFERING_TEXTS,\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 [isPlaybackRequested, setIsPlaybackRequested] = useState(true);\n const [isAutoAdvanceEnabled, setIsAutoAdvanceEnabled] = useState(true);\n const [currentAudioKey, setCurrentAudioKey] = useState<string | null>(null);\n const [isAudioLoadingVisible, setIsAudioLoadingVisible] = useState(false);\n const [audioLoadingReason, setAudioLoadingReason] =\n useState<SlideBufferingReason>(DEFAULT_BUFFERING_REASON);\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 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 isDesktopBrowserFullscreen = isBrowserFullscreen && !isMobileDevice;\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 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 setAudioLoadingReason(DEFAULT_BUFFERING_REASON);\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 const handlePlaybackPreferenceChange = useCallback((playing: boolean) => {\n setIsPlaybackRequested(playing);\n }, []);\n\n const syncPlaybackPreferenceBeforeNavigation = useCallback(\n (context?: SlidePlayerNavigationContext) => {\n const shouldContinuePlayback =\n context?.shouldContinuePlayback ?? isPlaybackRequested;\n\n setIsPlaybackRequested(shouldContinuePlayback);\n },\n [isPlaybackRequested]\n );\n\n useEffect(() => {\n // Keep silent-step autoplay aligned with the same play/pause preference as audio.\n setIsAutoAdvanceEnabled(isPlaybackRequested);\n\n if (playerCustomActionPauseOnActive) {\n setIsPlayerCustomActionActive(false);\n }\n }, [currentIndex, isPlaybackRequested, 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 previousEffectiveMobileViewModeRef.current = effectiveMobileViewMode;\n }, [effectiveMobileViewMode]);\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 setAudioLoadingReason(\"waitingForAudio\");\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 (context?: SlidePlayerNavigationContext) => {\n syncPlaybackPreferenceBeforeNavigation(context);\n shouldScrollToBottomRef.current = true;\n pendingInteractionOverlayStepIndexRef.current = null;\n setHasPlayerInteracted(true);\n setIsAudioLoadingVisible(false);\n showPlayerControls(true);\n resetAudioSequence();\n goPrev();\n },\n [\n goPrev,\n resetAudioSequence,\n showPlayerControls,\n syncPlaybackPreferenceBeforeNavigation,\n ]\n );\n\n const handleNext = useCallback(\n (context?: SlidePlayerNavigationContext) => {\n syncPlaybackPreferenceBeforeNavigation(context);\n shouldScrollToBottomRef.current = true;\n pendingInteractionOverlayStepIndexRef.current = null;\n setHasPlayerInteracted(true);\n setIsAudioLoadingVisible(false);\n showPlayerControls(true);\n resetAudioSequence();\n goNext();\n },\n [\n goNext,\n resetAudioSequence,\n showPlayerControls,\n syncPlaybackPreferenceBeforeNavigation,\n ]\n );\n\n const handlePlayerLoadingChange = useCallback(\n ({\n loading,\n reason,\n }: {\n loading: boolean;\n reason: SlidePlayerLoadingReason | null;\n }) => {\n if (disableLoadingOverlay) {\n setIsAudioLoadingVisible(false);\n return;\n }\n\n if (!currentStepHasSpeakableElement || hasCompletedCurrentStepAudio) {\n setIsAudioLoadingVisible(false);\n return;\n }\n\n if (loading && reason) {\n setAudioLoadingReason(reason);\n }\n setIsAudioLoadingVisible(shouldShowBufferingOverlay(reason, 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 return;\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 isDesktopBrowserFullscreen && \"slide--browser-fullscreen\",\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\n className=\"slide-landscape-header__icon h-6 w-6\"\n strokeWidth={2.25}\n />\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={resolveBufferingTextByReason(\n bufferingText,\n audioLoadingReason\n )}\n className=\"absolute left-1/2 top-1/2 z-[3] -translate-x-1/2 -translate-y-1/2\"\n />\n ) : null}\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 z-[2] -translate-x-1/2\",\n isDesktopBrowserFullscreen ? \"bottom-3\" : \"-bottom-3\",\n playerClassName,\n !playerVisible && \"pointer-events-none opacity-0\"\n )}\n currentAudioIndex={currentAudioIndex}\n defaultPlaying={isPlaybackRequested}\n isPlaybackPaused={shouldPausePlaybackForCustomAction}\n isAutoAdvanceEnabled={isAutoAdvanceEnabled}\n hasInteraction={Boolean(activeInteractionElement)}\n isInteractionOpen={isInteractionOverlayOpen}\n isSubtitleEnabled={isSubtitleEnabled}\n onAutoAdvanceToggle={setIsAutoAdvanceEnabled}\n onLoadingChange={handlePlayerLoadingChange}\n onPlaybackPreferenceChange={handlePlaybackPreferenceChange}\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","DEFAULT_BUFFERING_REASON","DEFAULT_SLIDE_BUFFERING_TEXTS","resolveBufferingTextByReason","bufferingText","reason","shouldShowBufferingOverlay","loading","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","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","isPlaybackRequested","setIsPlaybackRequested","isAutoAdvanceEnabled","setIsAutoAdvanceEnabled","currentAudioKey","setCurrentAudioKey","isAudioLoadingVisible","setIsAudioLoadingVisible","audioLoadingReason","setAudioLoadingReason","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","playbackTimeStore","createPlaybackTimeStore","effectiveMobileViewMode","isImmersiveMobileFullscreen","isNativeMobileFullscreen","shouldRotateFullscreenViewport","resolveMobileViewModeState","previousEffectiveMobileViewModeRef","playerVisible","shouldShowFullscreenHeader","shouldApplyFullscreenViewportPadding","shouldShowMobileFullscreenMask","isDesktopBrowserFullscreen","handleMobileViewModeSelect","useCallback","nextViewMode","handleMobileViewModeReset","handleFullscreenHeaderBack","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","handlePlaybackPreferenceChange","playing","syncPlaybackPreferenceBeforeNavigation","context","shouldContinuePlayback","useEffect","syncViewportFullscreenPreference","subscribeMobileDeviceChange","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","handlePlayerEnded","endedAudioKey","activeSequencePosition","audioSequenceKey","nextSequencePosition","nextStepIndex","nextStepElement","handleInteractionToggle","prevOpen","stopOverlayPropagation","handleSurfacePointerDown","handleSurfaceClick","currentRenderElementKeys","prevKeys","shouldAutoScrollToAppend","key","animationFrameId","targetElement","stageLayerRect","targetRect","nextScrollTop","ChevronLeft","mountedStepStateIndex","LoadingOverlayCard","SubtitleOverlay","Player","previousEnabled"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=({defaultPlaying:e,isPausedByUser:t})=>e&&!t;exports.shouldKeepPlayingAfterNavigation=i;
|
|
2
2
|
//# sourceMappingURL=playbackPreference.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playbackPreference.cjs.js","sources":["../../../../src/components/Slide/utils/playbackPreference.ts"],"sourcesContent":["export interface PlaybackNavigationState {\n defaultPlaying: boolean;\n
|
|
1
|
+
{"version":3,"file":"playbackPreference.cjs.js","sources":["../../../../src/components/Slide/utils/playbackPreference.ts"],"sourcesContent":["export interface PlaybackNavigationState {\n defaultPlaying: boolean;\n isPausedByUser: boolean;\n}\n\nexport const shouldKeepPlayingAfterNavigation = ({\n defaultPlaying,\n isPausedByUser,\n}: PlaybackNavigationState) => {\n return defaultPlaying && !isPausedByUser;\n};\n"],"names":["shouldKeepPlayingAfterNavigation","defaultPlaying","isPausedByUser"],"mappings":"gFAKO,MAAMA,EAAmC,CAAC,CAC/C,eAAAC,EACA,eAAAC,CACF,IACSD,GAAkB,CAACC"}
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
export interface PlaybackNavigationState {
|
|
2
2
|
defaultPlaying: boolean;
|
|
3
|
-
hasCurrentAudio: boolean;
|
|
4
|
-
hasPendingAutoPlay: boolean;
|
|
5
3
|
isPausedByUser: boolean;
|
|
6
|
-
isPlaybackPaused: boolean;
|
|
7
|
-
isPlaying: boolean;
|
|
8
|
-
isWaitingForMoreAudio: boolean;
|
|
9
4
|
}
|
|
10
|
-
export declare const shouldKeepPlayingAfterNavigation: ({ defaultPlaying,
|
|
5
|
+
export declare const shouldKeepPlayingAfterNavigation: ({ defaultPlaying, isPausedByUser, }: PlaybackNavigationState) => boolean;
|
|
@@ -1,13 +1,8 @@
|
|
|
1
|
-
const
|
|
1
|
+
const n = ({
|
|
2
2
|
defaultPlaying: e,
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
isPausedByUser: n,
|
|
6
|
-
isPlaybackPaused: a,
|
|
7
|
-
isPlaying: i,
|
|
8
|
-
isWaitingForMoreAudio: o
|
|
9
|
-
}) => !e || n || a ? !1 : i || t || o || !r;
|
|
3
|
+
isPausedByUser: t
|
|
4
|
+
}) => e && !t;
|
|
10
5
|
export {
|
|
11
|
-
|
|
6
|
+
n as shouldKeepPlayingAfterNavigation
|
|
12
7
|
};
|
|
13
8
|
//# sourceMappingURL=playbackPreference.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playbackPreference.es.js","sources":["../../../../src/components/Slide/utils/playbackPreference.ts"],"sourcesContent":["export interface PlaybackNavigationState {\n defaultPlaying: boolean;\n
|
|
1
|
+
{"version":3,"file":"playbackPreference.es.js","sources":["../../../../src/components/Slide/utils/playbackPreference.ts"],"sourcesContent":["export interface PlaybackNavigationState {\n defaultPlaying: boolean;\n isPausedByUser: boolean;\n}\n\nexport const shouldKeepPlayingAfterNavigation = ({\n defaultPlaying,\n isPausedByUser,\n}: PlaybackNavigationState) => {\n return defaultPlaying && !isPausedByUser;\n};\n"],"names":["shouldKeepPlayingAfterNavigation","defaultPlaying","isPausedByUser"],"mappings":"AAKO,MAAMA,IAAmC,CAAC;AAAA,EAC/C,gBAAAC;AAAA,EACA,gBAAAC;AACF,MACSD,KAAkB,CAACC;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const I=require("../../_virtual/cose-base.cjs2.js"),Q=require("../layout-base/layout-base.cjs.js");var $=I.__module.exports,X;function J(){return X||(X=1,(function(W,k){(function(y,w){W.exports=w(Q.__require())})($,function(x){return(function(y){var w={};function l(n){if(w[n])return w[n].exports;var g=w[n]={i:n,l:!1,exports:{}};return y[n].call(g.exports,g,g.exports,l),g.l=!0,g.exports}return l.m=y,l.c=w,l.i=function(n){return n},l.d=function(n,g,p){l.o(n,g)||Object.defineProperty(n,g,{configurable:!1,enumerable:!0,get:p})},l.n=function(n){var g=n&&n.__esModule?function(){return n.default}:function(){return n};return l.d(g,"a",g),g},l.o=function(n,g){return Object.prototype.hasOwnProperty.call(n,g)},l.p="",l(l.s=7)})([(function(y,w){y.exports=x}),(function(y,w,l){var n=l(0).FDLayoutConstants;function g(){}for(var p in n)g[p]=n[p];g.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,g.DEFAULT_RADIAL_SEPARATION=n.DEFAULT_EDGE_LENGTH,g.DEFAULT_COMPONENT_SEPERATION=60,g.TILE=!0,g.TILING_PADDING_VERTICAL=10,g.TILING_PADDING_HORIZONTAL=10,g.TREE_REDUCTION_ON_INCREMENTAL=!1,y.exports=g}),(function(y,w,l){var n=l(0).FDLayoutEdge;function g(G,u,E){n.call(this,G,u,E)}g.prototype=Object.create(n.prototype);for(var p in n)g[p]=n[p];y.exports=g}),(function(y,w,l){var n=l(0).LGraph;function g(G,u,E){n.call(this,G,u,E)}g.prototype=Object.create(n.prototype);for(var p in n)g[p]=n[p];y.exports=g}),(function(y,w,l){var n=l(0).LGraphManager;function g(G){n.call(this,G)}g.prototype=Object.create(n.prototype);for(var p in n)g[p]=n[p];y.exports=g}),(function(y,w,l){var n=l(0).FDLayoutNode,g=l(0).IMath;function p(u,E,T,L){n.call(this,u,E,T,L)}p.prototype=Object.create(n.prototype);for(var G in n)p[G]=n[G];p.prototype.move=function(){var u=this.graphManager.getLayout();this.displacementX=u.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY=u.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren,Math.abs(this.displacementX)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementX=u.coolingFactor*u.maxNodeDisplacement*g.sign(this.displacementX)),Math.abs(this.displacementY)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementY=u.coolingFactor*u.maxNodeDisplacement*g.sign(this.displacementY)),this.child==null?this.moveBy(this.displacementX,this.displacementY):this.child.getNodes().length==0?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),u.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},p.prototype.propogateDisplacementToChildren=function(u,E){for(var T=this.getChild().getNodes(),L,P=0;P<T.length;P++)L=T[P],L.getChild()==null?(L.moveBy(u,E),L.displacementX+=u,L.displacementY+=E):L.propogateDisplacementToChildren(u,E)},p.prototype.setPred1=function(u){this.pred1=u},p.prototype.getPred1=function(){return pred1},p.prototype.getPred2=function(){return pred2},p.prototype.setNext=function(u){this.next=u},p.prototype.getNext=function(){return next},p.prototype.setProcessed=function(u){this.processed=u},p.prototype.isProcessed=function(){return processed},y.exports=p}),(function(y,w,l){var n=l(0).FDLayout,g=l(4),p=l(3),G=l(5),u=l(2),E=l(1),T=l(0).FDLayoutConstants,L=l(0).LayoutConstants,P=l(0).Point,R=l(0).PointD,V=l(0).Layout,B=l(0).Integer,Z=l(0).IGeometry,j=l(0).LGraph,_=l(0).Transform;function d(){n.call(this),this.toBeTiled={}}d.prototype=Object.create(n.prototype);for(var U in n)d[U]=n[U];d.prototype.newGraphManager=function(){var t=new g(this);return this.graphManager=t,t},d.prototype.newGraph=function(t){return new p(null,this.graphManager,t)},d.prototype.newNode=function(t){return new G(this.graphManager,t)},d.prototype.newEdge=function(t){return new u(null,null,t)},d.prototype.initParameters=function(){n.prototype.initParameters.call(this,arguments),this.isSubLayout||(E.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=E.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=E.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.springConstant=T.DEFAULT_SPRING_STRENGTH,this.repulsionConstant=T.DEFAULT_REPULSION_STRENGTH,this.gravityConstant=T.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=T.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=T.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=T.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1,this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/T.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=T.CONVERGENCE_CHECK_PERIOD/this.maxIterations,this.coolingAdjuster=1)},d.prototype.layout=function(){var t=L.DEFAULT_CREATE_BENDS_AS_NEEDED;return t&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},d.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental){if(E.TREE_REDUCTION_ON_INCREMENTAL){this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var e=new Set(this.getAllNodes()),r=this.nodesWithGravity.filter(function(a){return e.has(a)});this.graphManager.setAllNodesToApplyGravitation(r)}}else{var t=this.getFlatForest();if(t.length>0)this.positionNodesRadially(t);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var e=new Set(this.getAllNodes()),r=this.nodesWithGravity.filter(function(i){return e.has(i)});this.graphManager.setAllNodesToApplyGravitation(r),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},d.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%T.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var t=new Set(this.getAllNodes()),e=this.nodesWithGravity.filter(function(o){return t.has(o)});this.graphManager.setAllNodesToApplyGravitation(e),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=T.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),this.coolingFactor=T.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var r=!this.isTreeGrowing&&!this.isGrowthFinished,i=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(r,i),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},d.prototype.getPositionsData=function(){for(var t=this.graphManager.getAllNodes(),e={},r=0;r<t.length;r++){var i=t[r].rect,o=t[r].id;e[o]={id:o,x:i.getCenterX(),y:i.getCenterY(),w:i.width,h:i.height}}return e},d.prototype.runSpringEmbedder=function(){this.initialAnimationPeriod=25,this.animationPeriod=this.initialAnimationPeriod;var t=!1;if(T.ANIMATE==="during")this.emit("layoutstarted");else{for(;!t;)t=this.tick();this.graphManager.updateBounds()}},d.prototype.calculateNodesToApplyGravitationTo=function(){var t=[],e,r=this.graphManager.getGraphs(),i=r.length,o;for(o=0;o<i;o++)e=r[o],e.updateConnected(),e.isConnected||(t=t.concat(e.getNodes()));return t},d.prototype.createBendpoints=function(){var t=[];t=t.concat(this.graphManager.getAllEdges());var e=new Set,r;for(r=0;r<t.length;r++){var i=t[r];if(!e.has(i)){var o=i.getSource(),a=i.getTarget();if(o==a)i.getBendpoints().push(new R),i.getBendpoints().push(new R),this.createDummyNodesForBendpoints(i),e.add(i);else{var s=[];if(s=s.concat(o.getEdgeListToNode(a)),s=s.concat(a.getEdgeListToNode(o)),!e.has(s[0])){if(s.length>1){var h;for(h=0;h<s.length;h++){var f=s[h];f.getBendpoints().push(new R),this.createDummyNodesForBendpoints(f)}}s.forEach(function(C){e.add(C)})}}}if(e.size==t.length)break}},d.prototype.positionNodesRadially=function(t){for(var e=new P(0,0),r=Math.ceil(Math.sqrt(t.length)),i=0,o=0,a=0,s=new R(0,0),h=0;h<t.length;h++){h%r==0&&(a=0,o=i,h!=0&&(o+=E.DEFAULT_COMPONENT_SEPERATION),i=0);var f=t[h],C=V.findCenterOfTree(f);e.x=a,e.y=o,s=d.radialLayout(f,C,e),s.y>i&&(i=Math.floor(s.y)),a=Math.floor(s.x+E.DEFAULT_COMPONENT_SEPERATION)}this.transform(new R(L.WORLD_CENTER_X-s.x/2,L.WORLD_CENTER_Y-s.y/2))},d.radialLayout=function(t,e,r){var i=Math.max(this.maxDiagonalInTree(t),E.DEFAULT_RADIAL_SEPARATION);d.branchRadialLayout(e,null,0,359,0,i);var o=j.calculateBounds(t),a=new _;a.setDeviceOrgX(o.getMinX()),a.setDeviceOrgY(o.getMinY()),a.setWorldOrgX(r.x),a.setWorldOrgY(r.y);for(var s=0;s<t.length;s++){var h=t[s];h.transform(a)}var f=new R(o.getMaxX(),o.getMaxY());return a.inverseTransformPoint(f)},d.branchRadialLayout=function(t,e,r,i,o,a){var s=(i-r+1)/2;s<0&&(s+=180);var h=(s+r)%360,f=h*Z.TWO_PI/360,C=o*Math.cos(f),m=o*Math.sin(f);t.setCenter(C,m);var N=[];N=N.concat(t.getEdges());var c=N.length;e!=null&&c--;for(var v=0,A=N.length,D,O=t.getEdgesBetween(e);O.length>1;){var F=O[0];O.splice(0,1);var M=N.indexOf(F);M>=0&&N.splice(M,1),A--,c--}e!=null?D=(N.indexOf(O[0])+1)%A:D=0;for(var b=Math.abs(i-r)/c,S=D;v!=c;S=++S%A){var Y=N[S].getOtherEnd(t);if(Y!=e){var H=(r+v*b)%360,K=(H+b)%360;d.branchRadialLayout(Y,t,H,K,o+a,a),v++}}},d.maxDiagonalInTree=function(t){for(var e=B.MIN_VALUE,r=0;r<t.length;r++){var i=t[r],o=i.getDiagonal();o>e&&(e=o)}return e},d.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},d.prototype.groupZeroDegreeMembers=function(){var t=this,e={};this.memberGroups={},this.idToDummyNode={};for(var r=[],i=this.graphManager.getAllNodes(),o=0;o<i.length;o++){var a=i[o],s=a.getParent();this.getNodeDegreeWithChildren(a)===0&&(s.id==null||!this.getToBeTiled(s))&&r.push(a)}for(var o=0;o<r.length;o++){var a=r[o],h=a.getParent().id;typeof e[h]>"u"&&(e[h]=[]),e[h]=e[h].concat(a)}Object.keys(e).forEach(function(f){if(e[f].length>1){var C="DummyCompound_"+f;t.memberGroups[C]=e[f];var m=e[f][0].getParent(),N=new G(t.graphManager);N.id=C,N.paddingLeft=m.paddingLeft||0,N.paddingRight=m.paddingRight||0,N.paddingBottom=m.paddingBottom||0,N.paddingTop=m.paddingTop||0,t.idToDummyNode[C]=N;var c=t.getGraphManager().add(t.newGraph(),N),v=m.getChild();v.add(N);for(var A=0;A<e[f].length;A++){var D=e[f][A];v.remove(D),c.add(D)}}})},d.prototype.clearCompounds=function(){var t={},e={};this.performDFSOnCompounds();for(var r=0;r<this.compoundOrder.length;r++)e[this.compoundOrder[r].id]=this.compoundOrder[r],t[this.compoundOrder[r].id]=[].concat(this.compoundOrder[r].getChild().getNodes()),this.graphManager.remove(this.compoundOrder[r].getChild()),this.compoundOrder[r].child=null;this.graphManager.resetAllNodes(),this.tileCompoundMembers(t,e)},d.prototype.clearZeroDegreeMembers=function(){var t=this,e=this.tiledZeroDegreePack=[];Object.keys(this.memberGroups).forEach(function(r){var i=t.idToDummyNode[r];e[r]=t.tileNodes(t.memberGroups[r],i.paddingLeft+i.paddingRight),i.rect.width=e[r].width,i.rect.height=e[r].height})},d.prototype.repopulateCompounds=function(){for(var t=this.compoundOrder.length-1;t>=0;t--){var e=this.compoundOrder[t],r=e.id,i=e.paddingLeft,o=e.paddingTop;this.adjustLocations(this.tiledMemberPack[r],e.rect.x,e.rect.y,i,o)}},d.prototype.repopulateZeroDegreeMembers=function(){var t=this,e=this.tiledZeroDegreePack;Object.keys(e).forEach(function(r){var i=t.idToDummyNode[r],o=i.paddingLeft,a=i.paddingTop;t.adjustLocations(e[r],i.rect.x,i.rect.y,o,a)})},d.prototype.getToBeTiled=function(t){var e=t.id;if(this.toBeTiled[e]!=null)return this.toBeTiled[e];var r=t.getChild();if(r==null)return this.toBeTiled[e]=!1,!1;for(var i=r.getNodes(),o=0;o<i.length;o++){var a=i[o];if(this.getNodeDegree(a)>0)return this.toBeTiled[e]=!1,!1;if(a.getChild()==null){this.toBeTiled[a.id]=!1;continue}if(!this.getToBeTiled(a))return this.toBeTiled[e]=!1,!1}return this.toBeTiled[e]=!0,!0},d.prototype.getNodeDegree=function(t){t.id;for(var e=t.getEdges(),r=0,i=0;i<e.length;i++){var o=e[i];o.getSource().id!==o.getTarget().id&&(r=r+1)}return r},d.prototype.getNodeDegreeWithChildren=function(t){var e=this.getNodeDegree(t);if(t.getChild()==null)return e;for(var r=t.getChild().getNodes(),i=0;i<r.length;i++){var o=r[i];e+=this.getNodeDegreeWithChildren(o)}return e},d.prototype.performDFSOnCompounds=function(){this.compoundOrder=[],this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes())},d.prototype.fillCompexOrderByDFS=function(t){for(var e=0;e<t.length;e++){var r=t[e];r.getChild()!=null&&this.fillCompexOrderByDFS(r.getChild().getNodes()),this.getToBeTiled(r)&&this.compoundOrder.push(r)}},d.prototype.adjustLocations=function(t,e,r,i,o){e+=i,r+=o;for(var a=e,s=0;s<t.rows.length;s++){var h=t.rows[s];e=a;for(var f=0,C=0;C<h.length;C++){var m=h[C];m.rect.x=e,m.rect.y=r,e+=m.rect.width+t.horizontalPadding,m.rect.height>f&&(f=m.rect.height)}r+=f+t.verticalPadding}},d.prototype.tileCompoundMembers=function(t,e){var r=this;this.tiledMemberPack=[],Object.keys(t).forEach(function(i){var o=e[i];r.tiledMemberPack[i]=r.tileNodes(t[i],o.paddingLeft+o.paddingRight),o.rect.width=r.tiledMemberPack[i].width,o.rect.height=r.tiledMemberPack[i].height})},d.prototype.tileNodes=function(t,e){var r=E.TILING_PADDING_VERTICAL,i=E.TILING_PADDING_HORIZONTAL,o={rows:[],rowWidth:[],rowHeight:[],width:0,height:e,verticalPadding:r,horizontalPadding:i};t.sort(function(h,f){return h.rect.width*h.rect.height>f.rect.width*f.rect.height?-1:h.rect.width*h.rect.height<f.rect.width*f.rect.height?1:0});for(var a=0;a<t.length;a++){var s=t[a];o.rows.length==0?this.insertNodeToRow(o,s,0,e):this.canAddHorizontal(o,s.rect.width,s.rect.height)?this.insertNodeToRow(o,s,this.getShortestRowIndex(o),e):this.insertNodeToRow(o,s,o.rows.length,e),this.shiftToLastRow(o)}return o},d.prototype.insertNodeToRow=function(t,e,r,i){var o=i;if(r==t.rows.length){var a=[];t.rows.push(a),t.rowWidth.push(o),t.rowHeight.push(0)}var s=t.rowWidth[r]+e.rect.width;t.rows[r].length>0&&(s+=t.horizontalPadding),t.rowWidth[r]=s,t.width<s&&(t.width=s);var h=e.rect.height;r>0&&(h+=t.verticalPadding);var f=0;h>t.rowHeight[r]&&(f=t.rowHeight[r],t.rowHeight[r]=h,f=t.rowHeight[r]-f),t.height+=f,t.rows[r].push(e)},d.prototype.getShortestRowIndex=function(t){for(var e=-1,r=Number.MAX_VALUE,i=0;i<t.rows.length;i++)t.rowWidth[i]<r&&(e=i,r=t.rowWidth[i]);return e},d.prototype.getLongestRowIndex=function(t){for(var e=-1,r=Number.MIN_VALUE,i=0;i<t.rows.length;i++)t.rowWidth[i]>r&&(e=i,r=t.rowWidth[i]);return e},d.prototype.canAddHorizontal=function(t,e,r){var i=this.getShortestRowIndex(t);if(i<0)return!0;var o=t.rowWidth[i];if(o+t.horizontalPadding+e<=t.width)return!0;var a=0;t.rowHeight[i]<r&&i>0&&(a=r+t.verticalPadding-t.rowHeight[i]);var s;t.width-o>=e+t.horizontalPadding?s=(t.height+a)/(o+e+t.horizontalPadding):s=(t.height+a)/t.width,a=r+t.verticalPadding;var h;return t.width<e?h=(t.height+a)/e:h=(t.height+a)/t.width,h<1&&(h=1/h),s<1&&(s=1/s),s<h},d.prototype.shiftToLastRow=function(t){var e=this.getLongestRowIndex(t),r=t.rowWidth.length-1,i=t.rows[e],o=i[i.length-1],a=o.width+t.horizontalPadding;if(t.width-t.rowWidth[r]>a&&e!=r){i.splice(-1,1),t.rows[r].push(o),t.rowWidth[e]=t.rowWidth[e]-a,t.rowWidth[r]=t.rowWidth[r]+a,t.width=t.rowWidth[instance.getLongestRowIndex(t)];for(var s=Number.MIN_VALUE,h=0;h<i.length;h++)i[h].height>s&&(s=i[h].height);e>0&&(s+=t.verticalPadding);var f=t.rowHeight[e]+t.rowHeight[r];t.rowHeight[e]=s,t.rowHeight[r]<o.height+t.verticalPadding&&(t.rowHeight[r]=o.height+t.verticalPadding);var C=t.rowHeight[e]+t.rowHeight[r];t.height+=C-f,this.shiftToLastRow(t)}},d.prototype.tilingPreLayout=function(){E.TILE&&(this.groupZeroDegreeMembers(),this.clearCompounds(),this.clearZeroDegreeMembers())},d.prototype.tilingPostLayout=function(){E.TILE&&(this.repopulateZeroDegreeMembers(),this.repopulateCompounds())},d.prototype.reduceTrees=function(){for(var t=[],e=!0,r;e;){var i=this.graphManager.getAllNodes(),o=[];e=!1;for(var a=0;a<i.length;a++)r=i[a],r.getEdges().length==1&&!r.getEdges()[0].isInterGraph&&r.getChild()==null&&(o.push([r,r.getEdges()[0],r.getOwner()]),e=!0);if(e==!0){for(var s=[],h=0;h<o.length;h++)o[h][0].getEdges().length==1&&(s.push(o[h]),o[h][0].getOwner().remove(o[h][0]));t.push(s),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()}}this.prunedNodesAll=t},d.prototype.growTree=function(t){for(var e=t.length,r=t[e-1],i,o=0;o<r.length;o++)i=r[o],this.findPlaceforPrunedNode(i),i[2].add(i[0]),i[2].add(i[1],i[1].source,i[1].target);t.splice(t.length-1,1),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()},d.prototype.findPlaceforPrunedNode=function(t){var e,r,i=t[0];i==t[1].source?r=t[1].target:r=t[1].source;var o=r.startX,a=r.finishX,s=r.startY,h=r.finishY,f=0,C=0,m=0,N=0,c=[f,m,C,N];if(s>0)for(var v=o;v<=a;v++)c[0]+=this.grid[v][s-1].length+this.grid[v][s].length-1;if(a<this.grid.length-1)for(var v=s;v<=h;v++)c[1]+=this.grid[a+1][v].length+this.grid[a][v].length-1;if(h<this.grid[0].length-1)for(var v=o;v<=a;v++)c[2]+=this.grid[v][h+1].length+this.grid[v][h].length-1;if(o>0)for(var v=s;v<=h;v++)c[3]+=this.grid[o-1][v].length+this.grid[o][v].length-1;for(var A=B.MAX_VALUE,D,O,F=0;F<c.length;F++)c[F]<A?(A=c[F],D=1,O=F):c[F]==A&&D++;if(D==3&&A==0)c[0]==0&&c[1]==0&&c[2]==0?e=1:c[0]==0&&c[1]==0&&c[3]==0?e=0:c[0]==0&&c[2]==0&&c[3]==0?e=3:c[1]==0&&c[2]==0&&c[3]==0&&(e=2);else if(D==2&&A==0){var M=Math.floor(Math.random()*2);c[0]==0&&c[1]==0?M==0?e=0:e=1:c[0]==0&&c[2]==0?M==0?e=0:e=2:c[0]==0&&c[3]==0?M==0?e=0:e=3:c[1]==0&&c[2]==0?M==0?e=1:e=2:c[1]==0&&c[3]==0?M==0?e=1:e=3:M==0?e=2:e=3}else if(D==4&&A==0){var M=Math.floor(Math.random()*4);e=M}else e=O;e==0?i.setCenter(r.getCenterX(),r.getCenterY()-r.getHeight()/2-T.DEFAULT_EDGE_LENGTH-i.getHeight()/2):e==1?i.setCenter(r.getCenterX()+r.getWidth()/2+T.DEFAULT_EDGE_LENGTH+i.getWidth()/2,r.getCenterY()):e==2?i.setCenter(r.getCenterX(),r.getCenterY()+r.getHeight()/2+T.DEFAULT_EDGE_LENGTH+i.getHeight()/2):i.setCenter(r.getCenterX()-r.getWidth()/2-T.DEFAULT_EDGE_LENGTH-i.getWidth()/2,r.getCenterY())},y.exports=d}),(function(y,w,l){var n={};n.layoutBase=l(0),n.CoSEConstants=l(1),n.CoSEEdge=l(2),n.CoSEGraph=l(3),n.CoSEGraphManager=l(4),n.CoSELayout=l(6),n.CoSENode=l(5),y.exports=n})])})})(I.__module)),I.__module.exports}exports.__require=J;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const I=require("../../_virtual/cose-base.cjs.js"),Q=require("../layout-base/layout-base.cjs.js");var $=I.__module.exports,X;function J(){return X||(X=1,(function(W,k){(function(y,w){W.exports=w(Q.__require())})($,function(x){return(function(y){var w={};function l(n){if(w[n])return w[n].exports;var g=w[n]={i:n,l:!1,exports:{}};return y[n].call(g.exports,g,g.exports,l),g.l=!0,g.exports}return l.m=y,l.c=w,l.i=function(n){return n},l.d=function(n,g,p){l.o(n,g)||Object.defineProperty(n,g,{configurable:!1,enumerable:!0,get:p})},l.n=function(n){var g=n&&n.__esModule?function(){return n.default}:function(){return n};return l.d(g,"a",g),g},l.o=function(n,g){return Object.prototype.hasOwnProperty.call(n,g)},l.p="",l(l.s=7)})([(function(y,w){y.exports=x}),(function(y,w,l){var n=l(0).FDLayoutConstants;function g(){}for(var p in n)g[p]=n[p];g.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,g.DEFAULT_RADIAL_SEPARATION=n.DEFAULT_EDGE_LENGTH,g.DEFAULT_COMPONENT_SEPERATION=60,g.TILE=!0,g.TILING_PADDING_VERTICAL=10,g.TILING_PADDING_HORIZONTAL=10,g.TREE_REDUCTION_ON_INCREMENTAL=!1,y.exports=g}),(function(y,w,l){var n=l(0).FDLayoutEdge;function g(G,u,E){n.call(this,G,u,E)}g.prototype=Object.create(n.prototype);for(var p in n)g[p]=n[p];y.exports=g}),(function(y,w,l){var n=l(0).LGraph;function g(G,u,E){n.call(this,G,u,E)}g.prototype=Object.create(n.prototype);for(var p in n)g[p]=n[p];y.exports=g}),(function(y,w,l){var n=l(0).LGraphManager;function g(G){n.call(this,G)}g.prototype=Object.create(n.prototype);for(var p in n)g[p]=n[p];y.exports=g}),(function(y,w,l){var n=l(0).FDLayoutNode,g=l(0).IMath;function p(u,E,T,L){n.call(this,u,E,T,L)}p.prototype=Object.create(n.prototype);for(var G in n)p[G]=n[G];p.prototype.move=function(){var u=this.graphManager.getLayout();this.displacementX=u.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY=u.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren,Math.abs(this.displacementX)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementX=u.coolingFactor*u.maxNodeDisplacement*g.sign(this.displacementX)),Math.abs(this.displacementY)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementY=u.coolingFactor*u.maxNodeDisplacement*g.sign(this.displacementY)),this.child==null?this.moveBy(this.displacementX,this.displacementY):this.child.getNodes().length==0?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),u.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},p.prototype.propogateDisplacementToChildren=function(u,E){for(var T=this.getChild().getNodes(),L,P=0;P<T.length;P++)L=T[P],L.getChild()==null?(L.moveBy(u,E),L.displacementX+=u,L.displacementY+=E):L.propogateDisplacementToChildren(u,E)},p.prototype.setPred1=function(u){this.pred1=u},p.prototype.getPred1=function(){return pred1},p.prototype.getPred2=function(){return pred2},p.prototype.setNext=function(u){this.next=u},p.prototype.getNext=function(){return next},p.prototype.setProcessed=function(u){this.processed=u},p.prototype.isProcessed=function(){return processed},y.exports=p}),(function(y,w,l){var n=l(0).FDLayout,g=l(4),p=l(3),G=l(5),u=l(2),E=l(1),T=l(0).FDLayoutConstants,L=l(0).LayoutConstants,P=l(0).Point,R=l(0).PointD,V=l(0).Layout,B=l(0).Integer,Z=l(0).IGeometry,j=l(0).LGraph,_=l(0).Transform;function d(){n.call(this),this.toBeTiled={}}d.prototype=Object.create(n.prototype);for(var U in n)d[U]=n[U];d.prototype.newGraphManager=function(){var t=new g(this);return this.graphManager=t,t},d.prototype.newGraph=function(t){return new p(null,this.graphManager,t)},d.prototype.newNode=function(t){return new G(this.graphManager,t)},d.prototype.newEdge=function(t){return new u(null,null,t)},d.prototype.initParameters=function(){n.prototype.initParameters.call(this,arguments),this.isSubLayout||(E.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=E.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=E.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.springConstant=T.DEFAULT_SPRING_STRENGTH,this.repulsionConstant=T.DEFAULT_REPULSION_STRENGTH,this.gravityConstant=T.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=T.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=T.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=T.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1,this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/T.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=T.CONVERGENCE_CHECK_PERIOD/this.maxIterations,this.coolingAdjuster=1)},d.prototype.layout=function(){var t=L.DEFAULT_CREATE_BENDS_AS_NEEDED;return t&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},d.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental){if(E.TREE_REDUCTION_ON_INCREMENTAL){this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var e=new Set(this.getAllNodes()),r=this.nodesWithGravity.filter(function(a){return e.has(a)});this.graphManager.setAllNodesToApplyGravitation(r)}}else{var t=this.getFlatForest();if(t.length>0)this.positionNodesRadially(t);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var e=new Set(this.getAllNodes()),r=this.nodesWithGravity.filter(function(i){return e.has(i)});this.graphManager.setAllNodesToApplyGravitation(r),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},d.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%T.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var t=new Set(this.getAllNodes()),e=this.nodesWithGravity.filter(function(o){return t.has(o)});this.graphManager.setAllNodesToApplyGravitation(e),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=T.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),this.coolingFactor=T.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var r=!this.isTreeGrowing&&!this.isGrowthFinished,i=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(r,i),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},d.prototype.getPositionsData=function(){for(var t=this.graphManager.getAllNodes(),e={},r=0;r<t.length;r++){var i=t[r].rect,o=t[r].id;e[o]={id:o,x:i.getCenterX(),y:i.getCenterY(),w:i.width,h:i.height}}return e},d.prototype.runSpringEmbedder=function(){this.initialAnimationPeriod=25,this.animationPeriod=this.initialAnimationPeriod;var t=!1;if(T.ANIMATE==="during")this.emit("layoutstarted");else{for(;!t;)t=this.tick();this.graphManager.updateBounds()}},d.prototype.calculateNodesToApplyGravitationTo=function(){var t=[],e,r=this.graphManager.getGraphs(),i=r.length,o;for(o=0;o<i;o++)e=r[o],e.updateConnected(),e.isConnected||(t=t.concat(e.getNodes()));return t},d.prototype.createBendpoints=function(){var t=[];t=t.concat(this.graphManager.getAllEdges());var e=new Set,r;for(r=0;r<t.length;r++){var i=t[r];if(!e.has(i)){var o=i.getSource(),a=i.getTarget();if(o==a)i.getBendpoints().push(new R),i.getBendpoints().push(new R),this.createDummyNodesForBendpoints(i),e.add(i);else{var s=[];if(s=s.concat(o.getEdgeListToNode(a)),s=s.concat(a.getEdgeListToNode(o)),!e.has(s[0])){if(s.length>1){var h;for(h=0;h<s.length;h++){var f=s[h];f.getBendpoints().push(new R),this.createDummyNodesForBendpoints(f)}}s.forEach(function(C){e.add(C)})}}}if(e.size==t.length)break}},d.prototype.positionNodesRadially=function(t){for(var e=new P(0,0),r=Math.ceil(Math.sqrt(t.length)),i=0,o=0,a=0,s=new R(0,0),h=0;h<t.length;h++){h%r==0&&(a=0,o=i,h!=0&&(o+=E.DEFAULT_COMPONENT_SEPERATION),i=0);var f=t[h],C=V.findCenterOfTree(f);e.x=a,e.y=o,s=d.radialLayout(f,C,e),s.y>i&&(i=Math.floor(s.y)),a=Math.floor(s.x+E.DEFAULT_COMPONENT_SEPERATION)}this.transform(new R(L.WORLD_CENTER_X-s.x/2,L.WORLD_CENTER_Y-s.y/2))},d.radialLayout=function(t,e,r){var i=Math.max(this.maxDiagonalInTree(t),E.DEFAULT_RADIAL_SEPARATION);d.branchRadialLayout(e,null,0,359,0,i);var o=j.calculateBounds(t),a=new _;a.setDeviceOrgX(o.getMinX()),a.setDeviceOrgY(o.getMinY()),a.setWorldOrgX(r.x),a.setWorldOrgY(r.y);for(var s=0;s<t.length;s++){var h=t[s];h.transform(a)}var f=new R(o.getMaxX(),o.getMaxY());return a.inverseTransformPoint(f)},d.branchRadialLayout=function(t,e,r,i,o,a){var s=(i-r+1)/2;s<0&&(s+=180);var h=(s+r)%360,f=h*Z.TWO_PI/360,C=o*Math.cos(f),m=o*Math.sin(f);t.setCenter(C,m);var N=[];N=N.concat(t.getEdges());var c=N.length;e!=null&&c--;for(var v=0,A=N.length,D,O=t.getEdgesBetween(e);O.length>1;){var F=O[0];O.splice(0,1);var M=N.indexOf(F);M>=0&&N.splice(M,1),A--,c--}e!=null?D=(N.indexOf(O[0])+1)%A:D=0;for(var b=Math.abs(i-r)/c,S=D;v!=c;S=++S%A){var Y=N[S].getOtherEnd(t);if(Y!=e){var H=(r+v*b)%360,K=(H+b)%360;d.branchRadialLayout(Y,t,H,K,o+a,a),v++}}},d.maxDiagonalInTree=function(t){for(var e=B.MIN_VALUE,r=0;r<t.length;r++){var i=t[r],o=i.getDiagonal();o>e&&(e=o)}return e},d.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},d.prototype.groupZeroDegreeMembers=function(){var t=this,e={};this.memberGroups={},this.idToDummyNode={};for(var r=[],i=this.graphManager.getAllNodes(),o=0;o<i.length;o++){var a=i[o],s=a.getParent();this.getNodeDegreeWithChildren(a)===0&&(s.id==null||!this.getToBeTiled(s))&&r.push(a)}for(var o=0;o<r.length;o++){var a=r[o],h=a.getParent().id;typeof e[h]>"u"&&(e[h]=[]),e[h]=e[h].concat(a)}Object.keys(e).forEach(function(f){if(e[f].length>1){var C="DummyCompound_"+f;t.memberGroups[C]=e[f];var m=e[f][0].getParent(),N=new G(t.graphManager);N.id=C,N.paddingLeft=m.paddingLeft||0,N.paddingRight=m.paddingRight||0,N.paddingBottom=m.paddingBottom||0,N.paddingTop=m.paddingTop||0,t.idToDummyNode[C]=N;var c=t.getGraphManager().add(t.newGraph(),N),v=m.getChild();v.add(N);for(var A=0;A<e[f].length;A++){var D=e[f][A];v.remove(D),c.add(D)}}})},d.prototype.clearCompounds=function(){var t={},e={};this.performDFSOnCompounds();for(var r=0;r<this.compoundOrder.length;r++)e[this.compoundOrder[r].id]=this.compoundOrder[r],t[this.compoundOrder[r].id]=[].concat(this.compoundOrder[r].getChild().getNodes()),this.graphManager.remove(this.compoundOrder[r].getChild()),this.compoundOrder[r].child=null;this.graphManager.resetAllNodes(),this.tileCompoundMembers(t,e)},d.prototype.clearZeroDegreeMembers=function(){var t=this,e=this.tiledZeroDegreePack=[];Object.keys(this.memberGroups).forEach(function(r){var i=t.idToDummyNode[r];e[r]=t.tileNodes(t.memberGroups[r],i.paddingLeft+i.paddingRight),i.rect.width=e[r].width,i.rect.height=e[r].height})},d.prototype.repopulateCompounds=function(){for(var t=this.compoundOrder.length-1;t>=0;t--){var e=this.compoundOrder[t],r=e.id,i=e.paddingLeft,o=e.paddingTop;this.adjustLocations(this.tiledMemberPack[r],e.rect.x,e.rect.y,i,o)}},d.prototype.repopulateZeroDegreeMembers=function(){var t=this,e=this.tiledZeroDegreePack;Object.keys(e).forEach(function(r){var i=t.idToDummyNode[r],o=i.paddingLeft,a=i.paddingTop;t.adjustLocations(e[r],i.rect.x,i.rect.y,o,a)})},d.prototype.getToBeTiled=function(t){var e=t.id;if(this.toBeTiled[e]!=null)return this.toBeTiled[e];var r=t.getChild();if(r==null)return this.toBeTiled[e]=!1,!1;for(var i=r.getNodes(),o=0;o<i.length;o++){var a=i[o];if(this.getNodeDegree(a)>0)return this.toBeTiled[e]=!1,!1;if(a.getChild()==null){this.toBeTiled[a.id]=!1;continue}if(!this.getToBeTiled(a))return this.toBeTiled[e]=!1,!1}return this.toBeTiled[e]=!0,!0},d.prototype.getNodeDegree=function(t){t.id;for(var e=t.getEdges(),r=0,i=0;i<e.length;i++){var o=e[i];o.getSource().id!==o.getTarget().id&&(r=r+1)}return r},d.prototype.getNodeDegreeWithChildren=function(t){var e=this.getNodeDegree(t);if(t.getChild()==null)return e;for(var r=t.getChild().getNodes(),i=0;i<r.length;i++){var o=r[i];e+=this.getNodeDegreeWithChildren(o)}return e},d.prototype.performDFSOnCompounds=function(){this.compoundOrder=[],this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes())},d.prototype.fillCompexOrderByDFS=function(t){for(var e=0;e<t.length;e++){var r=t[e];r.getChild()!=null&&this.fillCompexOrderByDFS(r.getChild().getNodes()),this.getToBeTiled(r)&&this.compoundOrder.push(r)}},d.prototype.adjustLocations=function(t,e,r,i,o){e+=i,r+=o;for(var a=e,s=0;s<t.rows.length;s++){var h=t.rows[s];e=a;for(var f=0,C=0;C<h.length;C++){var m=h[C];m.rect.x=e,m.rect.y=r,e+=m.rect.width+t.horizontalPadding,m.rect.height>f&&(f=m.rect.height)}r+=f+t.verticalPadding}},d.prototype.tileCompoundMembers=function(t,e){var r=this;this.tiledMemberPack=[],Object.keys(t).forEach(function(i){var o=e[i];r.tiledMemberPack[i]=r.tileNodes(t[i],o.paddingLeft+o.paddingRight),o.rect.width=r.tiledMemberPack[i].width,o.rect.height=r.tiledMemberPack[i].height})},d.prototype.tileNodes=function(t,e){var r=E.TILING_PADDING_VERTICAL,i=E.TILING_PADDING_HORIZONTAL,o={rows:[],rowWidth:[],rowHeight:[],width:0,height:e,verticalPadding:r,horizontalPadding:i};t.sort(function(h,f){return h.rect.width*h.rect.height>f.rect.width*f.rect.height?-1:h.rect.width*h.rect.height<f.rect.width*f.rect.height?1:0});for(var a=0;a<t.length;a++){var s=t[a];o.rows.length==0?this.insertNodeToRow(o,s,0,e):this.canAddHorizontal(o,s.rect.width,s.rect.height)?this.insertNodeToRow(o,s,this.getShortestRowIndex(o),e):this.insertNodeToRow(o,s,o.rows.length,e),this.shiftToLastRow(o)}return o},d.prototype.insertNodeToRow=function(t,e,r,i){var o=i;if(r==t.rows.length){var a=[];t.rows.push(a),t.rowWidth.push(o),t.rowHeight.push(0)}var s=t.rowWidth[r]+e.rect.width;t.rows[r].length>0&&(s+=t.horizontalPadding),t.rowWidth[r]=s,t.width<s&&(t.width=s);var h=e.rect.height;r>0&&(h+=t.verticalPadding);var f=0;h>t.rowHeight[r]&&(f=t.rowHeight[r],t.rowHeight[r]=h,f=t.rowHeight[r]-f),t.height+=f,t.rows[r].push(e)},d.prototype.getShortestRowIndex=function(t){for(var e=-1,r=Number.MAX_VALUE,i=0;i<t.rows.length;i++)t.rowWidth[i]<r&&(e=i,r=t.rowWidth[i]);return e},d.prototype.getLongestRowIndex=function(t){for(var e=-1,r=Number.MIN_VALUE,i=0;i<t.rows.length;i++)t.rowWidth[i]>r&&(e=i,r=t.rowWidth[i]);return e},d.prototype.canAddHorizontal=function(t,e,r){var i=this.getShortestRowIndex(t);if(i<0)return!0;var o=t.rowWidth[i];if(o+t.horizontalPadding+e<=t.width)return!0;var a=0;t.rowHeight[i]<r&&i>0&&(a=r+t.verticalPadding-t.rowHeight[i]);var s;t.width-o>=e+t.horizontalPadding?s=(t.height+a)/(o+e+t.horizontalPadding):s=(t.height+a)/t.width,a=r+t.verticalPadding;var h;return t.width<e?h=(t.height+a)/e:h=(t.height+a)/t.width,h<1&&(h=1/h),s<1&&(s=1/s),s<h},d.prototype.shiftToLastRow=function(t){var e=this.getLongestRowIndex(t),r=t.rowWidth.length-1,i=t.rows[e],o=i[i.length-1],a=o.width+t.horizontalPadding;if(t.width-t.rowWidth[r]>a&&e!=r){i.splice(-1,1),t.rows[r].push(o),t.rowWidth[e]=t.rowWidth[e]-a,t.rowWidth[r]=t.rowWidth[r]+a,t.width=t.rowWidth[instance.getLongestRowIndex(t)];for(var s=Number.MIN_VALUE,h=0;h<i.length;h++)i[h].height>s&&(s=i[h].height);e>0&&(s+=t.verticalPadding);var f=t.rowHeight[e]+t.rowHeight[r];t.rowHeight[e]=s,t.rowHeight[r]<o.height+t.verticalPadding&&(t.rowHeight[r]=o.height+t.verticalPadding);var C=t.rowHeight[e]+t.rowHeight[r];t.height+=C-f,this.shiftToLastRow(t)}},d.prototype.tilingPreLayout=function(){E.TILE&&(this.groupZeroDegreeMembers(),this.clearCompounds(),this.clearZeroDegreeMembers())},d.prototype.tilingPostLayout=function(){E.TILE&&(this.repopulateZeroDegreeMembers(),this.repopulateCompounds())},d.prototype.reduceTrees=function(){for(var t=[],e=!0,r;e;){var i=this.graphManager.getAllNodes(),o=[];e=!1;for(var a=0;a<i.length;a++)r=i[a],r.getEdges().length==1&&!r.getEdges()[0].isInterGraph&&r.getChild()==null&&(o.push([r,r.getEdges()[0],r.getOwner()]),e=!0);if(e==!0){for(var s=[],h=0;h<o.length;h++)o[h][0].getEdges().length==1&&(s.push(o[h]),o[h][0].getOwner().remove(o[h][0]));t.push(s),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()}}this.prunedNodesAll=t},d.prototype.growTree=function(t){for(var e=t.length,r=t[e-1],i,o=0;o<r.length;o++)i=r[o],this.findPlaceforPrunedNode(i),i[2].add(i[0]),i[2].add(i[1],i[1].source,i[1].target);t.splice(t.length-1,1),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()},d.prototype.findPlaceforPrunedNode=function(t){var e,r,i=t[0];i==t[1].source?r=t[1].target:r=t[1].source;var o=r.startX,a=r.finishX,s=r.startY,h=r.finishY,f=0,C=0,m=0,N=0,c=[f,m,C,N];if(s>0)for(var v=o;v<=a;v++)c[0]+=this.grid[v][s-1].length+this.grid[v][s].length-1;if(a<this.grid.length-1)for(var v=s;v<=h;v++)c[1]+=this.grid[a+1][v].length+this.grid[a][v].length-1;if(h<this.grid[0].length-1)for(var v=o;v<=a;v++)c[2]+=this.grid[v][h+1].length+this.grid[v][h].length-1;if(o>0)for(var v=s;v<=h;v++)c[3]+=this.grid[o-1][v].length+this.grid[o][v].length-1;for(var A=B.MAX_VALUE,D,O,F=0;F<c.length;F++)c[F]<A?(A=c[F],D=1,O=F):c[F]==A&&D++;if(D==3&&A==0)c[0]==0&&c[1]==0&&c[2]==0?e=1:c[0]==0&&c[1]==0&&c[3]==0?e=0:c[0]==0&&c[2]==0&&c[3]==0?e=3:c[1]==0&&c[2]==0&&c[3]==0&&(e=2);else if(D==2&&A==0){var M=Math.floor(Math.random()*2);c[0]==0&&c[1]==0?M==0?e=0:e=1:c[0]==0&&c[2]==0?M==0?e=0:e=2:c[0]==0&&c[3]==0?M==0?e=0:e=3:c[1]==0&&c[2]==0?M==0?e=1:e=2:c[1]==0&&c[3]==0?M==0?e=1:e=3:M==0?e=2:e=3}else if(D==4&&A==0){var M=Math.floor(Math.random()*4);e=M}else e=O;e==0?i.setCenter(r.getCenterX(),r.getCenterY()-r.getHeight()/2-T.DEFAULT_EDGE_LENGTH-i.getHeight()/2):e==1?i.setCenter(r.getCenterX()+r.getWidth()/2+T.DEFAULT_EDGE_LENGTH+i.getWidth()/2,r.getCenterY()):e==2?i.setCenter(r.getCenterX(),r.getCenterY()+r.getHeight()/2+T.DEFAULT_EDGE_LENGTH+i.getHeight()/2):i.setCenter(r.getCenterX()-r.getWidth()/2-T.DEFAULT_EDGE_LENGTH-i.getWidth()/2,r.getCenterY())},y.exports=d}),(function(y,w,l){var n={};n.layoutBase=l(0),n.CoSEConstants=l(1),n.CoSEEdge=l(2),n.CoSEGraph=l(3),n.CoSEGraphManager=l(4),n.CoSELayout=l(6),n.CoSENode=l(5),y.exports=n})])})})(I.__module)),I.__module.exports}exports.__require=J;
|
|
2
2
|
//# sourceMappingURL=cose-base.cjs.js.map
|